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
Found by the independent verifier on #2312 (verdict posted at pull/2312#issuecomment-5263261619). The D6 gate that PR shipped is correct — items 1-4 all CONFIRMED. This is about the CHANGELOG.
What happened
#2312 (merged 4e8dd9cc) added ## [0.51.15] correctly — one heading added, zero deleted. But the tail is not byte-identical to the merge parent:
Two hunks, both inside the already-released ## [0.51.12] entry:
the verify_fix_commit description, changed from "primitive" to "guarantee"
the per_page=100 call-site claim
Both corrections are accurate, and both were declared — in the PR body and in the new 0.51.15 entry. The verifier's framing is the right one: declaration is context, not compliance.
Why it is worth settling rather than shrugging at
This file adopts Keep a Changelog, where a released entry is an immutable record of what shipped. Editing one in place means the changelog no longer says what 0.51.12 claimed at the time 0.51.12 shipped — which is the only thing a changelog entry is for. Anyone reconstructing why a downstream consumer behaved a certain way on 0.51.12 now reads corrected text that did not exist then.
It also interacts badly with the absorbed-heading gate this repo just built (#2264 → #2290 → #2327 → #2341). That gate exists precisely because released sections were being silently rewritten by merge-forwards. It checks that headings survive; it does not check that bodies do. So the repo now enforces half of the invariant it decided it wanted, and the other half is unenforced and was violated within hours by a PR whose own subject was factual accuracy.
The decision
Not "revert #2312's corrections" — they are true, and losing them would be worse. The question is which of these the project wants:
Released entries are append-only. A correction to a shipped entry goes in the current entry as an explicit erratum ("0.51.12 described X as a primitive; it is a guarantee"), leaving the historical text intact. Highest fidelity, slightly noisier.
My read: (2) is what actually happens, (1) is what the Keep a Changelog adoption implies, and the gap between them is the thing to close — in the convention doc at minimum, and only then in the gate if the project wants it enforced.
Severity
Low. Nothing shipped incorrectly, no consumer is misled about current behaviour, and the corrections improved accuracy. The cost is historical fidelity and an unwritten rule that two lanes could reasonably read differently — which, on a repo where several agents edit the same changelogs concurrently, is exactly the kind of ambiguity that produces the next absorbed section.
Found by the independent verifier on #2312 (verdict posted at pull/2312#issuecomment-5263261619). The D6 gate that PR shipped is correct — items 1-4 all CONFIRMED. This is about the CHANGELOG.
What happened
#2312 (merged
4e8dd9cc) added## [0.51.15]correctly — one heading added, zero deleted. But the tail is not byte-identical to the merge parent:Two hunks, both inside the already-released
## [0.51.12]entry:verify_fix_commitdescription, changed from "primitive" to "guarantee"per_page=100call-site claimBoth corrections are accurate, and both were declared — in the PR body and in the new
0.51.15entry. The verifier's framing is the right one: declaration is context, not compliance.Why it is worth settling rather than shrugging at
This file adopts Keep a Changelog, where a released entry is an immutable record of what shipped. Editing one in place means the changelog no longer says what
0.51.12claimed at the time0.51.12shipped — which is the only thing a changelog entry is for. Anyone reconstructing why a downstream consumer behaved a certain way on0.51.12now reads corrected text that did not exist then.It also interacts badly with the absorbed-heading gate this repo just built (#2264 → #2290 → #2327 → #2341). That gate exists precisely because released sections were being silently rewritten by merge-forwards. It checks that headings survive; it does not check that bodies do. So the repo now enforces half of the invariant it decided it wanted, and the other half is unenforced and was violated within hours by a PR whose own subject was factual accuracy.
The decision
Not "revert #2312's corrections" — they are true, and losing them would be worse. The question is which of these the project wants:
0.51.12described X as a primitive; it is a guarantee"), leaving the historical text intact. Highest fidelity, slightly noisier.My read: (2) is what actually happens, (1) is what the Keep a Changelog adoption implies, and the gap between them is the thing to close — in the convention doc at minimum, and only then in the gate if the project wants it enforced.
Severity
Low. Nothing shipped incorrectly, no consumer is misled about current behaviour, and the corrections improved accuracy. The cost is historical fidelity and an unwritten rule that two lanes could reasonably read differently — which, on a repo where several agents edit the same changelogs concurrently, is exactly the kind of ambiguity that produces the next absorbed section.