chore(release): v0.6.1 #94

Merged
alex merged 1 commit from release-prep/rolling into main 2026-06-26 10:18:57 +02:00

Fixed

scripts/release-decide.sh: Layer 2 cut-safeguard now uses head.label (the canonical "owner:branch-name" form) instead of head.ref for the rolling-branch check (closes #92). The v0.6.0 cut empirically falsified the head.ref-preserves assumption: Forgejo's default_delete_branch_after_merge: true replaces a closed PR's head.ref from the original branch name to refs/pull/N/head (the PR's internal ref) once the branch is deleted. The head.label field preserves across the lifecycle. Same retry-with-backoff logic from v0.5.1 (#86) — only the field choice changed.

tests/release-decide.bats: 2 new tests cover the head.label semantics (mutation-verified — substituting .head.ref back makes the PASS test red, confirming the test discriminates). The PASS case demonstrates head.ref="refs/pull/N/head" + head.label="owner:release-prep/rolling" → mode=cut (the v0.6.0 scenario); the FAIL case demonstrates head.label pointing at a non-rolling branch → mode=update fall-through (the safeguard's protective behavior).

AGENTS.md §8 gains a 5th empirical instance (external-system lifecycle behavior: field values can change across system-state transitions like merge / delete / archive). n=5 promotes the axis to a named project pattern per the empirical-promotion criterion — substrate-state-care for external claims. Future doc-claim PRs should explicitly call out which axis their claim depends on + how it was verified.

  • release-decide: Layer 2 uses head.label not head.ref (closes #92)
### Fixed **`scripts/release-decide.sh`**: Layer 2 cut-safeguard now uses `head.label` (the canonical `"owner:branch-name"` form) instead of `head.ref` for the rolling-branch check (closes [#92](https://git.frankenbit.de/frankenbit/release-toolkit/issues/92)). The v0.6.0 cut empirically falsified the `head.ref`-preserves assumption: Forgejo's `default_delete_branch_after_merge: true` replaces a closed PR's `head.ref` from the original branch name to `refs/pull/N/head` (the PR's internal ref) once the branch is deleted. The `head.label` field preserves across the lifecycle. Same retry-with-backoff logic from v0.5.1 (#86) — only the field choice changed. **`tests/release-decide.bats`**: 2 new tests cover the head.label semantics (mutation-verified — substituting `.head.ref` back makes the PASS test red, confirming the test discriminates). The PASS case demonstrates `head.ref="refs/pull/N/head"` + `head.label="owner:release-prep/rolling"` → mode=cut (the v0.6.0 scenario); the FAIL case demonstrates `head.label` pointing at a non-rolling branch → mode=update fall-through (the safeguard's protective behavior). **`AGENTS.md` §8** gains a 5th empirical instance (external-system lifecycle behavior: field values can change across system-state transitions like merge / delete / archive). **n=5 promotes the axis to a named project pattern** per the empirical-promotion criterion — *substrate-state-care for external claims*. Future doc-claim PRs should explicitly call out which axis their claim depends on + how it was verified. - **release-decide**: Layer 2 uses head.label not head.ref (closes #92)
forgejo-actions force-pushed release-prep/rolling from 9e04b3205e to 93da27f488
All checks were successful
release / decide + act (push) Successful in 5s
release / release (push) Successful in 0s
2026-06-26 10:07:59 +02:00
Compare
alex merged commit 93da27f488 into main 2026-06-26 10:18:57 +02:00
alex deleted branch release-prep/rolling 2026-06-26 10:18:57 +02:00
Sign in to join this conversation.
No description provided.