Found while doing the 17.1.0 → 17.2.0 platform bump (#1441 / PR #1442). Filed rather than fixed there, because it is a change to the upgrade playbook rather than to the upgrade.
The instruction
AGENTS.md §⬆️ Platform Upgrades, step 4:
Record the upgrade in CHANGELOG.md following the existing entry format (what changed on the platform, what metadata was migrated and why).
Why it is now wrong
That step was written when CHANGELOG.md was hand-maintained, and the last upgrade to follow it — the 17.1.0 bump, commit 9e832d2d — did exactly what it says: it appended six lines under a ## [Unreleased] / ### Changed heading at the top of the file.
The 3.0.0 release (162ad562) changed the file's ownership. It consumed ~90 .changeset/*.md files into a generated ## 3.0.0 section with ### Major Changes / ### Minor Changes / ### Patch Changes sub-headings, and that generated section is now the top of the file. The old hand-written [Unreleased] block still exists — at line ~9009, below the ## [2.2.2] — 2026-07-21 entry, where it now reads as history rather than as a place to write.
So an upgrader following step 4 today has two bad options, and no good one:
- append to the
[Unreleased] block the step points at — which puts a note about the current platform between two 2026-07 release entries, and
- write a new section at the top — which duplicates whatever the PR's own changeset already says, and collides with
changeset version the next time a release runs.
Either way the note also duplicates the changeset: AGENTS.md §Verifying changes already requires every PR to carry a .changeset/*.md, and the release process compiles those into exactly the CHANGELOG.md section step 4 asks the upgrader to write by hand.
What step 4 should probably say
That the upgrade's release-notes entry is the changeset — with the same content step 4 already asks for (what changed on the platform, what metadata was migrated and why) — and that CHANGELOG.md is not hand-edited. Worth deciding at the same time whether the historical [Unreleased] block below 2.2.2 should be relabelled so it cannot be mistaken for a live section.
Not urgent and nothing is broken today: PR #1442 ships the changeset and leaves CHANGELOG.md alone, and its body records the reasoning. The cost is that the next upgrader has to work it out again.
Generated by Claude Code
Found while doing the 17.1.0 → 17.2.0 platform bump (#1441 / PR #1442). Filed rather than fixed there, because it is a change to the upgrade playbook rather than to the upgrade.
The instruction
AGENTS.md§⬆️ Platform Upgrades, step 4:Why it is now wrong
That step was written when
CHANGELOG.mdwas hand-maintained, and the last upgrade to follow it — the 17.1.0 bump, commit9e832d2d— did exactly what it says: it appended six lines under a## [Unreleased]/### Changedheading at the top of the file.The 3.0.0 release (
162ad562) changed the file's ownership. It consumed ~90.changeset/*.mdfiles into a generated## 3.0.0section with### Major Changes/### Minor Changes/### Patch Changessub-headings, and that generated section is now the top of the file. The old hand-written[Unreleased]block still exists — at line ~9009, below the## [2.2.2] — 2026-07-21entry, where it now reads as history rather than as a place to write.So an upgrader following step 4 today has two bad options, and no good one:
[Unreleased]block the step points at — which puts a note about the current platform between two 2026-07 release entries, andchangeset versionthe next time a release runs.Either way the note also duplicates the changeset:
AGENTS.md§Verifying changes already requires every PR to carry a.changeset/*.md, and the release process compiles those into exactly theCHANGELOG.mdsection step 4 asks the upgrader to write by hand.What step 4 should probably say
That the upgrade's release-notes entry is the changeset — with the same content step 4 already asks for (what changed on the platform, what metadata was migrated and why) — and that
CHANGELOG.mdis not hand-edited. Worth deciding at the same time whether the historical[Unreleased]block below 2.2.2 should be relabelled so it cannot be mistaken for a live section.Not urgent and nothing is broken today: PR #1442 ships the changeset and leaves
CHANGELOG.mdalone, and its body records the reasoning. The cost is that the next upgrader has to work it out again.Generated by Claude Code