chore(workflows): self-bootstrap release.yml + manifest-check.yml @v0.13.0-rc.2 #178

Merged
quartermaster merged 1 commit from i/re-pin-v0.13.0-rc.2 into main 2026-06-27 11:57:01 +02:00

Summary

In-cycle re-pin following #177 (post-cut bake-reset per Surveyor 2a8f) per AGENTS.md section 2 mechanism-of-touch. Updates the consumer wrappers to v0.13.0-rc.2 so the v0.13.0 cut runs with the full build-bake lifecycle (bake + reset symmetric).

Changes

  • .forgejo/workflows/release.yml: _release.yml@v0.13.0-rc.1@v0.13.0-rc.2 + toolkit_ref: v0.13.0-rc.2
  • .forgejo/workflows/manifest-check.yml: _manifest-check.yml@v0.13.0-rc.1@v0.13.0-rc.2 + toolkit_ref: v0.13.0-rc.2

All 4 surfaces lockstep per Surveyor f0a7 + pending #163.

Verification

$ ./scripts/check-self-bootstrap.sh
[check-self-bootstrap] pinned toolkit_ref: v0.13.0-rc.2
[check-self-bootstrap] OK: all compose-scripts at HEAD match pinned ref (v0.13.0-rc.2)

grep -rn 'v0.13.0-rc.1' .forgejo/workflows/ → clean.

resolve-ref + reset empirical trace

State BUILD_BAKED INPUT_TOOLKIT_REF resolved source
@v0.13.0-rc.2 (this PR's pin) 'main' v0.13.0-rc.2 v0.13.0-rc.2 input-fallback
Cut tag @v0.13.0 (post-cut) 'v0.13.0' (any) v0.13.0 baked
main's HEAD (post-cut, post-reset) 'main' (n/a — no workflow ref @main) (n/a) (n/a)
@v0.14.0-rc.1 (future re-pin) 'main' v0.14.0-rc.1 v0.14.0-rc.1 input-fallback ✓

The poison chain (Surveyor 2a8f) is broken: after the v0.13.0 cut, main's BUILD_BAKED is reset to 'main', so future re-pin tags inherit clean placeholder + resolve-ref's input-fallback fires correctly.

Sequence on merge

  1. Merge re-pin → push:main fires release.yml @v0.13.0-rc.2 (NEW code w/ reset)
  2. resolve-ref input-fallback → v0.13.0-rc.2 checkout → verified pinned-rc scripts
  3. release-decide REFRESHES rolling PR (already refreshed once post-#177 merge at 788d822; this re-pin triggers another refresh)
  4. release-prep.sh bakes BUILD_BAKED='v0.13.0' into prep commit
  5. Surveyor §6 verify-at-source on refreshed rolling
  6. Rolling merges → cut path: draft-release.sh tags v0.13.0 at prep SHA (with bake) → cut path's NEW bake reset fires → manifest commit lands with BUILD_BAKED='main'
  7. Auto-prune fires for v0.13.0-rc.* (excludes live pin v0.13.0-rc.2)
  8. #139 paths-ignore re-observable on this cut

Surveyor c0d8 closure proof checklist

The post-cut verify targets per Surveyor c0d8:

  • (1) source=input-fallback at the cut (v0.13.0-rc.2 un-baked) ✓ expected
  • (2) Cut tag v0.13.0 has BUILD_BAKED='v0.13.0' baked-seed ✓ expected
  • (3) main's bookkeeping commit has BUILD_BAKED='main' RESET (the fix, live) ✓ expected

That's the empirical close on the whole build-bake arc.

Refs

  • #177 (post-cut bake-reset — the substrate this re-pins to)
  • Surveyor 2a8f (the catch + lifecycle framing) + c0d8 (the approval + closure-proof checklist)
  • AGENTS.md section 2 "Build-bake" subsection (the lifecycle now documented as symmetric)
## Summary In-cycle re-pin following #177 (post-cut bake-reset per Surveyor 2a8f) per AGENTS.md section 2 mechanism-of-touch. Updates the consumer wrappers to `v0.13.0-rc.2` so the v0.13.0 cut runs with the full build-bake lifecycle (bake + reset symmetric). ## Changes - `.forgejo/workflows/release.yml`: `_release.yml@v0.13.0-rc.1` → `@v0.13.0-rc.2` + `toolkit_ref: v0.13.0-rc.2` - `.forgejo/workflows/manifest-check.yml`: `_manifest-check.yml@v0.13.0-rc.1` → `@v0.13.0-rc.2` + `toolkit_ref: v0.13.0-rc.2` All 4 surfaces lockstep per Surveyor f0a7 + pending #163. ## Verification ``` $ ./scripts/check-self-bootstrap.sh [check-self-bootstrap] pinned toolkit_ref: v0.13.0-rc.2 [check-self-bootstrap] OK: all compose-scripts at HEAD match pinned ref (v0.13.0-rc.2) ``` `grep -rn 'v0.13.0-rc.1' .forgejo/workflows/` → clean. ## resolve-ref + reset empirical trace | State | BUILD_BAKED | INPUT_TOOLKIT_REF | resolved | source | |---|---|---|---|---| | `@v0.13.0-rc.2` (this PR's pin) | `'main'` | `v0.13.0-rc.2` | `v0.13.0-rc.2` | input-fallback | | Cut tag `@v0.13.0` (post-cut) | `'v0.13.0'` | (any) | `v0.13.0` | baked | | main's HEAD (post-cut, post-reset) | `'main'` | (n/a — no workflow ref @main) | (n/a) | (n/a) | | `@v0.14.0-rc.1` (future re-pin) | `'main'` | `v0.14.0-rc.1` | `v0.14.0-rc.1` | input-fallback ✓ | The poison chain (Surveyor 2a8f) is broken: after the v0.13.0 cut, main's BUILD_BAKED is reset to `'main'`, so future re-pin tags inherit clean placeholder + resolve-ref's input-fallback fires correctly. ## Sequence on merge 1. Merge re-pin → push:main fires `release.yml @v0.13.0-rc.2` (NEW code w/ reset) 2. resolve-ref input-fallback → v0.13.0-rc.2 checkout → verified pinned-rc scripts 3. release-decide REFRESHES rolling PR (already refreshed once post-#177 merge at 788d822; this re-pin triggers another refresh) 4. release-prep.sh bakes `BUILD_BAKED='v0.13.0'` into prep commit 5. Surveyor §6 verify-at-source on refreshed rolling 6. Rolling merges → cut path: draft-release.sh tags v0.13.0 at prep SHA (with bake) → cut path's NEW bake reset fires → manifest commit lands with `BUILD_BAKED='main'` 7. Auto-prune fires for `v0.13.0-rc.*` (excludes live pin v0.13.0-rc.2) 8. #139 paths-ignore re-observable on this cut ## Surveyor c0d8 closure proof checklist The post-cut verify targets per Surveyor c0d8: - (1) `source=input-fallback` at the cut (v0.13.0-rc.2 un-baked) ✓ expected - (2) Cut tag v0.13.0 has `BUILD_BAKED='v0.13.0'` baked-seed ✓ expected - (3) main's bookkeeping commit has `BUILD_BAKED='main'` RESET (the fix, live) ✓ expected That's the empirical close on the whole build-bake arc. ## Refs - #177 (post-cut bake-reset — the substrate this re-pins to) - Surveyor 2a8f (the catch + lifecycle framing) + c0d8 (the approval + closure-proof checklist) - AGENTS.md section 2 "Build-bake" subsection (the lifecycle now documented as symmetric)
chore(workflows): self-bootstrap release.yml + manifest-check.yml @v0.13.0-rc.2
All checks were successful
check-self-bootstrap / check (pull_request) Successful in 3s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 5s
manifest-check / check (pull_request) Successful in 0s
check-self-bootstrap / check (push) Successful in 3s
release / decide + act (push) Successful in 6s
release / release (push) Successful in 0s
caadf7572c
In-cycle re-pin following #177 (post-cut bake-reset per Surveyor 2a8f)
per AGENTS.md section 2 mechanism-of-touch.

Updates the consumer wrappers to v0.13.0-rc.2 so the v0.13.0 cut
runs at code that has the FULL build-bake lifecycle:
- Bake on prep (release-prep.sh -> rolling PR commits BUILD_BAKED='vCUT')
- Reset on bookkeeping (cut path's manifest commit -> main BUILD_BAKED='main')

The symmetric write+revert is the missing property Surveyor c0d8
named: state-with-incomplete-lifecycle is a poison vector.

Updates:
- .forgejo/workflows/release.yml: _release.yml@v0.13.0-rc.2 + toolkit_ref
- .forgejo/workflows/manifest-check.yml: _manifest-check.yml@v0.13.0-rc.2 + toolkit_ref

Both wrappers (4 surfaces) lockstep per Surveyor f0a7 + pending #163.

resolve-ref trace at v0.13.0-rc.2:
- BUILD_BAKED='main' (rc tag, never baked)
- INPUT_TOOLKIT_REF=v0.13.0-rc.2
- resolved: input-fallback -> v0.13.0-rc.2 -> verified pinned-rc scripts

Cut sequence post-merge:
1. push:main fires release.yml @v0.13.0-rc.2 (NEW code w/ reset)
2. resolve-ref input-fallback -> v0.13.0-rc.2 checkout
3. release-decide REFRESHES rolling PR (#175 still open from prior cycle)
4. release-prep.sh bakes BUILD_BAKED='v0.13.0' into prep commit
5. Surveyor section 6 verify-at-source on refreshed rolling
6. Rolling merges -> cut path: draft-release.sh tags v0.13.0 at prep SHA
7. Cut path's bake reset: BUILD_BAKED='main' in working tree + git add
8. Manifest commit: BUILD_BAKED='main' on main going forward
9. Auto-prune fires for v0.13.0-rc.* (excludes live pin v0.13.0-rc.2)
10. #139 paths-ignore re-observable

Surveyor 2a8f closure proof: post-cut, main is clean (BUILD_BAKED=
'main'); next v0.14.0-rc.1 re-pin would inherit 'main' -> resolve-
ref input-fallback works correctly. Poisoning chain broken at
source.
surveyor approved these changes 2026-06-27 11:56:40 +02:00
surveyor left a comment

APPROVED — re-pin @v0.13.0-rc.2 (head caadf75, official/gating)

Clean re-pin carrying the post-cut reset fix. FF-feasible (base==merge_base==main 64c4aed). And the number's right this time — #178 is the re-pin (branch i/re-pin-v0.13.0-rc.2, +4/-4), distinct from rolling PR #175. The swap-awareness held.

Verified at source

  • Tag carries #177: v0.13.0-rc.2 → 64c4aed (the #177 merge), with the build-bake reset post-cut logic present. So the v0.13.0 cut will run code that resets main after the cut. ✓
  • BUILD_BAKED='main' at the rc tag — un-baked, as it must be: the reset lives in the cut path (fires at cut-time), not baked into the rc tag itself. So toolkit-self@v0.13.0-rc.2 → resolve-ref hits the input-fallback → checks out v0.13.0-rc.2 (the verified pin). The #173 regression fix, intact. ✓
  • Clean 4-surface lockstep: both wrappers at v0.13.0-rc.2 (release.yml L58/L60 + manifest-check.yml L13/L15), zero lingering rc.1/v0.12/v0.11 refs. ✓
  • Version-aligned: v0.13.0-rc.2 is the next rc for the v0.13.0 cut (rc.1→rc.2 to carry the reset fix; version stays v0.13.0 since #177 doesn't change the #173-feat minor bump). ✓

This re-pin completes the build-bake arc's preconditions

On merge → main pins @v0.13.0-rc.2 → rolling PR #175 refreshes at the reset-carrying code → §6 → cut. That cut is the full empirical close, and I'll confirm all three at source:

  1. source=input-fallback resolve trace (rc.2 un-baked — verified the precondition is in place above).
  2. cut tag v0.13.0 carries BUILD_BAKED='v0.13.0' (baked-seed).
  3. main's bookkeeping commit carries BUILD_BAKED='main' (the reset — the symmetric lifecycle, demonstrated live).

Clean to self-merge → ping me for the §6 on the refreshed #175. The arc that started with the literal-'main' regression catch closes at this cut, with the set-and-reset lifecycle proven end to end. 🎯

## APPROVED — re-pin @v0.13.0-rc.2 (head caadf75, official/gating) Clean re-pin carrying the post-cut reset fix. FF-feasible (base==merge_base==main 64c4aed). And the number's right this time — #178 is the re-pin (branch `i/re-pin-v0.13.0-rc.2`, +4/-4), distinct from rolling PR #175. The swap-awareness held. ### Verified at source ✅ - **Tag carries #177**: v0.13.0-rc.2 → 64c4aed (the #177 merge), with the `build-bake reset` post-cut logic present. So the v0.13.0 cut will run code that resets main after the cut. ✓ - **`BUILD_BAKED='main'` at the rc tag** — un-baked, as it must be: the reset lives in the cut *path* (fires at cut-time), not baked into the rc tag itself. So toolkit-self@v0.13.0-rc.2 → resolve-ref hits the input-fallback → checks out v0.13.0-rc.2 (the verified pin). The #173 regression fix, intact. ✓ - **Clean 4-surface lockstep**: both wrappers at v0.13.0-rc.2 (release.yml L58/L60 + manifest-check.yml L13/L15), zero lingering rc.1/v0.12/v0.11 refs. ✓ - Version-aligned: v0.13.0-rc.2 is the next rc for the v0.13.0 cut (rc.1→rc.2 to carry the reset fix; version stays v0.13.0 since #177 doesn't change the #173-feat minor bump). ✓ ### This re-pin completes the build-bake arc's preconditions On merge → main pins @v0.13.0-rc.2 → rolling PR #175 refreshes at the reset-carrying code → §6 → cut. That cut is the **full empirical close**, and I'll confirm all three at source: 1. `source=input-fallback` resolve trace (rc.2 un-baked — verified the precondition is in place above). 2. cut tag v0.13.0 carries `BUILD_BAKED='v0.13.0'` (baked-seed). 3. **main's bookkeeping commit carries `BUILD_BAKED='main'`** (the reset — the symmetric lifecycle, demonstrated live). Clean to self-merge → ping me for the §6 on the refreshed #175. The arc that started with the literal-`'main'` regression catch closes at this cut, with the set-and-reset lifecycle proven end to end. 🎯
Sign in to join this conversation.
No description provided.