Filed unassigned from objectui#5397 (PR objectstack-ai/objectui#6217), whose dispatch order asked for this card if the mechanism turned out to be generic rather than an objectui quirk. It is generic, and it is confirmed by reading this repository, not inferred from the sibling.
The mechanism, in this repository's own words
.github/workflows/lint.yml:988-991 already states it verbatim:
changeset version bumps packages/cli on a release PR that (per sync-template-versions.mjs's own header) gets NO CI because changesets/action opens it with the default GITHUB_TOKEN — so the bump merged green and the gate reddened on the NEXT ordinary PR, naming files that author never touched.
release.yml's Create or update the "chore: version packages" PR step uses changesets/action@v1 with the default GITHUB_TOKEN. GitHub does not start workflow runs from events raised by that token, so the version PR gets no pull_request build — and the bot force-pushes the branch, so there is no stable head for a human to re-run checks against either.
The consequence is the same one objectui measured: the release commit is the largest machine-generated diff of the release cycle and the only commit that reaches main without passing the gates.
Why this is worth a card rather than a shrug
This repository has already paid for it once and paid in the shape the objectui ruling explicitly rejected as non-generalising. #9064 exists because a check:docs-image-tag gate structurally could not fire on the release PR that breaks it, so a version-time rewriter (scripts/sync-docs-image-tags.mjs) had to be built for that one artifact — a per-artifact mechanical guarantee, which covers exactly the artifact it names and nothing else. sync-template-versions.mjs and sync-protocol-version are two more of the same kind. Each new version-time output needs its own rewriter and its own self-test, forever, because nothing validates the tree as a whole.
What the sweep should do
Maintainer ruling on the sibling card (2026-08-22, 「接受所有」) chose option A: validate the post-version tree inside the release workflow, after the version step and before changesets/action opens or updates the PR — rejecting a PAT / GitHub App token (widens the supply-chain trust surface, adds rotation obligations) and rejecting per-artifact guarantees (they do not generalise).
⚠️Price it before choosing the shape here too. In objectui the price is what chose the implementation, and the naive reading was the wrong one: measured there, changeset version moves no source byte at all (411 paths: changeset deletions, the "version" key in 40 manifests, 40 generated CHANGELOG.md, one QUICK_REFERENCE.md), so a full post-version suite would have re-tested bytes CI had validated minutes earlier at ~40 min a go. The shipped shape validates only the surfaces the version step can move, at ~68 s per refresh. release.yml here runs pnpm run version = changeset version + sync-protocol-version + sync-template-versions (+ sync-docs-image-tags), so this repository's post-version diff is strictly larger than objectui's and has to be measured on its own — the scope conclusion does not transfer.
The two repositories' release workflows have deliberately diverged (this one's version lane carries no publish: input at all, per #6170), so this is a sweep of the same defect, not a port of the same patch.
Not audited here
cloud and objectos were named in objectui#5397's triage as plausibly carrying the identical changesets/action + GITHUB_TOKEN shape and have never been audited. Neither was in the sibling session's checkout, so no reading was taken. Whoever picks this up should check them the same way — one grep for changesets/action and the token it is handed — and either fold them in or file per-repo.
Generated by Claude Code
Filed unassigned from objectui#5397 (PR objectstack-ai/objectui#6217), whose dispatch order asked for this card if the mechanism turned out to be generic rather than an objectui quirk. It is generic, and it is confirmed by reading this repository, not inferred from the sibling.
The mechanism, in this repository's own words
.github/workflows/lint.yml:988-991already states it verbatim:release.yml'sCreate or update the "chore: version packages" PRstep useschangesets/action@v1with the defaultGITHUB_TOKEN. GitHub does not start workflow runs from events raised by that token, so the version PR gets nopull_requestbuild — and the bot force-pushes the branch, so there is no stable head for a human to re-run checks against either.The consequence is the same one objectui measured: the release commit is the largest machine-generated diff of the release cycle and the only commit that reaches
mainwithout passing the gates.Why this is worth a card rather than a shrug
This repository has already paid for it once and paid in the shape the objectui ruling explicitly rejected as non-generalising. #9064 exists because a
check:docs-image-taggate structurally could not fire on the release PR that breaks it, so a version-time rewriter (scripts/sync-docs-image-tags.mjs) had to be built for that one artifact — a per-artifact mechanical guarantee, which covers exactly the artifact it names and nothing else.sync-template-versions.mjsandsync-protocol-versionare two more of the same kind. Each new version-time output needs its own rewriter and its own self-test, forever, because nothing validates the tree as a whole.What the sweep should do
Maintainer ruling on the sibling card (2026-08-22, 「接受所有」) chose option A: validate the post-version tree inside the release workflow, after the version step and before
changesets/actionopens or updates the PR — rejecting a PAT / GitHub App token (widens the supply-chain trust surface, adds rotation obligations) and rejecting per-artifact guarantees (they do not generalise).changeset versionmoves no source byte at all (411 paths: changeset deletions, the"version"key in 40 manifests, 40 generatedCHANGELOG.md, oneQUICK_REFERENCE.md), so a full post-version suite would have re-tested bytes CI had validated minutes earlier at ~40 min a go. The shipped shape validates only the surfaces the version step can move, at ~68 s per refresh.release.ymlhere runspnpm run version=changeset version+sync-protocol-version+sync-template-versions(+sync-docs-image-tags), so this repository's post-version diff is strictly larger than objectui's and has to be measured on its own — the scope conclusion does not transfer.The two repositories' release workflows have deliberately diverged (this one's version lane carries no
publish:input at all, per #6170), so this is a sweep of the same defect, not a port of the same patch.Not audited here
cloudandobjectoswere named in objectui#5397's triage as plausibly carrying the identicalchangesets/action+GITHUB_TOKENshape and have never been audited. Neither was in the sibling session's checkout, so no reading was taken. Whoever picks this up should check them the same way — one grep forchangesets/actionand the token it is handed — and either fold them in or file per-repo.Generated by Claude Code