Nine workflows on the default branch have never once been green, some since
April. The question nobody had asked: how many of them should exist at all?
Fanned tri red why (#3271) across all ten red workflows, one agent each, with
an adversarial stage set to attack any DELETE or DISABLE.
| recommendation |
count |
| FIX |
5 |
| LEAVE |
4 |
| RESTRICT_TRIGGER |
1 |
| DELETE / DISABLE |
0 |
| class |
count |
| GENUINELY_BROKEN |
7 |
| MISSING_SECRET_OR_RUNNER |
2 |
| WRONG_TRIGGER |
1 |
Nothing should be removed. The refutation stage had nothing to check,
because no agent proposed removing a check — every one of these either guards
something real or is red for a reason outside the repository.
The five fixable
build-paper.yml — one character. main.tex:278 declares
\begin{tabular}{lll} for a table whose header and four body rows all carry
four columns. Fixed in #3315.
coq-proofs.yml — the container's opam root. options: --user root gives
HOME=/root, which has no opam root; the image's belongs to the coq user. Set
OPAMROOT: /home/coq/.opam at job level and eval $(opam env) in both run
steps — coqc is not on root's PATH under Actions' non-login shell. Keep
--user root: removing it reintroduces the older checkout-ownership failure.
lean-proofs.yml — two Lean targets. H4Lagrangian.lean has two hard
errors whose file comment blames a missing import that is already there; the
four names it tried are pre-rename spellings, and the bounds exist at the pinned
mathlib rev as Real.pi_gt_d2 / pi_lt_d2 / exp_one_gt_d9 / exp_one_lt_d9.
TernaryInference.lean has 0 errors and 20 warnings, promoted to failure by
--wfail. Keep --wfail; dropping it hides the rot.
brain-seal-refresh.yml — a push that has never succeeded. Its first four
steps pass; only the final Commit brain seals fails, on a PR-only branch where
the push cannot work. Dropping that step and the orphaned contents: write
makes it green as what it can actually be: a check that the aggregation runs and
validates against the schema, with the seals as an artifact. Nothing is lost —
the push has never once succeeded, so it has never refreshed anything.
auto-merge-ready-prs.yml — already fixed in #3314 (zero checks read as
zero failures; a batch that merged nothing reported green).
The one wrong trigger
release.yml carries a bare workflow_dispatch: alongside
release: [published]. The preflight step reads the tag from
github.event.release.tag_name, which a dispatch does not supply, so every
manual fire fails at step 3 — the only reason it is red on master. Deleting the
four-line workflow_dispatch: block loses nothing.
Making the manual trigger actually work is three coupled edits, not one: a
required tag input, a fallback in both TAG: and the concurrency group (which
today collapses to the literal release- for every dispatch), and
github.event_name == 'release' && prepended to the if: of all five publish
jobs — otherwise a dispatch whose tag passes preflight runs cargo publish and
npm publish against the live registries for real. The file header records two
such irreversible burns already. Not recommended.
The four to leave
vivado-synth.yml and build-vivado-image.yml need a Vivado image/licence the
CI does not have — docker pull returns manifest unknown. deploy-api.yml
and issue-gate.yml's master runs are similar: nothing in the repository is
wrong.
Each fix is small and independent. Filed as one issue because the population
is the finding: a set of never-green workflows that turns out to contain no dead
weight at all.
Nine workflows on the default branch have never once been green, some since
April. The question nobody had asked: how many of them should exist at all?
Fanned
tri red why(#3271) across all ten red workflows, one agent each, withan adversarial stage set to attack any DELETE or DISABLE.
Nothing should be removed. The refutation stage had nothing to check,
because no agent proposed removing a check — every one of these either guards
something real or is red for a reason outside the repository.
The five fixable
build-paper.yml— one character.main.tex:278declares\begin{tabular}{lll}for a table whose header and four body rows all carryfour columns. Fixed in #3315.
coq-proofs.yml— the container's opam root.options: --user rootgivesHOME=/root, which has no opam root; the image's belongs to thecoquser. SetOPAMROOT: /home/coq/.opamat job level andeval $(opam env)in both runsteps —
coqcis not on root's PATH under Actions' non-login shell. Keep--user root: removing it reintroduces the older checkout-ownership failure.lean-proofs.yml— two Lean targets.H4Lagrangian.leanhas two harderrors whose file comment blames a missing import that is already there; the
four names it tried are pre-rename spellings, and the bounds exist at the pinned
mathlib rev as
Real.pi_gt_d2/pi_lt_d2/exp_one_gt_d9/exp_one_lt_d9.TernaryInference.leanhas 0 errors and 20 warnings, promoted to failure by--wfail. Keep--wfail; dropping it hides the rot.brain-seal-refresh.yml— a push that has never succeeded. Its first foursteps pass; only the final
Commit brain sealsfails, on a PR-only branch wherethe push cannot work. Dropping that step and the orphaned
contents: writemakes it green as what it can actually be: a check that the aggregation runs and
validates against the schema, with the seals as an artifact. Nothing is lost —
the push has never once succeeded, so it has never refreshed anything.
auto-merge-ready-prs.yml— already fixed in #3314 (zero checks read aszero failures; a batch that merged nothing reported green).
The one wrong trigger
release.ymlcarries a bareworkflow_dispatch:alongsiderelease: [published]. The preflight step reads the tag fromgithub.event.release.tag_name, which a dispatch does not supply, so everymanual fire fails at step 3 — the only reason it is red on master. Deleting the
four-line
workflow_dispatch:block loses nothing.Making the manual trigger actually work is three coupled edits, not one: a
required
taginput, a fallback in bothTAG:and the concurrency group (whichtoday collapses to the literal
release-for every dispatch), andgithub.event_name == 'release' &&prepended to theif:of all five publishjobs — otherwise a dispatch whose tag passes preflight runs
cargo publishandnpm publishagainst the live registries for real. The file header records twosuch irreversible burns already. Not recommended.
The four to leave
vivado-synth.ymlandbuild-vivado-image.ymlneed a Vivado image/licence theCI does not have —
docker pullreturnsmanifest unknown.deploy-api.ymland
issue-gate.yml's master runs are similar: nothing in the repository iswrong.
Each fix is small and independent. Filed as one issue because the population
is the finding: a set of never-green workflows that turns out to contain no dead
weight at all.