Uh oh!
There was an error while loading. Please reload this page.
ci(dependabot-auto-merge): drop the lockfile merge driver it cannot invoke - #6389
Merged
Conversation
…nvoke A merge driver is invoked only when git merges the attributed path on the runner. The only merge this job performs is `gh pr merge --auto --squash`, which GitHub executes server-side in the merge queue, so the runner's local git config takes no part in it and the driver had no occasion to fire. Swept the whole workflow before removing: no `git merge`, `rebase`, `pull`, `cherry-pick`, `am`, `apply` or `revert` anywhere in it — the `git config` pair was the only `git` present. `actions/checkout` checks out the merge commit GitHub already computed rather than computing one, and the gate script imports `node:fs` only. The doc table and the workflows are pinned against each other in both directions, so both halves ship together: the row goes from the "Lockfile Merge Driver" table, leaving the one workflow that does merge locally, and the assertion that existed to hold this workflow to that row goes with it. The guide sentence that produced both dead copies is narrowed too: it now asks for a local merge and records that neither a push nor a server-side merge is one. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012CZgmFFzqA9cX8tBMhvpFe
This was referenced Aug 25, 2026
os-warren
marked this pull request as ready for review
August 25, 2026 19:36
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 25, 2026
os-warren pushed a commit
that referenced
this pull request
Aug 25, 2026
Once #6389 removed the lockfile merge driver, `corepack enable` + `pnpm --version` were the only pnpm steps left in a job whose own comment already says it never runs `pnpm install`. Removed both, with the reasoning (including why `pnpm --version` alone isn't kept as a fail-fast) recorded in the workflow file so the next reader does not re-add it unexplained. Reworded the `cache: 'pnpm'` comment on the Setup Node.js step to reflect that this job no longer sets up pnpm at all. Fixes#6392 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012CZgmFFzqA9cX8tBMhvpFe
This was referenced Aug 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#6369
.github/workflows/dependabot-auto-merge.ymlconfigured thepnpm-lock.yamlmerge driver, and had no occasion to invoke it. Both halves the pin requires ship here together.The falsification attempt came first
The card's reading only stands if nothing in that job merges locally, so the sweep ran over the whole file before anything was deleted — with a control term on every zero-hit, since a zero-hit with no control is not a reading:
The control proves the sweep reads:
git configis matched by the same regex shape agit mergewould be. Every literalgitin the file is on lines 105–110, and the only two that execute are thegit configpair being removed.rebase,cherry-pickandgit applyare zero across the file.Three things that could have merged without spelling it
git, each checked rather than assumed:actions/checkout@v7fetches a ref and checks it out. On apull_requestevent that ref is the merge commit GitHub has already computed — checking out an existing commit performs no three-way merge, so no driver is consulted. (submodules: truealso finds no.gitmodulesin this repo.)scripts/dependabot-merge-gate.mjs, the job's onlynodestep, importsnode:fsand one local helper. Nochild_process, noexec, nospawn, nogit— control termGATE_TIMEOUT_SECONDShits in the same sweep.dependabot/fetch-metadata@v3andactions/github-script@v9read the API and post a comment; the inline script is visible in the file and only callsissues.createComment.The one merge the job really does perform is the last step's
gh pr merge --auto --squash, and GitHub executes that server-side in the merge queue. The runner's local git config is not consulted and cannot participate. So the driver was inert — the same no-occasion property #6358 measured onchangelog.yml, reached by a different route: that job never merged at all, this one merges only where local config cannot reach.⛔ Not claimed: that the configuration was harmful. It cost two lines and no runtime. The claim is only that it was inert, and that the repo was teaching otherwise.
What the table is down to
This is the reason the change is worth making.
scripts/__tests__/ci-cd-pipeline-doc.test.tspins the "Lockfile Merge Driver" table against the workflows that actually configuremerge.pnpm-merge, in both directions — so it is documentation with a gate behind it. Withchangelog.ymlremoved by #6358 and this one removed here, that table has one row left:changeset-release.yml.changeset-release.ymlfinds nogit merge,rebaseorpulleither — its commits and pushes go throughchangesets/action@v1, which force-pushes the version branch. Whether that reaches a driver is a separate question on a workflow this card does not cover, and I have left it entirely alone. It is called out in my report for triage rather than answered here.Both halves, because they are pinned against each other
Reverse-verified rather than asserted. From the committed state, each half was restored alone and the pin re-run:
merge.pnpm-mergeEach mutation was confirmed on disk by a
git hash-objectchange before the run, and each restoration proven bygit diff HEADreporting zero changed paths afterwards — not by a trap having fired.Changed
.github/workflows/dependabot-auto-merge.yml:105–110— the step goes; a comment in its place records why, what was swept, and that restoring it needs a real local merge first.content/docs/guide/ci-cd-pipeline.md:1527(the workflow's own section bullet),:1597–1602(the pinned table row, and "Two workflows" → "One workflow").scripts/__tests__/dependabot-merge-gate.test.ts:543–545— a third pin, not named in the card and red without this: the test named "keeps the lockfile merge driver ci-cd-pipeline.md pins it for" asserted the workflow still containedmerge.pnpm-merge.driver. Its own title states its premise is the doc row, so it goes with the row. Test count moves 69 → 68 on those two files, which is exactly this one assertion.Two citations my deletion would have silently falsified — both used this workflow's driver line as the repo's live worked example for "a quoted
pnpm installthat is not an install" — are re-pointed atchangeset-release.yml:525–526, which still carries the identical line:scripts/check-pre-install-import-graph.mjs:275–278scripts/__tests__/check-pre-install-import-graph.test.ts:114–117(comment only; the fixture beside it is a synthetic string and unaffected)content/docs/guide/ci-cd-pipeline.md:777–779, the same example in proseStopping the class from regenerating (#6369 disposition 3)
#6358 already corrected "merges or pushes" in this guide. Two residues of the same over-wide instruction remained, and both are sentence-level, in the section this PR is already editing:
changelog.ymlconfigures the pnpm-lock merge driver but never sets up node or corepack — both sibling workflows that configure the same driver do #6358 repudiated, still standing three paragraphs above the correction. Now: a local merge or rebase, one git carries out on the runner.Verification
pnpm vitest run scripts/__tests__on the committed tree901c56704: 79 files, 2278 tests, all passed. The two named pins verbose:lists exactly the workflows that configure merge.pnpm-merge — in both directions✓ andkeeps the .gitattributes half of the mechanism true✓ (.gitattributesis untouched —changeset-release.ymlstill needs it).Gates touched by these edits, each read from its own verdict line:
check-pre-install-import-graphOK (16 pre-install steps, 18 modules walked) ·check-changeset-no-majorOK ·check-control-bytesOK (5262 files) ·check-changeset-presenceOK. Changeset is empty-frontmatter — no published packagesrc/is touched, so this declares "no release" explicitly.Note, not asserted
With the driver gone,
corepack enableandpnpm --version(:91–95) are the only pnpm-related steps left in a job whose own comment says it "never runspnpm install" — the driver body was the only thing in it that needed pnpm. Removing them is a judgement I did not make here, andactions/setup-nodemust stay regardless (the gate script needs Node). Flagged for the reviewing seat rather than acted on.Generated by Claude Code