You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The vscode extension's packages/vscode/CHANGELOG.md and README.md ship to two public surfaces: the VS Code Marketplace and the Open VSX Registry. Both render markdown including images via standard  syntax, but only absolute URLs (e.g. raw.githubusercontent.com) render reliably across both surfaces. Currently the CHANGELOG is entirely text — no images — which makes feature releases harder to evaluate at a glance on the Marketplace listing.
Separately, since the documentation flow stabilized ~4 weeks ago, several merged PRs have included screenshots in their PR descriptions (typically dragged in as github.com/user-attachments/assets/<uuid> URLs). Those visuals exist but aren't surfaced anywhere users will see them — they're stuck in the PR body, invisible to anyone browsing the Marketplace.
This issue tackles both:
Establish the asset-hosting convention so future CHANGELOG/README entries have a clear, low-friction path to add visuals
Audit the past 4 weeks of merged PRs to inventory existing images that could be reused — feeds the convention validation by exercising it against real assets
Why PIR
Multi-phase work with a real human-input pause: the audit produces a candidate-image catalog that the architect needs to review before deciding which images go where. PIR's dev-approval gate is exactly the surface for that pause
Design decisions at plan-approval: folder structure naming, URL pattern (raw.githubusercontent.com vs commit-pinned SHAs), per-version subfolder convention, size/format guidelines
Visual deliverable that needs running-app-equivalent verification: after integration, the architect should render the updated CHANGELOG/README locally (via marked or VS Code's markdown preview) to confirm images load before merge
Scope — three phases
Phase 1: Establish the convention
Author a new doc file at packages/vscode/docs/changelog-and-readme-assets.md (or similar location) documenting:
Folder structure for hosted assets:
Recommended starting point: packages/vscode/docs/changelog-assets/<version>/<name>.png for per-version per-feature images
README assets in packages/vscode/docs/readme-assets/<name>.png (no version subfolder since README is "current state")
Plan-approval should decide the exact folder names; the structure above is the proposal
URL pattern: absolute URLs pointing at raw.githubusercontent.com/cluesmith/codev/main/<path>
Branch-pinned (/main/) by default
Commit-SHA-pinned (/<sha>/) when an asset MUST stay stable against future force-pushes — rare
Image format and size:
PNG / JPG for screenshots; animated GIF for short interaction demos (5-15 sec, < 2MB)
Hard limit: 500KB per static image, 2MB per GIF — beyond that, hurts Marketplace page load
Tools recommendation: pngquant for PNG compression, gifski/gifsicle for GIF optimization
Alt text discipline: every image gets descriptive alt text (Marketplace screen readers consume it)
Commit convention: image assets land in the same PR that introduces the CHANGELOG entry referencing them (no orphaned assets, no stale references)
Markdown HTML hint: GitHub's <picture><source media="(prefers-color-scheme: dark)" srcset="..."></picture> dark-mode pattern — note whether it renders on both Marketplaces or only one (Marketplace's renderer may strip HTML beyond a whitelist; needs verification)
Phase 2: Audit past 4 weeks of merged PRs
# Find merged PRs from past 4 weeks
gh pr list --state merged --search "merged:>=$(date -v-4w +%Y-%m-%d)" --limit 100 \
--json number,title,body,mergedAt
For each PR returned:
Scan the body for image URLs matching these patterns:
Download the asset to packages/vscode/docs/changelog-assets/audit-2026-05/<pr-number>-<seq>.png (using a temporary audit folder; final placement comes after the architect-review pause)
Record: source PR number, original URL, fetched local filename, brief one-line description of what the image illustrates (inferred from surrounding PR-body text)
Produce an inventory file at packages/vscode/docs/changelog-assets/audit-2026-05/INVENTORY.md with a table:
| PR | Image | Source URL | Local file | What it shows ||----|-------|------------|------------|---------------||#886| 1 |https://github.com/user-attachments/assets/...| 886-1.png | Backlog tree grouped by area, showing 4 groups ||#886| 2 |https://github.com/user-attachments/assets/...| 886-2.png | Backlog before grouping (flat list) for comparison ||#890| 1 | ... | 890-1.png | Builders tree grouped by area, mirroring #886|
This phase commits the audit folder + inventory to the PR's worktree but does NOT yet integrate any images into the actual CHANGELOG/README. That integration is Phase 3, gated on the architect's review.
Phase 3 (after dev-approval gate): Integrate per architect guidance
When the architect reviews the running worktree at the dev-approval gate, they will look at the inventory and provide guidance like:
"Use #886/1 in the CHANGELOG entry for the area-grouping (currently lines 9-10 of [Unreleased] → What's new). Skip #890/1 as redundant. Move #886/2 into README's 'Backlog' section as a before/after pair."
The builder applies this guidance:
Promote the chosen images from the audit folder to the canonical folder (changelog-assets/<version>/ or readme-assets/) with descriptive names
Insert the  references into the appropriate CHANGELOG and/or README locations
Delete the audit folder (changelog-assets/audit-2026-05/) since it was scratch — anything not promoted is intentionally discarded
Verify renderings via local markdown preview before opening the PR
Acceptance criteria
Phase 1 (convention doc)
packages/vscode/docs/changelog-and-readme-assets.md exists; covers folder structure, URL pattern, image format/size guidelines, alt-text discipline, commit convention, dark-mode HTML hint with rendering caveats
Convention referenced from packages/vscode/CONTRIBUTING.md (if exists) or packages/vscode/README.md so future contributors find it
Phase 2 (audit)
All merged PRs from merged:>=<4-weeks-ago-date> audited
All image URLs found in PR bodies enumerated
All images downloaded to a temporary audit-2026-05/ folder (or equivalent)
INVENTORY.md produced with the table format above
Audit folder + inventory committed to the builder's PR worktree
Phase 3 (integration — runs AFTER architect provides guidance at dev-approval)
Promoted images live at canonical paths (changelog-assets/<version>/ or readme-assets/)
CHANGELOG entries reference promoted images via raw.githubusercontent.com/cluesmith/codev/main/<path> URLs
README updated per architect guidance
Audit folder deleted (no leftover scratch assets)
Local markdown render (e.g. vscode --command markdown.showPreview on the CHANGELOG) confirms all images load without 404s
General
Image total size budget: < 2 MB across all newly-added assets in this PR (to keep the extension package small)
No regression to existing CHANGELOG text content
All committed images compressed (PNG via pngquant, GIF via gifsicle)
Out of scope
Backfilling CHANGELOG entries for releases earlier than the past 4 weeks — too much work; if a prior entry needs an image, file a separate issue per entry
Verifying that <picture> dark-mode HTML actually renders on both Marketplaces beyond documenting the caveat in the convention doc — empirical verification on the live Marketplaces would require a release, which is its own cycle
Adding images for unreleased features that haven't shipped yet — only document what's actually merged
Converting existing text-only entries to image-augmented entries beyond the architect-selected ones in Phase 3 — wholesale rework belongs to a separate effort
Establishing video conventions — videos don't render in Marketplace markdown (HTML <video> is stripped); GIFs are the only motion format covered
Plan-phase design questions
These should be locked in at plan-approval:
Folder layout: docs/changelog-assets/<version>/ vs docs/changelog/<version>/assets/ vs media/changelog/<version>/ — pick one
Per-version subfolder for changelog: yes (my proposal — clean pruning when old versions drop off the page) vs no (flat folder, simpler navigation)
Branch-pinned vs SHA-pinned URLs: should the convention be raw.githubusercontent.com/.../main/... (auto-updates as repo changes) or commit-SHA (immutable)? Trade-off: branch-pinned breaks if main is force-pushed (rare in this repo); SHA-pinned requires updating URLs whenever an asset changes
Image compression mandatory or optional: hard CI check (lint rejects uncompressed PNGs above a threshold) vs documented-but-not-enforced
Audit folder naming: audit-YYYY-MM/ (date-stamped, my proposal) vs audit/ (single perpetual folder, simpler but no temporal context if multiple audits happen)
Related
packages/vscode/CHANGELOG.md — the file this convention serves
packages/vscode/README.md — secondary consumer of the same convention
User design discussion on 2026-05-28 about whether images and videos can be embedded in the extension's CHANGELOG.md and which hosting patterns are safe across Marketplace + Open VSX. Confirmed raw.githubusercontent.com is the reliable universal path; PR-attachment URLs work today but lack the discoverability and stability commitment of committed-to-repo assets.
Phase 2 audit results (executed 2026-05-28)
The audit has been executed. 6 of 59 merged PRs in the window 2026-04-30 → 2026-05-28 contained images in their PR body — 17 images total, all hosted at github.com/user-attachments/assets/<uuid>, all PNG, none animated, none using dark-mode <picture> pairs.
Full inventory with descriptions, local filenames, and architect-decision notes is at:
packages/vscode/docs/changelog-assets/audit-2026-05/INVENTORY.md (committed in the Phase 2 PR alongside the downloaded assets)
Headline observations for Phase 3 architect review
Strong README-hero candidates: #771-2 (full-extension preview, 3020x1728) — would need downsizing; #731-1 (right-click context menu — small, focused).
CHANGELOG-entry-per-feature candidates: the four #785 images each map 1:1 to a feature bullet in [Unreleased]; clean fit.
Compatibility matrix candidate: the four #740 fork screenshots — best as a single 2x2 collage in README rather than four separate CHANGELOG entries.
Out-of-package: #833's four images are for the afx workspace recover CLI feature, not the VSCode extension. The architect may skip the entire #833 batch when scoping to the vscode-package CHANGELOG/README.
Alt-text deficit: 14 of 17 images use the placeholder alt text "image"; only #740's four are descriptively alt'd ("cursor" / "aws-kiro" / "antigravity" / "windsurf"). Promoted images will all need re-authored alt text per the convention's accessibility criterion.
No animated content: zero GIFs in the corpus. The convention's GIF guidelines remain documented-but-unexercised until a future PR introduces one.
No raw.githubusercontent.com URLs in the corpus: 100% of in-PR images use the user-attachments/assets/<uuid> form — confirms the convention this issue establishes is genuinely new ground for the repo.
Raw-bytes budget: 10.9 MB across all 17 images uncompressed. The convention's <500KB-per-image and <2MB-total-per-PR budgets will require pngquant on most images before promotion. Notably #771-2 (2.3 MB) and the four #740 shots (~1.1 MB each) exceed the per-image limit and must be downsized/compressed.
The audit folder + INVENTORY.md is committed in the Phase 2 PR for architect review at the dev-approval gate.
Context
The vscode extension's
packages/vscode/CHANGELOG.mdandREADME.mdship to two public surfaces: the VS Code Marketplace and the Open VSX Registry. Both render markdown including images via standardsyntax, but only absolute URLs (e.g.raw.githubusercontent.com) render reliably across both surfaces. Currently the CHANGELOG is entirely text — no images — which makes feature releases harder to evaluate at a glance on the Marketplace listing.Separately, since the documentation flow stabilized ~4 weeks ago, several merged PRs have included screenshots in their PR descriptions (typically dragged in as
github.com/user-attachments/assets/<uuid>URLs). Those visuals exist but aren't surfaced anywhere users will see them — they're stuck in the PR body, invisible to anyone browsing the Marketplace.This issue tackles both:
Why PIR
dev-approvalgate is exactly the surface for that pausemarkedor VS Code's markdown preview) to confirm images load before mergeScope — three phases
Phase 1: Establish the convention
Author a new doc file at
packages/vscode/docs/changelog-and-readme-assets.md(or similar location) documenting:packages/vscode/docs/changelog-assets/<version>/<name>.pngfor per-version per-feature imagespackages/vscode/docs/readme-assets/<name>.png(no version subfolder since README is "current state")raw.githubusercontent.com/cluesmith/codev/main/<path>/main/) by default/<sha>/) when an asset MUST stay stable against future force-pushes — rarepngquantfor PNG compression,gifski/gifsiclefor GIF optimization<picture><source media="(prefers-color-scheme: dark)" srcset="..."></picture>dark-mode pattern — note whether it renders on both Marketplaces or only one (Marketplace's renderer may strip HTML beyond a whitelist; needs verification)Phase 2: Audit past 4 weeks of merged PRs
For each PR returned:
https://github.com/user-attachments/assets/[a-f0-9-]+https://raw.githubusercontent.com/[^)]+\.(png|jpg|jpeg|gif|webp)<img[^>]+src="[^"]+"(HTML embed form)packages/vscode/docs/changelog-assets/audit-2026-05/<pr-number>-<seq>.png(using a temporary audit folder; final placement comes after the architect-review pause)packages/vscode/docs/changelog-assets/audit-2026-05/INVENTORY.mdwith a table:This phase commits the audit folder + inventory to the PR's worktree but does NOT yet integrate any images into the actual CHANGELOG/README. That integration is Phase 3, gated on the architect's review.
Phase 3 (after
dev-approvalgate): Integrate per architect guidanceWhen the architect reviews the running worktree at the
dev-approvalgate, they will look at the inventory and provide guidance like:The builder applies this guidance:
changelog-assets/<version>/orreadme-assets/) with descriptive namesreferences into the appropriate CHANGELOG and/or README locationschangelog-assets/audit-2026-05/) since it was scratch — anything not promoted is intentionally discardedAcceptance criteria
Phase 1 (convention doc)
packages/vscode/docs/changelog-and-readme-assets.mdexists; covers folder structure, URL pattern, image format/size guidelines, alt-text discipline, commit convention, dark-mode HTML hint with rendering caveatspackages/vscode/CONTRIBUTING.md(if exists) orpackages/vscode/README.mdso future contributors find itPhase 2 (audit)
merged:>=<4-weeks-ago-date>auditedaudit-2026-05/folder (or equivalent)INVENTORY.mdproduced with the table format abovePhase 3 (integration — runs AFTER architect provides guidance at
dev-approval)changelog-assets/<version>/orreadme-assets/)raw.githubusercontent.com/cluesmith/codev/main/<path>URLsvscode --command markdown.showPreviewon the CHANGELOG) confirms all images load without 404sGeneral
Out of scope
<picture>dark-mode HTML actually renders on both Marketplaces beyond documenting the caveat in the convention doc — empirical verification on the live Marketplaces would require a release, which is its own cycle<video>is stripped); GIFs are the only motion format coveredPlan-phase design questions
These should be locked in at
plan-approval:docs/changelog-assets/<version>/vsdocs/changelog/<version>/assets/vsmedia/changelog/<version>/— pick oneraw.githubusercontent.com/.../main/...(auto-updates as repo changes) or commit-SHA (immutable)? Trade-off: branch-pinned breaks ifmainis force-pushed (rare in this repo); SHA-pinned requires updating URLs whenever an asset changesaudit-YYYY-MM/(date-stamped, my proposal) vsaudit/(single perpetual folder, simpler but no temporal context if multiple audits happen)Related
packages/vscode/CHANGELOG.md— the file this convention servespackages/vscode/README.md— secondary consumer of the same convention[Unreleased](under What's new for vscode: group backlog by area (area/* label namespace, predictable across views) #811, vscode: group builders in the tree by area (area/* label namespace, identical to backlog) #818, vscode: capitalize area group header labels in backlog and builders trees #885+vscode: UPPERCASE area group header labels in backlog and builders trees (supersedes #885's Capitalized form) #895, and Bug fixes for vscode: builder changed-file rows render grey instead of SCM colors #799, vscode: builder cleanup no longer closes the terminal tab — regression of 3.0.2 behavior #883, Duplicate / debug-looking command titles in VS Code Feature Contributions tab #838, Review comment commands missing 'Codev:' prefix in Feature Contributions tab #839, codev.telemetry setting description reads as informational, not as a control #840) — candidates for image augmentation per architect's Phase 3 guidanceDiscovered while
User design discussion on 2026-05-28 about whether images and videos can be embedded in the extension's CHANGELOG.md and which hosting patterns are safe across Marketplace + Open VSX. Confirmed
raw.githubusercontent.comis the reliable universal path; PR-attachment URLs work today but lack the discoverability and stability commitment of committed-to-repo assets.Phase 2 audit results (executed 2026-05-28)
The audit has been executed. 6 of 59 merged PRs in the window
2026-04-30→2026-05-28contained images in their PR body — 17 images total, all hosted atgithub.com/user-attachments/assets/<uuid>, all PNG, none animated, none using dark-mode<picture>pairs.Full inventory with descriptions, local filenames, and architect-decision notes is at:
packages/vscode/docs/changelog-assets/audit-2026-05/INVENTORY.md(committed in the Phase 2 PR alongside the downloaded assets)Discovered assets by PR
Headline observations for Phase 3 architect review
#771-2(full-extension preview, 3020x1728) — would need downsizing;#731-1(right-click context menu — small, focused).#785images each map 1:1 to a feature bullet in [Unreleased]; clean fit.#740fork screenshots — best as a single 2x2 collage in README rather than four separate CHANGELOG entries.#833's four images are for theafx workspace recoverCLI feature, not the VSCode extension. The architect may skip the entire#833batch when scoping to the vscode-package CHANGELOG/README."image"; only#740's four are descriptively alt'd ("cursor"/"aws-kiro"/"antigravity"/"windsurf"). Promoted images will all need re-authored alt text per the convention's accessibility criterion.raw.githubusercontent.comURLs in the corpus: 100% of in-PR images use theuser-attachments/assets/<uuid>form — confirms the convention this issue establishes is genuinely new ground for the repo.pngquanton most images before promotion. Notably#771-2(2.3 MB) and the four#740shots (~1.1 MB each) exceed the per-image limit and must be downsized/compressed.The audit folder + INVENTORY.md is committed in the Phase 2 PR for architect review at the
dev-approvalgate.