Skip to content

feat(ui): render the Changelog page as a typed release timeline - #672

Merged
padak merged 2 commits into
mainfrom
claude/changelog-e2e-snowflake-design-0884b0
Aug 23, 2026
Merged

feat(ui): render the Changelog page as a typed release timeline#672
padak merged 2 commits into
mainfrom
claude/changelog-e2e-snowflake-design-0884b0

Conversation

@padak

@padak padak commented Aug 23, 2026

Copy link
Copy Markdown
Member

Why

The web UI's Changelog page dumped each version's raw bullet strings into a card — no structure, no colour, a wall of text (screenshot: before). The CLI renderer already exploits the changelog authoring contract from commands/changelog.py (typed New:/Fix:/BREAKING: prefixes, (#PR) decorations, inline backticks, headline-first summaries); the web page ignored all of it.

What

  • Headline-first collapsing. Each note collapses to its first sentence, expandable per note or via an expand all toggle — the web mirror of the CLI's default summary + --full. Sentence detection ports headline()'s rules (no break inside 0.57.0, no break after e.g.).
  • Typed badges in the CLI's own colour semantics (_PREFIX_STYLES): New green, Fix amber, Change blue, BREAKING/Security red, UX magenta, Note cyan, Internal/Tests/... dim.
  • PR links. (#658, #664) prefix decorations become links to the GitHub PRs.
  • Inline code chips for backtick spans, matching the inline-code treatment used elsewhere in the UI.
  • Release rail. Versions sit on a vertical timeline; the running version (shared ["version"] query cache — no extra request) gets a glowing node and a running now pill, the newest entry a latest pill.

Parsing lives in web/frontend/src/changelogNotes.ts with a vitest suite (11 tests); the prefix list and sentence rules are ports of _PREFIX_RE and headline() and carry a keep-in-sync note. No Python surface touched; GET /changelog payload unchanged.

Testing

  • npm test — 64 passed (4 files), including the new changelogNotes.test.ts
  • npm run build — tsc + vite clean
  • Verified live via kbagent serve --ui --ui-dist web/frontend/dist: light + dark mode, per-note expand, expand-all, PR link hrefs, running-version highlight

Open in Devin Review

The Changelog page dumped each version's raw bullet strings into a card:
no structure, no colour, a wall of text. The CLI renderer already
exploits the changelog authoring contract (commands/changelog.py) --
typed prefixes, PR decorations, backtick spans, headline-first
summaries -- and the web page now does the same:

- notes collapse to their first sentence behind a typed badge (New /
  Fix / Change / BREAKING / ... in the CLI's own colour semantics),
  expandable per note or via an expand-all toggle, mirroring the CLI's
  default-summary + --full behaviour
- (#NNN) prefix decorations become GitHub PR links
- inline backticks render as code chips, matching the inline-code
  treatment used elsewhere in the UI
- versions sit on a vertical timeline rail; the running version (from
  the shared /version query cache) gets a glowing node and a 'running
  now' pill, the newest entry a 'latest' pill

Parsing lives in changelogNotes.ts with a vitest suite; the prefix
list and sentence-boundary rules are ports of _PREFIX_RE and
headline() and must stay in sync with them.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 potential issue.

Open in Devin Review

Comment thread web/frontend/src/changelogNotes.ts Outdated
The abbreviation set dropped `no`, `al` and `inc` from
_HEADLINE_ABBREVIATIONS and invented `incl` and `resp`, so a note
carrying any of them split into a different first sentence on the
Changelog page than under `kbagent changelog`.

The trailing-token regex diverged the same way: `[\w.]+$` captures
digits and underscores where _TRAILING_TOKEN is letters-only, so
"kbagent_no." resolved to the whole token instead of "no" and missed
the abbreviation lookup.

Both are now exact ports, covered by a table test over every member of
the Python set. All twelve cases were A/B'd against the real
`headline()` and match.
@padak
padak merged commit a19b51c into main Aug 23, 2026
5 checks passed
@padak
padak deleted the claude/changelog-e2e-snowflake-design-0884b0 branch August 23, 2026 22:25
@padak padak mentioned this pull request Aug 23, 2026
13 tasks
padak added a commit that referenced this pull request Aug 23, 2026
Batches the nine PRs merged since v0.90.0 (#670, #671, #672, #673, #674, #675, #676, #677, #678) into one version bump and one changelog entry.
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.

1 participant