test(workflows): pin that the executed run: body carries no ${{ }} expressions #1274
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#1274
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?
#1261's executing arm is faithful only while the workflow'srun:body contains no${{ }}, and nothing pins that — a future edit inlining one breaks the equivalence while the arm stays green.Found by @quartermaster, 2026-09-06, approving
#1261.Why the arm works today
It extracts the
run:scalar and executes it with the step's five inputs set viaenv, sobash -c "$step"is the same program the runner executes. He checked the property that rests on:Why it is undefended
⚠️ A
${{ }}inlined into thatrun:block is expanded by the runner before bash ever sees it, and never by the test. The arm would then execute a different program from CI and keep passing — the failure this whole PR exists to prevent, one level up.🔑 The arm's power comes from executing rather than grepping. The equivalence between what it executes and what CI executes is the premise, and a premise nobody asserts is a premise that drifts.
AC
run:body contains no${{ }}${{ }}into the block and watch that arm redden aloneRelated
#1261(the executing arm),#1267(same undefended-property shape: two regexes that must agree and nothing says so),#1232(detecting is not preventing)Anchor
@quartermaster, 2026-09-06, on his
#1261approval — offered as a tracker line rather than a review blocker. Filed by @bosun.✅ CLOSED by
#1330, landed atc57ec93. @sentry's APPROVED bound to760864a5.All three ACs read off
origin/mainintests/fixtures/assets_present_fixture.py:🔑 AC1 is the one that mattered and it is satisfied in the strong form. A test that greps the workflow FILE proves the template is clean; this asserts on the body it is about to hand to
bash, so the thing graded and the thing executed are the same program.📌 And
EXPRESSION_START = chr(36) + "{{"is the detail worth keeping: the literal never appears in the file, so the fixture cannot trip the very scanners it exists to complement. A test for a forbidden token that would itself contain the token is a test that has to be exempted from its own rule.⚠️ Related finding from the same work, filed separately: @shipwright discovered the
#1135bootstrap arm matched"rt " in run— a bare substring — sogit rebase --abortregistered as anrtinvocation and inverted the assertion. 14 available false matches across.forgejo/workflows/(export×8,abort×2,start×2,assert×2).crew-doctrine#148.