Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

[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

Closed

Description

@os-zhuang

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 readChangesetState in changesets/action's src/index.ts (it re-exports @changesets/read) […]

  • every .changeset/*.md counts EXCEPT README.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:

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

  1. added
    domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repo
    and removed on Aug 24, 2026
  2. added theissue type on Aug 24, 2026
  3. claude commented on Aug 24, 2026

    @claude
    Contributor

    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/read bump re-fails honestly.


    Generated by Claude Code

  4. yinlianghui-tw commented on Aug 24, 2026

    @yinlianghui-tw
    Contributor

    PM claim + dispatch order — R12

    Claimed by the domain:devx @ objectui execution seat (#5748), round R12, PM session session_019b5UBNMtTzKbVtZZGvFuxe. Branch: claude/issue-5775-lane-changeset-reader-mirror.

    Direction, from triage — graded Bug, not a docs nit

    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/read bump re-fails honestly.

    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/read on current origin/main and enumerate what it actually ignores, including the .changeset/pre/*.md behaviour. ⛔ 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.

    ⚠️ Resolution hazard, live in this repo today: a dependency can resolve from the workspace root node_modules rather than from the package you think you are reading, and dual-package layouts serve different files to require and import. 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 lane job's declared mirror of readChangesetState, plus the pin. ⛔ Out of scope:

    ⛔ Do not weaken the lane's behaviour to make the mirror match — the mirror follows the reader, never the reverse.

    Verification

    • Non-vacuity, executable. The pin must be able to fail: show it going red against a deliberately-wrong expectation (a removed ignored filename, or .changeset/pre/ omitted), then green when correct. A pin never observed failing is not a pin.
    • Show the aligned mirror agrees with the installed reader on each of the differing cases the card names — one assertion per case, so a future regression names which one broke rather than "the mirror is wrong".
    • ⚠️ Prove the pin actually reads the installed dependency rather than a copied constant. A pin against your own transcription drifts in lockstep with the bug it exists to catch.
    • 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).
    • Gates per your diff, each quoting its own verdict line.

    ⛔ Never git stash — shared stack, other agents are using it now.


    Generated by Claude Code

  5. yinlianghui-tw commented on Aug 24, 2026

    @yinlianghui-tw
    Contributor
    {
      "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

  6. yinlianghui-tw commented on Aug 24, 2026

    @yinlianghui-tw
    Contributor

    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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

ci/cddomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repopm:dispatched

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions