fix(next): stop What's New repeating each title as its description

Merged
TE
18d ago
+72-3

On nightly 1.0.0-nightly.3911762409401, the "What's new since your last update" page showed every change twice. "Add Apps update center" appeared as the title, then again as its description. The same happened in the update-ready popover.

When a build has no highlight files, scripts/cmux-next/release-notes.py builds the What's New digest from its summary lines (#21458). It writes each line as both the entry's title and its summary, because the digest validator requires a non-empty summary. The page and the popover render any non-empty summary.

The readers now drop a summary that only repeats its title, ignoring case and a trailing period or ellipsis (distinctSummary in webviews/src/pages/changelog/model.ts). This fixes the notes already published. The generator keeps writing the field the validator requires. A summary that says more than its title still shows, such as the full line behind a title the generator shortened to 60 characters.

Changelog

Fixed: What's New no longer repeats each change's title as its description.

Verification

  • bun test test/changelog-model.test.ts: red on the test-only commit ("summary-0": "Add Apps update center" where "" was expected), green with the fix.
  • bun run typecheck (vp check --no-fmt --no-lint): no type errors.
  • Not dogfooded in an app build. The popover change is the same one-line guard and has no separate test.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Fixes the What's New page and update-ready popover so each change's title is no longer repeated as its description.

  • Nightly digests built from summary lines carry each line as both the title and the summary, which caused the duplication.
  • Readers now drop a summary that only repeats its title, ignoring case and a trailing period or ellipsis; summaries that add content still show, and the generator keeps writing the field the validator requires.