Skip to content

fix(ci): remove the duplicate 'with:' block from six workflows (#822) - #824

Merged
hyperpolymath merged 1 commit into
mainfrom
fix/822-duplicate-with
Sep 22, 2026
Merged

hyperpolymath merged 1 commit into
mainfrom
fix/822-duplicate-with

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Closes #822.

Deletes the orphaned first with: block from six workflow steps. 12 deletions, 0 insertions, two lines per file.

Measured, not assumed — it is six files, not one

#822's body reports the symptom at one site (build-gossamer-gui.yml line 143). The gate reports six, and prints its own denominator:

6 of 32 workflow file(s) contain duplicate keys.
Workflow Line
build-gossamer-gui.yml 143
ci.yml 43
quality.yml 118
release.yml 129
security-policy.yml 41
tests.yml 81

All six are the identical mechanical shape Dependabot's #810 produced — the ref rewritten, a second with: added rather than the existing one edited, leaving toolchain: master orphaned above toolchain: stable. So #822's acceptance criterion 5 ("sweep the other six workflows Dependabot touched, since the cause is mechanical and would repeat") is discharged by fixing all six here, not by a separate sweep.

The mutant is already dead

Ran the gate's own script — scripts/check-workflow-duplicate-keys.sh from hyperpolymath/standards — against both trees locally:

Tree Result
origin/main @ 7e1f9fd rc=1 — "6 of 32 workflow file(s) contain duplicate keys."
this branch rc=0 — "duplicate-key check: 32 workflow file(s) clean"

Same script, same invocation, red and green, denominator printed in both directions. Reverting this commit reproduces the red — which is exactly what criterion 4 asks for, so no throwaway mutant PR is needed.

⚠ Why no ordinary linter caught this. The script's own header states that conventional YAML parsers silently keep the last duplicate and report success. Confirmed directly: yq accepted all 32 files, including the six defective ones. A yq-based check here would have been a vacuous gate.

Criterion 2 is deliberately not implemented

#822 also asks that dtolnay/rust-toolchain be pinned to a commit SHA. Not done, on purpose:

  • dtolnay/rust-toolchain@v1 appears at 22 sites across 8 workflows. Converting the single site in build-gossamer-gui.yml would leave it inconsistent with 21 identical siblings and create the appearance of compliance without the substance.
  • hypatia's convention is symbolic refs — measured 40 tag/ref to 8 SHA across the workflow tree.
  • .github/workflows/actions.lock already records the resolved commit for 'dtolnay/rust-toolchain@v1' (sha1-02cb101ec7c40f2c49e1d9714d64511d8e1b74de), and that lockfile gate is green as of chore(ci): refresh actions.lock so the lockfile gate goes green (#818) #823. The tag is pinned by the lock; a literal SHA at one call site would desynchronise it from the lock's key.

Raised as its own issue covering all 22 sites instead, per the standing rule that a new finding is an issue rather than a merge blocker.

This PR is also the control for #818

No uses: line is changed and actions.lock is not modified — verified: zero uses: lines appear in the diff. That is deliberate. #818's last acceptance criterion requires governance / Actions lockfile verify to be still green on a subsequent unrelated PR, proving the fix landed on main rather than being an artefact of #823's own merge commit. This PR is that control, and the result will be recorded on #818.

🤖 Generated with Claude Code

https://claude.ai/code/session_0113HQM9LVGkNCzU1WwkJZSV

Dependabot's #810 bump rewrote the dtolnay/rust-toolchain ref and ADDED a
second `with:` block rather than editing the existing one, leaving

        uses: dtolnay/rust-toolchain@v1
        with:
          toolchain: master     <- orphaned, left behind
        with:
          toolchain: stable
          ...

in place. Each affected step is fixed by deleting the orphaned first block.
12 deletions, 0 insertions, 2 lines per file.

MEASURED, NOT ASSUMED
---------------------
#822's body reports the symptom at ONE site (build-gossamer-gui.yml line
143). The gate reports SIX. An issue body is a dated record; the linter's
own run log on 033193c lists:

  build-gossamer-gui.yml:143  ci.yml:43   quality.yml:118
  release.yml:129             security-policy.yml:41      tests.yml:81

and prints its denominator: "6 of 32 workflow file(s) contain duplicate
keys." All six are the same mechanical shape, so #822's acceptance
criterion 5 (sweep the other #810 workflows) is discharged by fixing all
six here rather than one.

THE MUTANT IS ALREADY DEAD
--------------------------
Ran the gate's own script, scripts/check-workflow-duplicate-keys.sh from
hyperpolymath/standards, against both trees locally:

  origin/main 7e1f9fd  ->  rc=1, "6 of 32 workflow file(s) contain
                           duplicate keys."
  this branch          ->  rc=0, "duplicate-key check: 32 workflow
                           file(s) clean"

Same script, same invocation, red and green, denominator printed in both
directions. Reverting this commit reproduces the red, which is what
criterion 4 asks for.

Note why no ordinary linter caught this: the script's own header states
that conventional YAML parsers silently keep the LAST duplicate and report
success. Confirmed here -- yq accepted all 32 files including the six
defective ones, so a yq-based check would have been vacuous.

CRITERION 2 DELIBERATELY NOT IMPLEMENTED
----------------------------------------
#822 also asks that dtolnay/rust-toolchain be pinned to a commit SHA.
Not done, deliberately:

  - dtolnay/rust-toolchain@v1 appears at 22 sites across 8 workflows.
    Converting the 1 site in build-gossamer-gui.yml would leave it
    inconsistent with 21 identical siblings and create the appearance of
    compliance without it.
  - hypatia's convention is symbolic refs, measured 40 tag/ref to 8 SHA.
  - .github/workflows/actions.lock ALREADY records the resolved commit for
    'dtolnay/rust-toolchain@v1' (sha1-02cb101ec7c40f2c49e1d9714d64511d8e1b74de),
    and that lockfile gate is green as of #823. The tag is pinned by the
    lock; a literal SHA at one call site would desynchronise it from the
    lock's key.

Raised as its own issue covering all 22 sites instead.

NO uses: LINE IS CHANGED
------------------------
Verified: 0 'uses:' lines appear in the diff and actions.lock is not
modified. This is deliberate -- it makes this PR the clean control for
#818's remaining acceptance criterion, that the lockfile verify is still
green on a SUBSEQUENT UNRELATED PR and not an artefact of #823's own merge
commit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0113HQM9LVGkNCzU1WwkJZSV
@coderabbitai

coderabbitai Bot commented Sep 22, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

Next included review available in 53 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 87f68580-6a72-4036-8d54-8774b2d5eade

📥 Commits

Reviewing files that changed from the base of the PR and between 7e1f9fd and 9de66da.

📒 Files selected for processing (6)
  • .github/workflows/build-gossamer-gui.yml
  • .github/workflows/ci.yml
  • .github/workflows/quality.yml
  • .github/workflows/release.yml
  • .github/workflows/security-policy.yml
  • .github/workflows/tests.yml

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@hyperpolymath

Copy link
Copy Markdown
Owner Author

⚠ Read the new reds before judging this PR: they are a resurrection, not a regression

The duplicate key was not merely reddening a linter. GitHub rejected all six workflows outright. Measured on main @ 7e1f9fd — every one recorded conclusion: failure with jobs = 0: no jobs, no log, no check-run, nothing behind the red mark.

Workflow jobs on main @ 7e1f9fd jobs on this PR
ci.yml 0 9
tests.yml 0 10
quality.yml 0 6
security-policy.yml 0 14
build-gossamer-gui.yml 0 3
release.yml 0 n/a (release-triggered, no PR run)

So these five workflows have executed nothing since #810 landed earlier today. This PR is the first time their jobs have run.

What that does to the check list

Fixed governance / Workflow security linter — failure on main → success here
Still green governance / Actions lockfile verify — success (see below)
Newly visible 11 red jobs from the five resurrected workflows

The 11: Build AsciiDoc, Build Test Images, CI Status, Container Security (Trivy), criterion + baseline gate, E2E — Elixir Scanner Pipeline, E2E — Rust CLI Scan, Generate Rust SBOM, Integration Status, Rust Check & Clippy, stress-test.

None of these is caused by this change — the diff is 12 deleted lines, all of them with: / toolchain: master, with zero uses: lines touched. They are pre-existing failures that were invisible because the workflows carrying them never started. Going from silently dead to visibly red is the improvement; filing them is the follow-up, not a reason to keep the workflows dead.

⚠ One thing I am not claiming: the mirror / * jobs also differ between the two lists. Those are push-event jobs that do not run on pull requests at all. They are not fixed by this PR.

#818's final criterion is discharged by this PR

governance / Actions lockfile verify reports success here. This PR changes no uses: line and does not modify actions.lock — so the lockfile gate is green on a genuinely unrelated PR, proving #823's fix is on main and not an artefact of its own merge commit. That was #818's last outstanding acceptance criterion.

Criterion 4 (the mutant) — already dead, locally

Ran the gate's own script from hyperpolymath/standards against both trees:

origin/main 7e1f9fd  ->  rc=1   "6 of 32 workflow file(s) contain duplicate keys."
this branch          ->  rc=0   "duplicate-key check: 32 workflow file(s) clean"

Same script, both directions, denominator printed each time. Reverting reproduces the red.

🤖 Generated with Claude Code

https://claude.ai/code/session_0113HQM9LVGkNCzU1WwkJZSV

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

build-gossamer-gui.yml has a duplicate 'with:' key, reddening the workflow security linter on every PR

1 participant