You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[finding] the INVISIBLE half of the bare-root species is ~33 gates, not 4 — a population literal with no separator never reaches the hint set at all #10840
Observation-class, measured while implementing #10705 (the escapable-literal ledger, PR #10839). No gate is red. Filed unassigned, no pm:queue. ⛔ This is not a request to change hintCovers' :920 refusal — the +139084 measurement stands.
#10705 bounds the species where a bare root literal reaches the hint set: a source spelling
carrying a separator somewhere ('scripts/'), which extractWatchHints trims to the bare word scripts. That population is small and is now enumerated and gated — measured on a7ea3289eb, 4 literals, 2 escaped and 2 on the shrink-only ledger.
There is a strictly larger species beside it, and the ledger cannot see it. looksPathy
requires a separator:
So a gate whose population is spelled with no separator at all builds no hint whatsoever:
extractWatchHints("const POPULATION = 'packages';") -> [] <- invisible
extractWatchHints("const POPULATION = 'packages/';") -> ["packages"] <- #10705's species
extractWatchHints("const POPULATION = 'packages/**';")-> ["packages/**"] <- nameable
This is the same shape #10107 recorded and #10114 fixed for check-role-word.mjs' skills
root — but as a one-instance card. Nothing ever enumerated the class.
The measurement
Swept over all 128 discovered families on a7ea3289eb, restricted to quoted literals bound to
a population-declaring constant name (*_ROOT, *_ROOTS, *_DIR, *_DIRS, POPULATION, *_SCOPE) whose value is a bare top-level tracked directory, with comments and self-test
bodies masked: 34 (family, constant, word) triples, 33 of them undeclared.
The single declared one is check:examples-live-imports' EXAMPLES_ROOT = 'examples', which
took the escape in #10314 — i.e. the sweep finds exactly the shape the two landed fixes
addressed, and 33 more of them. A sample:
family
constant
word
check:engine-double-contract
SCAN_ROOTS
packages, examples
check:error-code-casing
SCAN_ROOTS
packages
check:skill-compatibility
PACKAGE_ROOTS, SKILLS_DIR
packages, apps, examples, skills
check:skill-frame-sync
SCAN_ROOTS
skills
check:verify-stand-in
SCAN_ROOTS
packages, examples
check:driver-conformance
DRIVERS_DIR, CASE_SETS_DIR
packages
check:resume-authority-declared
DEFAULT_SCAN_ROOTS
packages, examples
scripts/check-skills-token-ratchet.mjs
SKILLS_DIR
skills
(Full 33-row listing reproducible with the probe described below.)
The obvious wider sweep is unenforceable. Dropping the constant-name restriction and
flagging any bare top-level-dir literal yields 73 (family, word) pairs across 52 of 128
families — overwhelmingly join(ROOT, 'packages', …) path components in gates that never
read those roots. Demanding a subtree declaration for those is the +139084 fabrication
re-introduced one level up, and a shrink-only ledger seeded with 73 rows is an allowlist
nobody re-reads rather than a debt list.
Why it is worth a card anyway
The remedy per gate is known, cheap and already precedented twice (#10114, #10314): declare the
subtree spelling beside the constant and pin the coupling in that gate's own self-test, the way check-role-word.mjs does. What is missing is the worklist. Left alone, this class keeps
being re-found one gate at a time — which is precisely the discovery cost #10705 was filed to
end, still running in the half its ledger cannot reach.
Note the asymmetry that makes it worth doing deliberately: the remedy for a gate whose real
population is packages/** names that gate for every packages/** card. Whether that is
wanted is a per-gate judgement with fleet-wide blast radius on dispatch prompts, so this wants
triage as a batch, not 33 self-dispatched one-liners.
Reproducing
The probe is ~40 lines against the tool's own exported predicates (discoverFamilies, extractWatchHints, collapseHint, trackedFiles, maskSelfTests) plus maskComments; it
reads nothing from memory. Both numbers above (33 and 73) came from the same sweep with the
constant-name restriction on and off.
Refs
#10705 / PR #10839 (the visible half, now gated) · #10107 and PR #10114 (skills, first
instance) · #10314 (examples, second) · #10662 / #10687 (two more) · hintCovers' docblock
and extractWatchHints' looksPathy
Observation-class, measured while implementing #10705 (the escapable-literal ledger, PR #10839).
No gate is red. Filed unassigned, no
pm:queue. ⛔ This is not a request to changehintCovers':920refusal — the +139084 measurement stands.The distinction #10705 does not draw
#10705 bounds the species where a bare root literal reaches the hint set: a source spelling
carrying a separator somewhere (
'scripts/'), whichextractWatchHintstrims to the bare wordscripts. That population is small and is now enumerated and gated — measured ona7ea3289eb, 4 literals, 2 escaped and 2 on the shrink-only ledger.There is a strictly larger species beside it, and the ledger cannot see it.
looksPathyrequires a separator:
So a gate whose population is spelled with no separator at all builds no hint whatsoever:
This is the same shape #10107 recorded and #10114 fixed for
check-role-word.mjs'skillsroot — but as a one-instance card. Nothing ever enumerated the class.
The measurement
Swept over all 128 discovered families on
a7ea3289eb, restricted to quoted literals bound toa population-declaring constant name (
*_ROOT,*_ROOTS,*_DIR,*_DIRS,POPULATION,*_SCOPE) whose value is a bare top-level tracked directory, with comments and self-testbodies masked: 34 (family, constant, word) triples, 33 of them undeclared.
The single declared one is
check:examples-live-imports'EXAMPLES_ROOT = 'examples', whichtook the escape in #10314 — i.e. the sweep finds exactly the shape the two landed fixes
addressed, and 33 more of them. A sample:
check:engine-double-contractSCAN_ROOTSpackages,examplescheck:error-code-casingSCAN_ROOTSpackagescheck:skill-compatibilityPACKAGE_ROOTS,SKILLS_DIRpackages,apps,examples,skillscheck:skill-frame-syncSCAN_ROOTSskillscheck:verify-stand-inSCAN_ROOTSpackages,examplescheck:driver-conformanceDRIVERS_DIR,CASE_SETS_DIRpackagescheck:resume-authority-declaredDEFAULT_SCAN_ROOTSpackages,examplesscripts/check-skills-token-ratchet.mjsSKILLS_DIRskills(Full 33-row listing reproducible with the probe described below.)
Why this was NOT folded into #10705
Two reasons, both measured rather than argued:
ROOT_DIR_WATCH_HINTSsubtree declaration is the idiom to lift, not to reinvent. Detectingthis species needs a new heuristic over constant NAMES, which is a judgement call baked
into a regex, on a gate that runs on every PR.
flagging any bare top-level-dir literal yields 73 (family, word) pairs across 52 of 128
families — overwhelmingly
join(ROOT, 'packages', …)path components in gates that neverread those roots. Demanding a subtree declaration for those is the +139084 fabrication
re-introduced one level up, and a shrink-only ledger seeded with 73 rows is an allowlist
nobody re-reads rather than a debt list.
Why it is worth a card anyway
The remedy per gate is known, cheap and already precedented twice (#10114, #10314): declare the
subtree spelling beside the constant and pin the coupling in that gate's own self-test, the way
check-role-word.mjsdoes. What is missing is the worklist. Left alone, this class keepsbeing re-found one gate at a time — which is precisely the discovery cost #10705 was filed to
end, still running in the half its ledger cannot reach.
Note the asymmetry that makes it worth doing deliberately: the remedy for a gate whose real
population is
packages/**names that gate for everypackages/**card. Whether that iswanted is a per-gate judgement with fleet-wide blast radius on dispatch prompts, so this wants
triage as a batch, not 33 self-dispatched one-liners.
Reproducing
The probe is ~40 lines against the tool's own exported predicates (
discoverFamilies,extractWatchHints,collapseHint,trackedFiles,maskSelfTests) plusmaskComments; itreads nothing from memory. Both numbers above (33 and 73) came from the same sweep with the
constant-name restriction on and off.
Refs
#10705 / PR #10839 (the visible half, now gated) · #10107 and PR #10114 (
skills, firstinstance) · #10314 (
examples, second) · #10662 / #10687 (two more) ·hintCovers' docblockand
extractWatchHints'looksPathyGenerated by Claude Code