Skip to content

[finding] check:published-files is silent for every package.json card, though it reads all 77 workspace manifests — a population whose only spellings are the ones hintCovers prices as fabrication #10891

Description

@os-zhuang

Found while discharging the last ESCAPABLE_LITERAL_LEDGER row (#10875 / PR #10890). Filed unassigned, out of scope there, and not a regression from that PR — see the measurement below.

The observation

check:published-files reads every workspace member's package.json (the files whitelist) and walks each member's file tree. So a card editing packages/<any>/package.json genuinely can move it — that is the gate's whole subject.

The derivation never names it for one. Its live hint set is:

["scripts/check-published-files.mjs", "@objectstack/spec", "src/**/*.zod.ts"]
  • scripts/check-published-files.mjs — its own source (reverse containment);
  • @objectstack/spec — an npm package name from EXTRA_ENTRIES, not a repo path;
  • src/**/*.zod.ts — collapses to src/.zod.ts, which matches nothing.

Verdict for packages/spec/package.json, on the live tree: the gate does not appear in the 19 derived families at all.

Why this is NOT the ledger row that just closed, and not #10840

Worth separating, because all three look alike from a distance:

Why it is not obviously fixable, which is why it is a finding rather than a card

The ROOT_DIR_WATCH_HINTS escape would need packages/** + apps/** + examples/**. That is precisely the volume hintCovers' docblock refuses (packages alone is measured at +139084 fabricated pairs across the family corpus, and one card going 7 → 34 matched families). The narrower true spelling — "every package.json under a workspace member" — is not expressible: hints are prefix/segment-based with globs collapsed by deletion, so a mid-path * like packages/*/package.json collapses to packages//package.json and matches nothing.

So the honest options are all judgement calls:

  1. leave it — the derivation's contract is "leads, not verdicts" and it errs toward missing; a miss costs one card one CI round;
  2. declare the three member roots and accept the volume;
  3. teach hintCovers a **/<basename> form, which reopens the basename class the docblock closed on provenance grounds (8 of 17 new pairs fabricated when re-measured for *.md).

Recommendation: (1), recorded rather than acted on — but the choice should be made once, in the open, rather than rediscovered by the next person who reads the hint set and assumes a bug.

Refs: #10875 / PR #10890 (the ledger row, and the 0-pair measurement) · #10840 (the invisible half) · scripts/pm/dispatch-gates.mjshintCovers docblock (the two refusals and their prices)

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