9ff095a82c1f1ae971d8be03dee16b45b05c51e9
0.8.0 and 0.7.0 rendered as a version header over an empty row on /changelog and in releases.json, the feed the macOS app's Changelog pane renders. Older still, 0.6.0/0.6.2/0.6.3 were gone from the page outright. Both come from one gap. The appcast is the only live source and it is not a store: it holds just the DMGs the release machine keeps, and generate_appcast drops the description of any rebuilt item whose DMG ships no notes file of its own — so a release it still lists can arrive with nothing to show, and one it has aged out of vanishes. The checked-in archive was meant to cover that, but it stopped at 0.5.0, and mergeReleases skipped an archived version whenever the appcast mentioned it, so it could never heal a row that existed and was blank. The archive now carries every release that shipped notes, 0.9.0 down to 0.2.0, and withArchivedNotes fills an item only where the feed has nothing, leaving a published description alone. /changelog and releases.json run the same rule rather than two copies, so the page and the feed cannot disagree about what a release said. 0.6.1 and 0.3.1 stay absent by design — they shipped with no notes written. Tests: bun test src/routes/api/the-nook/ (51 pass; the 4 new cases fail on this branch's parent); bun test unchanged at 49 failures, all in src/server/security, which needs an .env a worktree does not carry. Proved end to end against the live appcast as published by the 0.9.0 release: 11 releases, all with sections. NOOK-305 Co-Authored-By: qwen3.8-flash <noreply@freno.me>
Description
No description provided
Languages
TypeScript
64.5%
JavaScript
33.6%
CSS
1.2%
HTML
0.4%
Shell
0.3%