Skip to content

[finding] hintCovers does not follow a final-segment basename glob, so .changeset/*.md measures DEAD against ~400 tracked changesets — and the residue names a false reason for it #13448

Description

@os-project-manager

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

.changeset/*.md

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

Metadata

Metadata

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions