30ebbe0c26
本笔不改任何代码行为,只补一条**已存在的保护洞**(Lead 裁定 2026-10-25 随道E task-15 顺手提 独立提交)。 现象:font-charset 门禁的"未知冗余"WARN 清单(txt 有、源码无、且不在 KEEP_EXTRA)实测正好 35 字——一位公分合外已年度延态总接显最月未求温状电示秒请跳载近道部配重长间闸障。这批字是 2026-09 窗口固件写进 /log/selftest.log 与 /log/run.log 定长 64 B 记录的中文描述用字(那批 源码文案后来整体改写成 ASCII,字面量已不在)。 为什么要登记而不是当冗余删掉: - extract_cn.py 只认"当前源码字面量"(实测 144 字),而 ui_cn_chars.txt 现有 183 字。谁按 extract 的输出重写 txt(font-regen 流程的第 2 步就是这么用的),这 39 字(含此前逐字登记的 异/常/片/芯 4 字)会被静默洗掉,下次 make_font 生成的字体不再有这些字形; - 后果不在本机、在**现场翻旧账**时:2026-09 那批历史自检/运行记录渲染成空白方块,无日志无 报错,只能肉眼发现;字形不可再生,等于不可逆毁历史审计证据; - 代价:约 35 字 × 27 B ≈ 1 KB RO。收益/代价不对称(同本目录"收益不抵风险"整簇暂缓的判据)。 诚实处理:这 35 字**逐字出处已不可靠复原**(能确认来源是落盘记录用字,指不到单条 commit)。 故按"成组 + 一条共同理由"登记,不给每个字编一条看起来可信的理由;删除前置条件写明(确认设备 上已无该窗口落盘记录,或产品侧接受历史记录部分空白),并把成因与事故路径实名写进门禁说明。 改动 - scripts/check_font_charset.py:KEEP_EXTRA 4 → 39 字(新增 _KEEP_HIST_SELFTEST 成组 理由 + update 并入 35 字);A 段按"必需字"处理,缺字即 GAP FAIL 并逐字打印理由 (--strict 同样拦) - docs/门禁说明/font-charset.md:新增 §6.1「按 extract 输出重写字符集 = 洗字形」(实测数字 144/183/39、事故路径、机械化拦截点、删除前置条件);§5/§6/§7 与变更记录联动 - .dsh/skills/font-regen/SKILL.md:第 2 步的保留字提示不再逐字列举(列举必然过期),改为指向 KEEP_EXTRA 字典与门禁说明 §6.1——**共享基建文件,越界自加,见回报申报** 验证(本笔零代码、零像素、零体积,钩子全绿未跳): - check_font_charset.py:rc=0,打印 [KEEP] 刻意保留 39 个;--strict 亦 rc=0(原 35 项 WARN 归零) - 钩子(staged 全量):空白/EOF/乱码/doc-links/id-check/font-charset 全 Passed,体积两条 钩子因无相关触发面自动 Skipped;@build 未跑(无源码改动,台账不受影响) - 编码自查:三文件均无 BOM(与本目录现状一致)、CR = 0、U+FFFD = 0