Skip to content

Commit 52ef672

Browse files
claude[bot]claude
andauthored
fix(pm): route the artifact-roster classifier through the file's own resolver (#13862)
* fix(pm): route the artifact-roster classifier through the file's own resolver `artifactOnlySilence` decided "every declared literal is a tracked FILE" with `trackedFiles.has(collapseHint(h))` — a private, weaker copy of a question this file already has an owner for. `hintCovers` follows a dropped extension through MODULE_SPECIFIER_EXTENSIONS and `extensionlessModuleTarget` names the file such a specifier resolves to; this predicate followed neither, so a family whose roster is extensionless import targets failed the every-literal test and printed as an ordinary silence — a different fact, and one that reads as a clearance. The repair is the single owner, not a list of the families it got wrong: `declaredFileTarget` is now the one answer to "the tracked FILE this declared literal names", composed from the membership test and the resolver, with patterns refused up front. `artifactOnlySilence` asks it and holds no rule of its own, and takes the `watchHintTree` bundle rather than a bare file set — refusing the bare set loudly, since that is exactly the input that mis-categorises silently. Measured over the whole fleet at 16c3601 (192 families, 754 distinct hints, 7605 tracked files): artifact-roster families 30 -> 39 (+9, ZERO lost), zero existing rosters whose membership or directory moved, and literals where the covering rule and the classifier disagree 40 -> 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Pk26oZ12t5N1hwGW1m1MgC * test(pm): state the class guard over the CLASSIFIER, not over the resolver The first spelling of the fleet-wide agreement case compared `declaredFileTarget` against `hintCovers`. The ablation that put the old per-literal rule back inside `artifactOnlySilence` left the resolver untouched, so that case was GREEN against the exact bug it exists to catch — a guard on the owner does not hold the caller to it. Restated at family grain over the classifier's own output: 5 of 1060 cases red under the ablation before, 6 after, and the sixth is the one that generalises past the fixture. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Pk26oZ12t5N1hwGW1m1MgC --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 46b53a2 commit 52ef672

1 file changed

Lines changed: 297 additions & 17 deletions

File tree

0 commit comments

Comments
 (0)