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

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions