Auto Release Notes, Actually on Autopilot
tl;dr: Your changelog now writes itself on a schedule, groups by story instead of by merge time, keeps internal plumbing out of public notes, and extends published notes when the work continues.
Automatic release notes used to be a button you remembered to press. Now they're a cadence. A daily sweep drafts on your team's chosen day, a weekly close-out finalizes shipping scores, and the whole loop runs without anyone poking it. Along the way we fixed the part that mattered most: what actually lands in a note.
Note boundaries are now decided by story, not by merge time or repo layout. An AI editor reads the whole batch — change summaries, your product profile, the customer-visible effect — and partitions it into themes. Two unrelated features that shipped the same afternoon get two notes. A single feature spanning backend and frontend gets one; repository structure is your org chart, not your customer's story. And there's a discard pile: if the customer-visible effect can't be stated in one sentence, it doesn't get published. Migrations, CI plumbing, and signup toggles stay where they belong. Performance and reliability work is explicitly in, framed by what it means for the people using your product. We briefly shipped a per-org strictness dial for this and then took it away — release notes are customer-facing by definition, and that's not a preference worth tuning.
Stories don't always finish in one week, so notes no longer fragment into sequels. When follow-up work lands, the system recognizes the published note it belongs to and extends it in place — regenerated prose, extended timeline, same URL. Auto-publish teams get this automatically; review-mode teams get the continuation as a fresh draft, because you approved that prose and we're not going to quietly rewrite it. Notes are also dated by when their content shipped rather than when they were published, so a backfilled note about June work reads as a June release.
The unglamorous half of the work: the pipeline got much harder to wedge. Generation now runs inside the request with full CPU instead of drifting off as a background task and stalling on its last note. Notes stranded mid-generation by a crash get reaped automatically — no manual cleanup, no future sweep blocked. Failed runs release their changes back into the pool and retry on the next sweep instead of waiting out a full cycle, and a crashed amend can no longer put a published note into a permanent crash loop. We also taught the model layer to repair its own malformed structured responses, which were quietly downgrading thematic grouping to plain time-chunking. Plus the scheduled sweep and the first-draft-after-signup flow both stopped failing silently on a missing internal identity — the kind of bug where nothing errors and nothing appears.
What you get: a changelog that drafts itself on a rhythm, reads like it was written by someone who understands your product, and doesn't need a human babysitting the queue.
We ran every one of these fixes against our own changelog first — the note you're reading came out of the same pipeline. Turn it on and let it draft.