You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
CI outage: all Rust workflows startup_failure since 2026-08-14 04:00 UTC — Actions allowlist blocks dtolnay/rust-toolchain, Swatinem/rust-cache, stefanzweifel/git-auto-commit-action #695
All Rust CI on this repo has been failing at startup since ~04:00 UTC today (2026-08-14). Nightly Build, CI, Auto Format and WFL Config Lint all return startup_failure ("This run likely failed because of a workflow file issue") with zero jobs created, on main and on every PR branch.
This is not a workflow-file bug. No workflow file changed. The cause is the repository/organization Actions allowlist, which is currently set to selected with only two permitted third-party patterns.
GET /orgs/WebFirstLanguage/actions/permissions returns the same selected + same two patterns, so this affects every repo in the org, not just this one.
A workflow that references any action outside that set is rejected before a runner is ever assigned, which is exactly the startup_failure signature.
anthropics/claude-code-action@v1 — passes via verified_allowed
✅ success
CodeQL / Copilot
GitHub-owned
✅ success
actions/checkout@v4, actions/setup-python@v4, actions/setup-node@v4, actions/{upload,download}-artifact@v4 are all fine — github_owned_allowed: true covers them regardless of the pinned @v5 pattern.
Bisection
Time (UTC)
SHA
CI
Auto Format
03:31:44
98446d10
✅ success
✅ success
04:04:49
82b3fc36
—
— (update-security-doc ❌ on the pre-bump action versions)
04:06:21
82b3fc36
—
— (update-security-doc ✅ after the versions matched the allowlist)
04:28:57
14475196
❌ startup_failure
❌ startup_failure
… every run since
❌
❌
Every run before ~04:00 is green; every run after is startup_failure. Nothing in ci.yml, nightly.yml, auto-fmt.yml or wfl-config-lint.yml was edited in that window — #689 touched only claude-code-review.yml and update-security-doc.yml. The update-security-doc.yml pair at 04:04/04:06 on the same SHA (fail, then pass once its actions matched @v5/@v8) is the clearest single datapoint that the allowlist, not the code, is the gate.
The last successful nightly is 2026-08-13 (run 31670830424, sha 6609c813). Today's nightly (31773451896, sha 98d11b9f) is the first red one.
Impact
No build, test, clippy, fmt, integration, DB, fuzz-compile, TestPrograms or config-lint coverage on main or on any PR since 04:00 UTC.
Probably affects Scriptorium, wfl-web, Scribe and the other org repos too, since the policy is org-level.
Fix
Someone with org-owner rights needs to do one of the following. Option A is the minimal, security-preserving fix — it keeps the allowlist and adds only what the repo already uses:
# Org level (this is the binding one — repos cannot loosen beyond it)
gh api -X PUT orgs/WebFirstLanguage/actions/permissions/selected-actions \
-F github_owned_allowed=true -F verified_allowed=true \
-f 'patterns_allowed[]=actions/checkout@v5' \
-f 'patterns_allowed[]=peter-evans/create-pull-request@v8' \
-f 'patterns_allowed[]=dtolnay/rust-toolchain@*' \
-f 'patterns_allowed[]=Swatinem/rust-cache@*' \
-f 'patterns_allowed[]=stefanzweifel/git-auto-commit-action@*'# Repo level (currently mirrors the org list)
gh api -X PUT repos/WebFirstLanguage/wfl/actions/permissions/selected-actions \
-F github_owned_allowed=true -F verified_allowed=true \
-f 'patterns_allowed[]=actions/checkout@v5' \
-f 'patterns_allowed[]=peter-evans/create-pull-request@v8' \
-f 'patterns_allowed[]=dtolnay/rust-toolchain@*' \
-f 'patterns_allowed[]=Swatinem/rust-cache@*' \
-f 'patterns_allowed[]=stefanzweifel/git-auto-commit-action@*'
Option B (revert to the pre-04:00 posture, less selective):
gh api -X PUT orgs/WebFirstLanguage/actions/permissions -f allowed_actions=all -f enabled_repositories=all
gh api -X PUT repos/WebFirstLanguage/wfl/actions/permissions -F enabled=true -f allowed_actions=all
Option C — if the tightened allowlist is intentional supply-chain hardening and should stay as-is, then the repo has to stop using non-allowlisted actions: replace dtolnay/rust-toolchain@stable with an inline rustup toolchain install step (24 call sites across 5 workflows), Swatinem/rust-cache@v2 with actions/cache@v4, and stefanzweifel/git-auto-commit-action@v5 with inline git commit/git push. That is a real refactor with Windows-runner implications in nightly.yml, and it should be a deliberate decision rather than an outage remedy. Option A now, Option C later, is the sensible ordering.
Verifying the fix
gh workflow run nightly.yml -R WebFirstLanguage/wfl --ref main
gh run list -R WebFirstLanguage/wfl --workflow nightly.yml --limit 1
A run that reaches queued/in_progress with jobs attached (rather than startup_failure with zero jobs) confirms it.
Deliberately not auto-fixed
Widening an Actions allowlist is a security-policy change, not a CI-mechanics change, so this pass reports it rather than applying it — an automated maintenance run should not quietly re-open a supply-chain gate that a human may have closed on purpose. If it was closed on purpose, Option C is the path and this issue can track it.
Suggested labels: ci, bug, P0.
Posted by the WFL repo warden (automated triage pass).
Summary
All Rust CI on this repo has been failing at startup since ~04:00 UTC today (2026-08-14). Nightly Build, CI, Auto Format and WFL Config Lint all return
startup_failure("This run likely failed because of a workflow file issue") with zero jobs created, onmainand on every PR branch.This is not a workflow-file bug. No workflow file changed. The cause is the repository/organization Actions allowlist, which is currently set to
selectedwith only two permitted third-party patterns.Evidence
Current policy — identical at repo and org level:
GET /orgs/WebFirstLanguage/actions/permissionsreturns the sameselected+ same two patterns, so this affects every repo in the org, not just this one.A workflow that references any action outside that set is rejected before a runner is ever assigned, which is exactly the
startup_failuresignature.The split lines up perfectly:
nightly.ymldtolnay/rust-toolchain@stable,Swatinem/rust-cache@v2ci.ymldtolnay/rust-toolchain@stable×7,Swatinem/rust-cache@v2×6auto-fmt.ymldtolnay/rust-toolchain@stable,stefanzweifel/git-auto-commit-action@v5wfl-config-lint.ymldtolnay/rust-toolchain@stableversioning.ymldtolnay/rust-toolchain@stableupdate-security-doc.ymlpeter-evans/create-pull-request@v8— allowlistedclaude.yml/claude-code-review.ymlanthropics/claude-code-action@v1— passes viaverified_allowedactions/checkout@v4,actions/setup-python@v4,actions/setup-node@v4,actions/{upload,download}-artifact@v4are all fine —github_owned_allowed: truecovers them regardless of the pinned@v5pattern.Bisection
98446d1082b3fc36update-security-doc❌ on the pre-bump action versions)82b3fc36update-security-doc✅ after the versions matched the allowlist)14475196Every run before ~04:00 is green; every run after is
startup_failure. Nothing inci.yml,nightly.yml,auto-fmt.ymlorwfl-config-lint.ymlwas edited in that window — #689 touched onlyclaude-code-review.ymlandupdate-security-doc.yml. Theupdate-security-doc.ymlpair at 04:04/04:06 on the same SHA (fail, then pass once its actions matched@v5/@v8) is the clearest single datapoint that the allowlist, not the code, is the gate.The last successful nightly is 2026-08-13 (run
31670830424, sha6609c813). Today's nightly (31773451896, sha98d11b9f) is the first red one.Impact
TestProgramsor config-lint coverage onmainor on any PR since 04:00 UTC.Scriptorium,wfl-web,Scribeand the other org repos too, since the policy is org-level.Fix
Someone with org-owner rights needs to do one of the following. Option A is the minimal, security-preserving fix — it keeps the allowlist and adds only what the repo already uses:
Option B (revert to the pre-04:00 posture, less selective):
Option C — if the tightened allowlist is intentional supply-chain hardening and should stay as-is, then the repo has to stop using non-allowlisted actions: replace
dtolnay/rust-toolchain@stablewith an inlinerustup toolchain installstep (24 call sites across 5 workflows),Swatinem/rust-cache@v2withactions/cache@v4, andstefanzweifel/git-auto-commit-action@v5with inlinegit commit/git push. That is a real refactor with Windows-runner implications innightly.yml, and it should be a deliberate decision rather than an outage remedy. Option A now, Option C later, is the sensible ordering.Verifying the fix
A run that reaches
queued/in_progresswith jobs attached (rather thanstartup_failurewith zero jobs) confirms it.Deliberately not auto-fixed
Widening an Actions allowlist is a security-policy change, not a CI-mechanics change, so this pass reports it rather than applying it — an automated maintenance run should not quietly re-open a supply-chain gate that a human may have closed on purpose. If it was closed on purpose, Option C is the path and this issue can track it.
Suggested labels:
ci,bug,P0.Posted by the WFL repo warden (automated triage pass).