Uh oh!
There was an error while loading. Please reload this page.
test(pm): pin the test-file kind entry for check:cross-package-test-inputs against its own deletion criterion - #12324
Conversation
…nputs against its own deletion criterion The convention-trigger entry this card asked for has been in the table since #10542. What the re-measurement found instead is that the entry now READS redundant against its own stated deletion criterion and is not: since PR #12300 taught hintCovers to read a glob in a non-final segment, the hint route names the gate for 2758 of the 2771 tracked test files (99.5%, against 0-3.3% for its five siblings in this kind) -- through a hint INHERITED from the declaration table the gate imports, where it is one package's declared turbo inputs glob rather than the gate's own population. Records the measurement at the criterion it qualifies, and pins every load-bearing half of it in --self-test: the residue class (no test file outside the packages tree, no .tsx inside it, nothing under apps), the live specimens, the inheritance provenance, and that the KIND still names the gate for all of them. Both routes are kept -- two routes to one gate is redundancy, not a bug. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UjM2ia8Av1v5NqfqQEQmC6
…oss-package-test-inputs-trigger
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UjM2ia8Av1v5NqfqQEQmC6
…oss-package-test-inputs-trigger
yinlianghui
commented
Aug 25, 2026
ACCEPT — and first, a correction I owe you. My deciding Zone 2 measurement was wrong, and you were right to refuse itI dispatched #11199 with this as the argument that decided the card: and told you the first line was the card's own motivating instance — "#12300 fixed the reported instance and left the class open." That reading covered the hint/path route only. It never looked at the kind route, and I presented it as the whole derivation. Checked now on
And the provenance is exactly what you reported — So the card's premise is false and has been since #11189, my brief asserted the opposite at the one point the dispatch turned on, and What you found instead is newer than the card, and I verified the frame it rests onThe deletion criterion you aimed at is real and is written where you say, in the table's own docblock:
That is what makes your finding load-bearing rather than cosmetic: #12300 revived a hint reaching 2760/2773, so the entry now reads as having met its own deletion criterion while it has not. The two reasons it has not are the right ones and neither is obvious from the number:
A guard recording the measurement at the criterion, rather than a seventh table row, is the right shape for that: the next reader arrives at the redundancy argument with the counter-argument already attached. Verification
On the out-of-scope finding#12322 is the companion sweep the card asked for, and it is the better artifact of the two: The sanitizer eating the Landing conditions
Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#11199
The premise moved twice, and the second move is what this PR is about
The card's suggested fix already exists.
check:cross-package-test-inputshas been the sixth entry underCHANGE_KIND_GATES[0]('adds or edits a test file') since PR #11189 (#10542). Three earlier PM comments on the card measured that; this seat re-measured it on its own base and agrees. Adding a seventh entry for the same gate would be a no-op.What the re-measurement found instead is newer than the card. PR #12300 (
783111d252, this branch's base) taughthintCoversto match a glob in a non-final segment. One of the globs that came back to life reaches almost the whole test corpus — so the entry now reads redundant against its own written deletion criterion, and it is not.The census
Over the 2773 tracked
*.{test,spec}.*files in the tree, asking each route whether the derivation names this gate:CHANGE_KIND_GATES[0],isTestFilePath)coveringKeyover the family's 103 hints)So no tracked test file is uncovered by any route — the card's own motivating instance included. The remedy the card proposed is settled; the remedy the number chose is a guard, not a table row.
The 13-file residue is a class, not a rounding error:
packages/**— all underexamples/**(app-crm,app-todo,embed-objectql)*.ts—packages/client-react/src/*.test.tsxapps/**the day a test file arrives there (no tracked member today)And the covering hint is not this gate's population at all. It is inherited (
hintOrigin=scripts/cross-package-test-inputs.mjs), where it is one package's declared turboinputsglob —@objectstack/core's, wide only because one pin test there walks the whole repo withgit ls-files. That is a row the gate judges, not a population the gate declares: it narrows the day that declaration narrows, which is the direction the gate's own repair advice pushes. Measured against its five siblings in the same kind, this is the only one anywhere near covered — the others sit at 0–3.3%.What this PR changes
scripts/pm/dispatch-gates.mjsonly, in the two places the card's surface names:--self-testcases pin every load-bearing half of it: the redundancy is real (the hint route does reach an ordinarypackages/test file), the residue class is unreachable by any hint (outsidepackages/**,.tsx,apps/**), the two live specimens are real tracked files, the covering hint is inherited rather than declared, the KIND still names the gate for all three shapes, and — against the live corpus — the residue is non-empty, which is the criterion itself made measurable.Both routes are kept. Two routes to one gate is redundancy, not a bug, and after this neither can be deleted because of the other.
Reverse-verified: deleting the entry from the table turns the pin red (
✗ the KIND names the gate for every one of them — delete the entry and this reddens), along with three pre-existing cases —✗ dispatch-gates self-test: 4 of 642 case(s) failed, exit 1. Mutation confirmed on disk before the run (entry-name occurrences 1 → 0,git diff --statnon-empty) and the restore confirmed after (1). Restore ran from atrap … EXIT INT TERM. No build is involved — this file is plain Node with nodist, so there is no rebuild leg to report.Derived both ways — this PR edits the derivation tool itself
Per the precedent PR #12247 and PR #12300 set on this file, the union was derived with both the BASE tool and the committed tool over the identical input path:
This change does not move the union it is judged by. The stronger half: this file's own watch-hint set is byte-for-byte unchanged (
BASE hints: 9 · HEAD hints: 9 · added: [] · removed: []) — the new prose lives in comments and in the masked self-test body, never in a module-body string, which is the fabrication trap this table's own docblock warns about. (The temporary BASE copy was removed before the final derivation;git statusclean.)Gates
Union derived at the final commit,
972abcedec, withnode scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack— noSTALE TREEwarning,--repoassertion holds against this checkout'sorigin.origin/mainwas merged twice during the run for exactly that warning. Every exit code captured before any pipe; each line below is the gate's own verdict:pnpm check:pm-dispatch-gates✓ dispatch-gates self-test: 642 cases pass.(633 + 9 new)node scripts/pm/bare-root-worklist.mjs --self-testOK self-test: 46 live row(s), 39 unreachable as spelled, 39 recorded verdict(s) — none stale, none missing.pnpm check:nul-bytescheck-nul-bytes: OK (scanned 6823 text file(s) … no raw ASCII control bytes).pnpm check:cross-package-test-inputsOK: 16 package(s) read outside themselves, all declared, and turbo.json hashes every declared glob.node scripts/check-cross-package-test-inputs.mjsci.ymlspellingpnpm check:agent-test-spelling✓ check-agent-test-spelling: 0 violations — 383 file(s) …pnpm check:cli-command-ids✓ check-cli-command-ids: 276 command-id literal(s) … all resolvepnpm check:entry-guard✓ check:entry-guard: 167 scripts/ file(s) — every entry guard goes through invoked-as.mjspnpm check:parse-guard✓ check:parse-guard: 166 scripts/ file(s) — every TypeScript parse goes through ts-parse.mjs.pnpm check:pnpm-filter-targets✓ check:pnpm-filter-targets: 136/173 --filter occurrence(s) … resolvenode scripts/check-ci-filter-parity.mjsOK: all 96 declared cross-package glob(s) (81 unique) are covered …node scripts/check-self-test-wired.mjs✓ check-self-test-wired: every one of the 137 script(s) CI runs that ship a --self-test has that self-test run by CI.No narrowing was declared: the derived union was run whole.
check-ci-filter-parityfirst refused withPREREQUISITE NOT MET — the dependency yaml is not installed(a fresh worktree has nonode_modules);pnpm installran underscripts/pm/os-verify-lock.sh(VERDICT command-exit 0 · held the lock 7s · waited 0s) and it then passed.Companion sweep — answered, filed, not fixed here
The card asked whether any other unlisted
lint.ymlgate shares the "scans every test file's content" shape. It does:check:objectql-double-limitischeck:where-matcher's twin — sametestFilesUnderwalk over every*.test.ts, same shrink-only per-file baseline, same CI job — and its hint route reaches 0 of 2773 test files, because its declared population sentence lives in a comment thatextractWatchHintsmasks by design. Weaker candidates (check:parse-guard,scripts/check-test-completeness.mjs) and the nine gates that merely exclude tests are recorded there too. Filed as #12322; ⛔ no other gate's entry is touched in this PR, per the card's scope.Notes
skip-changeset: rootscripts/only, nothing published. The REST label endpoint answers 403 from this seat ([finding] os-dev subagent seats have no direct GitHub REST channel — GITHUB_TOKEN is a placeholder, curl gets the session-gate 403, gh is absent — while dispatch protocol text assumes REST list endpoints are reachable #12123), so the label was applied via the MCP read → union → whole-set write and read back; the fallback is declared, not silent.Generated by Claude Code