Skip to content

feat(changelog): add a What's New window mirroring GitHub releases - #74

Merged
kyle-ssg merged 1 commit into
mainfrom
feat/changelog-window
Jul 27, 2026
Merged

feat(changelog): add a What's New window mirroring GitHub releases#74
kyle-ssg merged 1 commit into
mainfrom
feat/changelog-window

Conversation

@kyle-ssg

Copy link
Copy Markdown
Owner

Closes #71.

What

A native What's New window that mirrors the project's GitHub Releases page in-app — version list on the left, that release's notes rendered as selectable markdown on the right.

What's New window — version list left, rendered release notes right

  • Left column: one row per published release (v<version>, date, a current badge on the running version, pre-release marked).
  • Right pane: the release body via the existing mdview::MarkdownView, plus an Open on GitHub link.
  • Entry points: Kyde ▸ What's New…, the ⌘⇧A palette, and a What's new link on the update-available banner.

How

  • kyde-update gains ReleaseNote, release_notes() (GET /releases?per_page=50, overridable with KYDE_RELEASES_FEED_URL — the same dev seam as the update feed) and the pure parse_releases: drafts skipped, newest version first (numeric, so 2.10 > 2.5), CRLF normalised for the markdown parser, published_at trimmed to YYYY-MM-DD.
  • Fetched off the UI thread, on first open only. A failed fetch keeps the window useful — error text + Retry + a link to the releases page, never a blank pane.
  • State lives in ChangelogView; set_changelog applies a fetch result, which is also the test/screenshot seam (no network needed).

Tests

  • parse_releases unit tests: ordering/draft/CRLF/date behaviour, and junk-tolerance (bad JSON, tagless entries, a single-object feed).
  • changelog_lists_releases_and_shows_their_notes smoke test: window opens, newest release selected, notes land in the markdown pane, selecting an older release swaps them, a failed fetch surfaces the error.
  • KYDE_SHOT=changelog debug shot, seeded with fixed notes so it stays offline and deterministic (KYDE_SHOT_RELEASES=<feed dump> renders a real feed instead).
  • cargo fmt + cargo clippy --workspace --all-targets --all-features -D warnings + cargo test --workspace all green; verified manually against the live GitHub feed.

🤖 Generated with Claude Code

Closes #71.

Adds a native "What's New" modal window that mirrors the project's GitHub
Releases page in-app: a version list on the left (date + a "current" badge on
the running version) and that release's notes rendered as selectable markdown
on the right, with an "Open on GitHub" link.

* kyde-update gains `ReleaseNote`, `release_notes()` (GET /releases?per_page=50,
  overridable with `KYDE_RELEASES_FEED_URL` like the existing update feed) and
  the pure `parse_releases` — drafts skipped, newest version first, CRLF
  normalised for the markdown parser, `published_at` trimmed to YYYY-MM-DD.
* The feed is fetched off the UI thread, on first open only. A failed fetch
  keeps the window useful: error text plus Retry and a link to the releases
  page, never a blank pane.
* Entry points: Kyde ▸ What's New…, the ⌘⇧A palette, and a "What's new" link
  on the update-available banner.

Tests: two `parse_releases` unit tests, the `changelog_lists_releases_and_shows_
their_notes` smoke test (driven through `set_changelog`, so no network), and a
`KYDE_SHOT=changelog` debug shot seeded with fixed notes so it stays offline
and deterministic.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@themis-gatacre-games

Copy link
Copy Markdown

Review failed after 2 attempt(s) (EngineError). Check the worker logs.

@kyle-ssg
kyle-ssg merged commit f39bb3d into main Jul 27, 2026
5 checks passed
kyle-ssg added a commit that referenced this pull request Jul 27, 2026
Resolves the CLAUDE.md conflict: both branches appended a per-feature
section at the same anchor (main's "Changelog window" from #74, this
branch's "Single instance").

Rather than keep both, CLAUDE.md is trimmed to rules-and-conventions
only (905 -> 327 lines). The per-feature sections narrated behaviour
that the code already states, drifted out of date, and were loaded into
context every session. Both conflicting sections are dropped under that
policy; the single-instance facts that are genuinely rules are kept --
instance.rs on the platform/ layout line, and the note that KYDE_SHOT
disables single-instance so the screenshot suite can launch back to back.

Also corrects accumulated rot found while trimming: 10 dead src/*.rs
paths that had moved to crates/, a views/ list missing 6 modules,
"eight gpui-free crates" (now ten), "all ten crates" (now eleven), the
missing kyde-local-history entry, and a stale gpui_platform reference
that contradicted the gotcha saying it never existed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.

[feat] add changelog modal

1 participant