{
  "auditId": "acceptance-coverage-dump",
  "subjectSha": "d10e151b",
  "pin": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b",
  "dirty": false,
  "checkedAt": "2026-09-15T03:39:25.956Z",
  "scanFiles": [
    "docs/internal/mockup-conventions.md",
    "docs/internal/domain-tvu.md",
    "docs/internal/design-process.md",
    "docs/internal/figma-technical-reference.md",
    "docs/internal/code-conventions.md",
    "AGENTS.md",
    "docs/meta-rules.md"
  ],
  "gauge": {
    "narrow": 134,
    "wide": 142,
    "blind": 8
  },
  "counts": {
    "gated": 47,
    "not-machine-checkable": 52,
    "unclassified": 43
  },
  "countsNarrow": {
    "gated": 47,
    "not-machine-checkable": 52,
    "unclassified": 35
  },
  "baseline": 35,
  "gateSelfReport": {
    "sections": 134,
    "counts": {
      "gated": 47,
      "not-machine-checkable": 52,
      "unclassified": 35
    },
    "baseline": 35
  },
  "rows": [
    {
      "id": "docs/internal/mockup-conventions.md#C4",
      "file": "docs/internal/mockup-conventions.md",
      "line": 463,
      "heading": "C4 — Brand color vs M23 annotation accent 不能混用（2026-06-01 新增）",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-connector.mjs",
          "claimedCheckItems": 3
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#C5",
      "file": "docs/internal/mockup-conventions.md",
      "line": 482,
      "heading": "C5 — Semantic-color-first（语义色优先于 grey 原语）（2026-06-12 新增）",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 0,
      "itemCount": 0,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-binding-fidelity.mjs",
          "claimedCheckItems": 0
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#C6",
      "file": "docs/internal/mockup-conventions.md",
      "line": 500,
      "heading": "C6 — 新建元素前必须先查目标文件实际订阅的库（不止 TVU 主库）（2026-07-14 新增）",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#C7",
      "file": "docs/internal/mockup-conventions.md",
      "line": 519,
      "heading": "C7 — 文字节点必须\"双绑\"：文字样式(text style) + 颜色变量/样式，缺一违规（2026-07-30 新增）",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-binding-fidelity.mjs",
          "claimedCheckItems": 3
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#C8",
      "file": "docs/internal/mockup-conventions.md",
      "line": 541,
      "heading": "C8 — 一个视觉信号在同一套交付物内只能有一种语义（2026-09-01 新增）",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/mockup-conventions.md#C8",
        "reason": "段级。§C8（一个视觉信号在同一交付集内只能有一种语义）三条：① 交付收尾产出一张**信号 × 语义**对照表 ② 消解走取变体而非覆盖 paint ③ 授权偏离写进消费产品的 design-record。①③ 的被测物是**交付文本**（handoff / 消费产品 repo 的 design-record），DS 仓侧无对象；② 问的是「这次是怎么消解的」= 作者意图，不是产物形态。⚠️ 核心判据本身就不可机检：本条判「**同一个信号在整套交付里是否保持单义**」，而 `colors` / `binding-fidelity` 判的是「**每一处填色是否合法**」—— 两者断言对象不同，实证 RPSV3-134 两处红都绑 token、都是库的既定定义、机检全绿而本条违例（详见 §C8 实证段）。「红在这一帧是破坏性动作、在那一帧是关闭提示」是语义读解，机器读不出。⚠️ 如实登记 borderline：② 的**后果面**（覆盖 paint）确由 §M52.1 / §C1 的闸守，但那是那两条各自的闸，不是本段的；本段允许覆盖 paint 之外的一切正当消解，闸分不出「取了变体」与「本来就没冲突」。事后一侧由 `design-walkthrough` §5.10 E8 兜 —— 那是**人工走查轴**，不是闸。",
        "since": null
      }
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-COLOR",
      "file": "docs/internal/mockup-conventions.md",
      "line": 566,
      "heading": "M-COLOR 共用 Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-colors.mjs",
          "claimedCheckItems": 3
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#验收标准@blind:784",
      "file": "docs/internal/mockup-conventions.md",
      "line": 784,
      "heading": "验收标准 Acceptance",
      "state": "unclassified",
      "blindSpot": true,
      "form": "zh-heading",
      "checkItems": 8,
      "itemCount": 8,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.12",
      "file": "docs/internal/mockup-conventions.md",
      "line": 878,
      "heading": "M23.12 — UX/PRD 卡 Placement & Sizing（紧邻其描述的 mockup + 竖向 Auto Layout hug + 标准宽）— 2026-06-01/06-05 合并（原 M23.12 placement + M23.13 sizing）",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.12~2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 890,
      "heading": "M23.12 — UX/PRD 卡 Placement & Sizing（紧邻其描述的 mockup + 竖向 Auto Layout hug + 标准宽）— 2026-06-01/06-05 合并（原 M23.12 placement + M23.13 sizing）",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 2,
      "itemCount": 2,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.14",
      "file": "docs/internal/mockup-conventions.md",
      "line": 938,
      "heading": "M23.14 — 卡内排版：双语堆叠行距 + 段名层级（M23 §双语 extension）— 2026-06-18/06-23 合并（原 M23.14 双语行距 + M23.15 段名层级）",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 5,
      "itemCount": 5,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-bilingual-spacing.mjs",
          "claimedCheckItems": 5
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.14~2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 962,
      "heading": "M23.14 — 卡内排版：双语堆叠行距 + 段名层级（M23 §双语 extension）— 2026-06-18/06-23 合并（原 M23.14 双语行距 + M23.15 段名层级）",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.18",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1023,
      "heading": "M23.18 — 浅色主题匹配变体（Light-Theme-Matching Card Skin）— 2026-07-14 新增",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 0,
      "itemCount": 0,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.18.1@blind:1038",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1038,
      "heading": "M23.18.1 — Page 画布底色跟随 mockup 主题（同源扩展，2026-07-22 owner 回流）",
      "state": "unclassified",
      "blindSpot": true,
      "form": "list-bold",
      "checkItems": 0,
      "itemCount": 0,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.18.1",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1058,
      "heading": "M23.18.1 — Page 画布底色跟随 mockup 主题（同源扩展，2026-07-22 owner 回流）",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 7,
      "itemCount": 5,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-colors.mjs",
          "claimedCheckItems": 7
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.18.2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1099,
      "heading": "M23.18.2 — 产品 frame 的背景必须是**显式**的（同源下推一层，2026-09-02 新增）",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 1,
      "itemCount": 1,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-default-white-bg.mjs",
          "claimedCheckItems": 1
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.19",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1138,
      "heading": "M23.19 — 交付卡的结构化表达：状态机画成图 / 可比较的画成网格 / 一一对应的画成对照表 — 2026-09-01 owner 回流（RPSV3-134 pilot 转正）",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 5,
      "itemCount": 5,
      "claims": [],
      "allow": {
        "id": "docs/internal/mockup-conventions.md#M23.19",
        "reason": "段级。§M23.19（交付卡的结构化表达）5 条 Acceptance 问的都是「这段内容的**真实结构**是什么」：Interaction 段里那几句话算不算一台状态机 / Journey 的 5 个块算不算摊开了一个可横向比较的矩阵 / PRD 的 Requirements 与 Acceptance 是不是逐条同构 / 某段是不是叙述性因而**不该**被表格化。判据的输入是 Figma 注释卡里的自然语言语义，机器读不出「本该是图却写成了散文」—— 这正是本规则要人做的那个判断，不是它的副产物。⚠️ 如实登记两处 borderline：① 第 2 条「Journey Map 是真网格」的**结果面**理论上可探（卡里有没有网格容器），但「真网格 vs 纵向文字块」仍要读结构语义，且目前无任何闸扫 Figma 注释卡的段落形态，要上闸得先解决 Figma 快照入库（同本表 figma-technical-reference 那条的边界，属独立提案）② 第 5 条「新画的状态图箭头已跑 §M23.6 (A)(C)(D)」的**被测物是「跑没跑」这个声明**，不是箭头本身 —— 箭头的 (A)(C) 确由 audit-mockup-connector.mjs 守、(D) 无闸（见 §M23.6 (D) 本文），但那是 §M23.6 各款自己的闸，不是本段的。⛔ 别据此把本段读成 gated。",
        "since": null
      }
    },
    {
      "id": "docs/internal/mockup-conventions.md#`Jira",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1179,
      "heading": "`Jira requirement` 组件的取用做法（per-file 地址登记在各 consumer repo）— 2026-06-03 新增 · 2026-08-06 拆分",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 0,
      "itemCount": 0,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-jira-hyperlink.mjs",
          "claimedCheckItems": null
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.8.1",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1222,
      "heading": "M23.8.1 — 需求来源链接完整性 + 全部可点击（PRD「需求来源/Source」段 + 任意 deliverable，create/update 都遵守）— 2026-06-23 新增",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 0,
      "itemCount": 0,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-source-link-integrity.mjs",
          "claimedCheckItems": null
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#I2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1384,
      "heading": "I2 — Sibling Section Overlap Probe（改 bounds 后 + 每次收尾机检固定一项）（原 M28）",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-handoff-deliverable-sections.mjs",
          "claimedCheckItems": 4
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-INTEGRITY",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1465,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 2,
      "itemCount": 2,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-integrity.mjs",
          "claimedCheckItems": 2
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-INTEGRITY@blind:1475",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1475,
      "heading": "M-INTEGRITY §I5 — 替换既有节点前先 diff（2026-06-17 新增）",
      "state": "unclassified",
      "blindSpot": true,
      "form": "list-bold",
      "checkItems": 0,
      "itemCount": 0,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-INTEGRITY@blind:1484",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1484,
      "heading": "M-INTEGRITY §I6 — create / move / place 前先 probe 目标坐标区（防叠加）（2026-06-17 新增）",
      "state": "unclassified",
      "blindSpot": true,
      "form": "list-bold",
      "checkItems": 0,
      "itemCount": 0,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-INTEGRITY~2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1538,
      "heading": "M-INTEGRITY §I7 — canonical 尺寸容器加内容后必须复测尺寸 + 兄弟碰撞 + 依附几何（2026-07-30 新增）",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 6,
      "itemCount": 6,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-overlap.mjs",
          "claimedCheckItems": 6
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-INTEGRITY~3",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1555,
      "heading": "M-INTEGRITY 共用 Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-integrity.mjs",
          "claimedCheckItems": 4
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.6",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1719,
      "heading": "M23.6 — Connector Endpoint Anchoring（两端锚定）+ Frame Content Avoidance（M23 extension）",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.6~2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1759,
      "heading": "M23.6 — Connector Endpoint Anchoring（两端锚定）+ Frame Content Avoidance（M23 extension）",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": {
        "id": "docs/internal/mockup-conventions.md#M23.6~2",
        "reason": "段级 —— §M23.6 **(D) 条件标签附着**（本文件第二个 M23.6 Acceptance 段，4 条）。被测物是 **Figma 节点几何**：标签可见字形外框距目标线段 ≤60px / 全套统一贴同一侧 / 不压线（按线段判非 bbox）/ 跑过阴性对照。DS 仓侧无可扫对象 —— Figma 快照落 `figma-data/mockup/` 且 **gitignored**（RPS 那份实测 could-not-run、分母 0），量法必须用 `use_figma` 现跑一次性探针，探针本身不落仓库。同本表 `figma-technical-reference.md` 那条的边界（要上闸得先解决快照入库，属独立提案）。⚠️ **必须登记的 borderline，别读错**：`audit-mockup-connector.mjs` 自 2026-09-01 起经 reconnect_map 的 `parts.label` 把条件标签纳入了 §C4 的**颜色**对象集 —— 但它**一条位置判据都没有**。⛔ 「闸现在读标签了」≠「本段有闸」：闸能判标签是不是绿的，判不了它离那段线多远。条文里也就地写了这句。⚠️ 第 4 条「跑过阴性对照并留下读数」的被测物是 handoff 里的读数记录，同属交付文本。",
        "since": null
      }
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.9",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1808,
      "heading": "Acceptance",
      "state": "unclassified",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 5,
      "itemCount": 5,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.10",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1871,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": {
        "id": "docs/internal/mockup-conventions.md#M23.10",
        "reason": "段级 —— §M23.10（UX Card Audience-Aware Language），3 条：① M23 卡里没有 code block（「样本 payload」段允许 1 个）② 显示 / 取值 / 渲染规则用白话 If-Then 表达 ③ 字段名 / 字面量值用行内 backtick 引用。为什么不可机检：**本条的断言是「读者（PM / QA / dev）读得懂」**，而能实现的两条判据（按字体判 monospace / 按语法记号判 regex 与 pseudocode）**都只是它的代理指标**。一张卡可以零 code block 却照样写得像天书，也可以带 1 个 code block 而其实很好读 ⇒ 代理绿 ≠ 断言成立。⛔ 尤其危险的是这个方向的假绿：一条只抓代理的闸每次绿，会让下一个人把它读成「这张卡的表达合格了」，比没有闸更糟。⚠️ 如实登记可探的那一半：判定面**在**扫描面内（M23 卡是 Figma 注释层文字，`scripts/mockup-rules/` 12 条模块正在吃同一份 payload，字体与语法记号都可数）—— ⛔ 所以本条的理由**不是**「输入面扫不到」，是「可数的东西不是本条的断言」。仓内同型先例：本表 `mockup-conventions.md#M23.19`（5 条问的都是「这段内容的**真实结构**是什么」）与 `mockup-conventions.md#反向问题`（规则正文自己点名候选闸并声明它们抓不到）。owner 2026-09-07 拍定不上闸，理由是频次痛感（逐字「目前的 UX 交付不包含代码块，我认为保持最新的现有的格式就 OK」）；agent 起草的理由（只抓代理）与它同向，两者都指向「不上闸」⇒ 本行按不可机检登记，⛔ 规则正文未动。**重开条件**：任一次 UX 交付卡里出现 code block（「样本 payload」段那 1 个之外）⇒ 前件成立，重议是否上那半个可数的闸。",
        "since": null
      }
    },
    {
      "id": "docs/internal/mockup-conventions.md#(B)",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1914,
      "heading": "(B) 终态优先：卡讲\"当前设计是什么\"，不讲\"设计怎么演变的\" — 2026-08-05 owner 回流（V4-2333 走查轮二十六）",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#允许内容@blind:1924",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1924,
      "heading": "允许内容",
      "state": "unclassified",
      "blindSpot": true,
      "form": "list-bold",
      "checkItems": 0,
      "itemCount": 0,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.11",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1926,
      "heading": "Acceptance",
      "state": "unclassified",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 2,
      "itemCount": 2,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.7",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1956,
      "heading": "M23.7 — State-label = what + why + invariants（M23 / M33 extension，2026-05-26）",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M31",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1989,
      "heading": "Acceptance",
      "state": "unclassified",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M32",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2039,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-handoff-deliverable-sections.mjs",
          "claimedCheckItems": 3
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M32.1",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2052,
      "heading": "M32.1 — Component Source + Fidelity Verification（取组件三连验，M32 子条）",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-library-origin.mjs",
          "claimedCheckItems": 3
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M32.2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2073,
      "heading": "M32.2 — 自建产品 UI 件「起手三件套」（自定义卡 / 浮层 / 面板的强制起手勾选）— 2026-06-09 新增",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-library-origin.mjs",
          "claimedCheckItems": 3
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M32.3",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2099,
      "heading": "Acceptance",
      "state": "unclassified",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M32.4",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2142,
      "heading": "M32.4 — 禁用（disabled）表达唯一口径：有禁用变体就切变体，没有变体才降透明度 — 2026-08-03 新增（owner 拍板回流）",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M32.5",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2169,
      "heading": "M32.5 — 选源组件前先判断字段语义类别，不只挑\"看起来最像的邻居\"（2026-07-14 新增）",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/mockup-conventions.md#M32.5",
        "reason": "段级 —— §M32.5（选源组件前先判断字段语义类别，不只挑「看起来最像的邻居」），3 条。判定对象：① 对话里那句「新字段的语义类别是 X」；② 「组件选型与上表对照一致（或有明确理由偏离）」，而它的判定输入正是 ① 那句话；③ 「克隆携带的默认装饰（图标等）已逐一评估，不契合的已移除」。为什么不在仓里：① 与 ③ 的「已说清 / 已逐一评估」是**对话过程**，执行完即消失、无文件产物；② 即便从 live Figma payload 读出这一格实际用了哪个组件（`scripts/mockup-rules/` 正在吃这份 payload），也**无从判「与语义类别一致」** —— 那个类别只存在于 ① 那句话里，仓库侧没有该输入。⚠️ 如实登记可探的那一半：③ 里「某个默认图标还在不在」在 payload 里是可数的，但「契合与否」是语义判断 ⇒ **可数的那一半不构成本条断言**。仓内同型先例：本表 `code-conventions.md#R9`（被测物是那张推断出来的交互态规则表 = 交付文本）。owner 2026-09-07 批准登记。",
        "since": null
      }
    },
    {
      "id": "docs/internal/mockup-conventions.md#M32.6",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2190,
      "heading": "M32.6 — Spec-Value Fidelity + Confirm-Before-Deviation（2026-07-23 新增）",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": {
        "id": "docs/internal/mockup-conventions.md#M32.6",
        "reason": "段级 —— §M32.6（Spec-Value Fidelity + Confirm-Before-Deviation），4 条。判定对象：① 交付的间距 / 颜色 / 字号 / 圆角能逐一指到 DS token 或**原稿实测来源**；② label / 文案与**原稿**逐字一致（简写 / 增删须用户确认）；③ 原稿之外的设计发挥，session 内有一次显式「提方案 → 用户确认」记录；④ Legacy 关联声明（`FIGMA_AS_SOURCE_OF_TRUTH` + 硬规则 #2 在 mockup 层的落地）。为什么不在仓里：①② 的判定**基准**是「原稿」—— 线上产品实拍截图 / 上一期 Figma 稿 / PRD，全部是 DS 仓外的外部基准，仓里没有它可比；③ 的被测物是对话记录。⚠️ 如实登记可探的那一半：DS 仓能从 live Figma payload 读出 mockup 现在**用的是什么值**，但读不出「这个值能不能指回原稿」—— 缺的恰是**原稿那一侧**，不是 mockup 那一侧。仓内同型先例：本表 `code-conventions.md#R8`（被测物是交付叙述 + 一次性本地脚本产出，两者均不落仓）。owner 2026-09-07 批准登记。",
        "since": null
      }
    },
    {
      "id": "docs/internal/mockup-conventions.md#M33",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2221,
      "heading": "Acceptance",
      "state": "unclassified",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M35",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2305,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 0,
      "itemCount": 0,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-commit-affordance-trace.mjs",
          "claimedCheckItems": 0
        },
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-handoff-deliverable-sections.mjs",
          "claimedCheckItems": 0
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M36",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2340,
      "heading": "M36 — Multi-page module reuse → file-local component → TVU library promotion audit",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-handoff-deliverable-sections.mjs",
          "claimedCheckItems": 3
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M36.1",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2385,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-handoff-deliverable-sections.mjs",
          "claimedCheckItems": 4
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M37",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2513,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 5,
      "itemCount": 5,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-handoff-deliverable-sections.mjs",
          "claimedCheckItems": 5
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M38",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2559,
      "heading": "Acceptance",
      "state": "unclassified",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 5,
      "itemCount": 5,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-FONT",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2577,
      "heading": "Acceptance",
      "state": "unclassified",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-TXT-ICON-AUDIT",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2599,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 2,
      "itemCount": 2,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-typography-icon.mjs",
          "claimedCheckItems": 2
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#例外",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2614,
      "heading": "例外 + 硬技术约束 — 注释层正文里的排版符号（2026-08-05 回流，V4-2333 走查轮二十六）",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 1,
      "itemCount": 1,
      "claims": [],
      "allow": {
        "id": "docs/internal/mockup-conventions.md#例外",
        "reason": "段级。§M-TXT-ICON-AUDIT 的「例外 + 硬技术约束 — 注释层正文里的排版符号」那段，唯一核查项逐字要求「逐字符扫 Roboto 段内是否残留上表 ❌ 行字符（getStyledTextSegments(['fontName'])），且**必须看渲染图确认符号真的可见**」。两半都不可仓内机检：前半的 probe 是 use_figma 对话内的实时 Plugin API 调用（同 design-process.md#参考物落地（Reference 那条的形态，它的 probe 是 getStyledTextSegments(['hyperlink'])）；后半逐字「机读 characters 里符号永远『在』，缺 glyph 只有渲染图能发现」= 人眼判据，规则自己声明了不可机读。⚠️ 别误配给 audit-mockup-typography-icon.mjs：该闸 FONT 半的判据是 ALLOWED_FONTS 字体家族白名单（Roboto / Noto Sans SC），比的是「用没用对字体」，而本段比的是「用对了字体但该字体缺这个 glyph」——方向不同。2026-08-28 [[INFRA-F142]] 第五批逐字核后登记。",
        "since": null
      }
    },
    {
      "id": "docs/internal/mockup-conventions.md#反向问题",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2630,
      "heading": "反向问题 — ZH 段（Noto Sans SC）里的**全角化**字符（2026-08-20 回流，V4-2392）",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 1,
      "itemCount": 1,
      "claims": [],
      "allow": {
        "id": "docs/internal/mockup-conventions.md#反向问题",
        "reason": "段级。§M-TXT-ICON-AUDIT 的「反向问题 — ZH 段（Noto Sans SC）里的全角化字符」那段，唯一核查项逐字要求「注释层 ZH 段落写入后，**看一次渲染图**确认拉丁词组内无异常空隙」。⭐ 本条是全表里依据最硬的一条：规则正文**自己逐字点名了所有候选闸并声明它们抓不到** ——「它比缺 glyph 更难发现 —— 字符是可见的，只是宽度不对，所有现有闸（字体白名单 / glyph 正则 / bilingual spacing / typography-icon）**全部 PASS**」，并逐字给出唯一判据「只有渲染图能发现」。⇒ 判 gated 会与规则原文直接矛盾。⛔ 重开条件：本段要脱离本豁免，需要的不是给某个现有闸加自陈，而是先有一条能测「渲染后的字符宽度」的新判据（当前无被测物——本仓无渲染像素面）。2026-08-28 [[INFRA-F142]] 第五批逐字核后登记。",
        "since": null
      }
    },
    {
      "id": "docs/internal/mockup-conventions.md#§M-VARIANT-AXIS",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2705,
      "heading": "§M-VARIANT-AXIS — 同一交付内直接放置的表单控件，风格族唯一 — 2026-09-02 新增",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-variant-axis.mjs",
          "claimedCheckItems": 3
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M39",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2760,
      "heading": "M39 — Variant text property abstraction（component build 必备）— 2026-05-26 新增",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M40",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2822,
      "heading": "M40 — `#N` list item 标号必须文档化 sequence vs name semantic — 2026-05-26 新增",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-hash-n-semantic.mjs",
          "claimedCheckItems": 3
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M41",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2869,
      "heading": "M41 — Destructive confirm modal: 全屏 scrim + 居中单 dialog — 2026-05-26 新增",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-feedback-not-selfdrawn.mjs",
          "claimedCheckItems": null
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M45",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2931,
      "heading": "Acceptance",
      "state": "unclassified",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M45~2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2969,
      "heading": "Acceptance",
      "state": "unclassified",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M44",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3003,
      "heading": "Acceptance",
      "state": "unclassified",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M43",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3084,
      "heading": "Acceptance",
      "state": "unclassified",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 6,
      "itemCount": 6,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M43.2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3137,
      "heading": "M43.2 Acceptance",
      "state": "unclassified",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M43.3",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3179,
      "heading": "M43.3 Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": {
        "id": "docs/internal/mockup-conventions.md#M43.3",
        "reason": "段级 —— §M43.3（标题句里嵌变量：允许多行 + 左对齐，⛔ 不许为了排版去改文案或拆结构），4 条。被测物分四类，**没有一类落在本闸扫描面（DS 仓内七份规则真源）**：① 「含变量的标题句在 mockup 里是左对齐、且画了变量取最长值那一态」= **Figma 节点几何**，快照落 `figma-data/mockup/` 且 **gitignored** ⇒ DS 仓侧无对象可扫（同本表 `mockup-conventions.md#M23.6~2` 的封路理由，那条实测过分母 0 / could-not-run）；② 「提『改文案』或『拆结构』的方案前，报告里写明①样式层试过什么、为什么不够」= **走查交付文本**，不落仓库；③ 「没有为了凑单行而删掉标题里的限定词（若删了附判断依据）」= **作者意图**，执行完即消失、无文件产物；④ 「文案多端共用时改动前确认对端形态」= **对话过程 + 对端 consumer 仓**，两侧 DS 仓都扫不到。⚠️ 同条并入的「修复层级 ①样式 → ②文案 → ③结构，逐层试、命中即停」判据同样只能靠人读走查报告判 ——它问的是「作者试没试过更轻的那层」，是过程而非产物。仓内同型先例：本表 `mockup-conventions.md#M54`（多断点出稿纪律，被测物是 Figma 帧与交付文本）与 `mockup-conventions.md#M46`（判定对象是动作序列），本条与它们同族同因。⚠️ **如实登记 borderline**：第 ① 条**并非语义上不可机检** —— 「TEXT 节点的 textAlignHorizontal 是不是 LEFT」本身完全可数，它当前不可检只因**没有被测物**（Figma 快照不进仓）。⛔ 别把本行读成「左对齐这件事测不了」。**重开条件**：mockup 快照一旦进仓可扫（或本仓出现任何能吃 live Figma payload 的常驻闸），第 ① 条应从本豁免拆出单独上闸，届时按 S3b（既有闸自陈又挂豁免表 ⇒ 判矛盾）删掉本行。⚠️ 本行**不覆盖**日后在同一 heading 下新增的第 5 条 Acceptance —— S4 子项对位只在闸自陈 `[N]` 时才跑，豁免段无闸即无 `[N]`（该缺口本表 34 条先例共有）。owner 2026-09-14 批准登记（起因：并行 session 的 `4a0dc0e4` 引入 M43.3 ⇒ S2 棘轮 unclassified 35 → 36 变红；⛔ 未抬 BASELINE、⛔ 未动规则正文）。",
        "since": null
      }
    },
    {
      "id": "docs/internal/mockup-conventions.md#M42",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3256,
      "heading": "M42 — Clone Gate: probe brand-color paint bindings before mutate — 2026-05-26 新增",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-handoff-deliverable-sections.mjs",
          "claimedCheckItems": 4
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M42.2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3293,
      "heading": "Acceptance",
      "state": "unclassified",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M42.3@blind:3315",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3315,
      "heading": "M42.3 — Clone Placement Discipline: 就地改优先，禁旁路克隆搭样板（M42 extension）— 2026-06-17 新增",
      "state": "unclassified",
      "blindSpot": true,
      "form": "list-bold",
      "checkItems": 1,
      "itemCount": 1,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M46",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3357,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/mockup-conventions.md#M46",
        "reason": "段级 —— §M46（Library Instance Iteration Discipline），3 条。判定对象全部是**动作序列**：① 改 mockup 前 probe 输出了 instance 可改性（componentProperties / text override / cell count grouping）；② detach 限制在 minimum necessary scope（不 detach 整行整表）；③ 自画 overlay 仅作 transient debugging，handoff 前删干净。为什么不在仓里：① 的 probe 输出是 `use_figma` 调用体的返回值，执行完即消失、无文件产物；②③ 要判的是「**当时的必要范围是什么**」与「这个节点当初是不是调试用的」—— 两者都是**意图**，不是状态。⚠️ 如实登记可探的那一半：某节点现在是 INSTANCE 还是已 detach 的 FRAME，在 payload 里可读（`scripts/mockup-rules/` 正在吃这份 payload），但「detach 范围是否最小必要」需要「必要范围」这个输入，而它不落盘 ⇒ **可读的那一半不构成本条断言**。仓内同型先例：本表 `mockup-conventions.md#例外`（§M-TXT-ICON-AUDIT 的硬技术约束段 —— 规则正文自己点名候选闸并声明它们抓不到）。owner 2026-09-07 批准登记。",
        "since": null
      }
    },
    {
      "id": "docs/internal/mockup-conventions.md#M47.2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3488,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-bilingual-spacing.mjs",
          "claimedCheckItems": 4
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M47.2~2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3504,
      "heading": "Acceptance",
      "state": "unclassified",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-DISCIPLINE.SOURCE",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3569,
      "heading": "M-DISCIPLINE.SOURCE — 一条新规则该进本真源、还是留在项目 repo — 2026-08-05 新增",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-source-discipline-identifiers.mjs",
          "claimedCheckItems": null
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-DISCIPLINE.SCOPE",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3605,
      "heading": "M-DISCIPLINE.SCOPE — scope 由「对象全集」推导，不由「我做了什么」推导 — 2026-07-30 新增",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 8,
      "itemCount": 8,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-DISCIPLINE.SYNC@blind:3751",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3751,
      "heading": "M-DISCIPLINE.SYNC — 编辑 confirmed → 自动自检 + 交付物同步（状态转移触发，2026-06-18 新增，修 W3/W5）",
      "state": "unclassified",
      "blindSpot": true,
      "form": "indented-bold",
      "checkItems": 0,
      "itemCount": 0,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-DISCIPLINE.SYNC@blind:3779",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3779,
      "heading": "M-DISCIPLINE.SYNC — 编辑 confirmed → 自动自检 + 交付物同步（状态转移触发，2026-06-18 新增，修 W3/W5）",
      "state": "unclassified",
      "blindSpot": true,
      "form": "indented-bold",
      "checkItems": 0,
      "itemCount": 0,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-DISCIPLINE.SYNC",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3804,
      "heading": "M-DISCIPLINE.SYNC — 编辑 confirmed → 自动自检 + 交付物同步（状态转移触发，2026-06-18 新增，修 W3/W5）",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 0,
      "itemCount": 0,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-handoff-evidence.mjs",
          "claimedCheckItems": 0
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-DISCIPLINE",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3806,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/mockup-conventions.md#M-DISCIPLINE",
        "reason": "段级 —— §M-DISCIPLINE 的起手协议自检段（本文件 M-DISCIPLINE 族的第三个 Acceptance 段，3 条）：① 画第一个产品 frame 前，conversation 内可见一次 `TodoWrite` 调用，list 含本次适用规则编号；② handoff doc 顶部含一行「Rule checklist: [M0 ✅ / M23 ✅ / …]」，所有适用规则状态显式；③ 任何「ready for walkthrough」声明前，todo list 内 pending / in_progress 数 = 0。为什么不在仓里：三条的被测物分别是 **AI 的工具调用序列**、**handoff 文本**、**todo list 运行时状态** —— 无一落 DS 仓。仓内同型先例是全表最硬的一条：本表已有的 `code-conventions.md#R-DISCIPLINE` **就是本条的 code 侧镜像** —— 两条同日（2026-06-01）落地、三条核查项逐条同构（只差 M-rule / R-rule 编号），理由完全同源。⚠️ handoff 那一条另有已登记的天花板：`audit-mockup-handoff-evidence.mjs` 自印逐字「DS 仓一份真 handoff 都没有」，真 handoff 全在消费仓，DS 仓侧守的只是模板不回退那一层。owner 2026-09-07 批准登记。",
        "since": null
      }
    },
    {
      "id": "docs/internal/mockup-conventions.md#M52",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3850,
      "heading": "M52 共用 Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 2,
      "itemCount": 2,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-binding-fidelity.mjs",
          "claimedCheckItems": 2
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/mockup-conventions.md#M53",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3891,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": {
        "id": "docs/internal/mockup-conventions.md#M53",
        "reason": "段级。§M53「Feedback Message Copy」的四条：交付物每类提示标明 Trigger 属哪族 / user-initiated 每条能指出它报的是哪个控件的哪个新值 / 无一条只是复述用户已可见的状态 / 触发点被两族共用时写明已尝试通用措辞或为何必须分叉。⛔ 四条的被测物全部**不在本仓** —— 是 consumer 产品的 Figma 交付页与该 consumer repo 的 spec（本条实证落点 = TVU Pack/docs/specs/lcd-message-strings.md 与 Touch Screen 文件 page 10166:2），而本闸扫描面 SCAN_FILES 是 DS 仓内七份规则真源。第 2、3 条另有语义成分：判「报的是不是用户刚动的那个控件」要知道该产品的控件树与用户操作路径，判「是不是复述了用户已经看得见的状态」要知道界面此刻显示什么，二者都无仓内可扫对象。⚠️ 重开条件：第 1、4 条形态上是可扫的字符串存在性检查（Trigger: 标注 / 分叉理由段），若将来有闸把 consumer 交付层纳入扫描面，这两条可先转 gated，届时本条改为只豁免第 2、3 条。2026-08-31 随 M53 回流登记。",
        "since": null
      }
    },
    {
      "id": "docs/internal/mockup-conventions.md#M54",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3930,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": {
        "id": "docs/internal/mockup-conventions.md#M54",
        "reason": "段级。§M54「多断点响应式出稿纪律」的四条：M48 起手清单含「目标断点档：〈token 名列表〉」一行（含单档豁免 rationale）/ 声明的每档有帧或有显式行为声明、换形态元素逐个声明 / 每帧过溢出自检（子树右边界 ≤ 帧宽）留 trace / 无集合外发明的档位边界。⛔ 四条的被测物都是 **Figma 侧产物或交付文本**：第 1、4 条落在 M48 起手清单与 UX 交付卡的档位声明（对话 / handoff 文本，不落仓库）；第 2、3 条落在 Figma mockup 帧的存在性与帧内几何。⚠️ **必须与「同型判据在 code 侧已有闸」分清**（同本表 #R15 / #R9 的诚实口径）：规则正文逐字点了两条 code 侧闸 —— `audit:layout-tokens` S3 核的是 CSS `@media` 字面量 ∈ token 值集合、`audit:docs-overflow` 核的是 docs 站页级横向溢出 —— 两者的输入面都是本仓 CSS 与 docs 站 DOM，**看不到任何 Figma 帧**，所以它们是 code 侧对应约束的闸、不是本段的闸。⚠️ 如实登记一处 borderline（与本表 #Q13 那条完全同型）：第 3 条「子树右边界 ≤ 帧宽」在形态上是可机械测的几何判据，`scripts/audit-mockup-integrity.mjs` 的 §I3（children-bbox wrap）已经在做同类测量 —— 但它的输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面，且要按「本次声明了哪几档」逐帧比对还需要知道档位声明（在交付文本里）。⚠️ 重开条件：若 mockup 快照入库、且有闸能把「档位声明 × 每档帧 × 帧内右边界」三者对起来，第 2、3 条应先转 gated，届时本条改为只豁免第 1、4 条。2026-09-03 随 M54 回流登记。",
        "since": null
      }
    },
    {
      "id": "docs/internal/mockup-conventions.md#M55",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3959,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": {
        "id": "docs/internal/mockup-conventions.md#M55",
        "reason": "段级。§M55「多方案比选交付纪律」的四条：各方案 M48 清单同口径 / 差异对照卡存在且逐差异点三列齐 / 拍板后 design-record §6 有结论 + 落选理由且落选 Section 已标 `❌ Not Selected` 未被擅删 / 无保真度差。⛔ 被测物按条分三类，**没有一类落在本闸扫描面（DS 仓内七份规则真源）**：① 第 1 条 = M48 起手清单（对话 / handoff 文本，不落仓库）② 第 2 条与第 3 条后半 = consumer 产品的 Figma 交付页（对照卡是否三列齐 / 落选 Section 名有没有 `❌ Not Selected` 前缀）③ 第 3 条前半 = **该 consumer repo 的** design-record `## 6. 决策记录` 段 —— 与本表 #R23 同型，是「被测物在别的仓」不是「不可机检」。⚠️ 第 4 条「无保真度差」是四条里唯一**结构上不可机检**的：判两案保真度是否相同要比较两组帧的完成度，逐字撞 FIGMA_AS_SOURCE_OF_TRUTH.md §验证方法禁止的启发式（「凭形态推意图」），⛔ 不要为它写相似度判据。⚠️ 如实登记两处 borderline（与本表 #Q13 / #M54 同型）：第 2、3 条形态上都是**字符串存在性检查**（对照卡三列表头 / Section 名前缀），若将来 Figma 快照（figma-data/mockup/，现 gitignored）入库并进扫描面，这两条可先转 gated；第 3 条前半若 consumer 档补上扫 design-record §6 的 probe 亦同。届时本条改为只豁免第 1、4 条。2026-09-03 随 M55 回流登记。",
        "since": null
      }
    },
    {
      "id": "docs/internal/domain-tvu.md#M10",
      "file": "docs/internal/domain-tvu.md",
      "line": 129,
      "heading": "M10 — List row Inactive 状态至少分两子型（Idle vs NeverStarted）",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/domain-tvu.md#M11",
      "file": "docs/internal/domain-tvu.md",
      "line": 154,
      "heading": "M11 — Trend visualization: icon + 数值颜色双层信号",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/domain-tvu.md#M12",
      "file": "docs/internal/domain-tvu.md",
      "line": 179,
      "heading": "M12 — 外部/异步事件不得静默 no-op：检测 → 告知 → 给前进路径",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-feedback-not-selfdrawn.mjs",
          "claimedCheckItems": null
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/domain-tvu.md#M13",
      "file": "docs/internal/domain-tvu.md",
      "line": 194,
      "heading": "M13 — 突发中断后必须有恢复态（reboot / 会话恢复）",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/domain-tvu.md#M17",
      "file": "docs/internal/domain-tvu.md",
      "line": 228,
      "heading": "M17 — 新页面一律照该 surface 既有 canonical 范式（布局 + 控件几何 + 图标 + 按键行为）",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 7,
      "itemCount": 4,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-geometry-consistency.mjs",
          "claimedCheckItems": 7
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/domain-tvu.md#M17.1",
      "file": "docs/internal/domain-tvu.md",
      "line": 272,
      "heading": "M17.1 — 枚举值选择一律用 LCD 选项列表 canonical 范式",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 5,
      "itemCount": 5,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/design-process.md#参考物落地（Reference",
      "file": "docs/internal/design-process.md",
      "line": 187,
      "heading": "参考物落地（Reference material on canvas）— 2026-07-29 owner 回流",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 5,
      "itemCount": 5,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/design-process.md#M48",
      "file": "docs/internal/design-process.md",
      "line": 370,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 8,
      "itemCount": 8,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-mockup-typography-icon.mjs",
          "claimedCheckItems": 8
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/design-process.md#M49",
      "file": "docs/internal/design-process.md",
      "line": 530,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 10,
      "itemCount": 10,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/design-kickoff.mjs",
          "claimedCheckItems": 10
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/design-process.md#M50",
      "file": "docs/internal/design-process.md",
      "line": 589,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/design-kickoff.mjs",
          "claimedCheckItems": 3
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/design-process.md#M51",
      "file": "docs/internal/design-process.md",
      "line": 616,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/design-kickoff.mjs",
          "claimedCheckItems": 3
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/design-process.md#Step",
      "file": "docs/internal/design-process.md",
      "line": 670,
      "heading": "Acceptance（Pre-Phase 0 自检）",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": {
        "id": "docs/internal/design-process.md#Step",
        "reason": "段级 —— §Step A.1（Parent ticket comment thread read，Jira-derived task mandatory），4 条：① 已用 Jira API / MCP 读了 task ticket 完整评论（`fields: [\"comment\"]` 全量）；② 已枚举 `issuelinks` 并沿 outwardIssue / inwardIssue 读完所有 linked ticket 评论；③ 评论链发现的新 context 显式登记进 PRD 草稿（Step B），含 stakeholder 决策 / open question / 跨 ticket 关联约束；④ 评论链与 description 冲突时显式标记冲突给用户拍板。为什么不在仓里：①② 的被测物是 **Jira 上的评论链与读取动作**（经 MCP 调用发生，仓库侧零痕迹）；③ 的落点是 PRD 草稿，而按 §Step B 那份 PRD 是**写进目标 Figma 文件**的（`PRD - <页面名>` frame），不落 DS 仓；④ 是对话行为。仓内同型先例：本表 `AGENTS.md#Jira`（被测物是发到 Jira 的评论，仓库侧零痕迹，且该条已记「grep 实测 scripts/*.mjs 无任何 Jira 判据，也不该有」）。owner 2026-09-07 批准登记。",
        "since": null
      }
    },
    {
      "id": "docs/internal/design-process.md#Step~2",
      "file": "docs/internal/design-process.md",
      "line": 725,
      "heading": "Step B — PRD 起草 + 写入目标 Figma",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 7,
      "itemCount": 5,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/design-process.md#⚠️",
      "file": "docs/internal/design-process.md",
      "line": 901,
      "heading": "⚠️ State-Completeness Enumeration（F2-late + 体验地图 必做前置，2026-06-04 新增；2026-06-15 起亦为 M48 起手清单强制一行）",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/design-process.md#User",
      "file": "docs/internal/design-process.md",
      "line": 981,
      "heading": "Acceptance（F2-late 验收）",
      "state": "unclassified",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 9,
      "itemCount": 7,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/design-process.md#M16.1",
      "file": "docs/internal/design-process.md",
      "line": 1233,
      "heading": "M16.1 — Multi-state spec mockup：默认态 + 越权态双 frame 覆盖",
      "state": "unclassified",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 6,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/design-process.md#M21.3",
      "file": "docs/internal/design-process.md",
      "line": 1306,
      "heading": "M21.3 — probe 每个节点必须逐级验 `effectivelyVisible`（2026-09-01 新增）",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 2,
      "itemCount": 2,
      "claims": [],
      "allow": {
        "id": "docs/internal/design-process.md#M21.3",
        "reason": "段级。M21.3 要求 sibling contract 的每条 probe 值注明来源 node id **且该节点 effectivelyVisible === true**，并要求否定式结论（「本页没有 X」）注明已排除「X 存在于被停用父级下」。核心断言是**节点的有效可见性**——祖先链上任一级 visible=false 即不算数——其输入面是 Figma 实时节点树 / gitignored 的 figma-data/mockup/ 快照，**不在任何仓内闸的扫描面**（同本名单首条 figma-technical-reference 那处 borderline 的理由）。仓库里没有可扫的对象：probe 值写在 handoff 交付文本里，而「这个 id 当时可不可见」只有 Figma 侧答得出。⚠️ **如实登记 borderline，⛔ 别把本条读成整段都不可测**：两条 Acceptance 里的**前半截**（『每条 probe 值有没有带 node id』『否定式结论有没有带那句排除声明』）是纯词法的，handoff doc 落仓后可 grep ⇒ 那半**是**可机检的，只是现在没闸。⇒ 本豁免覆盖的只有「id 对应的节点当时是否 effectivelyVisible」这一半；前半截属独立提案（往 audit-mockup-handoff-evidence 加两条 grep），⛔ 不在本条承诺内，也 ⛔ 不得因本条存在而认为它已被豁免。登记于 2026-09-01，实证 RPSV3-134。",
        "since": null
      }
    },
    {
      "id": "docs/internal/design-process.md#M21.1",
      "file": "docs/internal/design-process.md",
      "line": 1333,
      "heading": "M21.1 — 建新 component 优先 clone existing functional row + mutate variant",
      "state": "gated",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-handoff-deliverable-sections.mjs",
          "claimedCheckItems": 3
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/design-process.md#M21.2",
      "file": "docs/internal/design-process.md",
      "line": 1389,
      "heading": "M21.2 — Feature Iteration Color Contract（功能迭代色值合同）",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/design-process.md#M21.2",
        "reason": "段级 —— §M21.2（Feature Iteration Color Contract，功能迭代色值合同），3 条：① 代码第一块是带来源注释的 Color Contract；② Color Contract 中每个色值都标注了来源 node ID + hex 值（供 reviewer 验证）；③ 未见 TVU DS token hex 值（`#2FB54E` / `#30B54E` / `#EA4233` 等）出现在**产品 mockup 颜色常量**中，除非 sibling probe 确认两者相同。为什么不在仓里：三条的被测物全部是**消费产品那一侧的产物** —— ①② 是产品代码文件头部的 Color Contract 注释块，③ 是产品 mockup 的颜色常量。按本仓三档落点规则，取值 / node id 归项目侧、⛔ 不进 DS 真源 ⇒ DS 仓永远扫不到它们。仓内同型先例：本表 `design-process.md#M21.4` 与 `code-conventions.md#R6.1`（产品级视觉结构契约本来就该落消费产品 repo，DS 仓永远扫不到），本条与它们**同族同因**。⚠️ 方向提醒：DS 仓自己的源码里有没有裸 hex 是另一件事、由另一条闸管，与本条问的「产品 mockup 的颜色常量」方向相反，⛔ 别把那条闸的绿读成本条已覆盖。owner 2026-09-07 批准登记。",
        "since": null
      }
    },
    {
      "id": "docs/internal/design-process.md#M21.4",
      "file": "docs/internal/design-process.md",
      "line": 1480,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 6,
      "itemCount": 6,
      "claims": [],
      "allow": {
        "id": "docs/internal/design-process.md#M21.4",
        "reason": "段级 —— §M21.4（视觉结构契约的作用域是**产品**：前期建 · 验收查 · 走查兜），4 条。三个被测物全部在 **DS 仓之外**：① 产品级视觉结构契约文档 —— 按三档落点规则它**本来就该落消费产品 repo**（取值 / node id 归项目侧，⛔ 不进 DS 真源），DS 仓永远扫不到它 ② 「UX 交付卡 Acceptance 段含某一条」的被测物是 Figma 卡里的文本 ③ 「走查 §1 属性表的先例列标了来源级别」的被测物是走查报告。第 4 条「出现两级都无先例的新值时契约被更新」还额外要求判断「这个值在本产品同类页有没有先例」—— 那是跨页语义比对，机器要先知道「同类页」是哪些。✅ **id 脆弱性已修（2026-09-02，[[INFRA-F142]] 候选解 ②）**：本行一度是 `design-process.md#M21.4`（序号寻址，被 M21.4 自己的加入顶到 ~7），现已改为锚点 `#M21.4`，与「该文件别处插了什么」无关。⚠️ 仍有两种残留会让 id 变：同一条规则内部有多个 Acceptance 段（owner 内序号）、以及规则标题改名（S3 会当场报红）。改动该文件后仍建议重跑 `--list` 核对本行仍落在 M21.4 上。",
        "since": null
      }
    },
    {
      "id": "docs/internal/design-process.md#M-PRD-EG",
      "file": "docs/internal/design-process.md",
      "line": 1505,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 2,
      "itemCount": 2,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-handoff-deliverable-sections.mjs",
          "claimedCheckItems": 2
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/design-process.md#M-CARDINALITY",
      "file": "docs/internal/design-process.md",
      "line": 1532,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 2,
      "itemCount": 2,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-handoff-deliverable-sections.mjs",
          "claimedCheckItems": 2
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/design-process.md#M-IA-FIRST",
      "file": "docs/internal/design-process.md",
      "line": 1569,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 2,
      "itemCount": 2,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-handoff-deliverable-sections.mjs",
          "claimedCheckItems": 2
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/design-process.md#M-LIFECYCLE-CRUD",
      "file": "docs/internal/design-process.md",
      "line": 1602,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-handoff-deliverable-sections.mjs",
          "claimedCheckItems": 3
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/design-process.md#Scope",
      "file": "docs/internal/design-process.md",
      "line": 1654,
      "heading": "Acceptance",
      "state": "unclassified",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": null
    },
    {
      "id": "docs/internal/design-process.md#Delivery",
      "file": "docs/internal/design-process.md",
      "line": 1704,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 5,
      "itemCount": 5,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-deliverable-open-questions.mjs",
          "claimedCheckItems": 5
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q9",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 259,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 2,
      "itemCount": 2,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q11",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 342,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 2,
      "itemCount": 2,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q12",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 369,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 2,
      "itemCount": 2,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q13",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 397,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q14",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 434,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 2,
      "itemCount": 2,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q15",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 569,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q17",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 639,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 2,
      "itemCount": 2,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q18",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 667,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q19",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 708,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 2,
      "itemCount": 2,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q20",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 745,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q21",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 776,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q23",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 840,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q24",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 893,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q25",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 929,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q26",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 966,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q27",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 996,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q28",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 1040,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/figma-technical-reference.md#Q30",
      "file": "docs/internal/figma-technical-reference.md",
      "line": 1134,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": {
        "id": "docs/internal/figma-technical-reference.md",
        "reason": "文件级豁免（id 无 # ⇒ 盖该文件全部 17 段）。2026-08-27 逐段读过全文后登记。为什么整份如此：这份文件是 use_figma 的 Figma Plugin API quirks 手册，它的每一个 Acceptance 段约束的都是**在对话里现写现跑的一次性 JS 脚本**（脚本必先 probe absoluteBoundingBox 再继续 / 批量前先单例验证 / getNodeById 前先 setCurrentPageAsync / 遍历前加 hasChildren 守卫 / clone 后必显式 appendChild 再设坐标 / createText 后必显式设 fills …），外加各段末尾的 handoff doc 记录要求。那些脚本**不落仓库**（use_figma 调用体，执行完即消失，无文件产物），handoff doc 是交付文本 —— 两者仓库侧都没有可扫的对象。⇒ 不是「这份文件很难测」，是结构上无被测物。⚠️ 如实登记唯一一处 borderline：#Q13 自带一句「audit-style check（可选）：扫 Figma export 看 root frame 是否 hug」—— 它自标「可选」，且输入面是 gitignored 的 Figma 快照（figma-data/mockup/），不在任何仓内闸的扫描面；要上闸得先解决快照入库，属独立提案，不在本条覆盖的承诺里。⛔ 文件级豁免会静默盖住将来往这份文件新加的段，若日后有段的被测物落进仓库，必须改成段级。",
        "since": null
      }
    },
    {
      "id": "docs/internal/code-conventions.md#R2.2",
      "file": "docs/internal/code-conventions.md",
      "line": 294,
      "heading": "R2.2 — 一个视觉信号在同一套视图内只能有一种语义（code-side mirror of §C8）— 2026-09-01 新增",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/code-conventions.md#R2.2",
        "reason": "段级 —— §R2.2（§C8 的 code 端镜像），三条与 mockup 侧同构：信号 × 语义对照表 / 消解走 prop·variant 而非 override CSS / 授权偏离进 design-record·ADR。理由同本表 `mockup-conventions.md#C8` 那条，此处只记 code 侧特有的两点：① 被测物是 **PR 描述与 ADR**，仓库侧无对象 ② 核心判据「同一信号是否单义」在 code 侧同样不可机检 —— `audit:no-hardcoded-design-tokens` / `audit-product-code` R2 保证「每一处颜色都合法」，**不保证「同一信号只表达一件事」**，条文的 jump 行逐字写着「lint 全绿仍可能违例」。⚠️ borderline：override CSS 的后果面确由 R2 守，但那是 R2 自己的闸；本段问的是消解路径的选择。",
        "since": null
      }
    },
    {
      "id": "docs/internal/code-conventions.md#Acceptance",
      "file": "docs/internal/code-conventions.md",
      "line": 329,
      "heading": "Acceptance criteria（build 自审）",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/code-conventions.md#Acceptance",
        "reason": "段级。§Acceptance criteria（build 自审）三条全是**要作者答得出的问题**（自画 SVG 几个 / 有无库实证证据（搜索词+结果）/ 用了多少 hex literal / 复合组件 mirror 自哪个 canonical），段尾逐字「任一条答不出 → 不可宣布完成」。被测物 = 作者在 PR/handoff 里的答案，不落仓库。⚠️ 别与「后果面已被闸守」混为一谈：hex literal 的**结果**由 audit:no-hardcoded-design-tokens（硬规则 #4，L5）守、自画 SVG 的结果由 audit-product-code R1 守 —— 那是 §R1/§R2 两条规则各自的闸，不是本段这三个自审问题的闸。本段问的是「你答不答得出」，无闸可核。",
        "since": null
      }
    },
    {
      "id": "docs/internal/code-conventions.md#R6.1",
      "file": "docs/internal/code-conventions.md",
      "line": 462,
      "heading": "R6.1 — 视觉结构契约的作用域是**产品**，不是「随手挑的一个同类视图」：前期建 · 验收查 · 走查兜（code-side mirror of M21.4）— 2026-09-01 新增",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/code-conventions.md#R6.1",
        "reason": "段级 —— §R6.1（§M21.4 的 code 端镜像），三条：起手有产品级视觉结构契约（每条注明来源 `文件:行`）/ PR·handoff 含「取值全部命中契约 / 例外已列」/ 出现两级都无先例的新值时契约被更新。理由同本表 `design-process.md#M21.4`。code 侧特有：契约与 PR 描述都落**消费产品 repo**，DS 仓无扫描面；且第 3 条要判「本 app 同类视图有没有先例」—— 机器要先知道哪些视图算「同类」，属语义。⚠️ borderline：R6.1 的价值恰恰在第 2 条把契约变成 **PR 的可拒收项**（条文原话「② 是让契约有牙的那一步」）—— 那颗牙是 **reviewer**，不是闸。⛔ 别因为「它进了 review 面」就读成 gated。",
        "since": null
      }
    },
    {
      "id": "docs/internal/code-conventions.md#R7",
      "file": "docs/internal/code-conventions.md",
      "line": 645,
      "heading": "Acceptance criteria（build 自审）",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 6,
      "itemCount": 6,
      "claims": [],
      "allow": {
        "id": "docs/internal/code-conventions.md#R7",
        "reason": "段级。R7 四场景判断的自审：要求 AI 在任务开始前显式声明一行「intent classified as 场景 X.Y」、场景 2 里抑制顺手修复的冲动、命中 Hybrid 边界先 ask 用户。被测物是**AI 的 response 文本与判断过程**，不落仓库。唯一落盘的那条（保留的非 TVU 视觉标 VISUAL-FIDELITY 注释）其判据是「该不该标」= 语义判断，机器分不出哪段视觉是 from source。",
        "since": null
      }
    },
    {
      "id": "docs/internal/code-conventions.md#R8",
      "file": "docs/internal/code-conventions.md",
      "line": 782,
      "heading": "Acceptance criteria（build 自审）",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 8,
      "itemCount": 8,
      "claims": [],
      "allow": {
        "id": "docs/internal/code-conventions.md#R8",
        "reason": "段级。要求任务交付时 AI 显式声明「已 run figma-extract-css.py」「已完成自检 N 轮，diff% = X.XX%」、超阈值时显式声明豁免理由、修复轨迹记录在 commit/handoff。被测物是交付叙述 + 一次性本地脚本产出（extracted-css.css / visual-diff 截图均不入库）。段内两条实体规则（矢量源→矢量输出、禁止 approximate 重画 vector）的**违例形态**是「用了 raster 中转」/「手写近似 path」—— 判据要求分辨一段 inline SVG 是真实导出还是手绘近似，逐字撞 FIGMA_AS_SOURCE_OF_TRUTH.md §验证方法禁止的启发式。",
        "since": null
      }
    },
    {
      "id": "docs/internal/code-conventions.md#R9",
      "file": "docs/internal/code-conventions.md",
      "line": 921,
      "heading": "Acceptance criteria（build 自审）",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/code-conventions.md#R9",
        "reason": "段级。要求 AI 交付前列出「推断的交互态规则表」、hover/focus/disabled 补齐、推断方向与 active state 一致。被测物是那张表（交付文本）。⚠️ 补没补 hover 这一半在 consumer 侧确有 R9 探针，但它逐字标 ADVISORY（report-only、HIGH FP、从不 set exit 1）⇒ 结构上不是闸；且它覆盖不到「推断方向是否与 active state 逻辑一致」这条语义判断。⇒ 本段整体无闸可核，R9 升 blocking 后可重议本行。",
        "since": null
      }
    },
    {
      "id": "docs/internal/code-conventions.md#R10",
      "file": "docs/internal/code-conventions.md",
      "line": 996,
      "heading": "Acceptance criteria（build 自审）",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": {
        "id": "docs/internal/code-conventions.md#R10",
        "reason": "段级。四条全是任务开始前的**显式声明**与**问不问用户**（声明 vector strategy: X (reason: ...) / ambiguous case C/D 要 ask user 而非自作主张 / case D 列疑问点等用户拍板 / 起手 run figma-extract-css.py）。被测物是对话行为与 AI response，仓库侧零对象。",
        "since": null
      }
    },
    {
      "id": "docs/internal/code-conventions.md#R14",
      "file": "docs/internal/code-conventions.md",
      "line": 1102,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-product-code.mjs",
          "claimedCheckItems": 3
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/code-conventions.md#R15",
      "file": "docs/internal/code-conventions.md",
      "line": 1147,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/code-conventions.md#R15",
        "reason": "段级。R15 Library-First 的自审：handoff/PR 必含一行「UI primitives used: [...]」、新写 JSX/Vue template 未 import canonical 则触发 flag、自画必须在 commit message 留 escalation 痕迹。被测物是 handoff 文本 + commit message + PR 正文。⚠️ 「新写原生控件」这一后果面确由 audit-product-code R15 守（原生 <button>/<input>/<select>/<textarea>），但本段要的是**声明与 escalation 痕迹**，R15 看不到那些；且 R15 是 consumer 侧扫描面，本段约束的是任何 implementation PR 的作者行为。",
        "since": null
      }
    },
    {
      "id": "docs/internal/code-conventions.md#R16",
      "file": "docs/internal/code-conventions.md",
      "line": 1213,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-product-code.mjs",
          "claimedCheckItems": 3
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/code-conventions.md#R13",
      "file": "docs/internal/code-conventions.md",
      "line": 1294,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-commit-affordance-trace.mjs",
          "claimedCheckItems": 4
        },
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-handoff-deliverable-sections.mjs",
          "claimedCheckItems": 4
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/code-conventions.md#R17",
      "file": "docs/internal/code-conventions.md",
      "line": 1355,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/code-conventions.md#R17",
        "reason": "段级。module reuse 的 code review 纪律：review 时 grep 相似 pattern 应集中在 1 个 component file、handoff 必含 reused components 段（每个 module 的 import count + 是否已抽）、代码块复制 3+ 次没抽 component 视为违规。前两条的被测物是 review 行为与 handoff 文本；第三条要机检需要「相似代码块」判定 = 启发式（多相似算复制、抽到什么粒度算已抽），撞 FIGMA_AS_SOURCE_OF_TRUTH.md §验证方法。",
        "since": null
      }
    },
    {
      "id": "docs/internal/code-conventions.md#R18",
      "file": "docs/internal/code-conventions.md",
      "line": 1386,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/code-conventions.md#R18",
        "reason": "段级。M37 Reference probe 的三条：handoff/PR 必含 5-row probe table、每个新文件标注来自 reference 复用还是新增创造、reviewer 能从 probe table 反查漏了哪条 contract。第一条的**存在性**已由 audit:handoff-sections 守（它逐字扫 \"Reference probe\" 短语），但那是 M37 那条规则的闸、不是本段；本段其余两条（逐文件来源标注 + reviewer 能否反查）的被测物是人的 review 行为，无对象可扫。⇒ 若日后要把本段改判 gated，正确动作是让 audit-handoff-deliverable-sections.mjs 增写一行 covers-acceptance 指向本 id，并删掉本行（shrink-only 会要求删）。",
        "since": null
      }
    },
    {
      "id": "docs/internal/code-conventions.md#R18.1",
      "file": "docs/internal/code-conventions.md",
      "line": 1405,
      "heading": "R18.1 — 参考物只定「做什么」，**样式取值一律取宿主 app 同类视图的实测**（code-side mirror of M37.3）— 2026-09-01 新增",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "bold",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/code-conventions.md#R18.1",
        "reason": "段级 —— §R18.1（§M37.3 的 code 端镜像），三条：Reference probe 段的 `Style / spacing tokens` 行分「参考物值 / 宿主实测值（含来源 `文件:行`）」两列 / 新增·粘贴的样式声明逐属性先例核对 / ⛔ 不接受「按参考图做的」作为 review 通过理由。第 1、3 条的被测物是 **handoff·PR 文本与 review 行为**，仓库侧无对象。第 2 条是本条的实质判据，也正是不可机检的那条：要分辨一段新增 CSS 是「照抄参考物」还是「取自宿主同类视图」，机器得先认定哪些视图算同类、再判该值在其中有无先例 —— 与本表 `code-conventions.md#R8` 那条「分辨 inline SVG 是真实导出还是手绘近似」同型，逐字撞 FIGMA_AS_SOURCE_OF_TRUTH.md §验证方法所禁止的启发式。⚠️ borderline：**裸值**这一后果面由 `audit:no-hardcoded-design-tokens`（硬规则 #4，L5）守 —— 但它守的是 hex literal 的存在，管不到「这个合法 token 在本 app 同类视图里有没有先例」，后者才是本段问的。条文自己点名的高危形态（copy 一段 CSS / 一个 class / 整个组件文件过来改）在 diff 里只是「多了几行样式」，正因为**看起来完全合法**才需要人判。",
        "since": null
      }
    },
    {
      "id": "docs/internal/code-conventions.md#R19",
      "file": "docs/internal/code-conventions.md",
      "line": 1443,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 5,
      "itemCount": 5,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-product-code.mjs",
          "claimedCheckItems": 5
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/code-conventions.md#R20",
      "file": "docs/internal/code-conventions.md",
      "line": 1489,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-product-code.mjs",
          "claimedCheckItems": 4
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/code-conventions.md#R21",
      "file": "docs/internal/code-conventions.md",
      "line": 1566,
      "heading": "Acceptance",
      "state": "gated",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 5,
      "itemCount": 3,
      "claims": [
        {
          "gate": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b/scripts/audit-product-code.mjs",
          "claimedCheckItems": 5
        }
      ],
      "allow": null
    },
    {
      "id": "docs/internal/code-conventions.md#R23",
      "file": "docs/internal/code-conventions.md",
      "line": 1661,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 5,
      "itemCount": 5,
      "claims": [],
      "allow": {
        "id": "docs/internal/code-conventions.md#R23",
        "reason": "段级。文本截断 + tooltip 的五条：用指定 CSS pattern 之一、用 scrollWidth > clientWidth 检测、tooltip 用 library 组件而非自画、a11y 双保险（aria-describedby + title）、至少 1 个单测覆盖「截断→tooltip 触发」。被测物是**消费产品仓的代码与测试**，不在本仓任何闸的扫描面（audit:consumer-code 需在 consumer 侧跑且未实现这几条判据）。⇒ 是「被测物在别的仓」不是「不可机检」——若日后 consumer 档补上对应 probe，本行应删。",
        "since": null
      }
    },
    {
      "id": "docs/internal/code-conventions.md#R-DISCIPLINE",
      "file": "docs/internal/code-conventions.md",
      "line": 1732,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 3,
      "itemCount": 3,
      "claims": [],
      "allow": {
        "id": "docs/internal/code-conventions.md#R-DISCIPLINE",
        "reason": "段级。R-rule 起手协议自审：写第一行 component code 前 conversation 内可见一次 TodoWrite 调用（list 含本次适用 R-rule 编号）、handoff 顶部含 \"Rule checklist: [R0 ✅ / R1 ✅ / ...]\"、宣布 ready for review 前 todo 的 pending/in_progress 数 = 0。被测物是**AI 的对话 transcript 与 todo 状态**，那是工具会话内的运行时状态，仓库里不存在。",
        "since": null
      }
    },
    {
      "id": "AGENTS.md#Team",
      "file": "AGENTS.md",
      "line": 844,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": {
        "id": "AGENTS.md#Team",
        "reason": "段级。§Slack mrkdwn 的四条起草纪律（起草前确认平台是 Slack / 嵌套结构扁平化成 *section title* + 单层 • / 所有加粗用单 * / URL 直接粘贴不包 markdown link）。被测物是**发到 Slack 的消息正文**，不落仓库；grep 实测 scripts/*.mjs 无任何 Slack 判据，也不该有（消息发出前的形态只存在于对话里）。⛔ 用段级不用文件级：AGENTS.md 是高频活跃文档，文件级豁免会静默盖住将来新增的段。",
        "since": null
      }
    },
    {
      "id": "AGENTS.md#Jira",
      "file": "AGENTS.md",
      "line": 900,
      "heading": "Jira Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": {
        "id": "AGENTS.md#Jira",
        "reason": "段级。§Jira 评论的七条（起草前确认平台 / 正文英文 / 对外先给 owner 过目草稿 / review 评论从简 / contentFormat adf + accountId 真 mention / 内容多于确认+link 就拆多条 / reply 提示走 UI）。被测物是**发到 Jira 的评论**（经 MCP 调用发出），仓库侧零痕迹；「先给 owner 过目」更是人在回路的动作。⛔ 同上，用段级不用文件级。",
        "since": null
      }
    },
    {
      "id": "docs/meta-rules.md#触发器",
      "file": "docs/meta-rules.md",
      "line": 715,
      "heading": "Acceptance",
      "state": "not-machine-checkable",
      "blindSpot": false,
      "form": "heading",
      "checkItems": 4,
      "itemCount": 4,
      "claims": [],
      "allow": {
        "id": "docs/meta-rules.md#触发器",
        "reason": "段级。触发器并行化的四条：任务有 ≥2 个可独立子任务时 response 顶部必含 Parallelism plan: 段、该段列出每个 track 的输入/输出/是否 independent、independent tracks 必须在单条 message 内并发触发、违例被提醒一次就写进实证段。被测物是**AI 自己那条 response 的文本与工具调用形态**（一条 message 里发了几个 tool_use），仓库里不存在该对象。⛔ 用段级不用文件级：meta-rules.md 是活跃的元规则真源，文件级会静默盖住将来新增的段。",
        "since": null
      }
    }
  ],
  "controls": [
    {
      "id": "must-hit-1/narrow-equals-gate",
      "pass": true,
      "detail": "narrow=134 gate.sections=134"
    },
    {
      "id": "must-hit-2/line-count-conserved",
      "pass": true,
      "detail": "docs/internal/mockup-conventions.md:4056→4056 · docs/internal/domain-tvu.md:282→282 · docs/internal/design-process.md:1715→1715 · docs/internal/figma-technical-reference.md:1144→1144 · docs/internal/code-conventions.md:1750→1750 · AGENTS.md:920→920 · docs/meta-rules.md:1057→1057"
    },
    {
      "id": "must-hit-3/blind-internally-consistent",
      "pass": true,
      "detail": "wide-narrow=8 marked=8"
    },
    {
      "id": "must-not-hit-1/stripped-never-leaks-into-rows",
      "pass": true,
      "detail": "已剥离 0 处，漏入 rows 0 处（真实数据无此形态）"
    },
    {
      "id": "must-hit-4/narrow-tri-state-equals-gate",
      "pass": true,
      "detail": "narrow={\"gated\":47,\"not-machine-checkable\":52,\"unclassified\":35} gate={\"gated\":47,\"not-machine-checkable\":52,\"unclassified\":35}"
    },
    {
      "id": "must-not-hit-3/blind-never-gated",
      "pass": true,
      "detail": "0 条盲区被判 gated"
    },
    {
      "id": "must-not-hit-2/blind-confined-to-known-file",
      "pass": true,
      "detail": "8 条全在 mockup-conventions.md"
    }
  ]
}