Drop a reverted pull request’s entry from the changelog it never shipped in #156

Merged
cruelacid merged 1 commit from worktree-changelog-reverts into main 2026-09-24 20:22:20 +01:00
Owner

Task: none. The Auto Feature Builder session asked for this after #152 (the revert of NEC-15's #145), and the user approved it directly.

Problem: #145 merged with a user-facing note ("The server now keeps earlier versions of each note…") and was reverted by #152, whose note is NONE because no user ever had it. scripts/changelog.mjs had no notion of reverts, so the next server changelog would have announced a feature that isn't there.

Change: a PR that reverts others says so on its own line, Reverts #145 or Reverts #1, #2 and #3, and draft honours it:

  • Reverted within the same release: the entry is dropped, and draft says "#145 dropped: reverted by #152".
  • Reverted after it shipped: reported. A published entry can't be un-announced, so the revert needs a note saying what users lose, and draft flags one that says NONE.
  • Revert of a revert: the original re-lands, and a third revert takes it out again.
  • Revert merged after the range: it doesn't reach back into the range.
  • Reporting: only the ledger the reverted change belonged to reports it.

Only the #N list directly after "Reverts" counts. #152's body mentions #151 (the NEC-87 fix) on the same line, and reading every number on that line would have silently dropped the fix from the plugin changelog. A test uses #152's wording verbatim.

Checked:

  • Live data: the server draft reports #145 as dropped, and the plugin draft keeps #151's entry.
  • 16 changelog tests, and 37 script tests under pnpm lint.
  • Five rules mutation-checked: numbers-on-the-line, keeping reverted entries, ignoring re-lands, out-of-range reverts, and unreported shipped reverts. Each fails the suite when broken. The re-land mutant survived a two-deep chain, so a three-deep test was added.

CLAUDE.md and the PR template describe the marker. Merging will wait until main's latest run is green.

Changelog

NONE

🤖 Generated with Claude Code

https://claude.ai/code/session_01StURdiv33xnMfE2XRyg8Lt

Task: none. The Auto Feature Builder session asked for this after #152 (the revert of NEC-15's #145), and the user approved it directly. **Problem:** #145 merged with a user-facing note ("The server now keeps earlier versions of each note…") and was reverted by #152, whose note is NONE because no user ever had it. `scripts/changelog.mjs` had no notion of reverts, so the next server changelog would have announced a feature that isn't there. **Change:** a PR that reverts others says so on its own line, `Reverts #145` or `Reverts #1, #2 and #3`, and `draft` honours it: - **Reverted within the same release:** the entry is dropped, and `draft` says "#145 dropped: reverted by #152". - **Reverted after it shipped:** reported. A published entry can't be un-announced, so the revert needs a note saying what users lose, and `draft` flags one that says NONE. - **Revert of a revert:** the original re-lands, and a third revert takes it out again. - **Revert merged after the range:** it doesn't reach back into the range. - **Reporting:** only the ledger the reverted change belonged to reports it. Only the `#N` list directly after "Reverts" counts. #152's body mentions **#151 (the NEC-87 fix)** on the same line, and reading every number on that line would have silently dropped the fix from the plugin changelog. A test uses #152's wording verbatim. **Checked:** - Live data: the server draft reports #145 as dropped, and the plugin draft keeps #151's entry. - 16 changelog tests, and 37 script tests under `pnpm lint`. - Five rules mutation-checked: numbers-on-the-line, keeping reverted entries, ignoring re-lands, out-of-range reverts, and unreported shipped reverts. Each fails the suite when broken. The re-land mutant survived a two-deep chain, so a three-deep test was added. CLAUDE.md and the PR template describe the marker. Merging will wait until `main`'s latest run is green. ## Changelog NONE 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01StURdiv33xnMfE2XRyg8Lt
Drop a reverted pull request's entry from the changelog it never shipped in
All checks were successful
Release note / release-note (pull_request) Successful in 13s
CI / build (pull_request) Successful in 4m26s
CI / e2e (pull_request) Successful in 4m50s
CI / promote (pull_request) Has been skipped
CI / e2e (push) Successful in 5m2s
CI / build (push) Successful in 5m34s
CI / promote (push) Successful in 30s
71bb8103f1
#145 merged with a user-facing note and was reverted by #152, whose note is
NONE because no user ever had it. scripts/changelog.mjs knew nothing of
reverts, so the next server changelog would have announced a feature that
is not there.

A pull request that reverts others now says so on a line of its own —
`Reverts #145`, or `Reverts #1, #2 and #3` — and draft honours it:
- reverted within the same release: the entry is dropped, and said so;
- reverted after it shipped: reported, since a published entry cannot be
  un-announced and the revert then needs a note saying what users lose —
  flagged if it says NONE;
- a revert of a revert re-lands the original; a third takes it out again;
- a revert merged after the range does not reach back into it;
- only the ledger the reverted change belonged to reports it.

Only the #N list directly after "Reverts" counts. #152's body mentions
#151, the NEC-87 fix, on the same line, and reading every number on the
line would have silently dropped that fix from the plugin's changelog.

Checked against live data: the server draft reports "#145 dropped: reverted
by #152", and the plugin draft keeps #151's entry. 16 changelog tests, five
rules mutation-checked, each failing the suite when broken. CLAUDE.md and
the pull request template describe the marker.

Requested by the Auto Feature Builder session after #152; approved by the
user.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01StURdiv33xnMfE2XRyg8Lt
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Nectenda/nectenda!156
No description provided.