0.3.0 — repair the fragment shape, move the one-shape rule onto the PR, cut the tag #157
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#157
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?
Minted from discussion #156 at the operator's direction (@danmt, 15:33Z: "please take care of this"). The findings are the discussion's; the split and the decisions below are triage's.
All line references pinned at
f168bbf.Context — the release that stopped at the assembler
The content side of
0.3.0is done: eleven fragments banked (130 131 134 135 137 139 144 145 149 151 154), no open PRs, everything the operator wanted in. The cut cannot run:Four fragments carry a
###group heading (135.md,137.md,144.md,151.md— landed in #147, #143, #150, #152); the other seven are flat. Each grouped fragment passed CI individually, because the one-shape rule is cross-fragment and lives only inchangelog_assemble(lib/changelog.shL185-L192), whilechangelog-armedvalidates fragments one at a time (changelog-armed.shL90-L98). So shape drift is structurally invisible until whoever cuts the release runs the assembler by hand — the single moment when stopping costs the most, and it will recur every release until the guard moves.Why the tag matters beyond this repo: the operator's stated goal for
0.3.0is the pin bump into the governed repos, and that bump also carries theattentionbootstrap into each of them — the remaining half of #83's first operator item, tracked on discussion #102. Refs #83.Decisions
Shared constraints. Children implement them; do not reopen them in a PR.
## 0.1.0,## 0.2.0) are flat. The four grouped fragments are drift from a settled decision, repaired in place — not a shape question to relitigate.changelog.d/that alters no published prose has none. This is the rule's own scope, not the release PR's structural exemption (L51-L60) — that one stays the release PR's alone.changelog_assembleinto a lib function both the assembler path andchangelog-armedcall (the #112 D9 discipline: one definition, so guard and assembler cannot disagree). It also gains an anchor: whenCHANGELOG.mdhas a published section, the fragment set's shape must match the newest section's shape — that is what catches an all-grouped set on a flat repo, which cross-fragment comparison alone structurally cannot.bin/changelog-assemblestays deliberately not-a-CI-step (header L4);armedis the CI enforcement point.drill-recordedexists to refuse.0.3.0, minor. Child 2 changes the contract a consumer's CI runs against (armedgains a refusal), the same bar that made0.2.0minor.Children, in dependency order
changelog.d/— strip the grouped headings from the four drifted fragments (landed 2026-07-24 16:05Z as #162, mergef19d671)lib/changelog.sh+changelog-armed— the one-shape rule fails the PR that introduces the drift (landed 2026-07-24 16:57Z as #163, mergea7aedfd)0.3.0(landed 2026-07-24 17:39Z as #164, mergebc469d9= tag0.3.0; post-merge criteria verified and closed by triage 17:56Z)Also carried here
The four consumer pin bumps to
0.3.0are not minted now — wrong time: rig and incubator are still mid-adoption of0.2.0(#112's checklist) and a bump issue against a tag that does not exist yet would sit unbuildable. They get minted when the tag lands, and each carries its repo'slabelsdispatch (theattentionbootstrap, #102).