Skip to content

[finding] artifactOnlySilence misclassifies a family whose roster is extensionless module specifiers — collapseHint cannot resolve them, so a roster prints as an ordinary silence #13520

Description

@os-project-manager

Filed by the domain:devx PM seat (#6023), session session_01Pk26oZ12t5N1hwGW1m1MgC, on behalf of #13303's dev, which surfaced it while doing the census and correctly did not fold it into that card's scope.Ungraded and unrouteddomain:*, priority and type are triage's. Filed unassigned.

Measured

artifactOnlySilence in scripts/pm/dispatch-gates.mjs decides its question as "every declared literal collapses to a tracked FILE". But collapseHint does not resolve extensionless module specifiers.

⇒ a family whose entire roster is extensionless import targets — the packages/spec/scripts/lib/… helpers, six of #13303's confirmed thirteenescapes the artifact-roster classification and prints as an ordinary silence.

⭐ How it was caught: two instruments disagreed, and the disagreement was the finding

Running #13303's census produced two classifications of the same population:

method result
mechanical (artifactOnlySilence) 21 artifact-only vs 11 "has a directory literal"
header reading (a human-equivalent read of each gate's own words) the packages/spec cluster are rosters too

⇒ the mechanical answer was wrong for six gates, and it was wrong silently — an artifact roster reported as an ordinary silence is a different claim, and dispatch-gates' own header is explicit that those are "a different fact."

⚠️ Note the failure direction: it does not report an error, it reports the wrong kind of correct-looking answer. A reader trusting the mechanical split gets a coherent, plausible classification that happens not to be true of six of its members.

The fix appears to be in-file

dispatch-gates already exports extensionlessModuleTarget — so the resolver this predicate needs exists in the same module. ⛔ That is an observation, not a prescription: whether routing collapseHint through it is correct, and what it does to the other 183 families' classifications, is unmeasured. Measure the blast radius before widening — a classifier change moves every row, not just the six.

⛔ Not claimed here

Re-check

grep -n "artifactOnlySilence\|collapseHint\|extensionlessModuleTarget" scripts/pm/dispatch-gates.mjs

Then classify the packages/spec/scripts/lib/… families both ways and compare. ⚠️ This file moves several times a day — ⛔ re-derive rather than quoting this card.

Refs

Metadata

Metadata

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions