What this is
The companion sweep #11199 asked for and did not measure: "whether any other currently-unlisted gate in lint.yml shares this same 'scans every test file's content' shape and is missing from the same list for the same reason." Measured while working #11199; not fixed there — that card's declared surface is the one entry, and widening other gates' entries is a separate judgement.
Method
For every check family the workflows discover, hint-route coverage was computed over the whole tracked test corpus (coveringKey(entry, path) — the same key derive uses), then intersected with the gates whose own source selects test files into a population (as opposed to excluding them).
Corpus: 2773 tracked *.{test,spec}.* files at 355a742747.
| gate | in CHANGE_KIND_GATES[0]? | hint route over the test corpus |
|---|
check:query-options-erasure | listed | 0 / 2773 |
check:engine-double-contract | listed | 0 / 2773 |
check:where-matcher | listed | 0 / 2773 |
check:type-check-coverage / -debt | listed | 91 / 2773 (3.3%) |
check:cross-package-test-inputs | listed | 2760 / 2773 (99.5%, and inherited — see #11199) |
check:objectql-double-limit | unlisted | 0 / 2773 |
check:parse-guard | unlisted | 0 / 2773 |
scripts/check-test-completeness.mjs (ci.yml) | unlisted | 0 / 2773 |
check:driver-conformance | unlisted | 257 / 2773 (9.3%) |
The strong instance: check:objectql-double-limit
It is check:where-matcher's twin, and that gate is listed:
- same walk idiom, in its own source —
testFilesUnder(...), else if (/\.test\.ts$/.test(entry)) acc.push(p); - same population — every
*.test.ts in the tree, judged for a hand-written ObjectQL double - same repair posture — a shrink-only per-file baseline (
scripts/objectql-double-limit.baseline.json), so a late red is not repaired by a line - same CI job —
lint.yml's "Lint & Repo Gates" - a new fake
find() double, or a new test file carrying one, moves it
Its declared population is written down — "…a function bound to a property named find … in packages/**/*.test.ts" — but that sentence lives in a comment, which extractWatchHints masks by design. So the derivation reaches it for 0 of 2773 test files, and a dev who adds a test double runs a full green union with no local signal that this gate exists to fail.
Note #11525 (closed) converted a measured population of 40 blind / 44 live-bound doubles behind this gate: the class where a late discovery is expensive rather than cosmetic.
Suggested fix, not asserted as the only one
Add check:objectql-double-limit as a seventh entry under CHANGE_KIND_GATES[0], alongside check:where-matcher, whose why already records that the two gates ride the same test code. Cheap, no new machinery, and the entry carries a stated deletion criterion like its siblings.
Weaker candidates, recorded rather than proposed
check:parse-guard — test files enter its census with their own tier (const isTest = /\.(?:test|spec|pin\.test)\.[cm]?[jt]sx?$/.test(rel)), 0/2773 on the hint route. Whether a new test file can actually move its verdict was not measured here.scripts/check-test-completeness.mjs (a ci.yml direct invocation) — 0/2773; a package's first test file plausibly moves it.check:driver-conformance — 9.3%; its real population is the driver suites, so its hints may already be proportionate.
Explicitly NOT candidates (checked, cleared)
Gates whose test-file regex excludes tests rather than selecting them: check:cli-command-ids, check:published-files, check:error-status-conformance, check:meta-type-normalized, check:resume-authority-declared, check:verify-stand-in, check:dispatcher-error-vocabulary, check:runtime-services-index, check:org-identifier. Also cleared: scripts/partition-test-shards.mjs --self-test (a self-test family follows no population, per #11404), and check:test-source-alias / check:page-declaration-shape / check:published-files, whose hints already cover 2773/2773.
What this is
The companion sweep #11199 asked for and did not measure: "whether any other currently-unlisted gate in
lint.ymlshares this same 'scans every test file's content' shape and is missing from the same list for the same reason." Measured while working #11199; not fixed there — that card's declared surface is the one entry, and widening other gates' entries is a separate judgement.Method
For every check family the workflows discover, hint-route coverage was computed over the whole tracked test corpus (
coveringKey(entry, path)— the same keyderiveuses), then intersected with the gates whose own source selects test files into a population (as opposed to excluding them).Corpus: 2773 tracked
*.{test,spec}.*files at355a742747.CHANGE_KIND_GATES[0]?check:query-options-erasurecheck:engine-double-contractcheck:where-matchercheck:type-check-coverage/-debtcheck:cross-package-test-inputscheck:objectql-double-limitcheck:parse-guardscripts/check-test-completeness.mjs(ci.yml)check:driver-conformanceThe strong instance:
check:objectql-double-limitIt is
check:where-matcher's twin, and that gate is listed:testFilesUnder(...),else if (/\.test\.ts$/.test(entry)) acc.push(p);*.test.tsin the tree, judged for a hand-written ObjectQL doublescripts/objectql-double-limit.baseline.json), so a late red is not repaired by a linelint.yml's "Lint & Repo Gates"find()double, or a new test file carrying one, moves itIts declared population is written down —
"…a function bound to a property named find … in packages/**/*.test.ts"— but that sentence lives in a comment, whichextractWatchHintsmasks by design. So the derivation reaches it for 0 of 2773 test files, and a dev who adds a test double runs a full green union with no local signal that this gate exists to fail.Note #11525 (closed) converted a measured population of 40 blind / 44 live-bound doubles behind this gate: the class where a late discovery is expensive rather than cosmetic.
Suggested fix, not asserted as the only one
Add
check:objectql-double-limitas a seventh entry underCHANGE_KIND_GATES[0], alongsidecheck:where-matcher, whosewhyalready records that the two gates ride the same test code. Cheap, no new machinery, and the entry carries a stated deletion criterion like its siblings.Weaker candidates, recorded rather than proposed
check:parse-guard— test files enter its census with their own tier (const isTest = /\.(?:test|spec|pin\.test)\.[cm]?[jt]sx?$/.test(rel)), 0/2773 on the hint route. Whether a new test file can actually move its verdict was not measured here.scripts/check-test-completeness.mjs(aci.ymldirect invocation) — 0/2773; a package's first test file plausibly moves it.check:driver-conformance— 9.3%; its real population is the driver suites, so its hints may already be proportionate.Explicitly NOT candidates (checked, cleared)
Gates whose test-file regex excludes tests rather than selecting them:
check:cli-command-ids,check:published-files,check:error-status-conformance,check:meta-type-normalized,check:resume-authority-declared,check:verify-stand-in,check:dispatcher-error-vocabulary,check:runtime-services-index,check:org-identifier. Also cleared:scripts/partition-test-shards.mjs --self-test(a self-test family follows no population, per #11404), andcheck:test-source-alias/check:page-declaration-shape/check:published-files, whose hints already cover 2773/2773.