---
"@ux-team/tvu-design-system": minor
---

**mockup 走查引擎新增第 13 条规则 `hash-n-semantic`（§M40 `#N` 标号的语义声明）**（owner 2026-09-07 拍定声明格式后落地）。

此前 §M40 这条规则**两端都没有任何机制在看**：mockup 侧无闸，code 端本该有的镜像规则实测不存在。而它自陈的病因逐字是「Spec 不文档化 = 开发自由发挥 = **50% 翻车**」—— 交付里出现 `#1` `#2` `#3` 这类标号时，用户删掉 `#2` 之后该重排（`[#1 #2 #3]`）还是留空档（`[#1 #3 #4]`），只有声明了开发才知道。

- 新增判据真源 `scripts/audit-mockup-hash-n-semantic.mjs`（纯函数，随包发布）+ 规则模块 `scripts/mockup-rules/hash-n-semantic.mjs`，经 `audit-mockup-conformance.mjs` 的规则注册表挂载。
- **判据只有两条，刻意很窄**：`M40-A` 一个交付单位内出现 ≥2 个不同 `#N` 标号却没有一行合法声明；`M40-B` 出现了 `#N semantic:` 声明但值不在闭集 `{sequence, name}` 里。
- **规则正文同批加了声明格式**（`mockup-conventions.md` §M40）：卡上写一行 `#N semantic: sequence（自动生成 · 删除后重排）` 或 `#N semantic: name（手动输入 · 删除后不改后续序号）`。判自己该选哪个的问法也换了 —— 从「fungible 还是 identifiable」（抽象分类，答不出）换成「这个号是系统按位置生成的、还是这条数据自带的」（答得出），两者与原值域**一对一**，⛔ 没引入新语义。

**⚠️ consumer 影响（可能新报红）**：跑 `audit:mockup-conformance` 的消费产品，若交付里有带 `#N` 标号的列表而没写声明，本轮起会多出 `M40-A` findings。这是本来就该被发现的缺口，不是回归；补一行声明即消。想暂时排除用 `--rule` 选择器。

**⛔ 覆盖边界，如实登记**：
- 本判据只实现 §M40 三条核查项里的**第 1 条**。第 2 条（sequence 类型必画 after-remove 帧）与第 3 条（spec / PRD / 实现三处语义一致）不管 —— 后者的另两处判定面不在 DS 仓。`covers-acceptance` 自陈的 `[3]` 是**变更探测的锚**，⛔ 不是覆盖度声明。
- 「这个号是不是自动生成的」在 Figma payload 侧**探不到**（两种情况都是手打的文字图层）⇒ 能机检的只有「声明写了没有 / 值合不合法」。可机检的那一侧是 code 端，而那条镜像规则仍不存在。
- **未在 live payload 上标定过**：两条假阳防线（先剥 hex 颜色再找标号 · 要求 ≥2 个不同数字）只在合成节点树上验过（17 条单测，含 4 条阴性对照；造故障拆掉 hex 防线后**恰好**那两条阴性对照转红）。首次真跑前 ⛔ 别当阻塞档用。
