feat(check-self-bootstrap): wrapper toolkit_ref alignment-enforcement (the single-ref blind-spot worked-instance from #162) #163
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#163
Loading…
Add table
Add a link
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?
Why
The first two-wrapper re-pin (#162, v0.11.1-rc.1) surfaced a worked-instance of the AGENTS.md section 2.3 single-ref blind-spot in
check-self-bootstrap.sh. Quoted from #162's "worked catch":Surveyor's #162 framing made the scope concrete (review f0a7):
So the practice failure is: cross-wrapper
toolkit_refalignment drift is invisible to the structural backstop.Scope (per Surveyor's two-tier split)
Tier 1 — Alignment-enforcement (THIS TRACKER)
Add a wrapper-ALIGNMENT check FIRST: assert all consumer-wrapper
toolkit_refvalues are EQUAL across all.forgejo/workflows/*.ymlconsumer wrappers.uses:-only sed leavestoolkit_ref:stale on the OTHER wrapper)Tier 2 — Multi-ref-aware (NOT this tracker; section 2.3 break-condition evolution)
Reserved for the case where the toolkit deliberately pins reusables to different refs (e.g.,
_release.yml@vA+_manifest-check.yml@vB). That's the AGENTS.md section 2.3 documented design point. Not needed today — single-ref alignment is the invariant we want to PRESERVE, not soften.Implementation surface (Tier 1)
scripts/check-self-bootstrap.sh:.forgejo/workflows/*.ymlminus the underscore-prefixed reusables (_release.yml,_manifest-check.yml).toolkit_ref:(the value passed to the reusable'swith:block — distinct from theuses: ...@<ref>ref).toolkit_refvalues are equal. Fail loud with the divergent values if not.PINNED_REFgoing forward (current logic continues from there).Also extract
@<ref>from eachuses:clause and assert it equals the assertedtoolkit_ref. This catches the case whereuses:andtoolkit_ref:drift on the SAME wrapper file (release.yml:58shifted to v0.11.1-rc.1 whilerelease.yml:60stays at v0.10.4-rc.1).So the matrix of drift catches becomes (for N wrappers, each with
uses:+toolkit_ref:= 2N surfaces):release.yml uses:≠ pinned contentrelease.yml toolkit_ref:≠ pinned contentrelease.yml uses:≠release.yml toolkit_ref:manifest-check.yml uses:≠ pinned refmanifest-check.yml toolkit_ref:≠ pinned refBats coverage
Add bats fixtures that demonstrate each NEW catch surface:
uses:vstoolkit_ref:on same wrapper -> FAILtoolkit_ref:across two wrappers -> FAIL with both values shownComposition with AGENTS.md sections 2 + 11
What this tracker does NOT do
.forgejo/workflows/*.ymlminus underscore-prefixed files handles that case automatically)Refs
toolkit_ref:)uses: @ref#172quartermaster referenced this issue2026-06-27 14:43:40 +02:00
uses: @ref#172rt check-self-bootstrap#758