You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A passing checker means nothing if the checker is blind. Add
test/tm-mutation.ts: it injects a catalogue of known gaps into the emitted
grammar (drop a key / all of a token's includes, neuter a scope to the bare
root, add a dead key, a dangling include, mis-scope a token to a wrong role,
reorder two disambiguation patterns) and records which detector layer kills
each — measuring the detector's power instead of asserting it.
Measured: every PRESENCE / REACHABILITY gap is killed corpus-free (16/16,
12/16 by reachability / token-census / the new flat-token neuter check);
WRONG-ROLE gaps are caught only by a differential witness (presence ≠
correctness); ORDERING gaps are a measured blind spot — TextMate is
order-sensitive and pattern rank lives in the emitted artifact, not the
grammar algebra, so no corpus-free structural check reaches it. This is the
honest boundary, now empirical: the structural proof covers presence +
reachability; ordering / correctness are the soundness axis, reached only by
evaluation. The over-claim of an a-priori "no gap can hide" over the whole
gap space is dropped — COMPLETENESS.md states the bounded, measured claim.
The harness motivated one detector strengthening: tokenCensus now flags a
flat token NEUTERED to the bare root scope (an entry that exists but paints
inert document text), moving that gap class from differential-only to
corpus-free. Wired as a meta-gate in `npm run check`.
@@ -510,6 +518,7 @@ async function main(): Promise<void> {
510
518
check(`reachability(${cfg.name}): no dangling self-#refs with present source`,r.danglingWithSource.length===0,r.danglingWithSource.join(', '));
511
519
consttc=tokenCensus(g,tmJson);
512
520
check(`token-completeness(${cfg.name}): every non-skip token has a discharge path`,tc.orphans.length===0,`orphans: ${tc.orphans.join(' ')}`);
521
+
check(`token-completeness(${cfg.name}): no flat token is neutered to the bare root scope`,tc.neutered.length===0,`neutered: ${tc.neutered.join(' ')}`);
0 commit comments