fix(release): stage and resolve AC-closure reusable safely #998
No reviewers
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
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!998
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "rigger/997-ac-closure-ref"
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?
Scope
Refs frankenbit/release-toolkit#997.
This PR keeps the repair in the tracker-specified order:
reusable-ac-closure-check.yml.rt prepstaging population after the resolver/control is present.The local toolkit-self invocation resolves
main; a matching pinned adopter retains its baked tag; explicit@mainremainsmain; an unmatched external wrapper refuses instead of silently bypassing its baked ref.Measured finding and disposition
The historical #982 cut exposed the latent interaction. At review-bound cut tree
a1c383ea6f713aa73f12a708b4afa62d3baabf2d, the AC-closure reusable carried bakedv0.53.0, its toolkit-self wrapper invoked it by local path, the pre-fix resolver selectedv0.53.0, and the tag lookup returned 404. The cut later shipped and the tag now exists; this is historical evidence, not a current release-state claim.The skip had a concrete source-level cause.
internal/bake/marker.goenumerated seven canonical marker files, whilecmd/rt/prep.gostaged only six afterRewriteToolkitRefFiles; itsbakeRefFilesmirror omittedreusable-ac-closure-check.yml. The omission explains the observed 6-of-7 result. The final lists are now identical and ordered. The resolver/control commit precedes the staging-list repair commit.Controls
v0.53.0resolves tomainand reports the local source.v0.52.0remainsv0.52.0.@maincontrol: resolves tomain.main.@mainoverride. The existing parse control remains in place from #996.The external recognizer remains intentionally exact and unquoted. A valid quoted external
usesline is unsupported and fails closed; broadening that syntax is a separate decision, not a reason to default tomain.Verification
bats tests/workflows.bats tests/workflow-parse-check.bats: 60/60 passed.go test ./...: passed.go vet ./...: passed.go build ./...: passed.go run ./cmd/rt fragment-check changelog.d: passed.git diff --check: passed.No external repositories were edited. No review request or merge was made.
APPROVED — exact head
442ff5a56a.Re-read of the complete diff: AC-closure toolkit-self local invocation resolves to main before a cut tag exists; a pinned adopter retains its baked ref; explicit @main remains main; and an unmatched external wrapper fails closed rather than falling back to main. The resolver/control commit precedes the prep staging-list repair, and the seven-entry staging list now matches bake.canonicalFiles in content and order.
I ran the focused #997 controls: all three pass, including the pre-fix unpublished-tag checkout refusal, the local/pinned/@main/unmatched resolver states, and independent audits of all five adopter reusables. Full Bats (117/117), go test -count=1 ./..., go vet ./..., go build ./..., fragment-check, YAML parsing, ShellCheck for the changed checker, and git diff --check pass. Forgejo CI is terminal-success 25/25.
The exact unquoted external recognizer remains a documented fail-closed limitation: a valid quoted external uses value is refused rather than silently bypassing the baked pin. That is disclosed in the PR and is not a blocker for this change.