Skip to content

Add changelog page - #679

Open
dawn-ducky wants to merge 9 commits into
mainfrom
add-changelog-page
Open

dawn-ducky wants to merge 9 commits into
mainfrom
add-changelog-page

Conversation

@dawn-ducky

@dawn-ducky dawn-ducky commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

Status

READY

Description

Adds /changelog/ — a searchable, faceted feed of what shipped to Code Push, the CLI, and the API, built as a StarlightPage next to roadmap.astro and linked from the sidebar right below it.

Each entry carries a type badge (New/Fixed/Changed/Deprecated), an area tag, and a version, and expands in place to show detail bullets, an optional command snippet, a link to the relevant doc page, and a copyable permalink (/changelog/#entry-id). Opening the page with a matching #entry-id in the URL auto-expands and scrolls to that entry. Search and the area chips filter the list client-side.

Seeded with a single example entry (staged rollouts) rather than the full sample dataset from the design exploration — add more to the ENTRIES array in src/pages/changelog.astro as things ship.

Design source: https://claude.ai/design/p/8d6abb36-5f0f-4da2-86d9-636e825acb58 ("Docs Changelog.dc.html", option 3a — the full-page direction marked ready to ship).

Test plan

  • npm run build (astro check && astro build) passes clean: 0 errors, 0 warnings, all internal links valid
  • Verified in a local preview: entry expands/collapses, search filters to zero results and shows the empty state, area chip filtering, light/dark theme both render correctly matching the rest of the site

A searchable, faceted feed of what shipped to Code Push, the CLI,
and the API, with expandable entries carrying detail, a command, and
a doc link. Seeded with one example entry; add to the ENTRIES array
in src/pages/changelog.astro as things ship.

Design: https://claude.ai/design/p/8d6abb36-5f0f-4da2-86d9-636e825acb58

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Area was a free string derived from whichever entries existed; fix it
to the five actual areas (Code Push, CLI, Console, API, Flutter) so
the filter chips are stable regardless of what's in ENTRIES.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@dawn-ducky
dawn-ducky requested review from easymac and wrpeck and removed request for AbhishekDoshi26 September 18, 2026 16:27
The toolbar opts out of Starlight's markdown sibling spacing, which was pushing every chip after "All" down by 1rem.

The expand toggle keeps its button on the badge row, but a stretched ::after covers the whole header so the title and summary toggle the entry too. Links inside the header sit above the overlay. The "+" text glyph is replaced with an SVG so it centers in a larger bubble, and the vertical stroke hides when the entry is open.
@easymac

easymac commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

I think this looks great. I made a couple tiny adjustments:
image

  • Vertically centered the filter chips
  • Vertically centered the + icon for expanding an entry, and made it a little bigger
  • Made it so you can click anywhere in the title to expand the summary

The last change isn't precious, just an idea :)

- The copy button called preventDefault, so the "link still works as a
  fallback" comment was false: a failed clipboard write did nothing.
  Let the link navigate, and show a brief "copied" state on success.
- Open the targeted entry on hashchange too, not just on first load, so
  a permalink followed from the same page expands its entry.
- Search the version, detail bullets, and command, not only the title
  and summary.
- Put the command's pre and code on one line so the template's
  indentation does not render as a leading space.
@AbhishekDoshi26

Copy link
Copy Markdown
Member

Reviewed this. The page structure, the filtering, and the sidebar wiring all look good, and the build is clean (0 errors, 0 warnings). I found a few small issues and pushed the fixes as a55b990:

  1. The copy-link fallback never worked. The .cl-copy handler called ev.preventDefault() before writing to the clipboard. So when the clipboard write failed (permissions, insecure context), nothing happened, even though the comment says "the link itself still works as a fallback". The click also gave no sign that it had copied anything. Now the link navigates normally, so the permalink always ends up in the address bar, and a successful copy briefly shows ✓ with the aria-label "Link copied".
  2. Permalinks only opened on first load. The auto-expand ran once, in init(). Following a #entry-id link from the page itself (or pasting one into the same tab) only fires hashchange, so the entry stayed collapsed. The same logic now runs on hashchange too.
  3. Search skipped most of an entry. data-search held only the title, summary, area, and type. Searching a version number or a flag that appears only in the details returned nothing. It now also covers the version, the bullets, and the command.
  4. The command had a stray leading space. <pre> preserves whitespace, so the template's indentation before <code> rendered as a leading space ahead of $. They're on one line now.

How I checked: ran npm run build and cspell. In a local preview I confirmed that a hash change expands the entry, that version and bullet searches match, that the empty state still appears, and that a real click on copy writes the full URL, shows ✓, and reverts after 1.5s.

Head.astro gives every page a <link rel="alternate" type="text/markdown">
pointing at <path>.md, but [...slug].md.ts only builds those for content
collection pages. The changelog is a standalone .astro page, so its link
pointed at a 404 and Accept: text/markdown on /changelog/ fell back to HTML.

- Move the entries, areas, and month grouping to src/data/changelog.ts so
  the page and the Markdown route read the same data.
- Add src/pages/changelog.md.ts, which renders /changelog.md from it. The
  existing middleware then negotiates /changelog/ to it with no changes.
- List /changelog.md under Optional in llms.txt.
@AbhishekDoshi26

Copy link
Copy Markdown
Member

One more fix, pushed as 3cf311f: the changelog wasn't reachable as Markdown for agents.

Head.astro gives every page a <link rel="alternate" type="text/markdown" href="<path>.md">, but [...slug].md.ts only builds .md files for content collection pages. changelog.astro is a standalone page, so the page advertised /changelog.md, which would 404, and a request for /changelog/ with Accept: text/markdown quietly got HTML instead.

  • Moved ENTRIES, AREAS, the entry type, and the month grouping into src/data/changelog.ts, so the page and the Markdown route read the same list. You still add entries in one place, just in that file now.
  • Added src/pages/changelog.md.ts, which renders /changelog.md: frontmatter, month headings, and for each entry the type, area, version, date, permalink, bullets, command, and doc link. The existing middleware now negotiates /changelog/ to it with no changes.
  • Listed /changelog.md under Optional in llms.txt.

How I checked: npm run build is clean (0 errors, 0 warnings), and Prettier and cspell pass on the changed files. Using wrangler pages dev with the real middleware:

  • Accept: text/markdown on /changelog/ returns 200 text/markdown with Vary: Accept and CORS.
  • A browser Accept header still gets HTML.
  • text/markdown;q=0.5, text/html still gets HTML.
  • /changelog.md returns 200.

New used the theme accent, which is gray in Nova, so it looked like the
area badge beside it. New is now green and Fixed moves to blue, the usual
changelog convention.

Light-mode text also darkens to reach 4.5:1 on the tinted pill at this
size: New #166534 (6.2:1), Fixed #1d4ed8 (5.6:1), Changed #7e22ce (5.7:1,
was 4.4:1), and Deprecated #92400e (6.3:1, was 2.8:1). Dark mode already
passed and keeps its shades, with Fixed at #93c5fd (8.7:1).
@AbhishekDoshi26

AbhishekDoshi26 commented Sep 19, 2026

Copy link
Copy Markdown
Member

Pushed 3d897b3 to fix the type badge colors.

New looked like the area badge. It used --sl-color-accent, and the Nova theme's accent is gray, so the NEW pill had almost the same gray text and fill as the CODE PUSH pill next to it. Each type now has its own color: New is green, and Fixed moves from green to blue so the two don't clash. That matches the usual changelog convention.

Light-mode contrast. These are about 11px bold labels, so they need 4.5:1. Measured against the tinted pill on a white page:

Type Before After
New gray, same as the area badge #166534, 6.2:1
Fixed #16a34a, 2.9:1 #1d4ed8, 5.6:1
Changed #9333ea, 4.4:1 #7e22ce, 5.7:1
Deprecated #d97706, 2.8:1 #92400e, 6.3:1

Dark mode already passed. New uses #4ade80 (8.4:1) and Fixed uses #93c5fd (8.7:1); Changed and Deprecated keep their existing shades.

How I checked: npm run build is clean (0 errors, 0 warnings). In a local preview I added the other three badge types to the page and confirmed the computed colors and the look in both light and dark themes.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants