# CANONICAL-F103 —— 真源里混入的项目级内容：全量判定表
> **扫描面**：**五个 convention 文件的全文**（`mockup-conventions.md` 3054 行 · `design-process.md` 1488 · `domain-tvu.md` 270 · `code-conventions.md` 1408 · `CONVENTIONS-OVERVIEW.md` 264），逐节判定 —— ⛔ 不是强特征命中集（详见下方 §Scope 声明）

> 日期：2026-08-06 · owner 派单（2026-08-05）· 判据 = [`mockup-conventions.md` §M-DISCIPLINE.SOURCE](../mockup-conventions.md) 三问
> **本轮只判定、不搬迁**（owner 选定）。搬迁动作下轮执行。

## Scope 声明（§M-DISCIPLINE.SCOPE 硬约束 1 / 4）

**对象全集 = 五个 convention 文件的全文**（不是强特征命中集，也不是 owner 点名的那两条）：

| 文件 | 行数 | 判定粒度 |
|---|---|---|
| `mockup-conventions.md` | 3054 | 逐节（§ / M-rule / 表） |
| `design-process.md` | 1488 | 同上 |
| `domain-tvu.md` | 270 | 同上 |
| `code-conventions.md` | 1408 | 同上 |
| `CONVENTIONS-OVERVIEW.md` | 264 | 同上 |

**强特征扫描**（node-id `` `\d{2,5}:\d+` `` / file-key `` `[0-9a-zA-Z]{20,}` `` / 10 个产品名 / 9 个人名）只用来**定位候选**，不用来定 scope —— 命中 ≠ 违规，未命中 ≠ 合规（例：一段规则可以在不写任何 id 的情况下整段是项目资料）。因此每个文件仍逐节过了一遍标题与段落主张。

## 三问速查（判定时逐条套）

① 换一个产品还成立吗 → 不成立 = 项目资料
② 是「做法 / 判据」还是「取值 / 清单 / 标识符」 → 后者 = 项目资料
③ 别的 consumer 读到会被误导吗 → 会 = 项目资料

**最常见的正确形态是「拆两半」**：做法进 DS、取值进项目 repo，两边各留指针。所以下表的主判定是 **`改指针`** 而不是整段搬走。

---

## A. 判定为「搬 / 改指针」（10 条）

| # | 落点 | 内容 | 三问命中 | 判定 | 搬去哪 |
|---|---|---|---|---|---|
| A1 | `domain-tvu.md` §M17.1（`:216–237`）LCD surface canonical 规格表 | 行高 42 · 内容容器 456 · 导航条 46 · 底栏按钮 82/84 · 参考帧 `8878:2` · `8878:21` · file-local `LCD Button` `4518:3244` + key | ①② | **搬取值 · 留做法** | `TVU Pack/docs/`（**owner 2026-08-06 已拍板**） |
| A2 | `domain-tvu.md` §M17.1 第二条（`:239–256`）LCD 选项列表规格表 | 面板 240×行高 35/36 · 绿 `#7ed321` 3px · 参考帧 `5314:9520` `5314:9552` `5314:9562` `5314:9564` `5314:9566` | ①② | **搬取值 · 留做法** | 同 A1（同族，一并搬） |
| A3 | `domain-tvu.md`（`:262`）§M17.1 Acceptance「范式来源 = `8878:2`」 | 帧 id 写死在 Acceptance 里 | ② | **改指针** | 改为「= 该 surface 的 canonical 范式帧（见项目 repo 登记）」 |
| A4 | `mockup-conventions.md` §M23.8（`:884–894`）`Jira requirement` 组件 per-file 登记表 | 3 个产品文件的 fileKey + component key + 可 clone instance id（Config-T / Touch Screen / NOC 大屏） | ①②③ | **整表搬** | 各 consumer repo；DS 只留做法「file-local 组件跨文件 import 会 fail ⇒ 在目标文件内 clone」+ 结构描述 |
| A5 | `mockup-conventions.md` §已知 file-local 组件（`:2101–2109`） | `Micro-Apps-20250923` fileKey `DtZcMkhNy6qh6jbQQnhreQ` + `APP Icons` id/key/变体/缺件清单 | ①②③ | **整节搬** | MicroApps consumer repo |
| A6 | `mockup-conventions.md` §字体规范（`:589`） | 「Figma 文件 `0054ib0nLmt27bC3QlGDl7`」内联在 surface 分档表里 | ② | **改指针** | 做法（LCD=Verdana / web=Roboto / 注释层恒 Roboto + Verdana 不可写）**留 DS**；fileKey 去掉 |
| A7 | `mockup-conventions.md` §AI 读取指引（`:29` `:30`） | 跳转表的触发条件里写死 `8878:2` / `5314:9520` 实测取值 | ② | **改指针** | 触发条件保留，括号内取值删除（跳过去自会看到指针） |
| A8 | `mockup-conventions.md` §M-INTEGRITY §I7 相关实证（`:1219` 一段） | 依附几何脱钩实证里的具体节点与偏移量 | ② | **压缩为指针** | 实证叙述留，逐条数字指向项目 handoff |
| A9 | `mockup-conventions.md`（`:2187`）`Notification` 用法 | `component_set 1408:17154` + key —— **注意这是 DS 库自己的组件**，但 id 形态与项目 node-id 混淆 | — | **留，加注** | 留在 DS（库资产），补一句「本 id 属 DS 库文件，非产品文件」以免下次误判 |
| A10 | `mockup-conventions.md` §M23.18.1 / 各处 `0.418` 画布底色 | 画布底色取值 | — | **留** | 是 Figma 画布层的 DS 约定，跨产品成立 |

> A9 / A10 列在此表是**为了记录「查过且判为留」**，不是待搬项 —— 只登记待搬项会让下一轮重新怀疑同一批命中。

## B. 判定为「留」（命中但合规，9 类）

| 类 | 例 | 为什么留 |
|---|---|---|
| B1 DS 库自身标识符 | `YbsPRUVmNdsbN40NNwh1Gn`（`:99` `:1693`）· `Top bar` key（`:261` `:265`）· `Notification` key | DS 自己的资产，不是某产品的 |
| B2 实证段里的产品名 | `mockup-conventions` 25 处 / `code-conventions` 13 处 | DS 惯例：每条规则带实证，实证必然发生在某产品上。**叙述留、叙述里的取值改指针** |
| B3 Task Entry 例句里的产品名 | `code-conventions:123/471/547`「MicroApps Console 加 dashboard 页」 | 例句，换个产品名照样成立 |
| B4 人名（说「人名不进真源」的那几处） | `design-process:200/203/204` | 恰恰是规则本身 |
| B5 人名（实证引语） | `design-process:627/629/716` Trevor 原话 · `mockup-conventions:1505`「需 ask Danner」 | 实证引语的一部分；**但禁止由此长出 roster 表** |
| B6 工具环境事实 | Verdana 不可写 · `listAvailableFontsAsync` 返回 1938 字族 · Roboto 缺 glyph 清单 | Figma 环境事实，跨产品成立 |
| B7 判据类别与核查项 | §M17 通则层 Acceptance · §M-DISCIPLINE.SCOPE 硬约束 | 做法 |
| B8 `code-conventions.md` 全文 | node-id 0 · file-key 0 | 无项目级取值混入 |
| B9 `CONVENTIONS-OVERVIEW.md` 全文 | 四项强特征全 0 | 纯指针文件 |

## C. 本轮顺带发现的结构缺陷（非 F103 本身）

1. **`domain-tvu.md` 有两个 `### M17.1`**（`:216` 与 `:239`）—— 重号 + markdown 锚点碰撞，而 `mockup-conventions.md` §AI 读取指引 `:29` / `:30` 分别指向这两条，**其中一条的锚点必然失效**。A1 搬走后，`:239` 那条可直接承接 `M17.1`，缺陷自然消解 ⇒ **不要单独改号**（会造成两轮改名）。
2. **`domain-tvu.md` 的 `rule-inventory` 块只列到 `M17`**（`:13`），H3 子条不入清单是既有约定；A1/A2 搬迁后需确认 `pnpm audit:rule-inventory` 仍绿。

## D. 搬迁执行清单（下轮）

1. 先建落点：`TVU Pack/docs/specs/lcd-canonical-spec.md`（A1 + A2），MicroApps repo 建 file-local 组件登记（A5）。
2. 各 consumer repo 建 Jira 组件登记（A4）—— **三个产品分属不同 repo，别合成一份**。
3. DS 侧逐条改成指针（A3 / A6 / A7 / A8），每条两边各留一个指针。
4. 跑 `pnpm audit:rule-inventory` + `pnpm audit:stale-anchors` + `pnpm audit:rule-load-map`，确认锚点与路由表没断。
5. `pnpm audit:doc-shape` —— `domain-tvu.md` 会显著变短，确认没有下限闸。
