feat(cmux-next): editorialize nightly What’s New (cx-urd.61)

Closed
TE
18d ago
+2364-62

Changelog

Changed: nightly What's New entries are written in user language, grouped by product area, and shown with readable build times.

What changed

Nightly publication now treats an optional Release note: line in a merged PR body as the user-facing source. Legacy PRs are sent through a bounded GitHub Models summary that drops internal work and deduplicates equivalent notes; unavailable metadata fails closed. Raw commit subjects remain available only under All changes. Appcast descriptions and the staged update card use the editorial projection, and signed notes carry publication timestamps for human labels. The page groups entries with area icons, regular one-line rows, PR links, centered layout, and raw-version tooltips. The PR template documents the optional line.

The PR includes behavior coverage at the publish CLI boundary and through the real changelog page bridge. It does not change identities, feeds, signing, updater defaults, or notarization.

Bead: cx-urd.61

Validation

  • python3 scripts/cmux-next/tests/release-notes-editorial.py
  • bash scripts/cmux-next/tests/release-notes-items.test.sh
  • python3 -m py_compile scripts/cmux-next/editorial_notes.py scripts/cmux-next/release-notes.py
  • python3 scripts/verify-local.py --only swift-syntax --swift-changed origin/feat-cmux-next
  • actionlint .github/workflows/cmux-next-guards.yml .github/workflows/nightly.yml
  • git diff --check

./scripts/localize-changes remains blocked by the current feat-cmux-next base's existing translation queue and parity errors; no new macOS keys were left unresolved by this diff. Native compile and app-context capture require fleet, so they remain unverified locally.


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


Summary by cubic

Nightly What's New entries now come from editorial notes in merged PR bodies instead of raw commit subjects, and the changelog page groups them by product area with readable build times.

  • An optional Release note: line in the PR body is authoritative; Release note: none hides internal work, and a blank line keeps the note eligible.
  • PRs without the line go through a bounded summary model that normalizes equivalent notes; missing metadata or model failures mean less news, never a fallback to raw subjects, and blank notes never create empty appcast spans.
  • Appcast descriptions and update cards show only explicit editorial notes; legacy commit-subject summaries are no longer promoted there.
  • The page shows area icons and PR links, local publication timestamps, and keeps raw commit subjects under All changes.
  • The PR template documents the line, with regression coverage at the publish CLI and through the real changelog page, including blank-note handling.