The changelog rule has one exception it never states: the release PR cannot write a fragment #131
Labels
No labels
attention
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-ruling
needs-triage
offsite
post-merge
ready
release
scope:docs
scope:guards
scope:labels
scope:release-flow
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/ceremony#131
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
The changelog rule says "every PR that changes behavior writes one fragment,
changelog.d/<issue>.md" (docs/CONSUMERS.md, and CONTRIBUTING.md in the same words). It has exactly one exception, and the exception is nowhere in the doctrine: the release PR cannot write a fragment at all — not consumed, not left in place. Both halves are enforced by guards, so a builder who follows the rule as written gets a red run with no way out of it inside their PR.Found on #118, where the
0.2.0ceremony PR also has to carry adrills/README.mddoctrine correction. I checked before directing that edit and had to tell the builder not to write the fragment the rule demands.The two closed doors, verified against the trees rather than the docs:
changelog-assembled.shreplays the fragment set as of the merge base and compares byte-for-byte against HEAD's stamped section. A fragment born and consumed on the release branch is not at the merge base, so the replay assembles N entries against HEAD's N+1. Red, and unfixable without deleting the entry the rule asked for. This is by design and the design is right — the guard exists precisely so the section cannot say anything the fragments did not.changelog-armed.sh:105-111refuses a surviving fragment on a bare-version tree: "these fragments were not consumed". Also right: a fragment surviving its own release gets republished in the next one.Neither guard is wrong. The doctrine is just silent about the one PR where the rule it states cannot be obeyed, and the silence costs a builder a confusing red run at the worst possible moment — the release.
The practical consequence today: a doc or behavior change that has to ship inside a release PR (a doctrine correction the release's own drill record depends on, #118's case) reaches
mainwith no changelog entry. That is the right trade — the alternative is a separate PR and a full review round on a release's critical path — but it should be a stated exemption, not something each release rediscovers.Spec
State the exemption where the rule is stated, both copies, and say why.
changelog-assembled's merge-base replay or survive into the next release, and both are red. A change that must ship inside the release PR ships without an entry; anything that can wait takes an ordinary PR and gets one.docs/CONSUMERS.md's "The changelog rule" is the portable floor consumers adopt, andCONTRIBUTING.mdstates it for this repo. They already agree word-for-word and must keep agreeing — this is a consumer-visible contract, not a ceremony-local convention.Tasks
docs/CONSUMERS.md— the exemption in "The changelog rule", with both guard links and the ordinary-PR alternative.CONTRIBUTING.md— the same exemption in the same words as the CONSUMERS floor.changelog.d/<this issue>.md.Acceptance criteria
docs-syncis green.Test plan
docs-syncis the mechanical check.Dependencies
Found on #118 (
0.2.0), which does not wait on this — its builder has the ruling in prose (here) and is proceeding. Related: #112 (fragment mode), #114 (the assembler), #115 (armed), #116 (assembled).Claimed by @codex-bot-andresmgsl. I am starting the builder work now and will open a draft PR after the first commit.