You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The repo keeps two parallel records of what changes per release:
CHANGELOG.md — manually curated. PRs add an entry under [Unreleased] — <next-major> per the PR-creation flow in docs/agents/release-and-versioning.md. Reviewer-enforced.
They overlap. Sometimes they duplicate (fine). Sometimes they diverge (bad — CHANGELOG has hand-written prose; releases have flat PR titles). Neither is unambiguously canonical, and contributors aren't sure where to put what.
Open questions
Single source of truth — which one?
A: CHANGELOG.md canonical. Releases render the section verbatim or link to it. Pros: prose-first, human-curated, lives with the code, works offline. Cons: manual upkeep, easy to forget.
C: Both, different audiences. CHANGELOG = developer-facing detail + migration paths; releases = user-facing announcement + highlights. Pros: each serves its purpose. Cons: doubles maintenance.
Conventional commits + auto-generation. History already follows conventional commits (feat, fix, chore, docs, test, !). Most of the way to auto-generated notes. Tools to evaluate: release-please-action (version bumps + CHANGELOG), git-cliff (flexible templates), gh release --generate-notes (built-in, simpler).
version.json (Nerdbank.GitVersioning) interaction. Whatever we pick must play with NB.GV's commit-height versioning. Auto-bump tools that rewrite version.json must land the bump commit before NB.GV computes patch height; mid-release commits between bump and tag shift the version.
Breaking-change visibility. Today breaking changes go under ### Breaking changes at the top of CHANGELOG.md. gh release --generate-notes can auto-flag breaking-change-labelled PRs — but only with a .github/release.yml, which we don't have yet.
History — backfill? CHANGELOG.md has rich 10.x / 11.0 entries; GitHub releases for those tags are sparser. One-time alignment pass, or accept asymmetric history?
Suggested first step (not blocking discussion)
Add .github/release.yml to at least categorise auto-generated notes by label (breaking-change, feat, fix, docs). Low-cost regardless of which option wins.
Decide A/B/C, then file the implementation work.
Definition of done
Pick A/B/C (or a documented hybrid).
Document the decision in docs/agents/release-and-versioning.md.
If B wins, file follow-ups for the generation tooling and CHANGELOG migration.
Problem
The repo keeps two parallel records of what changes per release:
CHANGELOG.md— manually curated. PRs add an entry under[Unreleased] — <next-major>per the PR-creation flow indocs/agents/release-and-versioning.md. Reviewer-enforced.vX.Y.Zmilestone and inlines the PR list.They overlap. Sometimes they duplicate (fine). Sometimes they diverge (bad — CHANGELOG has hand-written prose; releases have flat PR titles). Neither is unambiguously canonical, and contributors aren't sure where to put what.
Open questions
feat,fix,chore,docs,test,!). Most of the way to auto-generated notes. Tools to evaluate:release-please-action(version bumps + CHANGELOG),git-cliff(flexible templates),gh release --generate-notes(built-in, simpler).version.json(Nerdbank.GitVersioning) interaction. Whatever we pick must play with NB.GV's commit-height versioning. Auto-bump tools that rewriteversion.jsonmust land the bump commit before NB.GV computes patch height; mid-release commits between bump and tag shift the version.### Breaking changesat the top of CHANGELOG.md.gh release --generate-notescan auto-flagbreaking-change-labelled PRs — but only with a.github/release.yml, which we don't have yet.Suggested first step (not blocking discussion)
.github/release.ymlto at least categorise auto-generated notes by label (breaking-change,feat,fix,docs). Low-cost regardless of which option wins.Definition of done
docs/agents/release-and-versioning.md.