# mockup-conventions.md 跨引用清单（anti-orphan 安全网）

> 基线 = HEAD 1b5aa21d / 文件内容 sha 60b73fd7。备份 = `_backups/mockup-conventions.HEAD-543bc257a3a3.bak.md`
> 仅含**需维护的 live 引用**（132 文件）；排除历史层（retrospection/_plans/_metrics/_reports/_prompts/STATUS changelog）——不回溯改写。
> ⚠️ design-process.md 的 M49 = Design Quality Contract（**另一个** M49，撞号本轮不动）；归类必区分。
> 用法：砍并/重号/删除某 ID 后对该 ID 逐行核对 → 每处已更新或显式保留 = 零孤儿。

## M-COLOR  (34 live refs)
```
AGENTS.md:21:1. **Read [`docs/internal/mockup-conventions.md`](./docs/internal/mockup-conventions.md) — 按文件顶 §🤖 AI 读取指引 scoped 读**（起手必读段 + 触发 jump，禁全量吞；重点 M0 / M1 / M-COLOR / M-INTEGRITY / M-BIND / **M-LIFECYCLE** / M23 / M29 / M32 / M35 / M43 / M46 / M47）
docs/V1_RELEASE_CHECKLIST.md:71:- [x] **Tier 1-B** mockup audit 三件套 (M-INTEGRITY + M-COLOR + M0/M1/M30 library-binding) — v0.6.0
docs/internal/CONVENTIONS-OVERVIEW.md:5:> **Status**: reflects the 2026-05-18 consolidation (M-COLOR / M-INTEGRITY umbrellas, R15 library-first umbrella).
docs/internal/CONVENTIONS-OVERVIEW.md:54:| M-COLOR | Color Token Discipline (umbrella) — §C1 icon fill / §C2 state color / §C3 bg-vs-text grey | Visual; absorbs M10 / M25 / M26 |
docs/internal/CONVENTIONS-OVERVIEW.md:66:- M10 / M25 / M26 → **M-COLOR**
docs/internal/CONVENTIONS-OVERVIEW.md:165:| `scripts/audit-mockup-colors.mjs` | Icon fill / state color / bg-vs-text grey (Figma REST API) | M-COLOR (§C1/§C2/§C3) | `audit:consumer-mockup` |
docs/internal/CONVENTIONS-OVERVIEW.md:215:5. **Check for umbrella fit** — If your rule is close to M-COLOR or M-INTEGRITY or R15, prefer adding a sub-section rather than a new top-level ID.
docs/internal/CONVENTIONS-OVERVIEW.md:233:3. **Externalize thinking as trace** — Several rules require 3-line trace outputs (M35 affordance, M-COLOR audit log, M-INTEGRITY overlap check). AI must produce these as deliverable artifacts — cannot just "promise to think."
docs/internal/CONVENTIONS-OVERVIEW.md:245:| **Umbrella rule** | A consolidated rule that absorbs multiple sub-rules under one ID (e.g. M-COLOR absorbed M10/M25/M26). Sub-rules live as sections (§C1, §C2, …) inside the umbrella. |
docs/internal/CONVENTIONS-OVERVIEW.md:246:| **Legacy stub** | A retained ID anchor whose content has moved into an umbrella or another file. Preserves external links. Example: M10 stub points readers to M-COLOR §C1. |
docs/internal/design-process.md:38:③  Mockup 主体      —— Phase 0 mapping + library-first 生成（M0 / M32 / M-COLOR / M-INTEGRITY 等）
docs/internal/design-process.md:67:| ③ Mockup 主体 | 按 `mockup-conventions.md` §🤖 AI 读取指引 scoped 读（起手必读段 + 触发 jump，禁全量吞；重点 M0 / M-COLOR / M-INTEGRITY / M-BIND / M29 / M32 / M35 / M43 / M44） |
docs/internal/design-process.md:76:- **US-5.S 微改**（单元素 + 单属性，比 US-5 更轻）— 2026-06-12 新增：同时满足 ①只改 1 个 element 的单个属性（图标实例 / 单色 / 单行文案 / 单 token）②不动布局、不加新交互、不加新 state ③不引入新 element。**可跳** ⓪⑤⑥⑦ **+ 起手三道闸（M48 / M49 / M50）**；**必做（不可跳）**：起手显式报档（见下方决策树）→ ③ 改动按 [§交付收尾 4](#交付收尾mockup-完成后必走-2026-06-03-新增) / 本文件 L100-103 标**本次产品需求 delta**（版本对版本，非 AI 迭代轮次）→ 若涉色跑 M-COLOR 检查 → ⑧ 一行 changelog。（三闸的 US-5.S 豁免**在本跳步规则登记**；M48/M49/M50 各自的"起手强制"按本表分档读。）
docs/internal/design-process.md:227:| **active M-rule（按场景触发）** | 编号 + 名（M1 / M23.x / M-COLOR / M-INTEGRITY §I1.1 / M32 / M46 / M47 …） | … |
docs/internal/design-process.md:235:- **机械命中项必附 gate 输出（keystone，2026-06-17 新增）**：清单里**机械可判**的命中项（M32 库归属 / M-COLOR / M49 binding / M32.2 三件套 ①② 等）的"打勾"**必须附对应机检 gate 的 pass/fail**，不允许凭印象自填 `✅`——同 [design-walkthrough §0 机械维度证据化](../../skills/design-walkthrough/SKILL.md)。起手"勾了"≠ 已做，自我声明式 checklist 的失效根因正在此。
docs/internal/design-process.md:250:- [ ] **自建件三件套（含自建产品 UI 件时必勾）**：每个自建卡 / 浮层 / 面板列明 ① 真组件（M1 / M32）② 绑 Color Variable（M-COLOR §C1）③ 复用页面 / PRD / sibling 现成措辞，三腿落地——详见 [`mockup-conventions.md` M32.2](./mockup-conventions.md)；治"自建时跳过设计系统起手检查"元根因
docs/internal/design-process.md:253:- [ ] **机械 gate（必跑）**：上述 Glyph + 字体两类不再只靠人肉扫——已落为 [`scripts/audit-mockup-typography-icon.mjs`](../../scripts/audit-mockup-typography-icon.mjs)，接进 `pnpm audit:consumer-mockup`（与 M-COLOR / M-INTEGRITY 三件套并列），pre-handoff `exit 1` 拦截。半角 `+` / `x` / `×` 因高误报不机械扫，仍靠人肉 Glyph 自查兜底（脚本 footer 已 log，no silent cap）。**综合 pre-handoff 单闸**：`pnpm audit:mockup-conformance --file <fileKey>`（[`audit-mockup-conformance.mjs`](../../scripts/audit-mockup-conformance.mjs)）一次跑全 5 个 mockup audit（typography-icon + colors + integrity + library-binding + library-origin），聚合一个 pass/fail；场景 2 增量加 `--non-blocking`（M21 优先 local 视觉合同，不全量误报 legacy）。
docs/internal/design-process.md:442:| Component / Token / Icon Mapping | 把 M0 / M32 / M-COLOR / M35 起手证据收进一处 |
docs/internal/domain-tvu.md:147:- 颜色必绑 TVU Variable，不写 raw hex（与 M-COLOR C1 / 原则 4 一致）
docs/internal/mockup-conventions.md:27:| §M-COLOR (§C1/§C2/§C3) | 要填颜色 / icon fill / state color 时 |
docs/internal/mockup-conventions.md:263:### M-COLOR — Color Token Discipline（umbrella，覆盖原 M10 / M25 / M26）
docs/internal/mockup-conventions.md:271:> **US-3（existing product iteration）专用前置步骤**：在写任何颜色常量 / Color Variable 前，必须先完成 **M21.2 — Feature Iteration Color Contract**（见 [`design-process.md`](./design-process.md)）——从 sibling frame 实测提取色值，禁止默认套用 TVU DS token 值（两者可能 intentionally diverge）。M-COLOR 的 C1/C2/C3 在 Color Contract 建立后继续适用。
docs/internal/mockup-conventions.md:410:#### M-COLOR 共用 Acceptance
docs/internal/mockup-conventions.md:1597:| ② **绑 token** | 自建件的所有 fill / stroke / text 颜色绑 Color Variable，不写 raw RGB / hex | [M-COLOR §C1](#c1--brand--token-color-paint-必须绑-color-variable不写-hex-literal原-m102026-05-26-扩-stroke--text--frame-fill) |
docs/internal/mockup-conventions.md:1604:- 自建件交付前：跑 M-COLOR 色 audit（②）+ grep 件内文案 vs 页面 / PRD（③）+ 确认无"该用库组件却自拼"的子件（①）
docs/internal/mockup-conventions.md:1820:- **Layer 1 · 4px solid BRAND 左边 accent rail**（border-left）—— **必从 TVU Spacing token 取尺寸**，对齐 `--sp-xxs: 4px`（mockup 端用 `strokeLeftWeight = 4`），**必绑 `UX/Brand/Brand` Variable**（详见 M-COLOR C1）
docs/internal/mockup-conventions.md:1855:- **rail + fill 均必绑 Color Variable**（M-COLOR C1）；raw hex 视为违规
docs/internal/mockup-conventions.md:2325:| **C1**（M-COLOR）"写 paint 前绑 Variable" | 用户**画新** paint 时 |
docs/internal/mockup-conventions.md:2522:| **Greenfield single-frame mockup** (US-2) | M0 / [画 frame] / M-COLOR audit / M-INTEGRITY audit / Walkthrough |
skills/design-walkthrough/SKILL.md:78:> **机械维度证据化（keystone，2026-06-17 新增）**：D16 的"不靠目测、贴机检结果"模式**泛化到全部机械可判维度**——M32 库归属(`audit-mockup-library-origin`)、M-COLOR(`audit-mockup-colors`)、M49 binding(`audit-mockup-binding-fidelity`)、**M-INTEGRITY block 叠加(`audit-mockup-overlap`)**、**M23.14 双语堆叠行距(`audit-mockup-bilingual-spacing`)**、M-VARIANT 像素一致。一次 `pnpm audit:mockup-conformance --file <key> --node <id>` 跑齐上述机检（连线正交另跑 `use_figma` M23.6 probe，REST 不可机检）。**这些维度的判定列必须贴对应机检 gate 的 pass/fail（含审计原文片段），禁止靠目测 / 记忆打 `✅` 或 `N/A`**；无 gate 输出的机械维度**视为未走查（协议违反）**。机检 gate 的 `--node` 必须覆盖**本 session 触碰的所有节点**，不止新建物。**走查是 §M-LIFECYCLE 第三时点（兜底全扫）——前两时点（操作前 probe / 操作后即时机检）见 mockup-conventions §M-LIFECYCLE。****实证 2026-06-17 BM-1047 V3**：走查只目测审了新建弹窗、把 M32/M-VARIANT 打 `✅`/`N/A`，漏了改过的下拉按钮非组件 + 跨态不一致 + 角色标记不一致——`library-origin`/`binding-fidelity` 早能抓到，但没在走查时跑，最后靠用户手工逐条指出。
skills/tvu-design-mockup/SKILL.md:12:- 硬规则 — `${CLAUDE_PLUGIN_ROOT}/docs/internal/mockup-conventions.md`（含 M0/M1 + umbrella `M-COLOR` / `M-INTEGRITY` + M23/M23.6/M24/M29/M31/M32/M33/M35 + legacy M10/M25/M26/M27/M28/M30/M34 anchor stubs；具体编号见 OVERVIEW Quick Reference）
skills/tvu-design-mockup/SKILL.md:14:- 自动 audit 脚本（CI 候选） — `scripts/audit-mockup-integrity.mjs`（M-INTEGRITY 三件套）+ `scripts/audit-mockup-colors.mjs`（M-COLOR 三件套）
skills/tvu-design-mockup/SKILL.md:100:- **视觉 / scope 硬规则**：M1（Top bar 必 instance）+ `M-COLOR` umbrella（C1 icon fill / C2 state color / C3 bg-vs-text grey）
skills/tvu-design-mockup/SKILL.md:117:2. 优先尝试**并入既有 umbrella**（M-COLOR / M-INTEGRITY / M32 / M35 等）作为 sub-clause；只在没有合适 umbrella 时才续 M36 / M37 等新编号
```

## M-INTEGRITY  (33 live refs)
```
AGENTS.md:21:1. **Read [`docs/internal/mockup-conventions.md`](./docs/internal/mockup-conventions.md) — 按文件顶 §🤖 AI 读取指引 scoped 读**（起手必读段 + 触发 jump，禁全量吞；重点 M0 / M1 / M-COLOR / M-INTEGRITY / M-BIND / **M-LIFECYCLE** / M23 / M29 / M32 / M35 / M43 / M46 / M47）
AGENTS.md:52:- 装饰元素 / NEW badge 浮在 page 层不在 mockup frame 内 → M-INTEGRITY §I4 违例
AGENTS.md:57:- 2026-05-28 TPC-628（TPC-Service 消费端）：AI 起手 clone FB-9398 后误判 instance 不可改 → 跳到自画 overlay；又把 NEW badge 放 page 层；font fallback 时丢 textStyleId 让 cell 变灰；列宽 rebudget 砍了 Operation 列但没 zoom-in 验证 Edit/Delete/Status 三按钮溢出；收尾时留下 spec 帧 / Display Logic 代码卡 / Persona 卡等冗余 → 用户连续抓 7 次。本次回流加 M46 / M47 / M-INTEGRITY §I4 / M23.10 / M23.11 / M43.2 / Scope Handling / Delivery Cleanup Gate 等规则。
docs/V1_RELEASE_CHECKLIST.md:71:- [x] **Tier 1-B** mockup audit 三件套 (M-INTEGRITY + M-COLOR + M0/M1/M30 library-binding) — v0.6.0
docs/WAKE-WORDS.md:35:| 改完图自检（section/位置/间距/重叠）| §M-INTEGRITY I1-I6（跑脚本，非目测）|
docs/internal/CONVENTIONS-OVERVIEW.md:5:> **Status**: reflects the 2026-05-18 consolidation (M-COLOR / M-INTEGRITY umbrellas, R15 library-first umbrella).
docs/internal/CONVENTIONS-OVERVIEW.md:55:| M-INTEGRITY | Mockup Layout Integrity (umbrella) — §I1 sibling layout / §I2 section overlap / §I3 children wrap | Structure; absorbs M27 / M28 / M34 |
docs/internal/CONVENTIONS-OVERVIEW.md:67:- M27 / M28 / M34 → **M-INTEGRITY**
docs/internal/CONVENTIONS-OVERVIEW.md:164:| `scripts/audit-mockup-integrity.mjs` | Sibling layout / section overlap / children wrap / page-level orphan parent (Figma REST API) | M-INTEGRITY (§I1/§I2/§I3/§I4) | `audit:consumer-mockup` |
docs/internal/CONVENTIONS-OVERVIEW.md:215:5. **Check for umbrella fit** — If your rule is close to M-COLOR or M-INTEGRITY or R15, prefer adding a sub-section rather than a new top-level ID.
docs/internal/CONVENTIONS-OVERVIEW.md:233:3. **Externalize thinking as trace** — Several rules require 3-line trace outputs (M35 affordance, M-COLOR audit log, M-INTEGRITY overlap check). AI must produce these as deliverable artifacts — cannot just "promise to think."
docs/internal/design-process.md:38:③  Mockup 主体      —— Phase 0 mapping + library-first 生成（M0 / M32 / M-COLOR / M-INTEGRITY 等）
docs/internal/design-process.md:67:| ③ Mockup 主体 | 按 `mockup-conventions.md` §🤖 AI 读取指引 scoped 读（起手必读段 + 触发 jump，禁全量吞；重点 M0 / M-COLOR / M-INTEGRITY / M-BIND / M29 / M32 / M35 / M43 / M44） |
docs/internal/design-process.md:227:| **active M-rule（按场景触发）** | 编号 + 名（M1 / M23.x / M-COLOR / M-INTEGRITY §I1.1 / M32 / M46 / M47 …） | … |
docs/internal/design-process.md:253:- [ ] **机械 gate（必跑）**：上述 Glyph + 字体两类不再只靠人肉扫——已落为 [`scripts/audit-mockup-typography-icon.mjs`](../../scripts/audit-mockup-typography-icon.mjs)，接进 `pnpm audit:consumer-mockup`（与 M-COLOR / M-INTEGRITY 三件套并列），pre-handoff `exit 1` 拦截。半角 `+` / `x` / `×` 因高误报不机械扫，仍靠人肉 Glyph 自查兜底（脚本 footer 已 log，no silent cap）。**综合 pre-handoff 单闸**：`pnpm audit:mockup-conformance --file <fileKey>`（[`audit-mockup-conformance.mjs`](../../scripts/audit-mockup-conformance.mjs)）一次跑全 5 个 mockup audit（typography-icon + colors + integrity + library-binding + library-origin），聚合一个 pass/fail；场景 2 增量加 `--non-blocking`（M21 优先 local 视觉合同，不全量误报 legacy）。
docs/internal/design-process.md:1391:**2026-05-28 TPC-628**：迭代过程中产生了 (1) 自画 overlay 表（中段试错路径，后改回 library instance）、(2) "Target T list Column Order Spec" frame（早期当作 contract 用，主 mockup 后已实现）、(3) "Display Logic" 代码卡（含 JS regex + pseudocode，后被 Data Contract 卡白话化）、(4) Persona F2 卡（与本期改动无关）、(5) 一对 NEW badge orphan（违 M-INTEGRITY §I4）。用户连续抓 4 次："Target Column Order Spec 这个 Frame 存在的意义是什么"、"Display Logic 这个 Frame，不要写代码"、"其他跟这次改动无关的内容不需要显示"、"删掉无意义的内容"。**根因**：session 中没主动走 cleanup gate，等用户当场审才 react。本规则即此回流。
docs/internal/mockup-conventions.md:28:| §M-INTEGRITY (§I1/§I2/§I3/§I4/§I5/§I6) | **任何编辑 confirmed 后（M-DISCIPLINE.SYNC）** / mockup 完成自检 / sibling 布局 / section 重叠 / children wrap / element parent 归属 / 替换既有节点前 diff(I5) / **create·move·place 前 probe 目标位防叠加(I6)** 时 |
docs/internal/mockup-conventions.md:901:### M-INTEGRITY — Mockup Layout Integrity（umbrella，覆盖原 M27 / M28 / M34）
docs/internal/mockup-conventions.md:1073:**2026-05-28 TPC-628**：给 T list "Platform" / "Dial Version" 两个新列加 NEW badge 时直接 `newPage.appendChild(badge)`，badge 用绝对坐标 (colInst.absoluteBoundingBox.x, ...) 浮在列头上方。用户抓"页面上还叠加了 New Badge 这两个 Frame，不知道是什么"——badge 飘在 mockup 外、跟产品脱节、reader 不知道这两个浮 chip 是什么。**根因**：M-INTEGRITY 原本只覆盖 layout 大小完整性，没规定 element parent 归属。本规则即此回流。
docs/internal/mockup-conventions.md:1077:#### M-INTEGRITY §I5 — 替换既有节点前先 diff（2026-06-17 新增）
docs/internal/mockup-conventions.md:1084:#### M-INTEGRITY §I6 — create / move / place 前先 probe 目标坐标区（防叠加）（2026-06-17 新增）
docs/internal/mockup-conventions.md:1093:#### M-INTEGRITY 共用 Acceptance
docs/internal/mockup-conventions.md:1138:> **⚠️ Merged into [M-INTEGRITY §I1](#m-integrity--mockup-layout-integrityumbrella覆盖原-m27--m28--m34)**. This anchor is preserved for legacy reference.
docs/internal/mockup-conventions.md:1144:> **⚠️ Merged into [M-INTEGRITY §I2](#m-integrity--mockup-layout-integrityumbrella覆盖原-m27--m28--m34)**. This anchor is preserved for legacy reference.
docs/internal/mockup-conventions.md:1648:> **⚠️ Merged into [M-INTEGRITY §I3](#m-integrity--mockup-layout-integrityumbrella覆盖原-m27--m28--m34)**. This anchor is preserved for legacy reference.
docs/internal/mockup-conventions.md:2281:- **M-INTEGRITY I3**：children wrap 不能撑破容器 → M43 maxLines 上限正是 I3 的具体化
docs/internal/mockup-conventions.md:2522:| **Greenfield single-frame mockup** (US-2) | M0 / [画 frame] / M-COLOR audit / M-INTEGRITY audit / Walkthrough |
docs/internal/mockup-conventions.md:2523:| **US-3 增量** | M0 (新增元素 mapping) / [改 frame] / M-INTEGRITY audit (sibling layout 不破) / Walkthrough |
skills/design-walkthrough/SKILL.md:78:> **机械维度证据化（keystone，2026-06-17 新增）**：D16 的"不靠目测、贴机检结果"模式**泛化到全部机械可判维度**——M32 库归属(`audit-mockup-library-origin`)、M-COLOR(`audit-mockup-colors`)、M49 binding(`audit-mockup-binding-fidelity`)、**M-INTEGRITY block 叠加(`audit-mockup-overlap`)**、**M23.14 双语堆叠行距(`audit-mockup-bilingual-spacing`)**、M-VARIANT 像素一致。一次 `pnpm audit:mockup-conformance --file <key> --node <id>` 跑齐上述机检（连线正交另跑 `use_figma` M23.6 probe，REST 不可机检）。**这些维度的判定列必须贴对应机检 gate 的 pass/fail（含审计原文片段），禁止靠目测 / 记忆打 `✅` 或 `N/A`**；无 gate 输出的机械维度**视为未走查（协议违反）**。机检 gate 的 `--node` 必须覆盖**本 session 触碰的所有节点**，不止新建物。**走查是 §M-LIFECYCLE 第三时点（兜底全扫）——前两时点（操作前 probe / 操作后即时机检）见 mockup-conventions §M-LIFECYCLE。****实证 2026-06-17 BM-1047 V3**：走查只目测审了新建弹窗、把 M32/M-VARIANT 打 `✅`/`N/A`，漏了改过的下拉按钮非组件 + 跨态不一致 + 角色标记不一致——`library-origin`/`binding-fidelity` 早能抓到，但没在走查时跑，最后靠用户手工逐条指出。
skills/tvu-design-mockup/SKILL.md:12:- 硬规则 — `${CLAUDE_PLUGIN_ROOT}/docs/internal/mockup-conventions.md`（含 M0/M1 + umbrella `M-COLOR` / `M-INTEGRITY` + M23/M23.6/M24/M29/M31/M32/M33/M35 + legacy M10/M25/M26/M27/M28/M30/M34 anchor stubs；具体编号见 OVERVIEW Quick Reference）
skills/tvu-design-mockup/SKILL.md:14:- 自动 audit 脚本（CI 候选） — `scripts/audit-mockup-integrity.mjs`（M-INTEGRITY 三件套）+ `scripts/audit-mockup-colors.mjs`（M-COLOR 三件套）
skills/tvu-design-mockup/SKILL.md:101:- **结构完整性**：`M-INTEGRITY` umbrella（I1 sibling layout / I2 sibling overlap / I3 children wrap） + M29（table cell pattern）
skills/tvu-design-mockup/SKILL.md:117:2. 优先尝试**并入既有 umbrella**（M-COLOR / M-INTEGRITY / M32 / M35 等）作为 sub-clause；只在没有合适 umbrella 时才续 M36 / M37 等新编号
```

## M-LIFECYCLE  (8 live refs)
```
AGENTS.md:21:1. **Read [`docs/internal/mockup-conventions.md`](./docs/internal/mockup-conventions.md) — 按文件顶 §🤖 AI 读取指引 scoped 读**（起手必读段 + 触发 jump，禁全量吞；重点 M0 / M1 / M-COLOR / M-INTEGRITY / M-BIND / **M-LIFECYCLE** / M23 / M29 / M32 / M35 / M43 / M46 / M47）
AGENTS.md:26:**⛔ 写操作全程走 §M-LIFECYCLE 三时点闸**（[`mockup-conventions.md` §M-LIFECYCLE](./docs/internal/mockup-conventions.md)）——任何 create / update / delete：
docs/internal/design-process.md:727:1. **CRUD 全态**：Create / Read / Edit(Update) / Delete 每项都有显式 mockup 落点或 state diagram（参 M-LIFECYCLE-CRUD）
docs/internal/design-process.md:1257:## M-LIFECYCLE-CRUD — first-class entity 必须显式回答 Create / Read / Update / Delete 4 件套
docs/internal/mockup-conventions.md:22:| **§M-LIFECYCLE Mockup Edit Lifecycle Gate（任何 create/update/delete 任务）** — 操作前(I5/I6 probe)·后(conformance 机检)·走查 三时点必过 | §M-LIFECYCLE |
docs/internal/mockup-conventions.md:1102:## §M-LIFECYCLE — Mockup Edit Lifecycle Gate（创建/更新/删除：前·后·走查 三时点检查）— 2026-06-18 新增
skills/design-walkthrough/SKILL.md:78:> **机械维度证据化（keystone，2026-06-17 新增）**：D16 的"不靠目测、贴机检结果"模式**泛化到全部机械可判维度**——M32 库归属(`audit-mockup-library-origin`)、M-COLOR(`audit-mockup-colors`)、M49 binding(`audit-mockup-binding-fidelity`)、**M-INTEGRITY block 叠加(`audit-mockup-overlap`)**、**M23.14 双语堆叠行距(`audit-mockup-bilingual-spacing`)**、M-VARIANT 像素一致。一次 `pnpm audit:mockup-conformance --file <key> --node <id>` 跑齐上述机检（连线正交另跑 `use_figma` M23.6 probe，REST 不可机检）。**这些维度的判定列必须贴对应机检 gate 的 pass/fail（含审计原文片段），禁止靠目测 / 记忆打 `✅` 或 `N/A`**；无 gate 输出的机械维度**视为未走查（协议违反）**。机检 gate 的 `--node` 必须覆盖**本 session 触碰的所有节点**，不止新建物。**走查是 §M-LIFECYCLE 第三时点（兜底全扫）——前两时点（操作前 probe / 操作后即时机检）见 mockup-conventions §M-LIFECYCLE。****实证 2026-06-17 BM-1047 V3**：走查只目测审了新建弹窗、把 M32/M-VARIANT 打 `✅`/`N/A`，漏了改过的下拉按钮非组件 + 跨态不一致 + 角色标记不一致——`library-origin`/`binding-fidelity` 早能抓到，但没在走查时跑，最后靠用户手工逐条指出。
skills/design-walkthrough/SKILL.md:112:| M-LIFECYCLE-CRUD | first-class entity 的 Create / Read / Update / Delete 4 项是否都有显式答案（任一项"故意没有"必须写明 rationale） | ✅ / ❌ | <detail> |
```

## M-DISCIPLINE  (14 live refs)
```
docs/WAKE-WORDS.md:16:| 改完 mockup 后同步交付物 | `同步交付物` | UX 卡 / 连线 / state-label + PRD card / handoff 同步 checklist | mockup-conventions §M-DISCIPLINE |
docs/WAKE-WORDS.md:30:| 任务起手（所有 mockup） | §0-§5 + §M48 + §M49 + §M0 Phase 0 + §M-DISCIPLINE |
docs/internal/CONVENTIONS-OVERVIEW.md:51:| **M-DISCIPLINE** | **Rule Execution Discipline (umbrella) — TodoWrite enforcement of "read but not execute"** | **Process meta; orthogonal to all rules (起手协议后必跑)** |
docs/internal/code-conventions.md:1337:## R-DISCIPLINE — Rule Execution Discipline（code-side mirror of M-DISCIPLINE）— 2026-06-01 新增
docs/internal/code-conventions.md:1388:- **`mockup-conventions.md` M-DISCIPLINE**（2026-06-01 立）— mockup-side 同源
docs/internal/mockup-conventions.md:21:| **§M-DISCIPLINE Rule Execution（起手协议后必跑，所有任务）** — TodoWrite 把「读到的规则」物化成 checklist，防"读了不执行" | §M-DISCIPLINE |
docs/internal/mockup-conventions.md:28:| §M-INTEGRITY (§I1/§I2/§I3/§I4/§I5/§I6) | **任何编辑 confirmed 后（M-DISCIPLINE.SYNC）** / mockup 完成自检 / sibling 布局 / section 重叠 / children wrap / element parent 归属 / 替换既有节点前 diff(I5) / **create·move·place 前 probe 目标位防叠加(I6)** 时 |
docs/internal/mockup-conventions.md:2501:### M-DISCIPLINE — Rule Execution Discipline（umbrella）— 2026-06-01 新增
docs/internal/mockup-conventions.md:2543:#### M-DISCIPLINE.SYNC — 编辑 confirmed → 自动自检 + 交付物同步（状态转移触发，2026-06-18 新增，修 W3/W5）
docs/internal/mockup-conventions.md:2555:**Acceptance（M-DISCIPLINE.SYNC）**：改动 confirmed 后，handoff 含 `<!-- mockup-handoff -->` 标记 + integrity 脚本机器输出 + 受影响 UX 卡/连线/state-label 已更新。缺脚本证据块 = done 不成立（`audit-mockup-handoff-evidence.mjs` repo 守门机器拦截）。
docs/internal/mockup-conventions.md:2571:无（新规则）。与 `meta-rules.md` § 3 反模式 #3 "to-do list 思维写 prompt" 镜像但不冲突——meta-rules.md 那条说**写 prompt** 时要"产出契约"而非"任务清单"，本 M-DISCIPLINE 说**执行规则**时必须把规则**物化成 task list**。两者作用域不同。
skills/tvu-design-mockup/SKILL.md:3:description: 在 TVU 产品 Figma 文件画 mockup / 改 mockup / 改设计稿 / 加 UX 交付说明时消费 TVU UX Design System library。**任何对 TVU 产品 Figma 文件做 write 操作（含 use_figma 调用）前 MUST load 本 skill**——跳步会漏 M0/M23/M32/M35 等所有 mockup 硬规则。**触发判定**：用户语言里只要出现「Figma URL / Figma 链接 / Figma 文件 + 加 / 改 / 调 / 更新 / 同步 / 推 / 画 / 设计」任一组合，即视为 mockup write 任务必触发本 skill；不要把"setup"或"看一下"当借口跳过。常见自然表达：在 Figma 加一个按钮 / 加新页面 / 加入口 / 加 UX 交付说明 / 改 mockup / 改这个 Figma 文件 / 改效果图 / 改设计稿 / 调整 mockup / 调整设计 / 更新到这个 Figma 链接 / 同步到 Figma / 把改动放到 Figma / 把设计推到 Figma / 画 mockup / 画一张效果图 / 画一张设计稿 / 在 Figma 上设计 / @TVU mockup / 用 TVU 设计系统画 mockup / 用 TVU 库画 mockup / @TVU PRD（起草/更新 PRD → design-process Step B 6 段结构）/ @TVU UX说明（写/更新 UX 交付说明 → §M23 canonical 卡结构）/ 同步交付物（改完 mockup 后同步交付层 → §M-DISCIPLINE.SYNC）。真源 conventions 在 tvu-design-system repo 内。
skills/tvu-design-mockup/SKILL.md:85:   - **自检 = 脚本机器输出，目测不算数（§M-DISCIPLINE.SYNC）**：把总闸里 integrity 的逐条机器输出 `Integrity audit: I1=… / I2=… / I3=overflow-count 0 / I4=orphan-count 0` + conformance summary **贴进 handoff 的 `Rule checklist:` 块**；AI「目测 / 看起来 OK / 应该没问题」**不构成自检通过**（实证 2026-06-18：提醒检查后仍漏 I3 overflow，因目测代替跑脚本）。触发不限于整体收尾——**任何编辑 confirmed 后**都须按 §M-DISCIPLINE.SYNC 跑自检 + 同步受影响的 UX 卡（§M23 canonical 结构）/ M23.6 连线 / M23.7 state-label
skills/tvu-design-pipeline/SKILL.md:46:2. **M-DISCIPLINE**：起手即 TodoWrite 把上表 8 阶段物化成 checklist。
```

## M-FONT  (2 live refs)
```
docs/internal/mockup-conventions.md:51:| §M-FONT | 设 / 改 text 节点 fontSize（须落 textStyle grid）时 |
docs/internal/mockup-conventions.md:1868:### M-FONT — TVU textStyles grid（fontSize 不可 off-grid）
```

## M-TXT-ICON-AUDIT  (3 live refs)
```
docs/internal/mockup-conventions.md:52:| §M-TXT-ICON-AUDIT | 放任何 icon / 文字符号（防 Unicode glyph 充数）时 |
docs/internal/mockup-conventions.md:145:复用 **US-6 规则 + M30-M36 library-first lookup + M-TXT-ICON-AUDIT**，不重新发明。产出 3 层清单：
docs/internal/mockup-conventions.md:1886:### M-TXT-ICON-AUDIT — Unicode-as-icon swap audit (post-build mandatory)
```

## M-LIBRARY-HYGIENE  (3 live refs)
```
docs/internal/design-process.md:1358:| **历史 hidden node**（早期路径隐藏的探索性节点）| 如果不再需要，删；如果保留作历史参照，加 `_archived` 前缀（M-LIBRARY-HYGIENE）|
docs/internal/mockup-conventions.md:53:| §M-LIBRARY-HYGIENE | 新建 / 命名 component（`_` / `.` 前缀语义）时 |
docs/internal/mockup-conventions.md:1514:### M-LIBRARY-HYGIENE — 临时 / 调研 component 必须 `_` / `.` 前缀（不污染 publish 与 sync）
```

## M49  (40 live refs)
```
docs/WAKE-WORDS.md:30:| 任务起手（所有 mockup） | §0-§5 + §M48 + §M49 + §M0 Phase 0 + §M-DISCIPLINE |
docs/WAKE-WORDS.md:36:| 绑视觉属性 token | §M49.1 + §C5 |
docs/internal/design-process.md:23:⓪.5 Design Quality Contract —— 轻量设计质量合同（M49）：Baseline / Delta / Semantic / Feedback Inventory / UX / Simplicity / Content
docs/internal/design-process.md:64:| ⓪.5 Design Quality Contract | 本文件 § M49（Baseline / Delta / Semantic / Feedback Inventory / UX / Simplicity / Content） |
docs/internal/design-process.md:76:- **US-5.S 微改**（单元素 + 单属性，比 US-5 更轻）— 2026-06-12 新增：同时满足 ①只改 1 个 element 的单个属性（图标实例 / 单色 / 单行文案 / 单 token）②不动布局、不加新交互、不加新 state ③不引入新 element。**可跳** ⓪⑤⑥⑦ **+ 起手三道闸（M48 / M49 / M50）**；**必做（不可跳）**：起手显式报档（见下方决策树）→ ③ 改动按 [§交付收尾 4](#交付收尾mockup-完成后必走-2026-06-03-新增) / 本文件 L100-103 标**本次产品需求 delta**（版本对版本，非 AI 迭代轮次）→ 若涉色跑 M-COLOR 检查 → ⑧ 一行 changelog。（三闸的 US-5.S 豁免**在本跳步规则登记**；M48/M49/M50 各自的"起手强制"按本表分档读。）
docs/internal/design-process.md:235:- **机械命中项必附 gate 输出（keystone，2026-06-17 新增）**：清单里**机械可判**的命中项（M32 库归属 / M-COLOR / M49 binding / M32.2 三件套 ①② 等）的"打勾"**必须附对应机检 gate 的 pass/fail**，不允许凭印象自填 `✅`——同 [design-walkthrough §0 机械维度证据化](../../skills/design-walkthrough/SKILL.md)。起手"勾了"≠ 已做，自我声明式 checklist 的失效根因正在此。
docs/internal/design-process.md:266:## M49 — Design Quality Contract Gate（设计质量合同，前置 + 回归）— 2026-06-11 新增
docs/internal/design-process.md:268:> ⚠️ **ID 消歧**：本 §M49（Design Quality Contract Gate）与 [`mockup-conventions.md` §M49](./mockup-conventions.md)（Library Fidelity Umbrella）**不同号同名、scope 不同**——全局 M 编号撞号，待结构整顿时统一重号。
docs/internal/design-process.md:423:M50 是 M49 的**执行外壳**：把分散在 Pre-Phase 0 / M22 / M48 / M49 / M0 / M21 / M43 / F1/F2 的起手要求压成一页可审 packet。任何产品设计任务进入高保真 mockup / UI 生成前，必须先有 M50 packet。
docs/internal/design-process.md:462:- AI 自己发现当前设计与 M49 contract 冲突
docs/internal/figma-component-catalog.md:49:> mockup 绑样式/变量前**查这里或直读库源文件**（`getLocalTextStylesAsync` / `getLocalVariableCollectionsAsync`），**禁止**扫产品文件"使用中"的 id 反推库有什么（M49.1；2026-06-12 BM-1047 实证：扫现场误报"库无 20/24 字号与 spacing 变量"）。
docs/internal/figma-component-catalog.md:54:- **间距纪律**：mockup 取值必须落在档位上并 `setBoundVariable`；非档位值起手吸附到最近档（M49.1），库缺档不默认触发新增
docs/internal/figma-component-catalog.md:174:- **Variants**: 32 — `slide` = 320×89 无按钮 toast（success/error/info/warning 全有）/ `alert` = 480 单按钮 / `dialog` = 480 双按钮+close。**反馈类 UI 一律从本 set 取 variant，不自画**（M49.3）
docs/internal/mockup-conventions.md:19:| **§M49 Design Quality Contract（设计质量合同，所有产品设计任务）** — 先列 Baseline / Delta / Semantic / Feedback UI Inventory / UX / Simplicity / Content，再生成 deliverable | [`design-process.md` §M49](./design-process.md) |
docs/internal/mockup-conventions.md:49:| §M49.1 库样式/变量 Fidelity + §C5 语义色优先 | 建节点要绑任何视觉属性 token（颜色 / 间距 / 圆角 / 字体 / 阴影）时 |
docs/internal/mockup-conventions.md:50:| §M49.2 + §M49.3 + §M49.4（字段级 parity 表 / 反馈控件同源 inventory / 卡片强调预算）| **重构·拆分组件 · 出现 ≥2 反馈类控件 · 评估卡片强调预算·视觉权重**时 |
docs/internal/mockup-conventions.md:2580:### M49 — Library Fidelity Umbrella：样式/间距 · 字段 parity · 反馈控件 · 强调预算（2026-06-12 新增）
docs/internal/mockup-conventions.md:2582:> ⚠️ **ID 消歧**：本 §M49（Library Fidelity Umbrella）与 [`design-process.md` §M49](./design-process.md)（Design Quality Contract Gate）**不同号同名、scope 不同**——全局 M 编号撞号，待 mockup-conventions 结构整顿时统一重号。
docs/internal/mockup-conventions.md:2586:#### M49.1 库样式 / 变量 Fidelity
docs/internal/mockup-conventions.md:2592:- **真源数据 + 机检（2026-06-12 补）**：起手消费 `figma-data/normalized/binding-source-map.json`（发布 catalog 实查产出：4 原语真名/值/key/可绑性 + bindApi；**CJK 字号有 Roboto 拉丁 + PingFang SC 孪生两个 key，按字符集选**，别假设 1 token→1 style）。绑定保真机器 gate = `scripts/audit-mockup-binding-fidelity.mjs`（D16：查 `textStyleId`/`effectStyleId`/`boundVariables`/on-scale + 语义色优先 §C5），已接 `audit:mockup-conformance`——补上 M49 原本只有手动 probe 清单、无脚本 gate 的缺口。
docs/internal/mockup-conventions.md:2596:#### M49.2 重构 / 拆分必做字段级 Parity 表
docs/internal/mockup-conventions.md:2603:#### M49.3 反馈类控件同源 Inventory
docs/internal/mockup-conventions.md:2610:#### M49.4 强调预算（Emphasis Budget）
docs/internal/mockup-conventions.md:2618:#### M49 共用 Acceptance
docs/internal/visual-quality-dimensions-2026-06-12.md:5:> **缘起**：mockup design-review 原本只有两条轴——① 系统一致性（D1-D15，外锚 Ant/Element/Polaris/Material/Carbon，见 [`consistency-dimensions-audit-2026-06-12.md`](./retrospection/consistency-dimensions-audit-2026-06-12.md)），② 既有 6-section F1 走查（PRD 覆盖 / 规则合规 / 反模式）。两轴都查"对不对、一不一致"，**没有一条轴查"好不好看、senior 设计师眼里站不站得住"**。已反应式撞到 3 个盲区：字段 parity（→ M49.2）、控件同源 inventory（→ M49.3）、信息密度+强调预算+视觉权重（→ M49.4，源自并行 session BM-1047 V3 Case1）。本尺子把"视觉设计质量"系统化成第三轴，防继续逐个撞。
docs/internal/visual-quality-dimensions-2026-06-12.md:7:> ⚠️ **与 M49.4 的关系（勿分叉）**：B3 强调预算 + B4 视觉权重 **不是本尺子新建**——它们的真源是 `mockup-conventions.md` **§M49.4** + `design-walkthrough` **§5.6**（BM-1047 V3 Case1 实证）。本尺子**认领并体系化**它们为第三轴的两条维度，沿用 M49.4 措辞，不另造平行术语。B1/B2/B5/B6/B7 才是本尺子补的新维度。
docs/internal/visual-quality-dimensions-2026-06-12.md:17:| **B3 强调预算**（=§M49.4） | 每张卡是否超"响亮额度"：≤1 语义色状态行 + ≤2 灰 hint + 1 主 CTA？评审每新增诉求是否伴随合并/降级？ | ✅ 单卡 ≤1 语义色行、≤2 灰 hint、恰 1 主 CTA；❌ 单卡彩色状态行 ≥2、灰 hint ≥3、或 ≥2 同级实心按钮抢 CTA | emphasis budget；Material one-primary-action；**§M49.4**（源 BM-1047 V3 Case1） | **可机检**：数语义色行/灰 hint/`type=primary` 按钮数 | **High（先上 gate）** |
docs/internal/visual-quality-dimensions-2026-06-12.md:18:| **B4 视觉权重平衡**（=§M49.4） | 横向（左右栏/各区块）视觉重量是否失衡：同 lane 兄弟卡信息行数与彩色元素数是否偏离 lane 中位数？ | ✅ 兄弟卡行数/彩元素 ≈ lane 中位数(±1)，左右栏对称或有理由的非对称；❌ 一卡 9行/绿2/灰4 vs 兄弟 8/1/2（BM-1047 实证），或一侧明显压垮无理由 | 视觉重量/balance；**§M49.4** 横向对比处方 | **可机检**：同 lane 算中位数 + 离群报警 | **High（先上 gate）** |
docs/internal/visual-quality-dimensions-2026-06-12.md:39:### B3 强调预算（=§M49.4，已有实证）
docs/internal/visual-quality-dimensions-2026-06-12.md:44:### B4 视觉权重平衡（=§M49.4）
docs/internal/visual-quality-dimensions-2026-06-12.md:72:| **B3+B4（先做）** | 每节点子树：语义色文本行数、灰 hint 行数、`type=primary` 按钮数；同 lane 兄弟节点信息行+彩元素数 | 单卡 ≤1语义色/≤2灰/1CTA；lane 中位数离群 >±1 → FLAG | 阈值已在 §M49.4 定死，可直接脚本化（建议 `scripts/audit-emphasis-budget.mjs`，B3+B4 共用计数器，与 D1-D15 同批）。**注意：与既有 §M49.4 / §5.6 走查层对齐，不另造** |
docs/internal/visual-quality-dimensions-2026-06-12.md:86:- **B3 + B4 已在位**：`design-walkthrough` **§5.6 强调预算 + 视觉权重横向对比（M49.4）** 已是 B3/B4 走查落点——本尺子正式认领，沿用 M49.4 措辞，**不分叉**。
docs/internal/visual-quality-dimensions-2026-06-12.md:88:- **执行顺序**：F1 走查跑三轴 = ① 系统一致性（D1/D2/D6/D9/D13，§5.x）→ ② 6-section 既有走查 → ③ 视觉质量（§5.5 M49.3 反馈 inventory + §5.6 M49.4 B3/B4 + 新 §5.7 B1/B2/B5/B6/B7）。
skills/design-walkthrough/SKILL.md:78:> **机械维度证据化（keystone，2026-06-17 新增）**：D16 的"不靠目测、贴机检结果"模式**泛化到全部机械可判维度**——M32 库归属(`audit-mockup-library-origin`)、M-COLOR(`audit-mockup-colors`)、M49 binding(`audit-mockup-binding-fidelity`)、**M-INTEGRITY block 叠加(`audit-mockup-overlap`)**、**M23.14 双语堆叠行距(`audit-mockup-bilingual-spacing`)**、M-VARIANT 像素一致。一次 `pnpm audit:mockup-conformance --file <key> --node <id>` 跑齐上述机检（连线正交另跑 `use_figma` M23.6 probe，REST 不可机检）。**这些维度的判定列必须贴对应机检 gate 的 pass/fail（含审计原文片段），禁止靠目测 / 记忆打 `✅` 或 `N/A`**；无 gate 输出的机械维度**视为未走查（协议违反）**。机检 gate 的 `--node` 必须覆盖**本 session 触碰的所有节点**，不止新建物。**走查是 §M-LIFECYCLE 第三时点（兜底全扫）——前两时点（操作前 probe / 操作后即时机检）见 mockup-conventions §M-LIFECYCLE。****实证 2026-06-17 BM-1047 V3**：走查只目测审了新建弹窗、把 M32/M-VARIANT 打 `✅`/`N/A`，漏了改过的下拉按钮非组件 + 跨态不一致 + 角色标记不一致——`library-origin`/`binding-fidelity` 早能抓到，但没在走查时跑，最后靠用户手工逐条指出。
skills/design-walkthrough/SKILL.md:140:## 5.5 Feedback UI Inventory（固定层，M49.3）
skills/design-walkthrough/SKILL.md:148:## 5.6 强调预算 + 视觉权重横向对比（固定层，M49.4）
skills/design-walkthrough/SKILL.md:168:> 第三轴 visual-quality（senior 设计师走查），尺子见 [`visual-quality-dimensions-2026-06-12`](../../docs/internal/visual-quality-dimensions-2026-06-12.md)。**B3 强调预算 + B4 视觉权重**已在 §5.6（M49.4）；本层补其余 5 维。
skills/design-walkthrough/SKILL.md:206:   - 轴③ 视觉质量：§5.5 反馈 inventory（M49.3）+ §5.6 强调预算/权重（M49.4 = B3/B4）+ §5.8 的 B1/B2/B5/B6/B7
skills/tvu-design-mockup/SKILL.md:57:2. **Read 真源（scoped，禁全量吞）** — `AGENTS.md` + 按 `mockup-conventions.md` 顶部 **§🤖 AI 读取指引** 只读「起手必读段」（§0–§5 + M0；含 M48/M49 指针），具体 M-rule 按该指引「触发后再读」表 + Task Entry Mode 命中才 jump Read。**红线双向**：① 跳起手必读段直接进 rule = 协议违反（漏 M0 是最高频回归源）；② 无视文件自带「不要起手就全量 Read」而全量吞 2300+ 行 = 违反（注意力稀释，"规则很少遵守"诱因）。路由表覆盖完整性由 `pnpm audit:rule-load-map` 保证（每条 rule 都在 §AI 读取指引 内，scoped-load 不会静默漏 rule）。
skills/tvu-design-mockup/SKILL.md:66:   - **资源发现一律读发布目录全集**（catalog + `binding-source-map.json` + 产品文件 Local Components 发布列表），**禁扫"当前文件在用集"/凭印象**凑可用清单——usage-scoped 枚举结构上漏"已发布未使用"的资产。真源见 meta-rules 反模式 #6 + mockup-conventions §组件取数优先级 + §库归属验证机制 + M49.1（本 skill 不复述）
```

## M48  (17 live refs)
```
docs/WAKE-WORDS.md:30:| 任务起手（所有 mockup） | §0-§5 + §M48 + §M49 + §M0 Phase 0 + §M-DISCIPLINE |
docs/internal/design-process.md:76:- **US-5.S 微改**（单元素 + 单属性，比 US-5 更轻）— 2026-06-12 新增：同时满足 ①只改 1 个 element 的单个属性（图标实例 / 单色 / 单行文案 / 单 token）②不动布局、不加新交互、不加新 state ③不引入新 element。**可跳** ⓪⑤⑥⑦ **+ 起手三道闸（M48 / M49 / M50）**；**必做（不可跳）**：起手显式报档（见下方决策树）→ ③ 改动按 [§交付收尾 4](#交付收尾mockup-完成后必走-2026-06-03-新增) / 本文件 L100-103 标**本次产品需求 delta**（版本对版本，非 AI 迭代轮次）→ 若涉色跑 M-COLOR 检查 → ⑧ 一行 changelog。（三闸的 US-5.S 豁免**在本跳步规则登记**；M48/M49/M50 各自的"起手强制"按本表分档读。）
docs/internal/design-process.md:218:## M48 — Startup Rule-Coverage Self-Check（起手强制 Gate）— 2026-06-05 新增
docs/internal/design-process.md:231:- **state-completeness 来源** = 本文件 §State-Completeness Enumeration（2026-06-15 起前移：原仅 F2-late + 体验地图必做前置，现同时作为 M48 起手清单一行——起手即枚举全态，避免建到 F2-late 才发现漏态返工；本轮 BM-1047 Devansh dropdown 即 role×state 矩阵，起手枚举可一次盘清 13 态）。
docs/internal/design-process.md:415:- **2026-06-08 V4-2285/2286**：同一批路由 / 删除 / 添加 affordance 中，AI 因图快手搓 glyph，后来被 M48 + mockup audit 兜住；本 Gate 要求在 semanticRole 层提前声明 expectedPattern，避免建完再扫返工。
docs/internal/design-process.md:423:M50 是 M49 的**执行外壳**：把分散在 Pre-Phase 0 / M22 / M48 / M49 / M0 / M21 / M43 / F1/F2 的起手要求压成一页可审 packet。任何产品设计任务进入高保真 mockup / UI 生成前，必须先有 M50 packet。
docs/internal/design-process.md:722:#### ⚠️ State-Completeness Enumeration（F2-late + 体验地图 必做前置，2026-06-04 新增；2026-06-15 起亦为 M48 起手清单强制一行）
docs/internal/mockup-conventions.md:18:| **§M48 Startup Rule-Coverage Self-Check（起手第一产出物，所有任务）** — 先列「本任务命中的 locked spec + active M-rule」清单再开建 | [`design-process.md` §M48](./design-process.md) |
docs/internal/mockup-conventions.md:227:#### 图标与字体的源头锁定（M48 前移，2026-06-08 新增）
docs/internal/mockup-conventions.md:229:M48 的 Glyph / 字体自查是**交付前** gate；本步把同两类决策**前移到 mapping 阶段**，从源头杜绝"边建边手搓 glyph / 默认 Inter"——建完再扫等于返工。
docs/internal/mockup-conventions.md:231:- **图标 affordance 必须当场定 component key**：mapping 表里凡 affordance 属"图标 / 箭头 / 状态符号 / 删除 / 增删 / chevron"等的 element，**必须当场 grep catalog / search library 填上真 component key**（配合 M35 affordance trace），**不允许留 TBD / 空 / "建时再定"**——留空 = 建时图省事敲 Unicode glyph 的温床（M48 §icons 违例的高发路径，2026-06-08 V4-2285/2286 实证）。
docs/internal/mockup-conventions.md:234:> **三道防线同治图标/字体两类高频复发病灶**：**M0 源头列定 → 主建按表 → M48 交付前 audit gate**（[`scripts/audit-mockup-typography-icon.mjs`](../../scripts/audit-mockup-typography-icon.mjs)，接进 `pnpm audit:consumer-mockup`）。交付前综合单闸跑 `pnpm audit:mockup-conformance --file <fileKey>`（聚合全 5 个 mockup audit，含原 orphan 的 library-origin；场景 2 加 `--non-blocking`）。
docs/internal/mockup-conventions.md:784:- [ ] 开建前 M48 rule-coverage self-check 含"范本 vs 规则真源校验"一项
docs/internal/mockup-conventions.md:1592:**根因**：返工几乎都来自"图快自建、跳过设计系统的真组件 / 真 token / 真措辞"。三件套把这三个隐性检查外化为**起手强制勾选**（呼应 [`design-process.md` M48](./design-process.md#m48--startup-rule-coverage-self-check起手强制-gate-2026-06-05-新增) 起手 self-check）：
docs/internal/mockup-conventions.md:1603:- 起手 deliverable（M48 清单）含一行："本任务自建件 [列出] → 三件套 ①②③ 各怎么落"
skills/tvu-design-mockup/SKILL.md:57:2. **Read 真源（scoped，禁全量吞）** — `AGENTS.md` + 按 `mockup-conventions.md` 顶部 **§🤖 AI 读取指引** 只读「起手必读段」（§0–§5 + M0；含 M48/M49 指针），具体 M-rule 按该指引「触发后再读」表 + Task Entry Mode 命中才 jump Read。**红线双向**：① 跳起手必读段直接进 rule = 协议违反（漏 M0 是最高频回归源）；② 无视文件自带「不要起手就全量 Read」而全量吞 2300+ 行 = 违反（注意力稀释，"规则很少遵守"诱因）。路由表覆盖完整性由 `pnpm audit:rule-load-map` 保证（每条 rule 都在 §AI 读取指引 内，scoped-load 不会静默漏 rule）。
skills/tvu-design-mockup/SKILL.md:81:6.5. **起手 Rule-Coverage Self-Check（M48，强制）** — 开建前先产出「本任务命中的 locked spec + active M-rule」清单：按 [`mockup-conventions.md` §AI 读取指引 Quick Reference] 逐行勾选触发项 + handoff/PRD locked spec 逐条列，每条配一句落地计划；主建中对照打勾，交付前必须全绿（未覆盖项写 rationale）。详见 [`design-process.md` § M48]。**跳过 = 协议违反（2026-06-01 + 2026-06-05 两次"凭印象漏调用已有规则" → 大批走查违例 实证回流）。** US-5 小调整可省。
```

## M50  (6 live refs)
```
docs/internal/design-process.md:76:- **US-5.S 微改**（单元素 + 单属性，比 US-5 更轻）— 2026-06-12 新增：同时满足 ①只改 1 个 element 的单个属性（图标实例 / 单色 / 单行文案 / 单 token）②不动布局、不加新交互、不加新 state ③不引入新 element。**可跳** ⓪⑤⑥⑦ **+ 起手三道闸（M48 / M49 / M50）**；**必做（不可跳）**：起手显式报档（见下方决策树）→ ③ 改动按 [§交付收尾 4](#交付收尾mockup-完成后必走-2026-06-03-新增) / 本文件 L100-103 标**本次产品需求 delta**（版本对版本，非 AI 迭代轮次）→ 若涉色跑 M-COLOR 检查 → ⑧ 一行 changelog。（三闸的 US-5.S 豁免**在本跳步规则登记**；M48/M49/M50 各自的"起手强制"按本表分档读。）
docs/internal/design-process.md:421:## M50 — One-Page Design Kickoff Packet（起手总控包）— 2026-06-11 新增
docs/internal/design-process.md:423:M50 是 M49 的**执行外壳**：把分散在 Pre-Phase 0 / M22 / M48 / M49 / M0 / M21 / M43 / F1/F2 的起手要求压成一页可审 packet。任何产品设计任务进入高保真 mockup / UI 生成前，必须先有 M50 packet。
docs/internal/design-process.md:432:### M50 必含
docs/internal/design-process.md:456:任何设计中途变更、用户纠正、设计后走查问题，都不能只局部修 frame；必须更新 M50 packet 的 `Regression Snapshot`，说明改动回写到了哪份合同，并重新检查未破坏 baseline。
skills/tvu-design-mockup/SKILL.md:79:   - 起手建议先跑 `pnpm design:kickoff --name <jira>`（M50 packet），把 8 步压成一页强制 checklist。
```

## M51  (2 live refs)
```
docs/internal/design-process.md:444:| Regression Snapshot | 给 M51 记录中途变更 / 设计后问题 |
docs/internal/design-process.md:454:## M51 — Change Control + Regression Snapshot（变更控制 + 回归快照）— 2026-06-11 新增
```

## M27  (11 live refs)
```
docs/internal/CONVENTIONS-OVERVIEW.md:55:| M-INTEGRITY | Mockup Layout Integrity (umbrella) — §I1 sibling layout / §I2 section overlap / §I3 children wrap | Structure; absorbs M27 / M28 / M34 |
docs/internal/CONVENTIONS-OVERVIEW.md:67:- M27 / M28 / M34 → **M-INTEGRITY**
docs/internal/mockup-conventions.md:61:| §legacy stub M27 / M28 / M30 / M34 | 仅为外部链接兼容；优先读 umbrella |
docs/internal/mockup-conventions.md:901:### M-INTEGRITY — Mockup Layout Integrity（umbrella，覆盖原 M27 / M28 / M34）
docs/internal/mockup-conventions.md:905:**Legacy ID 映射**：M27 → §I1（sibling layout consistency），M28 → §I2（sibling section overlap），M34 → §I3（children bbox wrap）。
docs/internal/mockup-conventions.md:911:#### I1 — Sibling Plan/Version Layout Consistency（原 M27）
docs/internal/mockup-conventions.md:1098:- Legacy ID 引用兼容：M27 / M28 / M34 anchor 在文末"Legacy ID Map"段维护重定向
docs/internal/mockup-conventions.md:1136:### M27 — Sibling Plan/Version Layout Consistency
docs/meta-rules.md:583:- **2026-05-18** Touch-Screen v8 session：用户提醒"为什么默认单 Agent，不能并行"——AI acknowledge 并临时切换并行（2 个 audit script agents 并发），但**之前 4 个独立任务**（M27/M28/M34 stub 化 + R1 stub + 2 SKILL refresh + meta-rules 更新）都是 sequential 单 message 跑的。用户元提醒触发本 trigger 立规则。**根因**：AI 默认 reflex 是"一个一个 tool call 跑"，没有把 parallelism 作为起手必做的产物化步骤。
skills/tvu-design-mockup/SKILL.md:12:- 硬规则 — `${CLAUDE_PLUGIN_ROOT}/docs/internal/mockup-conventions.md`（含 M0/M1 + umbrella `M-COLOR` / `M-INTEGRITY` + M23/M23.6/M24/M29/M31/M32/M33/M35 + legacy M10/M25/M26/M27/M28/M30/M34 anchor stubs；具体编号见 OVERVIEW Quick Reference）
skills/tvu-design-mockup/SKILL.md:108:Legacy ID stubs（M10/M25/M26/M27/M28/M30/M34）保留 anchor 兼容，内容已并入对应 umbrella。
```

## M28  (12 live refs)
```
docs/internal/CONVENTIONS-OVERVIEW.md:55:| M-INTEGRITY | Mockup Layout Integrity (umbrella) — §I1 sibling layout / §I2 section overlap / §I3 children wrap | Structure; absorbs M27 / M28 / M34 |
docs/internal/CONVENTIONS-OVERVIEW.md:67:- M27 / M28 / M34 → **M-INTEGRITY**
docs/internal/mockup-conventions.md:61:| §legacy stub M27 / M28 / M30 / M34 | 仅为外部链接兼容；优先读 umbrella |
docs/internal/mockup-conventions.md:901:### M-INTEGRITY — Mockup Layout Integrity（umbrella，覆盖原 M27 / M28 / M34）
docs/internal/mockup-conventions.md:905:**Legacy ID 映射**：M27 → §I1（sibling layout consistency），M28 → §I2（sibling section overlap），M34 → §I3（children bbox wrap）。
docs/internal/mockup-conventions.md:970:#### I2 — Sibling Section Overlap Probe（section.resize 后 mandatory）（原 M28）
docs/internal/mockup-conventions.md:1098:- Legacy ID 引用兼容：M27 / M28 / M34 anchor 在文末"Legacy ID Map"段维护重定向
docs/internal/mockup-conventions.md:1142:### M28 — Sibling Section Overlap Probe
docs/internal/mockup-conventions.md:1936:- **2026-05-18** Touch-Screen v8 — 4-source Receiver flow 规则回流 → **M31**（Layout function decision tree：Auto Layout 默认，absolute 必备理由）+ **M32**（M30 的扩展：所有 product UI 元素 library-first，不止 icon）+ **M33**（M23 边界澄清：双语只对注释层；产品 UI 层单语）+ **M34**（M28 兄弟：Section/Frame children-bbox wrap audit，section 不会 auto-hug）+ **M35**（思考产物外化：affordance category 分类 + 视觉词汇扫描 + 跨上下文复用 3 行强制 trace）。**5 个 M-rule 同源根因**：M1 dialog v1 实现时把 (a) 产品 UI 当注释做了双语、(b) 没找 LCD Button 自画 gradient rectangle、(c) dialog 内布局全用 absolute x/y、(d) rules card auto-layout 撑大后没补 section.resize、(e) link 图标 search 用功能词没用 affordance 同义词矩阵 + 跳过 published library MCP search 5 个问题一起出现。共同主线是"在 product UI 层套用了 annotation 层的范式 / 跳过库 lookup / 跳过 layout 决策 / 思考过程没外化为产物"。**M30-M34 描述 WHERE 搜，M35 强制 HOW 思考再搜——三层联用才覆盖完。** code 侧同步镜像：**R13**（M35 mirror）+ **R14**（M31 mirror）+ **R15**（M32 mirror）+ **R16**（M33 mirror）一并 commit；用户主动要求 "不是所有的都得等实证再约束，早发现早解决"——双向规则同源消除 mockup ↔ code 之间的 anti-pattern 漂移。
docs/meta-rules.md:583:- **2026-05-18** Touch-Screen v8 session：用户提醒"为什么默认单 Agent，不能并行"——AI acknowledge 并临时切换并行（2 个 audit script agents 并发），但**之前 4 个独立任务**（M27/M28/M34 stub 化 + R1 stub + 2 SKILL refresh + meta-rules 更新）都是 sequential 单 message 跑的。用户元提醒触发本 trigger 立规则。**根因**：AI 默认 reflex 是"一个一个 tool call 跑"，没有把 parallelism 作为起手必做的产物化步骤。
skills/tvu-design-mockup/SKILL.md:12:- 硬规则 — `${CLAUDE_PLUGIN_ROOT}/docs/internal/mockup-conventions.md`（含 M0/M1 + umbrella `M-COLOR` / `M-INTEGRITY` + M23/M23.6/M24/M29/M31/M32/M33/M35 + legacy M10/M25/M26/M27/M28/M30/M34 anchor stubs；具体编号见 OVERVIEW Quick Reference）
skills/tvu-design-mockup/SKILL.md:108:Legacy ID stubs（M10/M25/M26/M27/M28/M30/M34）保留 anchor 兼容，内容已并入对应 umbrella。
```

## M30  (28 live refs)
```
docs/CONSUMER_AUDIT_SETUP.md:20:| `audit-mockup-library-binding.mjs` | CLI script | Lint a Figma mockup file (M0 library instance / M1 Top bar / M30 icon library) |
docs/MIGRATION_TO_V1.md:124:pnpm audit:consumer-mockup-binding <fileKey>           # M0/M1/M30 library binding
docs/V1_RELEASE_CHECKLIST.md:71:- [x] **Tier 1-B** mockup audit 三件套 (M-INTEGRITY + M-COLOR + M0/M1/M30 library-binding) — v0.6.0
docs/V1_RELEASE_CHECKLIST.md:166:| 4 AI multimodal → mockup | ✅ Tier 1-B mockup audit gates (M0/M1/M30/I1/I2/I3/C1/C2/C3) — first L3+ gate landed v0.6.0 | |
docs/internal/CONVENTIONS-OVERVIEW.md:61:| M32 | Library Component-First for all product UI elements (absorbs M30 icons) | Library use |
docs/internal/CONVENTIONS-OVERVIEW.md:68:- M30 → **M32**
docs/internal/code-conventions.md:1130:- **2026-05-18** Touch-Screen v8 同源案例：mockup 端 link 图标 / dropdown chevron 两次 miss 都因 search query 用功能词不用 affordance 同义词。代码端若 sync 同 mockup，写 `<svg>` 也会犯同样的错。R13 + R1 + R4 三层防线在代码端镜像 mockup 端 M35 + M30 + M32 的设防。
docs/internal/mockup-conventions.md:43:| §M32 (含 M30 icon 扩展) | 要 instance 任何 product UI 元素前 |
docs/internal/mockup-conventions.md:61:| §legacy stub M27 / M28 / M30 / M34 | 仅为外部链接兼容；优先读 umbrella |
docs/internal/mockup-conventions.md:145:复用 **US-6 规则 + M30-M36 library-first lookup + M-TXT-ICON-AUDIT**，不重新发明。产出 3 层清单：
docs/internal/mockup-conventions.md:1465:### M30 — Icon Component Mandatory Library Lookup
docs/internal/mockup-conventions.md:1467:> **⚠️ Merged into [M32](#m32--library-component-firstm30-扩展所有-product-ui-元素)** as the icon sub-clause (M32 §icons). M32 is the umbrella for all product UI elements (icons + buttons + chips + inputs + ...); M30 was the icon-specific subset and is now absorbed.
docs/internal/mockup-conventions.md:1530:### M32 — Library Component-First（M30 扩展：所有 product UI 元素）
docs/internal/mockup-conventions.md:1534:M30 把"按库取用"约束限定在 icon。**所有 product UI 元素**（button / chip / badge / input / dropdown / list row / dialog action 按钮）同样适用——先 lookup component 再考虑自画。
docs/internal/mockup-conventions.md:1536:#### 优先级（与 M30 对齐）
docs/internal/mockup-conventions.md:1571:- **2026-05-18** Touch-Screen v8 M1 dialog v1：Skip / Configure 两个按钮用自画 gradient rectangle，没用 `LCD Button` 的 `Type=Back/Status=Normal` + `Type=Primary/Status=Normal` variant。v2 重做用 instance + override text，自动对齐设备风格。**根因同 M30**：lookup 步骤跳过 / 同义词没穷尽。
docs/internal/mockup-conventions.md:1660:M30 / M32 / §"组件取数优先级" 规定了 **WHERE 去搜**，但没规定 **HOW 思考再搜**：
docs/internal/mockup-conventions.md:1727:只有 Step 1+2+3 verified miss **且** 用户授权 → 才允许进入自画路径（同 M30 priority 3 既有条款 + backlog 候补）。
docs/internal/mockup-conventions.md:1746:#### 与 M30 / M32 关系
docs/internal/mockup-conventions.md:1748:- M30 / M32 = **search infrastructure rules**（WHERE）
docs/internal/mockup-conventions.md:1750:- 三条联用：M35 先强制分类 → M30/M32 决定按 priority 在哪一层 invoke 搜索
docs/internal/mockup-conventions.md:1751:- M35 不取代 M30 priority 1 "必须 MCP search_design_system 不能只 findAll"——只是把 query 的关键词从功能词扩展到 affordance 同义词矩阵
docs/internal/mockup-conventions.md:1756:- **2026-05-18** Touch-Screen v8 — link 图标搜索：我用 `findAll` regex `/link/i.test(name)` → 命中只有 `starlink` 干扰项 → fall back 自画 placeholder。**根因 1**：跳过 priority 1 published library MCP search（违 M30）；**根因 2**：query 用功能词 `link` 而非 affordance 同义词集 `[link, chain, connect, share, external, open]`（M35 缺）。M35 + M30 priority 1 双修才完整。
docs/internal/mockup-conventions.md:1935:- **2026-05-18** MicroApps Console Plan B 规则回流 → **M30**（图标强制从库取用：优先级表 + 禁止 Unicode 替代 + 同义词策略）；**M10 item 5**（product mockup icon 实例化后 fill 绑定，M2.1）；Q8 已回流 `figma-technical-reference.md`（HORIZONTAL auto-layout insertChild）。根因：V3 Sort TEXT "↑" + V4-V5 Unicode chevron 两个违例同源——跳过 icon library lookup 直接用文字占位，换词搜索即可命中。
docs/internal/mockup-conventions.md:1936:- **2026-05-18** Touch-Screen v8 — 4-source Receiver flow 规则回流 → **M31**（Layout function decision tree：Auto Layout 默认，absolute 必备理由）+ **M32**（M30 的扩展：所有 product UI 元素 library-first，不止 icon）+ **M33**（M23 边界澄清：双语只对注释层；产品 UI 层单语）+ **M34**（M28 兄弟：Section/Frame children-bbox wrap audit，section 不会 auto-hug）+ **M35**（思考产物外化：affordance category 分类 + 视觉词汇扫描 + 跨上下文复用 3 行强制 trace）。**5 个 M-rule 同源根因**：M1 dialog v1 实现时把 (a) 产品 UI 当注释做了双语、(b) 没找 LCD Button 自画 gradient rectangle、(c) dialog 内布局全用 absolute x/y、(d) rules card auto-layout 撑大后没补 section.resize、(e) link 图标 search 用功能词没用 affordance 同义词矩阵 + 跳过 published library MCP search 5 个问题一起出现。共同主线是"在 product UI 层套用了 annotation 层的范式 / 跳过库 lookup / 跳过 layout 决策 / 思考过程没外化为产物"。**M30-M34 描述 WHERE 搜，M35 强制 HOW 思考再搜——三层联用才覆盖完。** code 侧同步镜像：**R13**（M35 mirror）+ **R14**（M31 mirror）+ **R15**（M32 mirror）+ **R16**（M33 mirror）一并 commit；用户主动要求 "不是所有的都得等实证再约束，早发现早解决"——双向规则同源消除 mockup ↔ code 之间的 anti-pattern 漂移。
skills/tvu-design-mockup/SKILL.md:12:- 硬规则 — `${CLAUDE_PLUGIN_ROOT}/docs/internal/mockup-conventions.md`（含 M0/M1 + umbrella `M-COLOR` / `M-INTEGRITY` + M23/M23.6/M24/M29/M31/M32/M33/M35 + legacy M10/M25/M26/M27/M28/M30/M34 anchor stubs；具体编号见 OVERVIEW Quick Reference）
skills/tvu-design-mockup/SKILL.md:102:- **库优先 + 思考产物外化**：M32（library-first 所有 UI 元素，原 M30 absorbed）+ M35（affordance category trace 3 行强制）
skills/tvu-design-mockup/SKILL.md:108:Legacy ID stubs（M10/M25/M26/M27/M28/M30/M34）保留 anchor 兼容，内容已并入对应 umbrella。
```

## M34  (12 live refs)
```
docs/internal/CONVENTIONS-OVERVIEW.md:55:| M-INTEGRITY | Mockup Layout Integrity (umbrella) — §I1 sibling layout / §I2 section overlap / §I3 children wrap | Structure; absorbs M27 / M28 / M34 |
docs/internal/CONVENTIONS-OVERVIEW.md:67:- M27 / M28 / M34 → **M-INTEGRITY**
docs/internal/mockup-conventions.md:61:| §legacy stub M27 / M28 / M30 / M34 | 仅为外部链接兼容；优先读 umbrella |
docs/internal/mockup-conventions.md:901:### M-INTEGRITY — Mockup Layout Integrity（umbrella，覆盖原 M27 / M28 / M34）
docs/internal/mockup-conventions.md:905:**Legacy ID 映射**：M27 → §I1（sibling layout consistency），M28 → §I2（sibling section overlap），M34 → §I3（children bbox wrap）。
docs/internal/mockup-conventions.md:998:#### I3 — Section / Frame children-bbox wrap audit（原 M34）
docs/internal/mockup-conventions.md:1098:- Legacy ID 引用兼容：M27 / M28 / M34 anchor 在文末"Legacy ID Map"段维护重定向
docs/internal/mockup-conventions.md:1646:### M34 — Section / Frame children-bbox wrap audit
docs/internal/mockup-conventions.md:1936:- **2026-05-18** Touch-Screen v8 — 4-source Receiver flow 规则回流 → **M31**（Layout function decision tree：Auto Layout 默认，absolute 必备理由）+ **M32**（M30 的扩展：所有 product UI 元素 library-first，不止 icon）+ **M33**（M23 边界澄清：双语只对注释层；产品 UI 层单语）+ **M34**（M28 兄弟：Section/Frame children-bbox wrap audit，section 不会 auto-hug）+ **M35**（思考产物外化：affordance category 分类 + 视觉词汇扫描 + 跨上下文复用 3 行强制 trace）。**5 个 M-rule 同源根因**：M1 dialog v1 实现时把 (a) 产品 UI 当注释做了双语、(b) 没找 LCD Button 自画 gradient rectangle、(c) dialog 内布局全用 absolute x/y、(d) rules card auto-layout 撑大后没补 section.resize、(e) link 图标 search 用功能词没用 affordance 同义词矩阵 + 跳过 published library MCP search 5 个问题一起出现。共同主线是"在 product UI 层套用了 annotation 层的范式 / 跳过库 lookup / 跳过 layout 决策 / 思考过程没外化为产物"。**M30-M34 描述 WHERE 搜，M35 强制 HOW 思考再搜——三层联用才覆盖完。** code 侧同步镜像：**R13**（M35 mirror）+ **R14**（M31 mirror）+ **R15**（M32 mirror）+ **R16**（M33 mirror）一并 commit；用户主动要求 "不是所有的都得等实证再约束，早发现早解决"——双向规则同源消除 mockup ↔ code 之间的 anti-pattern 漂移。
docs/meta-rules.md:583:- **2026-05-18** Touch-Screen v8 session：用户提醒"为什么默认单 Agent，不能并行"——AI acknowledge 并临时切换并行（2 个 audit script agents 并发），但**之前 4 个独立任务**（M27/M28/M34 stub 化 + R1 stub + 2 SKILL refresh + meta-rules 更新）都是 sequential 单 message 跑的。用户元提醒触发本 trigger 立规则。**根因**：AI 默认 reflex 是"一个一个 tool call 跑"，没有把 parallelism 作为起手必做的产物化步骤。
skills/tvu-design-mockup/SKILL.md:12:- 硬规则 — `${CLAUDE_PLUGIN_ROOT}/docs/internal/mockup-conventions.md`（含 M0/M1 + umbrella `M-COLOR` / `M-INTEGRITY` + M23/M23.6/M24/M29/M31/M32/M33/M35 + legacy M10/M25/M26/M27/M28/M30/M34 anchor stubs；具体编号见 OVERVIEW Quick Reference）
skills/tvu-design-mockup/SKILL.md:108:Legacy ID stubs（M10/M25/M26/M27/M28/M30/M34）保留 anchor 兼容，内容已并入对应 umbrella。
```

## M42  (12 live refs)
```
docs/internal/design-process.md:1103:| ✅ **Clone + Mutate**：clone 现有 functional element → mutate 派生各 variant | 默认路径 | 继承源 element 的潜在 bug（如裸 hex stroke）—— **必先过 M42 Clone Gate** |
docs/internal/design-process.md:1110:- Clone 路径必绑 M42 Clone Gate（probe brand-color paint bindings）—— 不能盲 clone 把源 bug 放大到 N variants
docs/internal/design-process.md:1113:**实证**（2026-05-26 Video Sync Phase B Step 2）：12 variants 全从 5 个 anchor row 派生（clone + mutate），结构正确性 99% 继承自源。但源 row 有裸 hex stroke bug → 12 variants 全部继承 → M42 Clone Gate 缺位 → 直到 walkthrough audit 才发现。
docs/internal/mockup-conventions.md:56:| §M42 + §M42.2 + §M42.3 | clone / 复制 节点或 frame 时（§M42.3：迭代既有物**优先就地改**、禁旁路克隆搭样板制造重复集）|
docs/internal/mockup-conventions.md:296:3. **Clone 风险放大**：raw hex 在 clone 后变 N 倍 bug（详见 **M42 Clone Gate**）。
docs/internal/mockup-conventions.md:306:6. **写 paint object 前先检查源**：若 paint 复用自现有 paint object（如 `const stroke = sourceNode.strokes`），先 probe `boundVariables` 是否完整——源缺失则**先修源再 clone**，不要把 bug 传播到 N 个 instance（详见 **M42 Clone Gate**）。
docs/internal/mockup-conventions.md:2285:### M42 — Clone Gate: probe brand-color paint bindings before mutate — 2026-05-26 新增
docs/internal/mockup-conventions.md:2345:### M42.2 — Cloned Frame Structural Audit（M42 extension）— 2026-06-02 新增
docs/internal/mockup-conventions.md:2347:Cloning a frame inherits ALL children, 包括 invisible / decorative elements（scrollbar 占位 / spacer / overlay backdrop）。这些在源 frame 视觉不明显，clone 到新 frame 后做结构改动时容易产生**冲突或丢失隐式定位**——M42 原 scope 仅 cover brand-color paint propagate，本 sub-rule 扩到结构继承层面。
docs/internal/mockup-conventions.md:2382:两个 bug 同根：M42 brand-color paint scope 不足以 cover "clone + structural mutation"。本 sub-rule 把 Clone Gate 扩到结构继承层面，把"clone 后再改 layout"的隐式依赖纳入 audit。
docs/internal/mockup-conventions.md:2386:### M42.3 — Clone Placement Discipline: 就地改优先，禁旁路克隆搭样板（M42 extension）— 2026-06-17 新增
docs/internal/mockup-conventions.md:2393:- **与 M42 / M42.2 区别**：M42/M42.2 管"clone 时不传播 bug / 结构"；本条管"**该不该 clone**"——优先不 clone，就地改。
```

## M46  (7 live refs)
```
AGENTS.md:21:1. **Read [`docs/internal/mockup-conventions.md`](./docs/internal/mockup-conventions.md) — 按文件顶 §🤖 AI 读取指引 scoped 读**（起手必读段 + 触发 jump，禁全量吞；重点 M0 / M1 / M-COLOR / M-INTEGRITY / M-BIND / **M-LIFECYCLE** / M23 / M29 / M32 / M35 / M43 / M46 / M47）
AGENTS.md:34:- 用户说"基于昨天的页面修改" / "在上一期 mockup 上加 X" / "clone 这个 page 改 Y" → 额外触发 M46 (Library Instance Iteration Discipline)
AGENTS.md:41:- 起手用 createFrame 自画 overlay 覆盖既有库 instance → 违 M46 (Library Instance Iteration Discipline)；正路是先 probe instance 可改性
AGENTS.md:57:- 2026-05-28 TPC-628（TPC-Service 消费端）：AI 起手 clone FB-9398 后误判 instance 不可改 → 跳到自画 overlay；又把 NEW badge 放 page 层；font fallback 时丢 textStyleId 让 cell 变灰；列宽 rebudget 砍了 Operation 列但没 zoom-in 验证 Edit/Delete/Status 三按钮溢出；收尾时留下 spec 帧 / Display Logic 代码卡 / Persona 卡等冗余 → 用户连续抓 7 次。本次回流加 M46 / M47 / M-INTEGRITY §I4 / M23.10 / M23.11 / M43.2 / Scope Handling / Delivery Cleanup Gate 等规则。
docs/internal/design-process.md:227:| **active M-rule（按场景触发）** | 编号 + 名（M1 / M23.x / M-COLOR / M-INTEGRITY §I1.1 / M32 / M46 / M47 …） | … |
docs/internal/mockup-conventions.md:47:| §M46 | 迭代既有 mockup（clone 上期 page 改本期）起手前必读 |
docs/internal/mockup-conventions.md:2398:### M46 — Library Instance Iteration Discipline（2026-05-28 新增）
```

## M23.6  (35 live refs)
```
AGENTS.md:27:- **操作前**：create/move 先 probe 目标区防叠加(§I6) · update 先 live 重读做最小 delta(§I5) · delete 先确认目标 + 处理指向它的 connector(§I5/§M23.6)
docs/WAKE-WORDS.md:15:| 写 / 更新 UX 交付说明 | `@TVU UX说明` / 写 UX 交付说明 / 更新 UX 交付说明 | M23 + M23.6 + UX 卡 canonical schema | mockup-conventions §M23 |
docs/WAKE-WORDS.md:31:| 画 UX 交付注释 / 流程连线 | §M23 + §M23.6 + §M33 |
docs/internal/CONVENTIONS-OVERVIEW.md:57:| M23.6 | Connector tip accuracy + frame content avoidance | Annotation extension |
docs/internal/design-process.md:241:- **2026-06-01 BM-1047**：design-process 完整 8 步只命中 3/8，M45 / M23.8 / M23 / M23.6 / audit 全靠用户走查补。
docs/internal/figma-technical-reference.md:411:任何"跨 2 个或更多 node 之间画 arrow / connector / 流程连线"的场景（M23 / M23.6 / M23.9 用例），画线之前**必须 probe 端点 node 的 `node.absoluteBoundingBox` 拿真实 canvas 坐标**，禁止凭 frame 尺寸 + 估算 offset 推断目标 Y/X。
docs/internal/figma-technical-reference.md:489:- **2026-06-09** BM-1047 V3 split-wallet（**同坑复发，故升上方高频警示**）：V3 section `5399:2046` 内放 Design Spec 卡、流程连线（M23.6 Vector）两次拿 `sec.x + offset` 当绝对坐标设，节点被甩出 section。改用 section-relative / delta 法 + probe `absoluteBoundingBox` 校验后归位。立规后仍复发 → 本次加"起手先问相对还是绝对"自检 + delta 法显式备选。
docs/internal/mockup-conventions.md:30:| §M23 + §M23.6 + §M33 | 要画 UX 交付注释 / 流程图 / annotation 字符串时 |
docs/internal/mockup-conventions.md:479:流程连线 = **起点实心圆点 ● + 终点箭头 ▶**（`●————▶`），让用户一眼看出从哪到哪、不靠猜方向。线身按 §M23.6 走正交折线：同行/同列即单段直线，跨行用折线（直线还是折线按拓扑需要选，见 M23.6 几何模板）：
docs/internal/mockup-conventions.md:503:      // 两端都锚在语义元素 bbox（非卡边）；fromCanvas/tipCanvas 供 M23.6 (A) 两端审计
docs/internal/mockup-conventions.md:677:- 卡视觉 = M23 navy chip（§配色表 + §M23.6 同色系 cyan accent）。
docs/internal/mockup-conventions.md:1056:仅 **M23.9 state-preview elements** 是例外——dropdown / popover / context menu 等 overlay 状态预览必须放在产品 frame 外，且必有 M23.6 connector 指回 trigger（此例外的反例：放 page 层但无 connector → 违 M23.9）。
docs/internal/mockup-conventions.md:1104:> **为什么单立一条**：本项目反复出现「规则已存在但没在对的时点触发」的 silent 失败（STATUS 实证：6 process gap 中 5 个同源此模式；I5/I6/M23.6 probe 都"写了没跑"）。维度有没有规则不是瓶颈，**有没有在 create/update/delete 的前、后、走查三个时点真跑**才是。本闸把已有规则钉到三时点，不重造规则、只锁触发。
docs/internal/mockup-conventions.md:1114:| **delete** | 删前看内容确认确是要删的（不只看 name）；查有无 connector / reference 指向它，连 connector 一起删 / 重连，不留 orphan 线 | §I5 + §M23.6 |
docs/internal/mockup-conventions.md:1119:- 连线几何另跑 `use_figma` `checkConnectorOrthogonality`（§M23.6；REST 不可机检 centerline）。
docs/internal/mockup-conventions.md:1125:- 机械维度全集（跑 conformance 一次覆盖）：integrity I1-I4 · colors · typography-icon · library-origin · binding-fidelity(D16) · **overlap(block 叠加)** · **bilingual-spacing(M23.14)**；连线正交另跑 M23.6 probe；位置紧邻(M23.12) 仍自查。
docs/internal/mockup-conventions.md:1196:### M23.6 — Connector Endpoint Anchoring（两端锚定）+ Frame Content Avoidance（M23 extension）
docs/internal/mockup-conventions.md:1251:**Audit**：probe 每条 vector 的 `vectorPaths[0].data`，按 `L` 分段。任一段若两端点 `Δx > 4 && Δy > 4`（即斜线）→ 标 ❌ M23.6 (C) 违例。
docs/internal/mockup-conventions.md:1292:### M23.9 — State-preview elements 放产品 frame 外，连线指回触发元素（M23 / M23.6 extension）— 2026-05-27 新增
docs/internal/mockup-conventions.md:1297:2. **用 M23.6 VECTOR 连接线**指向触发元素（即用户点击 / hover 的那个 cell / icon / button）
docs/internal/mockup-conventions.md:1298:3. 连接线遵守 M23.6 (A) tip accuracy + (B) frame content avoidance（不穿越产品 UI）
docs/internal/mockup-conventions.md:1322:| 用红框 / 箭头注解但连接线穿过其它 sub-header / table rows | 违 M23.6 (B) Frame Content Avoidance |
docs/internal/mockup-conventions.md:1328:- [ ] state-preview 与 trigger element 之间有 1 条 VECTOR connector（遵守 M23 + M23.6）
docs/internal/mockup-conventions.md:1329:- [ ] connector tip 落在 trigger element bbox 内（M23.6 (A)）
docs/internal/mockup-conventions.md:1330:- [ ] connector 路径不穿越 frame 内部 sub-header / table rows / cards 内容（M23.6 (B)）
docs/internal/mockup-conventions.md:1335:**2026-05-27 FB-9398**：Environment 编辑下拉演示，AI v1 直接放 frame 内单元格下方 → 遮挡后续 row → 用户手动拖到 frame 外 + 连接线 → AI 后续操作又把它 reparent 回 frame 内"对齐 cell 下方"→ 用户抓"我刚刚改好了，又被你移掉了，无语了"。根因：M23.6 已规定 connector routing 避让，但**没明确 state-preview 元素本身必须在 frame 外**，AI 在重新 parent 时按"视觉就近"错判。本规则即此回流，把"state-preview 元素落位"也纳入硬约束。
docs/internal/mockup-conventions.md:2521:| **Jira 关联型 mockup** (US-1/US-2，含 Jira issue key) | M45 (page 命名) / M23.8 (Jira annotation + hyperlink) / Pre-Phase 0 Step B (PRD 写入 Figma) / M0 (element-to-component mapping) / [画 frame 产品 UI] / M23 (state-label 每帧之上) / M23.6 (流程连线 + 触发 label) / Audit + walkthrough |
docs/internal/mockup-conventions.md:2540:| 完成"画 frame 产品 UI"就汇报"6 个 frame 都画完了，可以 walkthrough" | 缺 M23 / M23.6 / M45 / M23.8 等周边 deliverable；定义错了 done |
docs/internal/mockup-conventions.md:2550:2. **同步受影响的交付层** —— UX 卡（§M23 canonical 结构）+ M23.6 连线 + M23.7 state-label，使其反映本次改动。
docs/internal/mockup-conventions.md:2566:- **2026-06-01** BM-1047 mockup (Micro-App Token Portal Multi-Seat Subscription)：起手读完 `design-process.md` 8 步 Jira 关联型流程，实际执行**只命中 3/8** (PRD + M0 + 画 frame)。M45 / M23.8 / M23 / M23.6 / audit 全部靠用户走查时提醒补——5 步返工连带 section 重排间距 / frame 重新克隆 / 连线后置加入等。详 `retrospection/2026-06-01-rule-execution-discipline-gap.md`。
skills/design-walkthrough/SKILL.md:78:> **机械维度证据化（keystone，2026-06-17 新增）**：D16 的"不靠目测、贴机检结果"模式**泛化到全部机械可判维度**——M32 库归属(`audit-mockup-library-origin`)、M-COLOR(`audit-mockup-colors`)、M49 binding(`audit-mockup-binding-fidelity`)、**M-INTEGRITY block 叠加(`audit-mockup-overlap`)**、**M23.14 双语堆叠行距(`audit-mockup-bilingual-spacing`)**、M-VARIANT 像素一致。一次 `pnpm audit:mockup-conformance --file <key> --node <id>` 跑齐上述机检（连线正交另跑 `use_figma` M23.6 probe，REST 不可机检）。**这些维度的判定列必须贴对应机检 gate 的 pass/fail（含审计原文片段），禁止靠目测 / 记忆打 `✅` 或 `N/A`**；无 gate 输出的机械维度**视为未走查（协议违反）**。机检 gate 的 `--node` 必须覆盖**本 session 触碰的所有节点**，不止新建物。**走查是 §M-LIFECYCLE 第三时点（兜底全扫）——前两时点（操作前 probe / 操作后即时机检）见 mockup-conventions §M-LIFECYCLE。****实证 2026-06-17 BM-1047 V3**：走查只目测审了新建弹窗、把 M32/M-VARIANT 打 `✅`/`N/A`，漏了改过的下拉按钮非组件 + 跨态不一致 + 角色标记不一致——`library-origin`/`binding-fidelity` 早能抓到，但没在走查时跑，最后靠用户手工逐条指出。
skills/tvu-design-mockup/SKILL.md:12:- 硬规则 — `${CLAUDE_PLUGIN_ROOT}/docs/internal/mockup-conventions.md`（含 M0/M1 + umbrella `M-COLOR` / `M-INTEGRITY` + M23/M23.6/M24/M29/M31/M32/M33/M35 + legacy M10/M25/M26/M27/M28/M30/M34 anchor stubs；具体编号见 OVERVIEW Quick Reference）
skills/tvu-design-mockup/SKILL.md:85:   - **自检 = 脚本机器输出，目测不算数（§M-DISCIPLINE.SYNC）**：把总闸里 integrity 的逐条机器输出 `Integrity audit: I1=… / I2=… / I3=overflow-count 0 / I4=orphan-count 0` + conformance summary **贴进 handoff 的 `Rule checklist:` 块**；AI「目测 / 看起来 OK / 应该没问题」**不构成自检通过**（实证 2026-06-18：提醒检查后仍漏 I3 overflow，因目测代替跑脚本）。触发不限于整体收尾——**任何编辑 confirmed 后**都须按 §M-DISCIPLINE.SYNC 跑自检 + 同步受影响的 UX 卡（§M23 canonical 结构）/ M23.6 连线 / M23.7 state-label
skills/tvu-design-mockup/SKILL.md:103:- **UX 交付注释**：M23 + M23.6（连线 + frame 内容避让）+ M33（注释 vs 产品 UI 语言隔离）
skills/tvu-design-pipeline/SKILL.md:26:| 4 | UX 交付层 | `tvu-design-mockup`（M23 / M23.6 / M33） | 每态 **state-label 状态说明** + 状态间**流程连线箭头** + **Section 四周 120px 留白** + mockup 间距按布局规范足够开 |
```

## M23.7  (5 live refs)
```
docs/internal/mockup-conventions.md:37:| §M23.7 + §M23.9（state-label = what+why+invariants + state-preview 元素放产品 frame 外、连线指回触发元素）| **写状态标注 / 把边界态预览元素放到产品 frame 外**时 |
docs/internal/mockup-conventions.md:1436:### M23.7 — State-label = what + why + invariants（M23 / M33 extension，2026-05-26）
docs/internal/mockup-conventions.md:1454:- M23.7 管 **每 frame 的 state-label** —— 单 frame 的内容描述。三者协作：M23 画关系、M33 管语言、M23.7 管单帧文案完整度
docs/internal/mockup-conventions.md:2550:2. **同步受影响的交付层** —— UX 卡（§M23 canonical 结构）+ M23.6 连线 + M23.7 state-label，使其反映本次改动。
skills/tvu-design-mockup/SKILL.md:85:   - **自检 = 脚本机器输出，目测不算数（§M-DISCIPLINE.SYNC）**：把总闸里 integrity 的逐条机器输出 `Integrity audit: I1=… / I2=… / I3=overflow-count 0 / I4=orphan-count 0` + conformance summary **贴进 handoff 的 `Rule checklist:` 块**；AI「目测 / 看起来 OK / 应该没问题」**不构成自检通过**（实证 2026-06-18：提醒检查后仍漏 I3 overflow，因目测代替跑脚本）。触发不限于整体收尾——**任何编辑 confirmed 后**都须按 §M-DISCIPLINE.SYNC 跑自检 + 同步受影响的 UX 卡（§M23 canonical 结构）/ M23.6 连线 / M23.7 state-label
```

## M23.9  (8 live refs)
```
docs/internal/figma-component-catalog.md:183:- 注：作 mockup 里的"确认弹窗状态预览" → 必 frame 外 + 连线（M23.9，**不可叠在产品 frame 上**）。
docs/internal/figma-technical-reference.md:411:任何"跨 2 个或更多 node 之间画 arrow / connector / 流程连线"的场景（M23 / M23.6 / M23.9 用例），画线之前**必须 probe 端点 node 的 `node.absoluteBoundingBox` 拿真实 canvas 坐标**，禁止凭 frame 尺寸 + 估算 offset 推断目标 Y/X。
docs/internal/mockup-conventions.md:37:| §M23.7 + §M23.9（state-label = what+why+invariants + state-preview 元素放产品 frame 外、连线指回触发元素）| **写状态标注 / 把边界态预览元素放到产品 frame 外**时 |
docs/internal/mockup-conventions.md:1056:仅 **M23.9 state-preview elements** 是例外——dropdown / popover / context menu 等 overlay 状态预览必须放在产品 frame 外，且必有 M23.6 connector 指回 trigger（此例外的反例：放 page 层但无 connector → 违 M23.9）。
docs/internal/mockup-conventions.md:1069:- [ ] 唯一允许 page 级 parent 的视觉元素是 M23.9 state-preview（且必有 connector）
docs/internal/mockup-conventions.md:1292:### M23.9 — State-preview elements 放产品 frame 外，连线指回触发元素（M23 / M23.6 extension）— 2026-05-27 新增
docs/internal/mockup-conventions.md:1337:**2026-06-04 Graphics Insertion MC-44（重复违例）**：Remove-confirm popover 直接叠在 PGM preview 上，歪理"popover 本来就盖内容"。但交付物身份要求放 frame 外 + 连线。用户原话"这个我记得也提醒过"。**根因**：confirm/popover 虽已在本节（§M23.9）触发表列举，但 AI 把"运行态 popover 盖内容"误当合理。强化：trigger 表显式加 "Confirm/delete-confirm popover" 行；**任何 destructive 二次确认弹窗 = state-preview，必 frame 外 + 连线 + UX 说明**，无例外。
docs/internal/mockup-conventions.md:1341:Mockup 的双重身份：(1) **运行时视觉真实**——dropdown 真实就开在 cell 下方；(2) **交付物可读性**——reader 在静态画面上要看清产品默认态 + 状态预览**同时**。两个身份在静态 mockup 里冲突，**M23.9 优先选 (2)**：state-preview 移到 frame 外，用连接线明确触发关系。运行时真实由代码 / Prototype mode 还原。
```

## M24  (12 live refs)
```
docs/internal/CONVENTIONS-OVERVIEW.md:58:| M24 | Code → Token Mapping Table | Process gate ("已有 code 还原效果图" 场景) |
docs/internal/CONVENTIONS-OVERVIEW.md:199:US-4 is the most failure-prone — that's why R8 (visual-diff protocol) and M24 (code→token mapping) exist.
docs/internal/design-process.md:976:**Why**：工程师术语（"left arrow" → 任何指左的图标）≠ 设计师术语（`Left` = directional action，`Previous` = navigational step）。两套术语不会自动对齐 — 必须靠人主动看命名 + 视觉双重 verify（参 M24 token mapping table 同源思路）。
docs/internal/mockup-conventions.md:40:| §M24 | "已有 code 还原效果图"场景前置 |
docs/internal/mockup-conventions.md:847:### M24 — Code→Token Mapping Table（仅 "已有 code 还原效果图" 场景前置硬规则）
docs/internal/mockup-conventions.md:857:> ⚠️ **不只看文件后缀**——`.html` 单文件 demo 里 `<style>:root { --brand: #2fb54e; --brand-hover: #41c760; }` 与多文件项目的 `tokens.css` 等价，**同样触发 M24**。本次实战实证：`microapps-console-planb.html` 单文件 + `vue-app/src/assets/tokens.css` 多文件项目两种形式都是有效 source。
docs/internal/mockup-conventions.md:862:- **US-3 增量但无 code spec** — 只在既有 Figma 上加新元素 → 走 M21 sibling visual contract，不走 M24
docs/internal/mockup-conventions.md:890:2. 真有 source 可读吗（多文件项目 OR 单 HTML demo 含 `<style>:root` token 块 OR Tailwind/theme 配置 等任意形式）？→ 是 → **M24 触发**，产 mapping table
docs/internal/mockup-conventions.md:893:**自检反例**（如下情况误触发 M24 就是过度套规则）：
docs/internal/mockup-conventions.md:1934:- **2026-05-14** MicroApps Console Plan B Figma 实战 → M24（Code→Token mapping table 起手前置）+ M25（State Color Discipline，hover ≠ brand）+ M26（BG vs Text Grey Discipline）；Q7 嵌套 instance paint.opacity 失效（迁 `figma-technical-reference.md`）。**3 个 M-rule 同源：AI 把 "inactive grey" 凭直觉映射到 `UX/Grey/grey-7`（错的），把 sidebar hover 用 `Layer_3`（也错的），都因起手没产 Code→Token mapping table。共同根因是"凭看上去像哪个 token 就用哪个"，解药是把映射步骤显式化、前置化、产物化**。
skills/tvu-design-mockup/SKILL.md:12:- 硬规则 — `${CLAUDE_PLUGIN_ROOT}/docs/internal/mockup-conventions.md`（含 M0/M1 + umbrella `M-COLOR` / `M-INTEGRITY` + M23/M23.6/M24/M29/M31/M32/M33/M35 + legacy M10/M25/M26/M27/M28/M30/M34 anchor stubs；具体编号见 OVERVIEW Quick Reference）
skills/tvu-design-mockup/SKILL.md:99:- **流程 / Phase 0 类**：M0（element-to-component mapping）+ M24（code→token mapping，"已有 code 还原效果图" 场景）
```

## M29  (16 live refs)
```
AGENTS.md:21:1. **Read [`docs/internal/mockup-conventions.md`](./docs/internal/mockup-conventions.md) — 按文件顶 §🤖 AI 读取指引 scoped 读**（起手必读段 + 触发 jump，禁全量吞；重点 M0 / M1 / M-COLOR / M-INTEGRITY / M-BIND / **M-LIFECYCLE** / M23 / M29 / M32 / M35 / M43 / M46 / M47）
docs/internal/CONVENTIONS-OVERVIEW.md:59:| M29 | Table Cell Content Pattern (Copyable / Empty) | Visual |
docs/internal/code-conventions.md:1325:| ID / IP 字段强行 ellipsis 不给 copy | R15 / M29 Form 1 要求 hug + copy；这类信息字段不走 R23 |
docs/internal/design-process.md:67:| ③ Mockup 主体 | 按 `mockup-conventions.md` §🤖 AI 读取指引 scoped 读（起手必读段 + 触发 jump，禁全量吞；重点 M0 / M-COLOR / M-INTEGRITY / M-BIND / M29 / M32 / M35 / M43 / M44） |
docs/internal/design-process.md:811:| **可复制语义** | 是否 ID / IP / URL 等需保留完整给用户复制？ → 走 M29 Form 1（hug + copy icon），**不走** M43 ellipsis |
docs/internal/figma-component-catalog.md:296:- **可复制字段单元格**（Event Name / Object ID / URL 列）：cell 走 **M29 Form 1** —— text hug content + 紧跟 `icon/Edit/Copy`（gap 4px，12×12），icon fill 绑 `Color Type/Icon/Default`
docs/internal/figma-component-catalog.md:297:- **空值单元格**：cell 走 **M29 Form 2** —— 显示 "—" em dash，text fill 绑 `Color Type/Text/Placeholder & Button`，**不加** copy/action icon
docs/internal/figma-component-catalog.md:301:- 可复制字段（ID / IP / MAC）强行 ellipsis 截断 —— 用 M29 Form 1 hug + copy icon，不走 M43 ellipsis
docs/internal/mockup-conventions.md:41:| §M29 | 涉及表格 cell（copyable / empty placeholder）时 |
docs/internal/mockup-conventions.md:1148:### M29 — Table Cell Content Pattern（Copyable / Empty Placeholder）
docs/internal/mockup-conventions.md:2150:           ├─ 内容含 ID/URL/path（前后均有信息价值） → center-ellipsis（M29 dev-side spec）
docs/internal/mockup-conventions.md:2190:- PRD 描述新字段时必声明该字段**长度分布**（典型值 / p95 / 最长理论值）+ **截断行为是否影响业务**（如 IP/MAC/ID 不能截断需要完整复制 → 走 M29 Form 1 hug + copy icon，不走 M43 ellipsis）
docs/internal/mockup-conventions.md:2267:| 把 ID / IP 等可复制字段强行 ellipsis | M29 Form 1 要求 hug + copy icon，M43 不适用于 copyable 信息字段 |
docs/internal/mockup-conventions.md:2279:- **M29** dev-side spec 中已提及 `center-ellipsis` for URL/ID，M43 将其升级为 umbrella 覆盖所有受限容器，并补全 wrap / maxLines / hover tooltip 决策树
skills/tvu-design-mockup/SKILL.md:12:- 硬规则 — `${CLAUDE_PLUGIN_ROOT}/docs/internal/mockup-conventions.md`（含 M0/M1 + umbrella `M-COLOR` / `M-INTEGRITY` + M23/M23.6/M24/M29/M31/M32/M33/M35 + legacy M10/M25/M26/M27/M28/M30/M34 anchor stubs；具体编号见 OVERVIEW Quick Reference）
skills/tvu-design-mockup/SKILL.md:101:- **结构完整性**：`M-INTEGRITY` umbrella（I1 sibling layout / I2 sibling overlap / I3 children wrap） + M29（table cell pattern）
```

## M33  (24 live refs)
```
docs/WAKE-WORDS.md:31:| 画 UX 交付注释 / 流程连线 | §M23 + §M23.6 + §M33 |
docs/internal/CONVENTIONS-OVERVIEW.md:62:| M33 | Annotation vs Product UI 语言隔离 (M23 boundary) | Language |
docs/internal/CONVENTIONS-OVERVIEW.md:92:| R16 | Annotation vs Product UI String Boundary (i18n key; mirrors M33) | Language |
docs/internal/CONVENTIONS-OVERVIEW.md:104:| M33 | R16 | Annotation vs product-UI language |
docs/internal/CONVENTIONS-OVERVIEW.md:234:4. **Annotation vs Product UI separation** — M23 / M33 / R16 split: annotation = bilingual (designer-facing); product UI = device language only (end-user-facing).
docs/internal/CONVENTIONS-OVERVIEW.md:249:| **Mirror pair** | Two rules — one M, one R — that enforce the same discipline at design layer and code layer (M31↔R14, M32↔R15, M33↔R16, M35↔R13). |
docs/internal/code-conventions.md:976:## R16 — Annotation vs Product UI String Boundary（code-side mirror of M33）
docs/internal/code-conventions.md:1032:- 与 mockup-conventions.md M33 同源——M33 限定 mockup 内产品 UI 不混双语；R16 限定代码内产品 UI 不混双语
docs/internal/code-conventions.md:1036:- 镜像 M33 实证（Touch-Screen v8 mockup M1 dialog v1 全双语）。代码端同源：若按 mockup v1 实现，会写 `<h3>2 channels have no Receiver  2 路通道未选择 Receiver</h3>` 这样的 hardcode 双语 JSX。R16 + R15（library 化）+ R14（layout）共同把 mockup 端 v1 三个错误模式在代码端拦下。
docs/internal/mockup-conventions.md:30:| §M23 + §M23.6 + §M33 | 要画 UX 交付注释 / 流程图 / annotation 字符串时 |
docs/internal/mockup-conventions.md:381:2. **M23 accent ≠ 品牌色**——M23 卡是"附注层"视觉契约，与产品 UI 视觉是隔离 layer (M33 已规定)；用 brand 色破隔离
docs/internal/mockup-conventions.md:1436:### M23.7 — State-label = what + why + invariants（M23 / M33 extension，2026-05-26）
docs/internal/mockup-conventions.md:1451:**与 M23 / M33 关系**：
docs/internal/mockup-conventions.md:1453:- M33 管 **annotation vs product UI 语言隔离** —— annotation 文案 discipline
docs/internal/mockup-conventions.md:1454:- M23.7 管 **每 frame 的 state-label** —— 单 frame 的内容描述。三者协作：M23 画关系、M33 管语言、M23.7 管单帧文案完整度
docs/internal/mockup-conventions.md:1611:### M33 — Annotation vs Product UI 语言隔离（M23 扩展）
docs/internal/mockup-conventions.md:1613:> **↔ Code 端镜像**：[`code-conventions.md` R16](./code-conventions.md)（R16 = M33 mirror，改此条必同步对面）。
docs/internal/mockup-conventions.md:1936:- **2026-05-18** Touch-Screen v8 — 4-source Receiver flow 规则回流 → **M31**（Layout function decision tree：Auto Layout 默认，absolute 必备理由）+ **M32**（M30 的扩展：所有 product UI 元素 library-first，不止 icon）+ **M33**（M23 边界澄清：双语只对注释层；产品 UI 层单语）+ **M34**（M28 兄弟：Section/Frame children-bbox wrap audit，section 不会 auto-hug）+ **M35**（思考产物外化：affordance category 分类 + 视觉词汇扫描 + 跨上下文复用 3 行强制 trace）。**5 个 M-rule 同源根因**：M1 dialog v1 实现时把 (a) 产品 UI 当注释做了双语、(b) 没找 LCD Button 自画 gradient rectangle、(c) dialog 内布局全用 absolute x/y、(d) rules card auto-layout 撑大后没补 section.resize、(e) link 图标 search 用功能词没用 affordance 同义词矩阵 + 跳过 published library MCP search 5 个问题一起出现。共同主线是"在 product UI 层套用了 annotation 层的范式 / 跳过库 lookup / 跳过 layout 决策 / 思考过程没外化为产物"。**M30-M34 描述 WHERE 搜，M35 强制 HOW 思考再搜——三层联用才覆盖完。** code 侧同步镜像：**R13**（M35 mirror）+ **R14**（M31 mirror）+ **R15**（M32 mirror）+ **R16**（M33 mirror）一并 commit；用户主动要求 "不是所有的都得等实证再约束，早发现早解决"——双向规则同源消除 mockup ↔ code 之间的 anti-pattern 漂移。
docs/internal/mockup-conventions.md:2117:- [ ] 后端服务名 / 内部代号 / 数据库字段名仅出现在 dev-only annotation（M33 注释 vs 产品 UI 语言隔离）
docs/internal/mockup-conventions.md:2121:- [M33](#m33--annotation-vs-product-ui-语言隔离m23-扩展)：注释里允许写"DC 服务"，但产品 UI 必须用 Environment
skills/tvu-design-mockup/SKILL.md:12:- 硬规则 — `${CLAUDE_PLUGIN_ROOT}/docs/internal/mockup-conventions.md`（含 M0/M1 + umbrella `M-COLOR` / `M-INTEGRITY` + M23/M23.6/M24/M29/M31/M32/M33/M35 + legacy M10/M25/M26/M27/M28/M30/M34 anchor stubs；具体编号见 OVERVIEW Quick Reference）
skills/tvu-design-mockup/SKILL.md:103:- **UX 交付注释**：M23 + M23.6（连线 + frame 内容避让）+ M33（注释 vs 产品 UI 语言隔离）
skills/tvu-design-pipeline/SKILL.md:26:| 4 | UX 交付层 | `tvu-design-mockup`（M23 / M23.6 / M33） | 每态 **state-label 状态说明** + 状态间**流程连线箭头** + **Section 四周 120px 留白** + mockup 间距按布局规范足够开 |
skills/tvu-design-pipeline/SKILL.md:55:- mockup pattern 跨状态一致；UX 注释语言与产品 UI 语言隔离（M33）。
```

## M38  (9 live refs)
```
docs/internal/code-conventions.md:1196:## R19 — Selected indicator CSS spec（code-side mirror of M38）
docs/internal/code-conventions.md:1220:- **2026-05-20** Video Sync mockup（M38 实证）：v3-v6 selected indicator 边线 1/2/3/4 不一致 + 用 BLUE 而非 BRAND → 用户连环抓。Code 端同款约束防止实现时再造 1/2/3/4 边混乱。
docs/internal/code-conventions.md:1224:[`mockup-conventions.md` M38](./mockup-conventions.md#m38--selected-indicator-1-side-left-accent-rail)。
docs/internal/mockup-conventions.md:54:| §M38 | 做 selected / active row·item 指示（3-layer rail）时 |
docs/internal/mockup-conventions.md:1444:| **Invariants** | rules being demonstrated（哪些规则在此 frame 体现） | （缺失） | `Rules in play: accordion default (M3), selected 3-layer signal (M38), Inactive-Idle subtype (M10).` |
docs/internal/mockup-conventions.md:1816:### M38 — Selected indicator: 3-layer signal (left accent + fill + chrome) — 2026-05-26 扩第 3 层
docs/internal/mockup-conventions.md:1850:| **3 层任一缺失** | M38 不达标（2026-05-26 新增） |
docs/internal/mockup-conventions.md:1861:- **2026-05-20** Video Sync Multi-Session v8（同 session 后续）：rail 沿用 3px 初版数值 → 用户抓"3px 不在设计系统 Token 变量中，应该尽量使用 Token 变量的 Size" → 5 处 rail (M0/M1/M2/M3/M4) 改 4px（`--sp-xxs`），M38 同步增加"token-aligned size only"约束 + 反例条 + Acceptance 一条。
docs/internal/mockup-conventions.md:1862:- **2026-05-26** Video Sync Phase B componentization：12 variants 全部含 rail + fill，但 walkthrough 发现 selected variants 的 remove-control（selection-driven chrome）当成"附加 affordance"而非"selected 视觉一部分" → 规则没把 chrome 列入 selected 视觉契约 → 本次 M38 扩第 3 层 chrome 为 mandatory。Rail + fill + chrome 三者均需 selection-driven（unselected 不渲染 chrome）。
```

## M39  (2 live refs)
```
docs/internal/mockup-conventions.md:60:| §M39 / §M40 | 抽组件 variant 文本属性（M39）/ 用 #N 序号 vs 语义命名（M40）时 |
docs/internal/mockup-conventions.md:1940:### M39 — Variant text property abstraction（component build 必备）— 2026-05-26 新增
```

## M40  (2 live refs)
```
docs/internal/mockup-conventions.md:60:| §M39 / §M40 | 抽组件 variant 文本属性（M39）/ 用 #N 序号 vs 语义命名（M40）时 |
docs/internal/mockup-conventions.md:1968:### M40 — `#N` list item 标号必须文档化 sequence vs name semantic — 2026-05-26 新增
```

## M41  (2 live refs)
```
docs/internal/mockup-conventions.md:55:| §M41 | 做删除 / 破坏性确认弹窗时 |
docs/internal/mockup-conventions.md:1994:### M41 — Destructive confirm modal: 全屏 scrim + 居中单 dialog — 2026-05-26 新增
```

## M44  (4 live refs)
```
docs/internal/design-process.md:39:       │           （含字段 label 业务词化 M44 + cell 溢出 3 状态 M43）
docs/internal/design-process.md:67:| ③ Mockup 主体 | 按 `mockup-conventions.md` §🤖 AI 读取指引 scoped 读（起手必读段 + 触发 jump，禁全量吞；重点 M0 / M-COLOR / M-INTEGRITY / M-BIND / M29 / M32 / M35 / M43 / M44） |
docs/internal/mockup-conventions.md:57:| §M44 | 写 UI label / 字段名（防暴露后端名）时 |
docs/internal/mockup-conventions.md:2081:### M44 — UI Label 不暴露后端服务名 / 内部代号 — 2026-05-27 新增
```

## M45  (9 live refs)
```
docs/internal/design-process.md:27:①  Page + Sections —— rename/新建 page，命名 `< FB-xxxx > <Title> YYYYMMDD`（M45）；
docs/internal/design-process.md:65:| ① Page 关联 | [`mockup-conventions.md` M45](./mockup-conventions.md#m45--figma-page-命名规范jira-关联型-mockup) |
docs/internal/design-process.md:241:- **2026-06-01 BM-1047**：design-process 完整 8 步只命中 3/8，M45 / M23.8 / M23 / M23.6 / audit 全靠用户走查补。
docs/internal/mockup-conventions.md:58:| §M45 | 建 / 命名 Figma page 时 |
docs/internal/mockup-conventions.md:2032:### M45 — Figma Page 命名规范（Jira 关联型 mockup）— 2026-05-27 新增
docs/internal/mockup-conventions.md:2521:| **Jira 关联型 mockup** (US-1/US-2，含 Jira issue key) | M45 (page 命名) / M23.8 (Jira annotation + hyperlink) / Pre-Phase 0 Step B (PRD 写入 Figma) / M0 (element-to-component mapping) / [画 frame 产品 UI] / M23 (state-label 每帧之上) / M23.6 (流程连线 + 触发 label) / Audit + walkthrough |
docs/internal/mockup-conventions.md:2540:| 完成"画 frame 产品 UI"就汇报"6 个 frame 都画完了，可以 walkthrough" | 缺 M23 / M23.6 / M45 / M23.8 等周边 deliverable；定义错了 done |
docs/internal/mockup-conventions.md:2560:- [ ] handoff doc 顶部必含一行 **"Rule checklist: \[M0 ✅ / M23 ✅ / M23.8 ✅ / M45 ✅ / ...\]"**，所有适用规则状态显式
docs/internal/mockup-conventions.md:2566:- **2026-06-01** BM-1047 mockup (Micro-App Token Portal Multi-Seat Subscription)：起手读完 `design-process.md` 8 步 Jira 关联型流程，实际执行**只命中 3/8** (PRD + M0 + 画 frame)。M45 / M23.8 / M23 / M23.6 / audit 全部靠用户走查时提醒补——5 步返工连带 section 重排间距 / frame 重新克隆 / 连线后置加入等。详 `retrospection/2026-06-01-rule-execution-discipline-gap.md`。
```

