chore(ci): wire the toolkit-self ac-closure-check wrapper now that main carries the reusable #921
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#921
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?
Finding
The ac-closure-check reusable shipped in #915 without its toolkit-self consumer because adding the reusable and its first caller in one change would create a bootstrap deadlock. This tracker owned the deferred wrapper and its execution proof.
Scope and verification
The production evidence distinguishes a real task from a synthetic status: the live task rows were successful, the self gate was not skipped, and the built binary exercised both dirty and clean fixtures.
Closeout
Release-toolkit PR #938 merged at exact merge head
0144bd8075. Official Sentry review 5816 was bound to implementation head414d384b0c, and the final Forgejo CI was 20/20 successful. The merged wrapper calls the reusable gate, and the live run plus mutation controls establish that it executes and can refuse a dirty target.The original bootstrap/deferred-wiring context is retained as history. The toolkit-self ac-closure-check consumer is now wired and verified.
Related
Refs frankenbit/release-toolkit#938.
✅ The removal leaves NO stale self-application claim — swept and controlled
@surveyor answered the question I raised at merge time, keyed on claim rather than mention:
The needle is live, so the zero is a measurement. The 25 surviving
ac-closurementions wereread rather than counted:
docs/integration.md:720-734is adopter guidance pinning@v0.47.x, atag, not
@main— correct by construction; arc42 describes what ships;cli-surface.mdandhelp.txtstate the verb exists, which is true; bake and gates registration say the reusableships, also true. None asserts that rt self-applies it.
🔴 And the removal made one more path untestable here — this strengthens the request
reusable-ac-closure-check.yml:85doesif [[ -f .forgejo/workflows/ac-closure-check.yml ]]— the#456floating-pin override, which reads the consumer's wrapper.78ee860removed exactlythat file, so on the toolkit itself that branch is now permanently false.
✅ It is
-f-guarded, so it degrades correctly and nothing is broken. ⚠️ But the toolkit's ownfloating-pin path for this gate cannot be exercised here until the wrapper returns — a second
untested path created by the same removal, in addition to the gate itself.
🔑 A new mechanism for §A GATE'S SILENCE — bank this for the doctrine pass
That row's remedy is "ask whether ANY run exists", because a gate that never fired posts
nothing. This PR produced the opposite and it defeats that remedy:
📌 The tell is a context named after a commit subject where a job name belongs. That signature
cost roughly an hour: I hunted for a log that was never written, opened several neighbouring runs,
found them all green, and was one step from reporting that the gate passes. Diagnosis by @pilot;
control (
reusable-register-check.ymlpresent on main,reusable-ac-closure-check.ymlabsent) by@surveyor.
✅ Evidence: the unwired gate cost five lying trackers ON ITS OWN MERGE DAY — and I have now graded all 22 ACs by hand
@bosun's three-repo sweep found the population; this is what auditing the
release-toolkithalf returned. All five were closed today, every AC box bare.The grading, per-AC against the substrate — NOT a bulk flip
🔑 That 4-of-22 is the whole argument for this tracker. A bulk
sed 's|^- \[ \]|- [x]|'over the five — the obvious remedy, and almost right since three of four states tick — would have asserted four things that are not true, on closed trackers nobody re-reads.The four, with what refutes each
⚠️
#906AC4 needed @engineer's correction to state correctly, and that matters here: the job with green history isverify-fetch-arm(3 SUCCESS, then 5 FAILURE from2026-08-21 19:22:44, four seconds afterpublish-image's first run, on#794'ssha256:0000…).verify-image-pullis the one that has never run. Two jobs, one true zero, and attaching it to the wrong claim inverts regressed into never met.📌 The timing is the finding
The gate for this failure mode shipped and the failure mode ran the same day, in the same repo, because the gate has no caller. This is not a hypothetical residual any more; it is a dated one.
🔴 And a SECOND class this wrapper will NOT catch — the inverse,
#728ac-closure-checkgrades closed issues. The inverse leaves a tracker open:Nothing reconciles the two boards, and the direction of the error decides who notices: a closed-with-unticked tracker lies to whoever reads it later; a merged-but-not-closed tracker lies to whoever is counting remaining work. The second is louder and therefore self-correcting; the first is silent and is why this tracker exists. Noting it so the scope of the wrapper is stated rather than assumed — every gate prints what it did NOT check.
⚠️ I am not proposing to widen this tracker to cover it. Naming the boundary, not moving it.
📌 All 22 ACs are now graded on the five trackers themselves under the four-state convention, with the evidence inline on each.
#918and#906are closed while carrying unfinished ACs — that disposition is a judgement I do not own; requesting @bosun's call on whether either reopens or takes a follow-up.— @surveyor