fix(ci): delete duplicate with: that kills every workflow run at startup - #113
Conversation
`Install Rust` carried two `with:` keys. GitHub's workflow parser rejects a
duplicate key outright, so the run was created with **zero jobs** -- the last
eight runs on main are all `failure` with nothing inside them.
That is not merely a red CI. The ruleset on `main` requires the `Code Coverage`
context, and a job that never starts never posts one, so every pull request on
this repository is permanently unmergeable without an admin bypass. The last
five PRs each posted 0 of 5 required contexts.
The second `with:` block is the real one -- `${{ matrix.rust }}` is the job's
matrix value, and `matrix.rust` is referenced nowhere else in the file. The
first block's `toolchain: v1` restates the action's own tag as if it were a
toolchain name and is what an automated rewrite left behind. Deleting the first
block is therefore the whole fix; nothing else in the file is touched.
Verified with actionlint, which reports
`key "with" is duplicated in element of "steps" section` on the current main and
nothing on this branch. A duplicate-key-detecting YAML loader agrees, and
`yaml.safe_load` alone does not -- it tolerates duplicates silently while
GitHub's parser does not, so a plain parse check asserts the opposite of what
the runner will do.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (1)
💤 Files with no reviewable changes (1)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📜 Recent review details⏰ Context from checks skipped due to timeout. (5)
|
| Layer / File(s) | Summary |
|---|---|
Matrix toolchain selection .github/workflows/ci.yml |
The Rust test job uses ${{ matrix.rust }} and retains the configured components and WebAssembly target. |
Priority: ➖ Normal
Estimated code review effort: 1 (Trivial) | ~3 minutes
Change: Bug fix
Suggested reviewers: metadatastician
Merge Risk: ⚪ Minimal · up to ab6d8
The workflow now retains matrix-based Rust toolchain selection without the duplicate key that prevented CI jobs from starting. No merge-blocking risk remains.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
| Check name | Status | Explanation |
|---|---|---|
| Description check | ✅ Passed | The description clearly explains the duplicate with: key, its effect on workflow parsing, the retained toolchain configuration, and the verification performed. |
| Title check | ✅ Passed | The title clearly identifies the CI fix and the duplicate with: key that prevents workflow runs from starting. |
| Docstring Coverage | ✅ Passed | No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0… |
| Linked Issues check | ✅ Passed | Check skipped because no linked issues were found for this pull request. |
| Out of Scope Changes check | ✅ Passed | Check skipped because no linked issues were found for this pull request. |
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
- Commit to this branch
- Create a new PR
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.
A rabbit checks the Rusty gate
The matrix picks the toolchain state
WebAssembly stays in line
Components load by design
Tests hop onward, neat and fine
Comment @coderabbitai help to get the list of available commands.
|
Measured resultThe startup death is fixed.
Required contexts went from 0/5 on the last five PRs to 4/5 here:
Two gates also flipped from failure to success as a side effect, confirming the Two things to be explicit about1. 2. Several jobs are red, and none of them is a regression from this change. 🤖 Generated with Claude Code |



What is broken
.github/workflows/ci.ymlhas twowith:keys on theInstall Ruststep.GitHub's workflow parser rejects a duplicate key outright, so the run is created
with zero jobs. The last eight runs on
mainare allfailurewith nothinginside them.
Why it is worse than a red CI
The ruleset on
mainrequires theCode Coveragecontext. That job lives inthis same workflow, so it can never start, so the context is never posted. Every
pull request on this repository is permanently unmergeable without an admin
bypass — the last five PRs each posted 0 of 5 required contexts. This PR will
be the first to post any.
The change
Two lines deleted, nothing else:
- name: Install Rust uses: dtolnay/rust-toolchain@v1 - with: - toolchain: v1 with: toolchain: ${{ matrix.rust }}The second block is the real one:
${{ matrix.rust }}is the job's matrixvalue, and
matrix.rustappears nowhere else in the file. The first block'stoolchain: v1restates the action's own tag as though it were a toolchain name,which is the signature of an automated rewrite rather than anything hand-written.
Verification
actionlintkey "with" is duplicated in element of "steps" section … previously defined at line:38duplicate key 'with' at line 40needs:across all 7 jobs⚠ A plain
yaml.safe_loadparse check passes on the broken file — PyYAMLtolerates duplicate keys silently while GitHub's parser does not. A parse check is
therefore not evidence here; the duplicate-key loader is.
The two
shellcheckfindingsactionlintreports at lines 213 and 264 arepre-existing
style/infonotes, present identically before and after, and arenot touched by this change.
The proof is this PR itself
Post-fix,
Code Coverageeither runs or reportsskippedon a failedneeds:—both post the context and both satisfy the ruleset match. So the deadlock is
cleared whether or not coverage itself passes. If jobs appear on this PR at all,
the defect is fixed.
Checked before opening: no sibling branch already carries this fix.
🤖 Generated with Claude Code
https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm