ci(changelog): drop the lockfile merge driver this job never invokes - #6367
Merged
os-warren merged 1 commit intoAug 25, 2026
Merged
Conversation
`changelog.yml` configured `merge.pnpm-merge` but has no merge to resolve: it checks out, runs git-cliff, stages exactly CHANGELOG.md, commits and pushes. A merge driver fires only when git has to merge the attributed path, so the step could not run even on a successful manual dispatch. Removes the step, records why it was dead in place, and drops the now phantom row from the docs table that `ci-cd-pipeline-doc.test.ts` pins. Also corrects the instruction that produced the dead copy: it said to add the driver to a workflow that "merges or pushes", and pushing is not merging. 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 16:51
os-warren
deleted the
claude/issue-6358-changelog-merge-driver-toolchain
branch
August 25, 2026 17:03
This was referenced Aug 25, 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 free
to 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 #6358
Disposition 2 (delete the driver configuration) — but⚠️ not for the reason the card and my dispatch order expected. The route hinged on a reading I was told to re-derive, and re-deriving it flipped which fact the deletion rests on.
The two questions, measured separately
(1) Does the workflow run at all? — It CAN. The "waits on release events" reading is stale.
The card repeats #5409's cause: "it waits on release events this repo's own releases can never emit." That is no longer true of the file. The
release: types: [published]trigger was already removed on 2026-08-23 (by #5409's own resolution), andchangelog.yml'son:block today is:A maintainer can start it at any time, and both the file header and
ci-cd-pipeline.mdsay it is meant to be run at release time as part of cutting a release. I did independently confirm the run count — the Actions API returnstotal_count: 0for this workflow — but "never dispatched" is not "cannot run". So the zero is real while the cause attached to it is stale, and disposition 2 cannot be justified on question (1).(2) Even when it runs, does the merge driver fire? — No. This is the reason acted on.
A merge driver is invoked by git only when git actually has to merge the attributed path. This job never merges. Its complete step list is: checkout → (the driver config) →
git-cliff→git add CHANGELOG.md→git commit→git push. Grepping the whole file for a merge occasion returns only the driver config itself and apull-requests: readpermission:There is no merge, rebase, pull, cherry-pick or revert, and the job never touches
pnpm-lock.yamlat all — it stages exactlyCHANGELOG.md. The documented rationale for the step — "commits back to a branch that may have moved" — does not reach a driver: a push to a branch that moved is rejected, not merged, and nothing in this job resolves that rejection.So the step was dead configuration, not a missing-toolchain bug. Adding
corepack enable+actions/setup-node(disposition 1) would have pinned a toolchain for a command that cannot run.What made it dead, recorded in place
The deletion leaves a comment in
changelog.ymlstating the mechanism, so the next reader does not restore it from the instinct that added it — including the note that if a real merge is ever added to this job, the driver needscorepack enable+actions/setup-nodeahead of it the way the two siblings do.My dispatch order said one file only (
.github/workflows/changelog.yml). That constraint is mechanically unsatisfiable for disposition 2, and I am declaring the second file rather than shipping a knowingly red PR.scripts/__tests__/ci-cd-pipeline-doc.test.tspins the "Lockfile Merge Driver" table incontent/docs/guide/ci-cd-pipeline.mdagainst the workflows that actually configuremerge.pnpm-merge, in both directions. Deleting the step makeschangelog.ymla phantom row. Measured, exit code captured by redirect before any pipe:01changelog.yml0The failing assertion's own message dictates the remedy:
There is no one-file path to disposition 2. Keeping the pin green from the workflow side alone would require leaving the literal string
merge.pnpm-mergein the file (the pin is a grep), which would make the gate assert a falsehood — so the explanatory comment deliberately avoids spelling the config key.The doc change is three edits in that one file: the phantom table row, the now-false sentence in the
changelog.ymlsection, and — the same defect class — the instruction that produced the dead copy in the first place. It read "Adding a workflow that merges or pushes? Add the step…"; pushing is not merging, and that word is why this workflow carried a driver with nothing to resolve.Gates
Derived by hand from objectui's own⚠️
package.jsonand.github/workflows/—scripts/pm/dispatch-gates.mjslives only in objectstack and would answer about the wrong tree. Union re-run at final commite49c5af24on a clean tree, each exit code captured by redirect before any pipe:check-pre-install-import-graph0OK — 16 pre-install step(s) in 15 job(s) run 16 scripts/ gate(s); 18 module(s) walkedci-cd-pipeline-doc.test.ts0Test Files 1 passed (1) / Tests 34 passed (34)check-control-bytes0OK (scanned 5238 tracked text file(s); skipped 85 binary)check-doc-links0Links are valid across 17 scan roots.check-doc-fence-languages0every TypeScript block in 223 document(s) is fenced ts/tsx/typescriptcheck-changeset-presence0No source of a released package changed in this range, so no changeset is owed.check-shell-escape-residue0OK (4/4 root(s) resolved … 0 occurrence(s) outside a fence)scripts/__tests__/(unit)0Test Files 79 passed (79) / Tests 2279 passed (2279)No changeset — on the gate's own verdict, not an assumption. No
skip-changesetlabel: that mechanism does not exist in this repo, and creating one by applying it would mint a repo label the next reader would take for real.check-pre-install-import-graph, reverse-verified. My dispatch order flagged it as the gate most likely implicated. Predicted direction stated in advance: population unchanged, becausechangelog.ymlcontains nonode scripts/*step in either state. Confirmed by restoringorigin/main's copy of the file (mutation confirmed on disk by grep before measuring, restore then verified byte-identically: HEAD blobd6d4b5515…equals disk blob,git diff HEADempty):Identical, as predicted. That gate's
INSTALL_REis in fact documented to exclude this exactgit config merge.pnpm-merge.driver "pnpm install …"line from counting as an install, so the step never entered its population.Not touched, deliberately
changelog.yml's triggers, #5409's subject,.gitattributes, and the two sibling workflows. The.gitattributesline stays: two workflows still configure the driver, so the attribute is still live and the doc test's first assertion (configuring.length > 0) still holds.Generated by Claude Code