Measured by the #13312 dev seat (PR #13447) while censusing dead watch-hint literals across all families. Filed by the PM rather than the finder — the dedup channel is down, so it correctly filed nothing blind and handed the finding back.
⛔ No domain:*, no priority, no type label — triage's field.
The defect
hintCovers in scripts/pm/dispatch-gates.mjs does not follow a final-segment basename glob. So the hint
measures as covering zero tracked files, while the tree holds roughly 400 matching changesets.
⇒ Several changeset-gate hints are measured dead when they are in fact live and matching.
⚠️ The second half, which is why this is worth a card rather than a note
unreachableReason labels those families "layout moved". That is false — the layout did not move; the matcher cannot follow the glob shape.
⭐ So the residue output does not merely under-report: it states a specific wrong cause, and a reader who acts on it goes looking for a directory rename that never happened. That is the same register as the fabricated leads #13312 itself is about — an instrument whose output is well-formed and wrong — one layer down, in the coverage predicate rather than in the literal scraper.
⚠️ Fixing it MOVES VERDICTS, which is why it was not folded into PR #13447
Correcting hintCovers makes those families match more cards — a live change to which gates a dispatch brief names, not a display change. PR #13447's annotator is deliberately display-only with zero verdict movement, so folding this in would have broken that property and made its own blast radius unmeasurable.
⇒ It needs its own card, its own before/after census of which cards gain which families, and its own review.
⚠️ Live consequence today, stated honestly
PR #13447 now annotates these hints as dead and prints the pre-existing false reason verbatim. The annotation is honest about deadness; the reason string is the existing renderer's. ⇒ Until this card lands, the residue listing says "layout moved" about families whose layout is exactly where it has always been. ⛔ That is a disclosed consequence of landing the annotator, not a regression it introduced.
Reproduction
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --residue
git ls-files '.changeset/*.md' | wc -l # roughly 400
Compare the changeset families' names: line and their unreachableReason against that count.
Dedup declaration
⚠️ search_issues returns FALSE ZEROS on this fleet (recorded on #13312 itself), so a zero from it is not a reading. Dedup was done by the PM through list_issues over the full domain:devx open population, 108 cards, read three times this round. Nearest neighbours examined and rejected as distinct: #13312 (fabricated literals in the scraper, display-only, this card's parent finding), #12797 (a wrong reason on a bare hint, recorded as "zero instances today" — closest in shape, but a different reason path and a different trigger), #13333 (a family the derivation does not reach at all).
⚠️ That listing covers one lane only. A duplicate under another domain:*, or with no domain label, would not have been seen.
Refs
Measured by the #13312 dev seat (PR #13447) while censusing dead watch-hint literals across all families. Filed by the PM rather than the finder — the dedup channel is down, so it correctly filed nothing blind and handed the finding back.
⛔ No
domain:*, no priority, no type label — triage's field.The defect
hintCoversinscripts/pm/dispatch-gates.mjsdoes not follow a final-segment basename glob. So the hintmeasures as covering zero tracked files, while the tree holds roughly 400 matching changesets.
⇒ Several changeset-gate hints are measured dead when they are in fact live and matching.
unreachableReasonlabels those families "layout moved". That is false — the layout did not move; the matcher cannot follow the glob shape.⭐ So the residue output does not merely under-report: it states a specific wrong cause, and a reader who acts on it goes looking for a directory rename that never happened. That is the same register as the fabricated leads #13312 itself is about — an instrument whose output is well-formed and wrong — one layer down, in the coverage predicate rather than in the literal scraper.
Correcting
hintCoversmakes those families match more cards — a live change to which gates a dispatch brief names, not a display change. PR #13447's annotator is deliberately display-only with zero verdict movement, so folding this in would have broken that property and made its own blast radius unmeasurable.⇒ It needs its own card, its own before/after census of which cards gain which families, and its own review.
PR #13447 now annotates these hints as dead and prints the pre-existing false reason verbatim. The annotation is honest about deadness; the reason string is the existing renderer's. ⇒ Until this card lands, the residue listing says "layout moved" about families whose layout is exactly where it has always been. ⛔ That is a disclosed consequence of landing the annotator, not a regression it introduced.
Reproduction
Compare the changeset families'
names:line and theirunreachableReasonagainst that count.Dedup declaration
search_issuesreturns FALSE ZEROS on this fleet (recorded on #13312 itself), so a zero from it is not a reading. Dedup was done by the PM throughlist_issuesover the fulldomain:devxopen population, 108 cards, read three times this round. Nearest neighbours examined and rejected as distinct: #13312 (fabricated literals in the scraper, display-only, this card's parent finding), #12797 (a wrong reason on a bare hint, recorded as "zero instances today" — closest in shape, but a different reason path and a different trigger), #13333 (a family the derivation does not reach at all).domain:*, or with no domain label, would not have been seen.Refs
dispatch-gates --residueprints THREE fabricated leads for check:query-options-erasure — literals naming files that have never existed, unannotated because one live sibling keeps the family reachable #13312 / PR fix(devx): dispatch-gates marks dead watch-hint literals in reachable families and refuses @-scoped specifiers as paths (#13312) #13447 — the census that surfaced this; its annotator is what makes the false reason visiblescripts/pm/dispatch-gates.mjs—hintCovers,unreachableReason