Uh oh!
There was an error while loading. Please reload this page.
fix(code-quality): make the per-job soft-fail overrides able to override (backend#1681) - #207
Conversation
…ide (backend#1681)
`action-pins-soft-fail` and `format-soft-fail` were combined with the global
`soft-fail` via OR:
SOFT_FAIL: ${{ (inputs.soft-fail || inputs.action-pins-soft-fail) && ... }}
`soft-fail` defaults to true, so the override could only ever make a job MORE
advisory -- never arm one. That is the opposite of its purpose: the input exists
so a repo can arm the supply-chain check while the rest of its suite stays
advisory during a migration.
Measured on origin/develop: 16 of 16 callers pass `action-pins-soft-fail: false`,
and docs, model-zoo, start-training and tracebloc-website carry a comment saying
"Armed 2026-08-06 (backend#1492) ... Independent of soft-fail above" while passing
no `soft-fail` at all -- so action-pins has been advisory in exactly the four repos
that believe it is armed. Three of the four are public.
Effect (truth table in the PR): the 12 repos that pass both inputs false are
unchanged; the 4 above flip from advisory to armed. Verified safe before shipping
with a byte-faithful replica of this job's own scanner, mutation-tested to report
violations and to skip commented lines: 0 unpinned refs across all 16 repos, so no
PR turns red on merge.
`format-soft-fail` gets the identical fix and is behaviour-neutral today (no caller
passes it; its default is true) -- it removes the same trap before it springs.
Verified: YAML parses, actionlint clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>Uh oh!
There was an error while loading. Please reload this page.
…s authoritative)
Bugbot: format-soft-fail defaults to false, so replacing (soft-fail ||
format-soft-fail) with the input alone flipped every soft-fail:true caller from
an advisory format job to a hard gate. Per this input's contract it is ADDITIVE
('advisory even when soft-fail is false'), unlike action-pins-soft-fail which 16
callers arm explicitly. Revert just the format job to the OR; action-pins keeps
the authoritative override that backend#1681 is actually about.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>LukasWodka
commented
Aug 11, 2026
Fixed — reverted the format job to the additive |
LukasWodka
commented
Aug 11, 2026
bugbot run |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 9fd9994. Configure here.
Uh oh!
There was an error while loading. Please reload this page.
What
action-pins-soft-failandformat-soft-failwere OR-ed with the globalsoft-fail:soft-faildefaults totrue, so the per-job override could only ever make a job more advisory — it could never arm one. That inverts its purpose: the input is separate precisely so a repo can arm the supply-chain check while the rest of its suite stays advisory during a migration.Why it matters
Measured on
origin/develop: 16 of 16 callers passaction-pins-soft-fail: false. Four of them —docs,model-zoo,start-training,tracebloc-website— pass nosoft-failat all, yet carry this comment:There is no
soft-fail"above" in those four files. Soaction-pinshas been advisory in exactly the four repos that believe it is armed, and three of those are public. (tracebloc-website's caller even has# soft-fail: false # flip once the backlog is clear (#1303)commented out two lines below the "Armed" claim.)Note this contradicts the old inline comment, which described the OR as deliberate ("both must be false"). Under those semantics the input is inert by construction — every caller passes
falseexpecting it to strengthen, never to weaken. I've taken the callers' intent as authoritative and rewritten the comment to match.Effect
falsesoft-faildefault,action-pins-soft-fail: falsesoft-fail: false, override defaultedOnly the intended row moves.
format-soft-failgets the identical fix and is behaviour-neutral today — no caller passes it and its default istrue— so it removes the same trap before it springs.Test plan / evidence
USES/SHA_PIN/TB_MAIN/DOCKER_DIGESTregexes, same comment-stripping) and mutation-tested it: on clean input → 0 findings; on injected@v4, a SHA-pinnedtracebloc/*ref, and an expression ref → 3 findings with the correct reasons; commented-out lines correctly skipped. Result across all 16 repos: 0 unpinned refs, so no PR turns red on merge.python3 -c "yaml.safe_load(...)"→ valid.actionlint .github/workflows/code-quality.yml→ clean.Found by the round-2 pipeline audit, backend#1681. Parent epic: backend#1680.
Note
Medium Risk
Changes CI gating for action-pins fleet-wide (four repos flip from advisory to blocking), but intended and verified clean on unpinned refs; wrong logic would have been worse for supply-chain enforcement.
Overview
Fixes action-pins so
action-pins-soft-fail: falseactually makes unpinned workflow refs fail the job instead of staying advisory whenever globalsoft-faildefaults to true.SOFT_FAILfor action-pins no longer ORs ininputs.soft-fail; onlyaction-pins-soft-failsets posture. That matches callers that arm the supply-chain check while the rest of the suite is still migration-advisory—four repos that believed the gate was “armed independent of soft-fail” were not.The format (black) job keeps
(soft-fail || format-soft-fail)with new comments: format’s override is additive/advisory by contract, so removing the OR would hard-gate every defaultsoft-fail: trueadopter. No runtime behavior change for format today.Reviewed by Cursor Bugbot for commit 9fd9994. Bugbot is set up for automated code reviews on this repo. Configure here.