makeplane / makeplane/plane

GitHub `<img>` tags lose `alt`, replaced with auth-gated silo URLs

Open
#9,073 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
59.6k
Forks
5.8k
Avg merge
1d 22h
Merged PRs (30d)
49

Description

Affected: Plane Cloud, official GitHub integration. See also: meta-issue on destructive overwrite (issue 01).

Symptom

Inline HTML <img> tags pointing at GitHub-hosted assets are destroyed by a GH→Plane import + Plane→GH round-trip.

Input (GH markdown):

<img width="746" height="253" alt="Screenshot of chart"
     src="https://github.com/user-attachments/assets/<uuid>" />

Plane stored HTML (image mirrored into Plane's silo asset store, wrapped in an anchor pointing at a 5-minute AWS presigned URL):

<a target="_blank" href="https://private-user-images.githubusercontent.com/.../?jwt=...&X-Amz-Expires=300...">
  <image-component src="<plane-asset-uuid>" width="746" height="253"></image-component>
</a>

Pushed back to GH markdown:

[![](https://silo.plane.so/api/assets/github/<workspace>/<user>/<asset>)](https://private-user-images.githubusercontent.com/.../?jwt=...)

Four distinct issues

  • <img> HTML form is destroyed. GitHub renders native HTML <img> tags inline; the round-trip converts to markdown image syntax which loses HTML attributes.
  • alt attribute dropped. width and height survive in the stored HTML but alt does not. This is a real accessibility regression for screen-reader users on both sides of the sync.
  • Silo URL requires Plane workspace auth. The silo.plane.so/api/assets/... URL is gated behind Plane authentication. It breaks for any GitHub viewer not signed into that Plane workspace — i.e. essentially everyone reading the issue on GitHub.
  • AWS fallback expires after 5 minutes. The anchor's href is an AWS presigned URL with X-Amz-Expires=300. Within minutes of the round-trip, even the fallback link errors.

Impact

Images embedded in issues become unviewable on GitHub within minutes of any Plane→GH push. The original GH-hosted asset URL that humans pasted is gone from the body and cannot be recovered from the rendered GitHub page.

Ask

Preserve raw <img> HTML tags that point at GitHub-hosted assets, including their width / height / alt attributes.

At minimum, do not wrap them in an anchor pointing at a short-lived AWS presigned URL.

Reproduction

  1. Connect a GitHub repo to a Plane workspace via the official GitHub integration. Set sync to bidirectional.
  2. Create a GitHub issue with body containing an <img> referencing a GH user-attachments URL. Apply the Plane label.
  3. Within seconds the Plane work item has stored HTML with the anchor-wrapped <image-component> form shown above.
  4. To exercise the destructive Plane→GH push, follow the trigger recipe in meta-issue 01. Wait >5 minutes after the push and reload the GH issue: the fallback URL errors.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the official GitHub integration's GH→Plane import and Plane→GH export paths, then reproduce the bidirectional sync using the HTML image example and the listed trigger recipe. Trace how GitHub-hosted image tags become Plane image components and how they are serialized back to Markdown. Done means preserving the raw image attributes and avoiding workspace-gated or short-lived fallback URLs.

Written by the indexing model from the issue text.

Assessment

Tech stack
github, typescript
Domain
accessibility, api, backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
50/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.