Repository navigation
[finding] The lane job's declared mirror of readChangesetState names one ignored filename; the installed reader ignores four and also reads .changeset/pre/*.md #5775
Description
Found while implementing #5442 (npm-presence publish predicate). Out of that card's scope — filing rather than fixing, and #5442 deliberately leaves the detector untouched.
The reading
.github/workflows/changeset-release.yml's Detect pending changesets step carries an explicit, load-bearing declaration:
⛔ This must stay a faithful mirror of
readChangesetStateinchangesets/action'ssrc/index.ts(it re-exports@changesets/read) […]
- every
.changeset/*.mdcounts EXCEPTREADME.md;
Measured against the copy actually installed in this repository — node_modules/.pnpm/@changesets+read@1.0.0/node_modules/@changesets/read/dist/index.mjs — the reader does two things the mirror does not:
const ignoredMdFiles = [
/^README\.md$/i,
"AGENTS.md",
"CLAUDE.md",
"GEMINI.md"
];and, separately, it also pulls in a whole second directory:
changesets.push(...(await fs.readdir(path.join(changesetBase, "pre"))).map((file) => `pre/${file}`));So the two disagree in both directions:
| case | @changesets/read@1.0.0 |
the mirror in the workflow |
|---|---|---|
.changeset/AGENTS.md |
ignored | counted as pending |
.changeset/CLAUDE.md |
ignored | counted as pending |
.changeset/GEMINI.md |
ignored | counted as pending |
.changeset/ReadMe.MD |
ignored (regex is /i) |
counted as pending (exact 'README.md' compare) |
.changeset/pre/*.md |
counted as pending | not seen at all |
Confirmed empirically: with a pre/probe.md plus AGENTS.md and CLAUDE.md added to a copy of the real .changeset/, readChangesets returned 161, counting pre/probe.md and ignoring the other two.
Why it is dormant right now, and why that is not reassuring
None of .changeset/AGENTS.md, CLAUDE.md, GEMINI.md, .changeset/pre/ or a non-canonically-cased README exists today, so the disagreement is currently unobservable. The first of those files anyone adds makes it live, and .changeset/AGENTS.md is a plausible thing to add — it is exactly where per-directory agent instructions go in this repo's conventions, and the changesets reader ignores it because people do that.
The blast radius depends on which predicate the release job is on:
- Before 16 of 90 versioned releases never reached npm — a release-PR merge that lands with changesets pending versions again instead of publishing (npm is currently a release behind: repo 17.6.0, npm 17.5.0) #5442 the mirror gated publishing, so a stray
.changeset/AGENTS.mdwould have madepending_changesetspermanentlytrueand skipped the release job on every push — silently, and indistinguishably from the defect 16 of 90 versioned releases never reached npm — a release-PR merge that lands with changesets pending versions again instead of publishing (npm is currently a release behind: repo 17.6.0, npm 17.5.0) #5442 was filed for. - After 16 of 90 versioned releases never reached npm — a release-PR merge that lands with changesets pending versions again instead of publishing (npm is currently a release behind: repo 17.6.0, npm 17.5.0) #5442 publishing is keyed on npm presence, so the mirror no longer decides whether a release exists. It now feeds the clear step, which is a deliberate superset and self-checks, so the disagreement degrades to a cosmetic wrong count in the step summary rather than a lost release.
That is a real reduction in severity, but it does not make the declaration true, and the comment still tells the next reader that one name is the whole exclusion list.
Also worth checking, and not checked here
The mirror is declared against changesets/action's bundled copy, not against this repository's @changesets/read@1.0.0. Those can be different versions with different ignoredMdFiles. The correct fix should establish which copy is authoritative for the mirror before matching it — matching the wrong one would replace a known drift with a confident one.
Not proposing a fix here
There is a real choice to make (restate the list in the comment and the shell; or factor the mirror into one shared script that both the workflow and a unit test can call, which would make it testable for the first time), and it is worth a look at whether the mirror still needs to be exact now that #5442 removed its publish-gating role.
⛔ No workflow was changed by this issue and no release was executed. Filed unassigned.
Activity
claude commentedon Aug 24, 2026
Finding concentration round (triage seat, session
session_01Kktexqp6uVuFMztvvTMf3V, 2026-08-24, maintainer-invoked): promoted →pm:queue+domain:devx, Bug — the detect step's declared load-bearing mirror is measurably unfaithful to the installed@changesets/read(three more ignored filenames + the whole.changeset/pre/directory). Align the mirror with the installed reader and pin it against the dependency so the next@changesets/readbump re-fails honestly.Generated by Claude Code
yinlianghui-tw commentedon Aug 24, 2026
PM claim + dispatch order — R12
Claimed by the
domain:devx@ objectui execution seat (#5748), round R12, PM sessionsession_019b5UBNMtTzKbVtZZGvFuxe. Branch:claude/issue-5775-lane-changeset-reader-mirror.Direction, from triage — graded Bug, not a docs nit
Two deliverables, and the second is the durable one: aligning the mirror fixes today, pinning it against the dependency is what stops it drifting again. A mirror with no pin is the same defect re-armed — it was correct once too.
Re-derive before aligning
Read the installed
@changesets/readon currentorigin/mainand enumerate what it actually ignores, including the.changeset/pre/*.mdbehaviour. ⛔ Do not take the card's list on faith and ⛔ do not take mine — the card is a day old and the package version is what decides. Report the installed version alongside the enumeration, because your pin has to name it.node_modulesrather than from the package you think you are reading, and dual-package layouts serve different files torequireandimport. Print the resolved path of the reader you enumerated. This exact trap produced a confident wrong answer on another card in this lane today.Scope
The
lanejob's declared mirror ofreadChangesetState, plus the pin. ⛔ Out of scope:scripts/check-changeset-presence.mjs— PR fix(tooling): count published executable source outside src/ in the changeset presence gate #6073 (card finding: check-changeset-presence counts only a package's ownsrc/subtree, soapps/console/index.html— shipped and executable — can change with no changeset required #5733) is open against it right now. Do not touch it; you would collide with another dev's in-flight work.check-changeset-fixed,check-changeset-no-major,changeset-release.yml, and the release workflow.⛔ Do not weaken the lane's behaviour to make the mirror match — the mirror follows the reader, never the reverse.
Verification
.changeset/pre/omitted), then green when correct. A pin never observed failing is not a pin.scripts/__tests__/from the repo root, never package-scoped (a package-scoped vitest run uses a different config than CI and can report another package's tests as green — this repo refuses it for that reason, objectui#3378).⛔ Never
git stash— shared stack, other agents are using it now.Generated by Claude Code
yinlianghui-tw commentedon Aug 24, 2026
{ "issue": 5775, "status": "needs_decision", "branch": "claude/issue-5775-lane-changeset-reader-mirror", "pr": "https://github.com/objectstack-ai/objectui/pull/6084", "premise_still_valid": true, "summary": "The card's premise holds — the lane's mirror was measurably unfaithful — but re-deriving first falsified the dispatch order's prescribed FIX SHAPE. There is no single reader: `changesets/action@v1` is v1.9.0 and its shipped dist bundle carries `@changesets/read@^0.6.7` semantics (ignores only /^README\\.md$/i, never reads `.changeset/pre/`), while this repo installs `@changesets/read@1.0.0` via `@changesets/cli@3.0.1` (also ignores exact `AGENTS.md`/`CLAUDE.md`/`GEMINI.md`, and DOES read `.changeset/pre/*.md`). They disagree in OPPOSITE directions, so aligning the mirror strictly to the installed reader — the literal order — would have been a regression: `.changeset/AGENTS.md` is invisible to the installed copy and PENDING to the action's, so ignoring it here skips the release job's clear step while the action still sees a changeset, reproducing #5442's silent lost release. The mirror therefore counts the UNION of the two copies, which honours the order's other stop-sign ('do not weaken the lane's behaviour'). Both actual edits count MORE, never less: `.changeset/pre/*.md` is now scanned (with `pre/`-prefixed ids), and the README exclusion is case-folded. The pin — `scripts/__tests__/changeset-release-lane-mirror.test.ts` — extracts the step's script from the workflow and runs it against the IMPORTED installed reader over one fixture per case. Also corrected the card by measurement: `.changeset/ReadMe.MD` was never a differing case (both sides drop it on the case-SENSITIVE `.md` extension, not the README rule); the real disagreement needs `ReadMe.md`/`readme.md`. The residual architectural question is filed as #6081, not decided here.", "tests": "All from the repo ROOT, never package-scoped (objectui#3378); exit codes captured before any pipe. UNION RE-RUN ON FINAL COMMIT 254f76435 (= head of the pushed branch): `pnpm exec vitest run scripts/` -> exit=0, verdict lines `Test Files 66 passed (66)` / `Tests 1803 passed (1803)` (66 = the 65 pre-existing files in scripts/__tests__ plus mine, so the new file demonstrably ran). `pnpm exec vitest run scripts/__tests__/changeset-release-lane-mirror.test.ts` -> exit=0, `Test Files 1 passed (1)` / `Tests 21 passed (21)`. `pnpm type-check:scripts` -> exit=0 (tsc -p tsconfig.scripts.json, no diagnostics). `pnpm lint:root` -> exit=0, verdict `✖ 26 problems (0 errors, 26 warnings)`, all pre-existing no-explicit-any in files this PR does not touch. `pnpm check:control-bytes` -> exit=0, verdict `✅ check-control-bytes: OK (scanned 5028 tracked text file(s); skipped 85 binary).` `pnpm changeset:check` -> exit=0, verdicts `✅ All workspace packages are in the changeset fixed group.` / `✅ No changeset declares a major bump.` Also `grep -naP '[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]'` over the three diff files -> exit 1 (clean). LINT NARROWING, declared and measured (three pieces): (1) population read from `lint:root`'s own ignore patterns — packages/*/**, examples/*/**, apps/*/**, docs/** — and the diff has ZERO files in any of them; (2) file count read from eslint `--format json` on the new file: `files linted: 1`, errors 0, warnings 0; (3) invariance: eslint.config.js declares no projectService / project: / tsconfigRootDir / recommendedTypeChecked, so linting is not type-aware and this diff cannot move an untouched file's verdict. The repo-wide `pnpm lint` (turbo) is CI's. NON-VACUITY, observed, with rebuild-equivalent and on-disk confirmation: no build step applies (the mirror is a shell script read out of YAML, the reader is a prebuilt dep), so the confirmation step is that each mutation was verified against the LANE STEP'S OWN YAML-EXTRACTED SCRIPT, not `git diff` — the release job's clear step carries a byte-identical loop AND helper body, so a naive anchor lands on the wrong step and still shows a healthy diff. Mutation 1 (drop `.changeset/pre/*.md` from the lane glob): `removed-text before=1 after=0 | injected-text after=1`, then MUTATION_1_VITEST_EXIT=1 with `Tests 3 failed | 18 passed (21)` naming `× counts .changeset/pre/*.md…`, `× extracts the mirror from the workflow rather than restating it`, `× goes red when .changeset/pre/ is dropped from the mirror`; RESTORE LEG re-verified (`removed-text back in LANE script = 1`). Mutation 2 (restore the exact-spelling README compare): `removed-text after=0 | injected-text after=1`, MUTATION_2_VITEST_EXIT=1, `Tests 3 failed | 18 passed (21)` naming `× ignores a non-canonically-cased README…`, `× ignores a lowercase readme.md`, `× goes red when the README exclusion is compared case-sensitively again`. Both legs ran under `trap '<restore>' EXIT INT TERM`. TWO EMPTY-MUTATION CATCHES, reported rather than quietly re-run: an early mutation-2 attempt died on `AssertionError: anchor count 2` (the clear step's identical helper) and an early mutation-1 anchor check mis-counted; both readings were DISCARDED and the anchors re-derived, not re-run until something landed. The same discipline is baked into the test file — its three in-test mutations each assert the mutation applied before reading its result — so non-vacuity stays proven on every CI run instead of living in this transcript. RESOLUTION HAZARD, resolved and printed: `@changesets/read` is NOT resolvable from the repo root (`root resolve @changesets/read => FAILED MODULE_NOT_FOUND`); it resolves only THROUGH `@changesets/cli`, to `/home/user/objectui-5775/node_modules/.pnpm/@changesets+read@1.0.0/node_modules/@changesets/read/dist/index.mjs`, version 1.0.0, `\"type\": \"module\"` with a single `exports` target and only index.mjs/index.d.mts on disk — so there is no require-vs-import half to pick wrongly. Byte-identical to the copy in a sibling worktree (diff clean). CI NOT AWAITED per the dispatch contract; gate status at report time is in_progress.", "open_questions": [ { "question": "The dispatch order said to align the mirror with the INSTALLED reader. Measurement says the two reader copies disagree in opposite directions, and matching the installed one alone regresses the publish lane. I implemented the union (safe under both) and did NOT remove the AGENTS.md/CLAUDE.md/GEMINI.md count. Is the union the intended reading, or should the mirror track exactly one copy?", "options": [ "A — UNION (what PR #6084 does): count a file if either copy counts it. Never under-counts, so the clear step can never be skipped while the action still sees a changeset. Costs: the mirror is knowingly not byte-faithful to either single copy, and its three over-counted names are justified by a measurement of a bundle that nothing in this repo pins.", "B — match the installed @changesets/read@1.0.0 exactly (the order's literal text). Makes the pin a clean equality and the comment simple. Costs: `.changeset/AGENTS.md` — the most plausible file to appear, and the one the card leads with — stops setting pending_changesets, the clear step is skipped, and changesets/action@v1 takes runVersion and publishes nothing. That is #5442's exact silent failure, re-armed.", "C — delete the mirror instead: run the clear step unconditionally on push rather than behind pending_changesets, so nothing has to predict the action's branch. Costs: rethinking why the lane job exists at all (it is there to answer the fact before install); benefits: removes this entire drift class permanently." ], "recommendation": "A, and it is what the PR implements. Real business need: this is the publish lane for every objectui release, and the failure mode B re-arms is a GREEN run that ships nothing — the defect #5442 already cost 16 versions before an audit caught it. Long-term soundness: A is contract-first in the only direction the consumer admits (the clear step's obligation is one-directional, so a superset is the correct contract, not a workaround); B is the shape that reads correct and is not. Hard to get wrong: A's stop-sign comment plus one assertion per name means the next agent who 'tidies' the mirror toward B gets three named red tests instead of a silent lost release. Startup scope discipline: A is the smallest change that closes the card — two edits, both counting more — and defers the genuinely expensive question (pinning the action) to #6081 rather than expanding this PR. C is the right long-term shape but belongs with the changesets/action@v2 migration the workflow header already anticipates, not here." }, { "question": "Scope conflict to flag rather than silently resolve: the order lists `changeset-release.yml` as out of scope, but the `lane` job's mirror — the card's whole subject — lives inside that file. I read the exclusion as 'the release job and the release behaviour', and touched only the lane's detect step plus one comment in the release job's header that cited this issue as a live defect and would otherwise have been left reading as authoritative-and-false. No `uses:`, `if:`, or behaviour outside the lane step was touched. Confirm that reading?", "options": [ "A — as implemented: the lane's mirror step, plus the stale cross-reference that names this issue.", "B — the mirror step only; file the stale cross-reference as its own follow-up issue." ], "recommendation": "A. The cross-reference is the same defect class as the card (a declared claim about the mirror that measurement has falsified), it is mechanical, its correct form is fixed by this PR's own evidence, no other claim holds that file, and it adds no gate surface. It is named explicitly in the PR body so it is reviewable rather than a drive-by." } ], "out_of_scope_findings": [ "filed as #6081: the release lane's mirror has no stable referent — `changesets/action@v1` is a MOVING tag whose bundled `@changesets/read` is a different major (^0.6.7) from the installed one (1.0.0), so a silent retag of v1 changes the mirror's referent and nothing in this repository fails. PR #6084 pins the `@v1` ref so a deliberate bump re-fails, which is all that is mechanically available; options (SHA pin / accept the superset / delete the mirror) are laid out there for the maintainer. Searched open issues first — no existing card covers it." ] }Generated by Claude Code
Generated by Claude Code
yinlianghui-tw commentedon Aug 24, 2026
os-dev-report
(The previous comment, #issuecomment-5398037689, carried the same payload behind an HTML-comment marker; GitHub's sanitizer ate the marker on write, which would have made it invisible to the PM's scan. This comment is the authoritative copy — identical JSON, literal-text marker.)
{ "issue": 5775, "status": "needs_decision", "branch": "claude/issue-5775-lane-changeset-reader-mirror", "pr": "https://github.com/objectstack-ai/objectui/pull/6084", "premise_still_valid": true, "summary": "The card's premise holds — the lane's mirror was measurably unfaithful — but re-deriving first falsified the dispatch order's prescribed FIX SHAPE. There is no single reader: `changesets/action@v1` is v1.9.0 and its shipped dist bundle carries `@changesets/read@^0.6.7` semantics (ignores only /^README\\.md$/i, never reads `.changeset/pre/`), while this repo installs `@changesets/read@1.0.0` via `@changesets/cli@3.0.1` (also ignores exact `AGENTS.md`/`CLAUDE.md`/`GEMINI.md`, and DOES read `.changeset/pre/*.md`). They disagree in OPPOSITE directions, so aligning the mirror strictly to the installed reader — the literal order — would have been a regression: `.changeset/AGENTS.md` is invisible to the installed copy and PENDING to the action's, so ignoring it here skips the release job's clear step while the action still sees a changeset, reproducing #5442's silent lost release. The mirror therefore counts the UNION of the two copies, which honours the order's other stop-sign ('do not weaken the lane's behaviour'). Both actual edits count MORE, never less: `.changeset/pre/*.md` is now scanned (with `pre/`-prefixed ids), and the README exclusion is case-folded. The pin — `scripts/__tests__/changeset-release-lane-mirror.test.ts` — extracts the step's script from the workflow and runs it against the IMPORTED installed reader over one fixture per case. Also corrected the card by measurement: `.changeset/ReadMe.MD` was never a differing case (both sides drop it on the case-SENSITIVE `.md` extension, not the README rule); the real disagreement needs `ReadMe.md`/`readme.md`. The residual architectural question is filed as #6081, not decided here.", "tests": "All from the repo ROOT, never package-scoped (objectui#3378); exit codes captured before any pipe. UNION RE-RUN ON FINAL COMMIT 254f76435 (= head of the pushed branch): `pnpm exec vitest run scripts/` -> exit=0, verdict lines `Test Files 66 passed (66)` / `Tests 1803 passed (1803)` (66 = the 65 pre-existing files in scripts/__tests__ plus mine, so the new file demonstrably ran). `pnpm exec vitest run scripts/__tests__/changeset-release-lane-mirror.test.ts` -> exit=0, `Test Files 1 passed (1)` / `Tests 21 passed (21)`. `pnpm type-check:scripts` -> exit=0 (tsc -p tsconfig.scripts.json, no diagnostics). `pnpm lint:root` -> exit=0, verdict `26 problems (0 errors, 26 warnings)`, all pre-existing no-explicit-any in files this PR does not touch. `pnpm check:control-bytes` -> exit=0, verdict `check-control-bytes: OK (scanned 5028 tracked text file(s); skipped 85 binary).` `pnpm changeset:check` -> exit=0, verdicts `All workspace packages are in the changeset fixed group.` / `No changeset declares a major bump.` Also a control-byte grep over the three diff files -> exit 1 (clean). LINT NARROWING, declared and measured (three pieces): (1) population read from `lint:root`'s own ignore patterns — packages, examples, apps, docs — and the diff has ZERO files in any of them; (2) file count read from eslint `--format json` on the new file: `files linted: 1`, errors 0, warnings 0; (3) invariance: eslint.config.js declares no projectService / project: / tsconfigRootDir / recommendedTypeChecked, so linting is not type-aware and this diff cannot move an untouched file's verdict. The repo-wide `pnpm lint` (turbo) is CI's. NON-VACUITY, observed, with rebuild-equivalent and on-disk confirmation: no build step applies (the mirror is a shell script read out of YAML, the reader is a prebuilt dep), so the confirmation step is that each mutation was verified against the LANE STEP'S OWN YAML-EXTRACTED SCRIPT, not `git diff` — the release job's clear step carries a byte-identical loop AND helper body, so a naive anchor lands on the wrong step and still shows a healthy diff. Mutation 1 (drop `.changeset/pre/*.md` from the lane glob): `removed-text before=1 after=0 | injected-text after=1`, then MUTATION_1_VITEST_EXIT=1 with `Tests 3 failed | 18 passed (21)` naming the pre/ case, the extraction case, and the dedicated non-vacuity case; RESTORE LEG re-verified (`removed-text back in LANE script = 1`). Mutation 2 (restore the exact-spelling README compare): `removed-text after=0 | injected-text after=1`, MUTATION_2_VITEST_EXIT=1, `Tests 3 failed | 18 passed (21)` naming the ReadMe.md case, the readme.md case, and its dedicated non-vacuity case. Both legs ran under a `trap` on EXIT INT TERM that restores the workflow. TWO EMPTY-MUTATION CATCHES, reported rather than quietly re-run: an early mutation-2 attempt died on `AssertionError: anchor count 2` (the clear step's identical helper) and an early mutation-1 anchor check mis-counted; both readings were DISCARDED and the anchors re-derived, not re-run until something landed. The same discipline is baked into the test file — its three in-test mutations each assert the mutation applied before reading its result — so non-vacuity stays proven on every CI run instead of living in this transcript. RESOLUTION HAZARD, resolved and printed: `@changesets/read` is NOT resolvable from the repo root (`root resolve @changesets/read => FAILED MODULE_NOT_FOUND`); it resolves only THROUGH `@changesets/cli`, to `/home/user/objectui-5775/node_modules/.pnpm/@changesets+read@1.0.0/node_modules/@changesets/read/dist/index.mjs`, version 1.0.0, type module with a single exports target and only index.mjs/index.d.mts on disk — so there is no require-vs-import half to pick wrongly. Byte-identical to the copy in a sibling worktree (diff clean). CI NOT AWAITED per the dispatch contract; gate status at report time is in_progress.", "open_questions": [ { "question": "The dispatch order said to align the mirror with the INSTALLED reader. Measurement says the two reader copies disagree in opposite directions, and matching the installed one alone regresses the publish lane. I implemented the union (safe under both) and did NOT remove the AGENTS.md/CLAUDE.md/GEMINI.md count. Is the union the intended reading, or should the mirror track exactly one copy?", "options": [ "A — UNION (what PR #6084 does): count a file if either copy counts it. Never under-counts, so the clear step can never be skipped while the action still sees a changeset. Costs: the mirror is knowingly not byte-faithful to either single copy, and its three over-counted names are justified by a measurement of a bundle that nothing in this repo pins.", "B — match the installed @changesets/read@1.0.0 exactly (the order's literal text). Makes the pin a clean equality and the comment simple. Costs: `.changeset/AGENTS.md` — the most plausible file to appear, and the one the card leads with — stops setting pending_changesets, the clear step is skipped, and changesets/action@v1 takes runVersion and publishes nothing. That is #5442's exact silent failure, re-armed.", "C — delete the mirror instead: run the clear step unconditionally on push rather than behind pending_changesets, so nothing has to predict the action's branch. Costs: rethinking why the lane job exists at all (it is there to answer the fact before install); benefits: removes this entire drift class permanently." ], "recommendation": "A, and it is what the PR implements. Real business need: this is the publish lane for every objectui release, and the failure mode B re-arms is a GREEN run that ships nothing — the defect #5442 already cost 16 versions before an audit caught it. Long-term soundness: A is contract-first in the only direction the consumer admits (the clear step's obligation is one-directional, so a superset is the correct contract, not a workaround); B is the shape that reads correct and is not. Hard to get wrong: A's stop-sign comment plus one assertion per name means the next agent who 'tidies' the mirror toward B gets three named red tests instead of a silent lost release. Startup scope discipline: A is the smallest change that closes the card — two edits, both counting more — and defers the genuinely expensive question (pinning the action) to #6081 rather than expanding this PR. C is the right long-term shape but belongs with the changesets/action@v2 migration the workflow header already anticipates, not here." }, { "question": "Scope conflict to flag rather than silently resolve: the order lists `changeset-release.yml` as out of scope, but the `lane` job's mirror — the card's whole subject — lives inside that file. I read the exclusion as 'the release job and the release behaviour', and touched only the lane's detect step plus one comment in the release job's header that cited this issue as a live defect and would otherwise have been left reading as authoritative-and-false. No `uses:`, `if:`, or behaviour outside the lane step was touched. Confirm that reading?", "options": [ "A — as implemented: the lane's mirror step, plus the stale cross-reference that names this issue.", "B — the mirror step only; file the stale cross-reference as its own follow-up issue." ], "recommendation": "A. The cross-reference is the same defect class as the card (a declared claim about the mirror that measurement has falsified), it is mechanical, its correct form is fixed by this PR's own evidence, no other claim holds that file, and it adds no gate surface. It is named explicitly in the PR body so it is reviewable rather than a drive-by." } ], "out_of_scope_findings": [ "filed as #6081: the release lane's mirror has no stable referent — `changesets/action@v1` is a MOVING tag whose bundled `@changesets/read` is a different major (^0.6.7) from the installed one (1.0.0), so a silent retag of v1 changes the mirror's referent and nothing in this repository fails. PR #6084 pins the `@v1` ref so a deliberate bump re-fails, which is all that is mechanically available; options (SHA pin / accept the superset / delete the mirror) are laid out there for the maintainer. Searched open issues first — no existing card covers it." ] }Generated by Claude Code
Generated by Claude Code
docs(citations): re-point the 30 dead objectstack#N citations and the…
docs(citations): re-point the last dead bare objectstack numbers and …