Uh oh!
There was an error while loading. Please reload this page.
docs(ci): measure the last lockfile merge-driver row instead of removing it - #6434
Merged
Merged
Conversation
…ing it `changeset-release.yml` performs no local merge, so the driver it configures cannot fire in that job. Swept the whole file with a control term on every zero-hit; the deciding fact is in `changesets/action@v1`, whose entire git surface is checkout / reset --hard / add / commit / push --force — a force-push resolves no merge. The `.gitattributes` line is a different matter and is NOT dead: CONTRIBUTING.md has contributors configure the same driver and then merge upstream locally. Measured both ways in a scratch repo — with the attribute the driver fires, and without it the identical merge conflicts. The CI half is dead while the repository-wide half is live, and the doc pin binds them together, so the removal is escalated as a decision rather than guessed at. Records the measurement in the workflow and the guide so it is not re-derived a fourth time, and corrects the row's stated reason: a rewrite is not a merge. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012CZgmFFzqA9cX8tBMhvpFe
This was referenced Aug 26, 2026
os-warren
marked this pull request as ready for review
August 26, 2026 00:37
Uh oh!
There was an error while loading. Please reload this page.
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.
Part of #6391
⭐ The falsification attempt succeeded on the workflow and FAILED on the
.gitattributesline, so this PR records the measurement instead of shipping the removal. The card asked for a four-part removal; the fourth part turns out to be live, and the doc pin binds all four together. That makes the removal a decision, not a cleanup, and it is escalated rather than guessed at.Step 1 — the sweep of
changeset-release.ymlEvery
gitin the file, enumerated rather than grepped for absence: the twogit configlines,git status --porcelaintwice, andgit checkout -- .+git clean -fdqin "Restore the pre-version tree".Merge family, with a control term on every zero-hit (a zero-hit with no control is not a reading):
rebasebasecherry-pickpickapplyapprevertrevgit amgitmergeitself hits 28 times: 26 are prose about the version-PR merge (a human/server-side act) and the remaining 2 are the driver configuration.Confirmed rather than assumed, both as the card asked:
git checkout -- .(~:1018) is not a merge. It sits in "Restore the pre-version tree" and takes tracked paths from the index to undo whatpnpm changeset:versionwrote. A discard.git config(~:525–526) is the configuration itself, not an invocation.pull_requesttrigger, soactions/checkout@v7never checks out a GitHub-computed merge ref either.⭐ Step 2 — reading
changesets/action@v1itselfThe load-bearing question, unanswerable from the workflow. Read at the tag the workflow pins, which currently resolves to v1.9.0 (
a45c4d594aa4e2c509dc14a9f2b3b67ba3780d0d), withsrc/git.tsand the executeddist/bundle agreeing line for line.The action's complete git surface (uppercase words are placeholders — GitHub's body sanitizer eats angle-bracket ones, even inside a fence):
The version-branch update is
prepareBranch— checkout, thengit reset --hard github.context.sha— followed bycommitAlland a force-push. It never merges, rebases or three-ways anything. A force-push resolves no merge, so the driver has no occasion to fire. Zero merge-family verbs acrosssrc/anddist/, again with hitting controls (push,checkout,reset,commit,status).Its alternative
commitMode: github-apipath is not selected here (default isgit-cli); it builds the commit through the GitHub API, and the bundle reads no.gitattributesand implements no merge driver at all.So rows 1–3 of the card are confirmed: the CI half of this mechanism is dead.
⛔ Why the removal did not ship: the
.gitattributesline is liveThe card treats
pnpm-lock.yaml merge=pnpm-mergeas the last piece of a mechanism nothing exercises. It is not. The attribute is repository-wide, and its live consumer is the contributor path this very guide section already points at:CONTRIBUTING.md→ Configure Git Merge Driver for pnpm-lock.yaml tells contributors to set the same driver, and then togit merge upstream/main— a real local merge on the attributed path.Measured in a scratch repository, one variable changed between two otherwise identical runs:
.gitattributespnpm-lock.yaml merge=pnpm-mergeCONFLICT (content), conflict markers left inpnpm-lock.yamlDeleting the attribute would not retire dead configuration — it would convert a clean auto-resolve into a hand-resolved lockfile conflict for every contributor who followed
CONTRIBUTING.md. A hand-editedpnpm-lock.yamlis a high-blast-radius artifact.The pins force the two halves together: dropping the CI config makes
ci-cd-pipeline-doc.test.tsdemand the attribute's removal in its own failure message. So the CI half is dead and the repository-wide half is live, and the pin cannot express that. Resolving it needs a ruling — see the report on #6391.What the table is down to
One row,
changeset-release.yml— after the two removals that landed as #6367 (from #6358) and #6389 (from #6369). That row survives here, but its stated reason was wrong and is corrected: it read "version bumps rewrite the lockfile on the release branch", and a rewrite is not a merge. The guide gains the third ⛔ note in the existing series ("pushing is not merging", "a server-side merge is not a local one", and now "a rewrite is not a merge, and a force-push resolves none").Changes
.github/workflows/changeset-release.yml— the measurement recorded beside the step, including the ⛔ note that it must not be deleted on "it is dead" grounds without the attribute question being settled. The config is unchanged.content/docs/guide/ci-cd-pipeline.md— row reason corrected, the measurement and the contributor-path finding recorded, third ⛔ note added.Untouched, deliberately:
.gitattributes,CONTRIBUTING.md,scripts/__tests__/ci-cd-pipeline-doc.test.ts, anddependabot-auto-merge.yml(#6392 landed its own PR #6423).Verification
Run on the final commit
e5ad9e9d8:pnpm exec vitest run scripts/__tests__— the whole tree as required, not a subset: 81 files, 2317 tests passed.scripts/__tests__/ci-cd-pipeline-doc.test.tsisolated — 34 passed, both directions of the pin and the.gitattributesassertion green.pnpm check:control-bytes— OK (5320 files) ·pnpm check:pre-install-import-graph— OK (this gate readschangeset-release.yml, so the added comment block is directly implicated; the install boundary is unmoved) ·pnpm docs:check-links— valid across 17 scan roots.Generated by Claude Code