diff --git a/client/electron/test/debt-visibility.test.mjs b/client/electron/test/debt-visibility.test.mjs index 9d70149..6e5fd7d 100644 --- a/client/electron/test/debt-visibility.test.mjs +++ b/client/electron/test/debt-visibility.test.mjs @@ -31,23 +31,32 @@ const MARKERS = ['未覆盖', '未验', '已知缺口']; const REGISTERED = new Map([ ['background.test.mjs', 3], // 两条反向断言的未覆盖路(route B / route C)+ 说明 ['harmony-appearance.test.mjs', 4], // bgBlur 消费侧/映射、运行期形态类边界 - ['harmony-logic.test.mjs', 1] // `.ets` 状态机要跑起来才算数 + ['harmony-logic.test.mjs', 1], // `.ets` 状态机要跑起来才算数 + ['debt-visibility.test.mjs', 9] // 本文件:N 处是词表定义 + 报错文案(第 N+1 处即红) ]); const HERE = dirname(fileURLToPath(import.meta.url)); -test('★ 判据目录里的“未覆盖/未验/已知缺口”声明,必须在余额里有对应的一笔', () => { +test('★ 用**已登记词表**声明边界的文件,必须在余额里有对应的一笔(词表外的说法不在本判据范围内)', () => { const ledger = JSON.parse(prose(join(HERE, '..', '..', '..', 'docs', 'DEBTS.json'))); const wheres = ledger.debts.map(d => `${d.where || ''}`); /* - * 自指豁免(**按文件 + 理由**):本文件**定义**了这套措辞(MARKERS 里那三个词), - * 所以它自己必然包含它们 —— 用自己定义的词表来数自己是无意义的(数出来的只会是"我提到了几次")。 - * 这是"定义词表者不被该词表计数",不是"凡是判据目录都放行"。 - * 自检:本条判据**第一次跑就把自己抓出来了**(11 处未登记),说明计数机制是活的。 + * 本文件**也**在受判之列 —— 而且**按次数**登记,不整文件放行(pi 2026-09-14)。 + * + * 我第一版给它的是"整文件豁免",理由是"用自己定义的词表数自己无意义"。这句话是对的, + * 但它推出的是"**这 N 处**无意义",不是"**这个文件**无意义":整文件放行的后果很具体 —— + * 将来有人在这个文件里写一句真实的「这里没判 / 已知缺口」,①不会红。 + * 那就是 `migrate.go` 那个形状换了个落点,这次落在判据自己身上。 + * + * 所以现在把 N 当成普通登记值:N 处是**词表定义与报错文案**(它们必须提到这些词), + * 第 N+1 处就是新的边界声明 ⇒ 红。 + * + * **词表是采样、不是完备**(同一个词表键控的盲区):换 `TODO` / 「这里没判」/「跳过」 + * 等同义说法声明同一个边界,本判据**抓不到** —— 这条盲区已登记在 `docs/DEBTS.json` + * 的 `boundary-vocabulary-incomplete`,所以在默认路径的余额里看得见,不靠记得。 */ - const SELF = 'debt-visibility.test.mjs'; - const files = readdirSync(HERE).filter(f => (f.endsWith('.test.mjs') || f.endsWith('.mjs')) && f !== SELF); + const files = readdirSync(HERE).filter(f => f.endsWith('.test.mjs') || f.endsWith('.mjs')); const findings = []; for (const f of files) { const src = prose(join(HERE, f)); diff --git a/docs/DEBTS.json b/docs/DEBTS.json index 8286e4a..0d7820f 100644 --- a/docs/DEBTS.json +++ b/docs/DEBTS.json @@ -54,6 +54,12 @@ "count": 1, "due": "**第一次给导航元素加工具类模糊(Tailwind `backdrop-blur-*`)时**堵", "where": "同上文件 —— **已知未覆盖的回滚路径**:元素级 `backdrop-blur-lg` 不在那条选择器下,变异确认过逃得掉" + }, + { + "id": "boundary-vocabulary-incomplete", + "count": 1, + "due": "有人用**词表外**的说法声明边界时(`TODO`、「这里没判」、「跳过」…)——发现即扩词表,并把那一处登记;在此之前它抓不到", + "where": "client/electron/test/debt-visibility.test.mjs(词表键控的盲区:**已知未覆盖**——词表是采样、不是完备)" } ] }