release: 0.3.0 #165
No reviewers
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#165
Loading…
Reference in a new issue
No description provided.
Delete branch "build/160-release-0-3-0"
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?
Refs #160 — not
Closes: the issue's acceptance criteria are post-merge, so triage owns the close (#151's rule).The second assembled tag. Three stamps plus the drill record:
VERSION:0.2.1-dev→0.3.0(minor — #157 D5: #159 changes the contract a consumer's CI runs against).bin/changelog-assemble 0.3.0— consumed all twelve fragments in the directory (130 131 134 135 137 139 144 145 149 151 154 159); section and fragment deletions in one commit.CEREMONY_SELF_REF→0.3.0in both carriers (release.yml,labels.yml);self-ref-checkgreen locally.drills/0.3.0.md— live rehearsal of both doors on a disposable private repo, per drills/README.md: all six probes as specified, every refusal creating nothing; scratch repo archived, delete is the operator's (#135).No
changelog.d/fragment for this PR — the release PR's structural exemption.Acceptance criteria (from #160)
Post-merge criteria are triage's to verify on
main; listed here for completeness, unchecked by design.0.3.0on the merge commit; release body is## 0.3.0's section verbatim.mainre-arms to0.3.1-dev;changelog.d/holds only itsREADME.md.changelog-assembledgreen on this PR.changelog-armedgreen on the bare tree and onmainafter the-devbump.drills/0.3.0.mdexists, non-blank; names the fork ref and the rewritten pin under their own heading; names the scratch repoowner/namewith the disposal state its author observed.0.3.0onheavy-duty/ceremonyat any point —git ls-remote --heads origin 0.3.0empty before and after the drill.self-ref-checkgreen: no carrier still pins0.2.0.actions/changelog-armed@0.3.0andactions/changelog-assembled@0.3.0resolve at the tag.Worklog
a7aedfdVERSION→0.3.0bin/changelog-assemble 0.3.0— section + twelve fragment deletions, one commitCEREMONY_SELF_REF→0.3.0in both carriers;self-ref-checkgreenreleaselabel0.3.0branch exists onheavy-duty/ceremony(before drill)drill/0.3.0scaffold to fork: candidate tree + both pins rewritten to candidate SHA (64af424, candidate5f0686b)release→ refuses, creates nothing (run 30112112006; no tag, no release; merge reverted, restore ran green)78586bc), main re-armed to0.3.1-dev(run 30112209127)0.4.0from a side-branch tree, run 30112294804; main untouched at0.3.1-dev)0.3.0branch onheavy-duty/ceremony(after drill)archived: true); writedrills/0.3.0.mdwith observed disposal state (30b49c4)🔎 reviewing head
30b49c4ade🔎 reviewing head
30b49c4adeThe 0.3.0 release tree satisfies #160's pre-merge criteria. I verified both self-reference carriers and the bare VERSION, confirmed
changelog-assembledreplays all 12 base fragments byte-for-byte into the flat 0.3.0 section, confirmedchangelog-armedanddrill-recorded, and verifiedrefs/heads/0.3.0is absent on origin.bash test/run.shpassed all 18 test files locally. The exact head's CI is also green, including the self-guards, release exercise, shellcheck/actionlint, and the yq-required cases that skipped locally because yq is unavailable.I could not independently query the archived private scratch repository with this credential (the repository endpoint returns 404), so I relied on the committed drill record for the six live probe results and observed archive state. The post-merge tag, release-body, re-arm, guard, and action-ref checks remain triage-owned as #160 specifies.
Verdict: approve
Head
30b49c4ade4cdb64d3440566fa526284a6461fa8against #160 (Refs, not Closes — correct for post-merge AC).Spec / acceptance (pre-merge)
VERSION→0.3.0(minor)0.2.1-dev→0.3.0d6b175f: 12 fragments consumed (130 131 134 135 137 139 144 145 149 151 154 159); onlychangelog.d/README.mdremains###headings under## 0.3.0; 12 bulletsbin/changelog-assemble 0.3.0fromd6b175f^matches the PR section byte-for-byte; CIchangelog-assembled: "section '0.3.0' … assembly of the 12 fragment(s) consumed at the merge base (a7aedfd)"CEREMONY_SELF_REF→0.3.0both carriersrelease.ymlL132,labels.ymlL28; localself-ref-checkgreen; CI self-guards greendrills/0.3.0.mdlive recordclaude-bot-andresmgsl/ceremony@drill/0.3.0+ pin rewrite to5f0686b…under Candidate-ref deviation; scratchclaude-bot-andresmgsl/ceremony-drill-0.3.0with observedarchived: true; all six probes with run ids; refusals create nothing0.3.0branch on ceremonygit ls-remote --headsempty for0.3.0(fork drill branch only, as doctrine requires)Refs #160releaselabelPost-merge criteria (tag, re-arm, action pins) are triage's after merge — correctly not claimed here.
Verify
test,self-guards(armed / monotonic / assembled / drill-recorded / runner-isolated),action-exercise,docs-sync-exercise, release-exercise step-replay + fixture-chain — all success.self-ref-check,changelog-assembled(baseorigin/main),drill-recorded,changelog-armed— all exit 0. Related unit suites viatest/run.shgreen (incl. self-ref / assemble / assembled / armed / drill-recorded).drill/0.3.0at64af424rewrites both carriers to candidate5f0686b. Scratch repo is private to the author — 404 from this identity; record's disposal claim matches #135 doctrine and prior 0.2.0 shape.Non-blocking
159.mdstill omits(#159)in the bullet text, so the published section has no#159cite. Faithful assembly of what was already on main — not a release-PR defect. Worth a follow-up fragment style note, not a block.Nothing blocking. Approve.
🔎 reviewing head
30b49c4adeApprove head
30b49c4ade4cdb64d3440566fa526284a6461fa8.Reviewed against #160's acceptance criteria (post-merge ones are triage's by design —
Refs #160is the correct shape here, per #151's rule):Verified locally in a detached worktree at head:
VERSION=0.3.0;changelog.d/holds onlyREADME.md— all twelve fragments consumed, deletions and section in the assemble commitd6b175f.changelog-assembledreplayed by hand (CHANGELOG_ASSEMBLED_BASE=origin/main): section0.3.0is byte-for-byte the assembly of the 12 fragments at merge basea7aedfd. Section is flat (#157 D1) — all entries top-level bullets.CEREMONY_SELF_REF=0.3.0in both carriers (release.yml:132,labels.yml:28); no0.2.0pin remains anywhere in either workflow.test/self-ref.test.sh: 12/12 green, including the real-tree guard.drills/0.3.0.mdnon-blank; names the fork ref and rewritten pin under their own heading ("Candidate-ref deviation":claude-bot-andresmgsl/ceremony@drill/0.3.0at64af424, pin5f0686b), names the scratch repoclaude-bot-andresmgsl/ceremony-drill-0.3.0with the disposal its author observed (archived, delete operator's per #135). All six probes recorded, every refusal creating nothing.0.3.0onheavy-duty/ceremony—git ls-remote --heads origin 0.3.0empty as of this review.releaselabel present; nochangelog.d/fragment for this PR (structural exemption).Fork evidence read firsthand:
drill/0.3.0=64af424063741737b26bebe2c620b50aa585b690, sole parent exactly the candidate5f0686b3950d6adc699e750ef5858a20eb084f6f, single commit rewriting both carriers from0.3.0to that SHA — matches the record's claim.CI green on this head:
test,self-guards,action-exercise,docs-sync-exercise,labels, bothrelease-exercisestep-replays andfixture-chain.What I could not verify (environment gaps, named per REVIEWER.md): this box has no
node/npm, so thepackage-jsoncases in the unit suites fail here. I ran the fulltest/run.shon both head and anorigin/mainbaseline worktree: identical 63-case failure sets — pre-existing env gaps, zero regression from this PR; CI's greentestjob covers them. The drill's scratch repo is private to the author (404 from this identity); I relied on the record's disposal claim (consistent with #135 doctrine and the 0.2.0 shape) plus firsthand verification of the fork ref above.Non-blocking: banked
159.mdhad no(#159)cite in its bullet, so the published section lacks one — faithful assembly of what was on main, not a release-PR defect (grok flagged the same). A fragment-style follow-up, not a block.Nothing blocking. Approve.
Round summary — handing off
What shipped — the 0.3.0 release tree, four commits:
60e4f09bumpsVERSIONfrom0.2.1-devto0.3.0(minor per #157 D5 — #159 changes the contract a consumer's CI runs against);d6b175fassembles the## 0.3.0section from all twelve banked fragments (130 131 134 135 137 139 144 145 149 151 154 159) and deletes them in the same commit, leavingchangelog.d/with only itsREADME.md;5f0686bstampsCEREMONY_SELF_REFto0.3.0in both carriers (release.yml,labels.yml);30b49c4records the live drill indrills/0.3.0.md. Nochangelog.d/fragment for this PR — the release PR's structural exemption.Refs #160, notCloses: the post-merge criteria are triage's to verify, so triage owns the close (#151's rule).Rounds — one. The panel (codex, grok, kimi) reviewed head
30b49c4and all three approved with no changes requested, so the approved head is the only head this PR has ever had. Two reviewers noted the same non-blocking point: banked159.md's bullet carries no(#159)cite, so the published section lacks one — faithful assembly of what was already onmain, a fragment-style follow-up for triage, not a release-PR defect.Verified
## 0.3.0section is byte-for-byte the assembler's output over the twelve fragments at merge basea7aedfd, and flat (#157 D1) — replayed by me and independently by all three reviewers;changelog-assembledgreen in CI.CEREMONY_SELF_REF=0.3.0in both carriers, no0.2.0pin remains;self-ref-checkgreen locally and in CI'sself-guards.30b49c4—test,self-guards(armed / monotonic / assembled / drill-recorded / runner-isolated),action-exercise,docs-sync-exercise, bothrelease-exercisestep-replays andfixture-chain,labels / reconcile.drills/0.3.0.md): all six probes on a disposable private scratch repo (claude-bot-andresmgsl/ceremony-drill-0.3.0), each with its run id — mislabeled ordinary PR no-ops green; bare-version PR withoutreleaserefuses creating nothing; merge-door ceremony produces one release with tag = merge commit and re-armsmainto0.3.1-dev; re-running the completed ceremony refuses; a manual matching tag publishes; a mismatched tag refuses. The candidate-ref deviation (fork refclaude-bot-andresmgsl/ceremony@drill/0.3.0at64af424, pins rewritten to candidate5f0686b) is recorded under its own heading; kimi verified the fork ref firsthand. Scratch repo archived (observedarchived: true); the delete is the operator's (#135).0.3.0ever existed onheavy-duty/ceremony—git ls-remote --heads origin 0.3.0empty before and after the drill, re-checked by the reviewers.Post-merge residue — #160's post-merge criteria, triage's to verify on
mainafter the merge: tag0.3.0on the merge commit with the release body## 0.3.0's section verbatim;mainre-armed to0.3.1-devwithchangelog.d/holding onlyREADME.md;changelog-armedgreen on the bare tree and after the-devbump;actions/changelog-armed@0.3.0andactions/changelog-assembled@0.3.0resolving at the tag. Plus the non-blocking fragment-style note above (issue cites in banked bullets), which is triage's to queue or drop.Round converged: whole panel approved the current head, zero blockers, CI green, drill recorded. Handing off — requesting @danmt's review and setting
state:needs-human. The remaining move is the human's merge.closed on behalf of #164
Pull request closed