Skip to content

[finding] check:doc-anchors declares a fabricated watch hint scripts/scripts/check-doc-anchors.mjs — a remedy string meant to run from the repo root is resolved module-relative, doubling the prefix #13449

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

check:doc-anchors carries a watch hint naming a path that has never existed:

scripts/scripts/check-doc-anchors.mjs

The doubled scripts/ is not a typo in a hint — it is a real string being read in the wrong frame. Line 459 of scripts/check-doc-anchors.mjs spells ./scripts/check-doc-anchors.mjs inside a remedy message, i.e. a command intended to be run from the repo root. The hint extractor resolves quoted path-shaped literals module-relative, so the gate's own directory is prepended and the prefix doubles.

⇒ Neither half is wrong on its own: the remedy string is correct for its reader, and the extractor is correct for a declaration. The fabrication comes from one being read as the other.

Why it is worth a card

This is the same class as its parent finding #13312 — a dispatch brief shown a lead that cannot ever match anything — but with a different cause, and the difference is what makes it separately fixable. #13312's fabrications are self-test fixture constants; this one is prose meant for a human, in a file that is otherwise correct.

⚠️ And #13312's own measurement is the reason this cannot be fixed by tightening the extractor: the sanctioned declaration idiom is structurally indistinguishable from an incidental module-scope constant (measured there at 8.6 real populations deleted per fabrication removed). ⇒ The honest fix is local to this gate — spell the remedy so it cannot be read as a declaration — not a change to how literals are scraped.

Current state

PR #13447 now annotates this hint as dead, so it is visible rather than silent. ⛔ That is the display half only; the fabricated literal is still declared, and the spelling fix belongs in scripts/check-doc-anchors.mjs, which was outside that card's file surface.

Reproduction

node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --residue
git ls-files 'scripts/scripts/*'            # 0

Then read scripts/check-doc-anchors.mjs around line 459 for the source string.

Dedup declaration

⚠️ search_issues returns FALSE ZEROS on this fleet (recorded on #13312), 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 (same symptom class, different cause — fixture constants, and it is this card's parent), #13448 (the hintCovers basename-glob defect filed alongside this one — a coverage predicate failure, not a fabricated literal), #12797 (a wrong reason on a bare hint), #13333 (a family the derivation does not reach).

⚠️ 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