Filed from flight ①'s calibration (program #13658, PR #13674): 3 of the 6 measured falsehoods in objectstack-formula were PHANTOM ROWS — surface tables citing identifiers that no longer exist or never did (etl.schedule / sync.schedule retired #6414/#4738 · system/notification's 5 template fields removed under ADR-0049 #4610 · titleTemplate/bodyTemplate with zero hits across packages/**/*.ts). Each was detectable by one repo-wide grep of the cited identifier — no semantics needed.
The gate's shape (dispatch decides details; this is the measured direction)
A scripts/check-skills-* gate that extracts identifier-shaped citations from skills/** table rows (backtick-quoted schema keys, field names, metadata kinds) and greps each against the implementation tree: zero hits = red naming the row and the identifier. Known hard parts to design for, from flight ①'s data:
- allowlist for deliberately-abstract placeholders (
<task>, record.x) and for prose examples that are not citations;
- a positive control in the self-test (a known-live identifier must be found; a known-phantom seeded fixture must go red) — the instrument-calibration discipline;
- it complements, never replaces, the behavioral sweep: it catches existence, not semantics (
defaultValue mis-typed as an Expression slot greps fine and is still false).
Why it clears the value gate
Mechanical construct over prose vigilance (#12911); would have caught 3/6 of flight ①'s falsehoods for pennies; the sweep program (#13658) fixes today's corpus but nothing stops tomorrow's retirement PRs from re-creating phantoms — ADR-0049 removals are routine and skills tables are exactly where their corpses accumulate. Runs in the existing skills gate family beside the token ratchet.
Serial note: independent file surface (new script + CI wiring) — no conflict with the sweep flights. Refs: #13658 (program) · PR #13674 (the three phantoms, with evidence) · PR #13577 (the class's first proof).
Generated by Claude Code
Filed from flight ①'s calibration (program #13658, PR #13674): 3 of the 6 measured falsehoods in
objectstack-formulawere PHANTOM ROWS — surface tables citing identifiers that no longer exist or never did (etl.schedule/sync.scheduleretired #6414/#4738 ·system/notification's 5 template fields removed under ADR-0049 #4610 ·titleTemplate/bodyTemplatewith zero hits acrosspackages/**/*.ts). Each was detectable by one repo-wide grep of the cited identifier — no semantics needed.The gate's shape (dispatch decides details; this is the measured direction)
A
scripts/check-skills-*gate that extracts identifier-shaped citations fromskills/**table rows (backtick-quoted schema keys, field names, metadata kinds) and greps each against the implementation tree: zero hits = red naming the row and the identifier. Known hard parts to design for, from flight ①'s data:<task>,record.x) and for prose examples that are not citations;defaultValuemis-typed as an Expression slot greps fine and is still false).Why it clears the value gate
Mechanical construct over prose vigilance (#12911); would have caught 3/6 of flight ①'s falsehoods for pennies; the sweep program (#13658) fixes today's corpus but nothing stops tomorrow's retirement PRs from re-creating phantoms — ADR-0049 removals are routine and skills tables are exactly where their corpses accumulate. Runs in the existing skills gate family beside the token ratchet.
Serial note: independent file surface (new script + CI wiring) — no conflict with the sweep flights. Refs: #13658 (program) · PR #13674 (the three phantoms, with evidence) · PR #13577 (the class's first proof).
Generated by Claude Code