{
  "auditId": "unclassified-fix-triage",
  "subjectSha": "b3728d38",
  "pin": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-b3728d38",
  "dirty": false,
  "checkedAt": "2026-08-31T02:12:51.932Z",
  "dumpSource": "subjects/tvu-ds/inventory/acceptance-coverage-b3728d38.json",
  "gold": {
    "preRegistered": {
      "recallN": 2,
      "recallD": 32,
      "recall": 0.0625,
      "fpN": 0,
      "fpD": 27,
      "fp": 0,
      "thresholds": {
        "MIN_RECALL": 0.75,
        "MAX_FALSE_POSITIVE": 0.26,
        "MIN_SEPARATION": 0.5
      }
    },
    "postHoc": {
      "note": "🔴 事后切分，⛔ 不作为通过判据 —— 剔除了整份文件级豁免的段（其豁免理由是【射程】不是【不可机检】）",
      "recallN": 2,
      "recallD": 15,
      "recall": 0.13333333333333333,
      "fpN": 0,
      "fpD": 27,
      "fp": 0
    },
    "contamination": {
      "fileLevelExempt": 17,
      "sectionLevelExempt": 15,
      "files": [
        "docs/internal/figma-technical-reference.md"
      ]
    },
    "outcome": {
      "verdict": "FAILED",
      "consequence": "🔴 FAILED ⇒ 本器**已降级**：fixClass 只由结构判据产出，⛔ 不再产出 F3（建议走豁免）。「这条其实该走豁免吗」留给人工逐条判 —— 见每行的 machineCheckability / lexicalHint。",
      "diagnosis": "可机检性取决于【被测物存放在哪个面】（repo 文件 vs Figma 画布 / Slack 消息 / 一次对话 / 一张渲染图），⛔ 与措辞无关 ⇒ 词法判据结构上就够不着。"
    }
  },
  "counts": {
    "F1": 57,
    "F2": 0,
    "F4": 10
  },
  "blockerCounts": {
    "none": 31,
    "anchor": 28,
    "blind": 3,
    "both": 5
  },
  "orthogonality": {
    "identical": true,
    "diff": 0
  },
  "criterionCollision": {
    "a": {
      "name": "slug 碰撞（本器现行判据：id 会带 ~N 序号 ⇒ 锚点会漂）",
      "n": 33
    },
    "b": {
      "name": "标题不是具名规则（计划书预注册用的定义）",
      "n": 33
    },
    "sameCount": true,
    "sameSet": false,
    "onlyA": [
      "docs/internal/mockup-conventions.md#M23.12",
      "docs/internal/mockup-conventions.md#M23.12~2",
      "docs/internal/mockup-conventions.md#M23.14~2",
      "docs/internal/mockup-conventions.md#M23.18.1@blind:917",
      "docs/internal/mockup-conventions.md#M-INTEGRITY@blind:1247",
      "docs/internal/mockup-conventions.md#M-INTEGRITY@blind:1256",
      "docs/internal/mockup-conventions.md#M-DISCIPLINE.SYNC@blind:3079",
      "docs/internal/mockup-conventions.md#M-DISCIPLINE.SYNC@blind:3107"
    ],
    "onlyB": [
      "docs/internal/mockup-conventions.md#验收标准@blind:693",
      "docs/internal/mockup-conventions.md#`Jira",
      "docs/internal/mockup-conventions.md#(B)",
      "docs/internal/mockup-conventions.md#允许内容@blind:1608",
      "docs/internal/design-process.md#参考物落地（Reference",
      "docs/internal/design-process.md#Step",
      "docs/internal/design-process.md#Canonical",
      "docs/internal/design-process.md#⚠️"
    ]
  },
  "rows": [
    {
      "id": "docs/internal/mockup-conventions.md#C6",
      "file": "docs/internal/mockup-conventions.md",
      "line": 449,
      "heading": "C6 — 新建元素前必须先查目标文件实际订阅的库（不止 TVU 主库）（2026-07-14 新增）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-binding-fidelity.mjs",
          "nearestCoveredLine": 431,
          "lineDistance": 18
        },
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 475,
          "lineDistance": 26
        },
        {
          "gate": "scripts/audit-mockup-connector.mjs",
          "nearestCoveredLine": 412,
          "lineDistance": 37
        }
      ],
      "lexicalHint": {
        "hitItems": 1,
        "totalItems": 3,
        "kinds": [
          "ask-user"
        ],
        "note": "⚠️ 有核查项带「不可机检」词法特征 ⇒ 人工判读时优先看这条"
      },
      "items": [
        {
          "line": 450,
          "text": "新建颜色/文字节点前，已跑 `get_libraries` 确认该文件实际订阅的全部库"
        },
        {
          "line": 451,
          "text": "绑定 API 与库发布形态匹配（Variable 库用 `setBoundVariableForPaint`，Style-only 库用 `setFillStyleIdAsync`/`setTextStyleIdAsync`）"
        },
        {
          "line": 452,
          "text": "查不到对应项时已显式反馈用户，未自行估算 hex 顶替"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#C7",
      "file": "docs/internal/mockup-conventions.md",
      "line": 468,
      "heading": "C7 — 文字节点必须\"双绑\"：文字样式(text style) + 颜色变量/样式，缺一违规（2026-07-30 新增）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 475,
          "lineDistance": 7
        },
        {
          "gate": "scripts/audit-mockup-binding-fidelity.mjs",
          "nearestCoveredLine": 431,
          "lineDistance": 37
        },
        {
          "gate": "scripts/audit-mockup-connector.mjs",
          "nearestCoveredLine": 412,
          "lineDistance": 56
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 469,
          "text": "每个手建文字节点：`textStyleId` 已绑库 text style **且** fill 绑颜色 Variable/Style（C1/C6）"
        },
        {
          "line": 470,
          "text": "无裸 `fontSize` / `lineHeight=AUTO` 顶替（组件自带文本继承组件排版除外）"
        },
        {
          "line": 471,
          "text": "违例 → handoff fix log 记 \"text styles bound: [N nodes]\""
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#验收标准@blind:693",
      "file": "docs/internal/mockup-conventions.md",
      "line": 693,
      "heading": "验收标准 Acceptance",
      "form": "zh-heading",
      "blindSpot": true,
      "itemCount": 8,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "ACC_RE-blind"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 829,
          "lineDistance": 136
        },
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 475,
          "lineDistance": 218
        },
        {
          "gate": "scripts/audit-mockup-binding-fidelity.mjs",
          "nearestCoveredLine": 431,
          "lineDistance": 262
        }
      ],
      "lexicalHint": {
        "hitItems": 2,
        "totalItems": 8,
        "kinds": [
          "subjective-judgement"
        ],
        "note": "⚠️ 有核查项带「不可机检」词法特征 ⇒ 人工判读时优先看这条"
      },
      "items": [
        {
          "line": 695,
          "text": "深色 canvas 上：所有注释文字可读，颜色无依赖画布背景"
        },
        {
          "line": 696,
          "text": "浅色 canvas 上：navy chip 作为 overlay 突出可识别（无需截图验证，配色规则保证）"
        },
        {
          "line": 697,
          "text": "Figma canvas 上无多余 \"Frame\" 标签（条件标签是 GROUP）"
        },
        {
          "line": 698,
          "text": "Arrow ID 和坐标已存入 sharedPluginData（可通过 `getSharedPluginData` 验证）"
        },
        {
          "line": 699,
          "text": "Header chip 和规则卡有语义化名称（非默认 \"Frame\"）"
        },
        {
          "line": 700,
          "text": "所有注释文案同时提供中英文，排版符合内联式（A-右 / A-下 / A-逐行）/ 分节式（B）分类规范"
        },
        {
          "line": 701,
          "text": "多行 body 走 A-逐行 时：每行 EN 后紧跟对应 ZH 同视框（无 ZH 整块甩末尾的反模式）"
        },
        {
          "line": 702,
          "text": "所有 Noto Sans SC 字符区间的 fill opacity ≈ 0.45（probe 脚本可验证，无需截图）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.12",
      "file": "docs/internal/mockup-conventions.md",
      "line": 780,
      "heading": "M23.12 — UX/PRD 卡 Placement & Sizing（紧邻其描述的 mockup + 竖向 Auto Layout hug + 标准宽）— 2026-06-01/06-05 合并（原 M23.12 placement + M23.13 sizing）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 829,
          "lineDistance": 49
        },
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 937,
          "lineDistance": 157
        },
        {
          "gate": "scripts/audit-mockup-binding-fidelity.mjs",
          "nearestCoveredLine": 431,
          "lineDistance": 349
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 781,
          "text": "卡距对应 mockup 最近边 ≤ 200px、一屏内同见（PRD 卡置顶跨列 / 紧邻 Jira widget）"
        },
        {
          "line": 782,
          "text": "卡**不得**手设固定高度（必 `primaryAxisSizingMode='AUTO'`）；同一交付集合内卡宽一致"
        },
        {
          "line": 783,
          "text": "改卡内文案后无需手动 resize 卡高"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.12~2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 792,
      "heading": "M23.12 — UX/PRD 卡 Placement & Sizing（紧邻其描述的 mockup + 竖向 Auto Layout hug + 标准宽）— 2026-06-01/06-05 合并（原 M23.12 placement + M23.13 sizing）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 2,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 829,
          "lineDistance": 37
        },
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 937,
          "lineDistance": 145
        },
        {
          "gate": "scripts/audit-mockup-binding-fidelity.mjs",
          "nearestCoveredLine": 431,
          "lineDistance": 361
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 2,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 793,
          "text": "一个 feature 的 PRD + **AFTER** mockup + UX Delivery + User Journey **同属一个具名 feature Section**；**BEFORE 置于 Section 外**作对照"
        },
        {
          "line": 794,
          "text": "PRD 卡宽 == UX Delivery 卡宽 == User Journey 卡宽（**同一数值 = PRD 宽度**）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.14~2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 853,
      "heading": "M23.14 — 卡内排版：双语堆叠行距 + 段名层级（M23 §双语 extension）— 2026-06-18/06-23 合并（原 M23.14 双语行距 + M23.15 段名层级）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 829,
          "lineDistance": 24
        },
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 937,
          "lineDistance": 84
        },
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1237,
          "lineDistance": 384
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 854,
          "text": "卡内模块段名 = cyan `#33A4FD` + Roboto Medium + 字号 > 正文（probe `getStyledTextSegments` 验 fill / size）"
        },
        {
          "line": 855,
          "text": "ZH 段名同 cyan + opacity 0.45 + 小 2px"
        },
        {
          "line": 856,
          "text": "**PRD / 交付卡 title 下有 cyan meta 行创建日期**（`YYYY-MM-DD`，对齐 §M45 page 日期）——**实证 2026-07-13 Skip/不发布 Release**：PRD 卡漏日期，owner 纠正「PRD 没带上日期」→ 回流本条"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.18",
      "file": "docs/internal/mockup-conventions.md",
      "line": 902,
      "heading": "M23.18 — 浅色主题匹配变体（Light-Theme-Matching Card Skin）— 2026-07-14 新增",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 0,
      "lineExists": true,
      "fixClass": "F4",
      "criterion": "结构判据：段内 0 条核查项",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "n/a（先补核查项）",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 937,
          "lineDistance": 35
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 829,
          "lineDistance": 73
        },
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1237,
          "lineDistance": 335
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.18.1@blind:917",
      "file": "docs/internal/mockup-conventions.md",
      "line": 917,
      "heading": "M23.18.1 — Page 画布底色跟随 mockup 主题（同源扩展，2026-07-22 owner 回流）",
      "form": "list-bold",
      "blindSpot": true,
      "itemCount": 0,
      "lineExists": true,
      "fixClass": "F4",
      "criterion": "结构判据：段内 0 条核查项",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor",
        "ACC_RE-blind"
      ],
      "machineCheckability": "n/a（先补核查项）",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 937,
          "lineDistance": 20
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 829,
          "lineDistance": 88
        },
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1237,
          "lineDistance": 320
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "id": "docs/internal/mockup-conventions.md#`Jira",
      "file": "docs/internal/mockup-conventions.md",
      "line": 976,
      "heading": "`Jira requirement` 组件的取用做法（per-file 地址登记在各 consumer repo）— 2026-06-03 新增 · 2026-08-06 拆分",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 0,
      "lineExists": true,
      "fixClass": "F4",
      "criterion": "结构判据：段内 0 条核查项",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "n/a（先补核查项）",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 937,
          "lineDistance": 39
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 829,
          "lineDistance": 147
        },
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1237,
          "lineDistance": 261
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.8.1",
      "file": "docs/internal/mockup-conventions.md",
      "line": 999,
      "heading": "M23.8.1 — 需求来源链接完整性 + 全部可点击（PRD「需求来源/Source」段 + 任意 deliverable，create/update 都遵守）— 2026-06-23 新增",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 0,
      "lineExists": true,
      "fixClass": "F4",
      "criterion": "结构判据：段内 0 条核查项",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "n/a（先补核查项）",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 937,
          "lineDistance": 62
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 829,
          "lineDistance": 170
        },
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1237,
          "lineDistance": 238
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "id": "docs/internal/mockup-conventions.md#I2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1156,
      "heading": "I2 — Sibling Section Overlap Probe（改 bounds 后 + 每次收尾机检固定一项）（原 M28）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 4,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1237,
          "lineDistance": 81
        },
        {
          "gate": "scripts/audit-mockup-overlap.mjs",
          "nearestCoveredLine": 1276,
          "lineDistance": 120
        },
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 937,
          "lineDistance": 219
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 4,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1158,
          "text": "收尾 handoff 的机检块里**同时**出现 `sectionInternalOverlap` 与 `sectionToSectionOverlap` 两个数，不是一个笼统的 `overlap`"
        },
        {
          "line": 1159,
          "text": "page 内存在嵌套子 Section 时，机检块能答\"扫了几层\""
        },
        {
          "line": 1160,
          "text": "`sectionToSectionOverlap` 非 0 时，handoff 写明「存量 vs 本轮引入」的回算判据（用改动前的 bounds 反算），不默认记成本轮引入"
        },
        {
          "line": 1161,
          "text": "`sectionInternalOverlap` 的命中项逐条定性，连线类明确标为范式内、非缺陷"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-INTEGRITY@blind:1247",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1247,
      "heading": "M-INTEGRITY §I5 — 替换既有节点前先 diff（2026-06-17 新增）",
      "form": "list-bold",
      "blindSpot": true,
      "itemCount": 0,
      "lineExists": true,
      "fixClass": "F4",
      "criterion": "结构判据：段内 0 条核查项",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor",
        "ACC_RE-blind"
      ],
      "machineCheckability": "n/a（先补核查项）",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1237,
          "lineDistance": 10
        },
        {
          "gate": "scripts/audit-mockup-overlap.mjs",
          "nearestCoveredLine": 1276,
          "lineDistance": 29
        },
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 937,
          "lineDistance": 310
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-INTEGRITY@blind:1256",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1256,
      "heading": "M-INTEGRITY §I6 — create / move / place 前先 probe 目标坐标区（防叠加）（2026-06-17 新增）",
      "form": "list-bold",
      "blindSpot": true,
      "itemCount": 0,
      "lineExists": true,
      "fixClass": "F4",
      "criterion": "结构判据：段内 0 条核查项",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor",
        "ACC_RE-blind"
      ],
      "machineCheckability": "n/a（先补核查项）",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1237,
          "lineDistance": 19
        },
        {
          "gate": "scripts/audit-mockup-overlap.mjs",
          "nearestCoveredLine": 1276,
          "lineDistance": 20
        },
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 937,
          "lineDistance": 319
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.6",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1448,
      "heading": "M23.6 — Connector Endpoint Anchoring（两端锚定）+ Frame Content Avoidance（M23 extension）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 0,
      "lineExists": true,
      "fixClass": "F4",
      "criterion": "结构判据：段内 0 条核查项",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "n/a（先补核查项）",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1293,
          "lineDistance": 155
        },
        {
          "gate": "scripts/audit-mockup-overlap.mjs",
          "nearestCoveredLine": 1276,
          "lineDistance": 172
        },
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 1736,
          "lineDistance": 288
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1509,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 5,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1293,
          "lineDistance": 216
        },
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 1736,
          "lineDistance": 227
        },
        {
          "gate": "scripts/audit-mockup-overlap.mjs",
          "nearestCoveredLine": 1276,
          "lineDistance": 233
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 5,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1511,
          "text": "state-preview 元素 absoluteBoundingBox 与产品 frame absoluteBoundingBox 无重叠"
        },
        {
          "line": 1512,
          "text": "state-preview 与 trigger element 之间有 1 条 VECTOR connector（遵守 M23 + M23.6）"
        },
        {
          "line": 1513,
          "text": "connector tip 落在 trigger element bbox 内（M23.6 (A)）"
        },
        {
          "line": 1514,
          "text": "connector 路径不穿越 frame 内部 sub-header / table rows / cards 内容（M23.6 (B)）"
        },
        {
          "line": 1515,
          "text": "state-preview 元素有独立 frame name（如 `Dropdown preview — Environment edit`），不与产品 UI 同名"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~3",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1555,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 1736,
          "lineDistance": 181
        },
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1293,
          "lineDistance": 262
        },
        {
          "gate": "scripts/audit-mockup-overlap.mjs",
          "nearestCoveredLine": 1276,
          "lineDistance": 279
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1557,
          "text": "M23 卡里没有 code block（除\"样本 payload\"段允许 1 个）"
        },
        {
          "line": 1558,
          "text": "显示 / 取值 / 渲染规则用白话 If-Then 表达"
        },
        {
          "line": 1559,
          "text": "字段名 / 字面量值用行内 backtick 引用"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#(B)",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1597,
      "heading": "(B) 终态优先：卡讲\"当前设计是什么\"，不讲\"设计怎么演变的\" — 2026-08-05 owner 回流（V4-2333 走查轮二十六）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 1736,
          "lineDistance": 139
        },
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1293,
          "lineDistance": 304
        },
        {
          "gate": "scripts/audit-mockup-overlap.mjs",
          "nearestCoveredLine": 1276,
          "lineDistance": 321
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1598,
          "text": "卡内无 `this round` / `shipped MM-DD` / `(2026-08-04)` 这类日期充当章节骨架（Section Header 的 `updated YYYY-MM-DD` 元信息行不受此限）"
        },
        {
          "line": 1599,
          "text": "卡内无「取代此前…」「此前只有…」「原为…」这类沿革句"
        },
        {
          "line": 1600,
          "text": "卡内无帧尺寸 / 列内间距 / 等高不变量这类施工记录"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#允许内容@blind:1608",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1608,
      "heading": "允许内容",
      "form": "list-bold",
      "blindSpot": true,
      "itemCount": 0,
      "lineExists": true,
      "fixClass": "F4",
      "criterion": "结构判据：段内 0 条核查项",
      "confidence": "high",
      "blockers": [
        "ACC_RE-blind"
      ],
      "machineCheckability": "n/a（先补核查项）",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 1736,
          "lineDistance": 128
        },
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1293,
          "lineDistance": 315
        },
        {
          "gate": "scripts/audit-mockup-overlap.mjs",
          "nearestCoveredLine": 1276,
          "lineDistance": 332
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~4",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1610,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 2,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 1736,
          "lineDistance": 126
        },
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1293,
          "lineDistance": 317
        },
        {
          "gate": "scripts/audit-mockup-overlap.mjs",
          "nearestCoveredLine": 1276,
          "lineDistance": 334
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 2,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1612,
          "text": "每条 bullet 过 3 问筛掉 tangential"
        },
        {
          "line": 1613,
          "text": "卡数量 ≤ 6（Section Header + Why + Changes + Data Contract + Interaction + Acceptance）—— Persona / Out-of-scope / Future plans 不入卡"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.7",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1640,
      "heading": "M23.7 — State-label = what + why + invariants（M23 / M33 extension，2026-05-26）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 1736,
          "lineDistance": 96
        },
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1293,
          "lineDistance": 347
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 353
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1641,
          "text": "每 frame state-label 含 what / why / invariants 三段，不允许只 1-2 段"
        },
        {
          "line": 1642,
          "text": "业务场景 frame（如 bein sports case）必显式提及业务名 / persona / 用例"
        },
        {
          "line": 1643,
          "text": "Invariants 段必显式列规则编号（M-XX），不允许只口语描述"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~5",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1673,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 1736,
          "lineDistance": 63
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 320
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 320
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1675,
          "text": "任何 dialog box / sidebar / footer button row / 列表 row / chip → **必须 Auto Layout**（`layoutMode !== 'NONE'`）"
        },
        {
          "line": 1676,
          "text": "任何 product UI 用绝对定位 → handoff doc 必须写明理由（\"overlay on backdrop\" / \"anchor to canvas annotation\" 等）"
        },
        {
          "line": 1677,
          "text": "probe 脚本：`product_frame.findAll(n => n.type === 'FRAME' && n.layoutMode === 'NONE').filter(non-overlay && non-viewport && non-library-internal)` 命中数应 = 0；audit 必须排除 (a) 顶层 page-level viewport frame、(b) overlay/annotation 类、(c) library insta"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~6",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1723,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 1736,
          "lineDistance": 13
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 270
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 270
        }
      ],
      "lexicalHint": {
        "hitItems": 1,
        "totalItems": 3,
        "kinds": [
          "self-declaration"
        ],
        "note": "⚠️ 有核查项带「不可机检」词法特征 ⇒ 人工判读时优先看这条"
      },
      "items": [
        {
          "line": 1725,
          "text": "handoff doc 必含一行 \"Buttons used: `<component name>` variants \\[\\<list\\>\\]\""
        },
        {
          "line": 1726,
          "text": "任何 product UI 里出现\"渐变填充矩形 + 文字\" 且不是 `INSTANCE` → 触发 flag"
        },
        {
          "line": 1727,
          "text": "自画必备 escalation 痕迹：handoff doc 写 \"`<component>` lookup miss across local + team library; user provided no key → flagged as TBD\""
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~7",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1787,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 4,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 1757,
          "lineDistance": 30
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 206
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 206
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 4,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1789,
          "text": "handoff / wrap-up 能回答：本次所有 `search_design_system` 均带 `includeLibraryKeys: ['lk-057f6ba0...']`（贴一次调用样例）。"
        },
        {
          "line": 1790,
          "text": "任一资产 miss → handoff 有一行「`<asset>`: TVU UX Design System 无此资产 → [file-local / 自画+backlog / 退用户]」，**不得**出现\"改用 X 库\"字样。"
        },
        {
          "line": 1791,
          "text": "走查产出 remote-instance 来源库清单；非 `TVU UX Design System` 的实例 = flag，须给出处置。"
        },
        {
          "line": 1792,
          "text": "派 subagent 的 prompt 里 grep 得到 library key + 「不 fallback」约束串（子代理 prompt 自查）。"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M32.4",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1830,
      "heading": "M32.4 — 禁用（disabled）表达唯一口径：有禁用变体就切变体，没有变体才降透明度 — 2026-08-03 新增（owner 拍板回流）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 4,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 1757,
          "lineDistance": 73
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 163
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 163
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 4,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1831,
          "text": "每处禁用表达都能回答\"这个控件有没有 `enable` 轴\"，且答案来自 live 全枚举输出而非印象"
        },
        {
          "line": 1832,
          "text": "有变体的一律切变体，且**容器上没有额外的 `opacity < 1`**（双重处理 = FAIL）"
        },
        {
          "line": 1833,
          "text": "无变体而降透明度的，数值在本交付集合内统一，且 UX 卡已写\"dev 不要照搬\""
        },
        {
          "line": 1834,
          "text": "因变体轴互斥而丢失的能力，已登记 backlog + 已在 UX 卡写明代码侧要求"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M32.5",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1857,
      "heading": "M32.5 — 选源组件前先判断字段语义类别，不只挑\"看起来最像的邻居\"（2026-07-14 新增）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 1757,
          "lineDistance": 100
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 136
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 136
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1858,
          "text": "克隆/复用邻近元素前，能一句话说清新字段的语义类别"
        },
        {
          "line": 1859,
          "text": "组件选型与上表对照一致（或有明确理由偏离）"
        },
        {
          "line": 1860,
          "text": "克隆携带的默认装饰（图标等）已逐一评估，不契合的已移除，不是照单全收"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M32.6",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1878,
      "heading": "M32.6 — Spec-Value Fidelity + Confirm-Before-Deviation（2026-07-23 新增）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 4,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 115
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 115
        },
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 1757,
          "lineDistance": 121
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 4,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1879,
          "text": "交付的间距 / 颜色 / 字号 / 圆角能逐一指到 DS token 或原稿实测来源"
        },
        {
          "line": 1880,
          "text": "label / 文案与原稿逐字一致（简写 / 增删须用户确认）"
        },
        {
          "line": 1881,
          "text": "任何原稿之外的设计发挥，session 内有一次显式\"提方案 → 用户确认\"记录"
        },
        {
          "line": 1882,
          "text": "Legacy 关联：`FIGMA_AS_SOURCE_OF_TRUTH` + 硬规则 #2（不自由发挥）在 mockup 层的落地"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~8",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1909,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 84
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 84
        },
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 1757,
          "lineDistance": 152
        }
      ],
      "lexicalHint": {
        "hitItems": 1,
        "totalItems": 3,
        "kinds": [
          "self-declaration"
        ],
        "note": "⚠️ 有核查项带「不可机检」词法特征 ⇒ 人工判读时优先看这条"
      },
      "items": [
        {
          "line": 1911,
          "text": "任何 product frame（识别：name 命中设备 mockup 模式如 `S<N>` / `M<N>` / 设备屏幕 frame） → probe 所有 TEXT 节点 `fontName.family`，**不应**出现 `Noto Sans SC`"
        },
        {
          "line": 1912,
          "text": "注释 chip 内 ZH range opacity 仍走 0.45（M23 verbatim 不变）"
        },
        {
          "line": 1913,
          "text": "handoff doc 必含一行 \"Product UI language: \\<device locale, e.g. en-US\\>\""
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M36",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2028,
      "heading": "M36 — Multi-page module reuse → file-local component → TVU library promotion audit",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 35
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 35
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 2207,
          "lineDistance": 179
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2029,
          "text": "mockup 起手 / 写代码起手第 2 次实现某 UI module 前必跑 reuse check"
        },
        {
          "line": 2030,
          "text": "file-local component 命名遵守 `MicroApp <Product> <Module>` pattern（如 `MicroApp Video Sync Session Row`, `MicroApp Console State Pill`）"
        },
        {
          "line": 2031,
          "text": "handoff doc 必含 \"reused file-local components\" 段，列每个 module 的 instance count + 是否已抽"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~10",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2073,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 4,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2123,
          "lineDistance": 50
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 80
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 2207,
          "lineDistance": 134
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 4,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2075,
          "text": "**Phase 1**：M0 mapping table 含「可重复性」评估——列出所有预期 ≥2 次的模块 + componentization 计划。"
        },
        {
          "line": 2076,
          "text": "**Phase 2**：第 2 次出现的模块**已是 file-local component 的 instance**，非 clone；命名遵守 `MicroApp <Product> <Module>`；差异经由 property / variant 而非 copy。"
        },
        {
          "line": 2077,
          "text": "**Phase 3**：F1 走查 report 含 ≥2 次模块清单 + 每个的 componentization 状态；所有 instance 验证同源；superseded clone 已清理。"
        },
        {
          "line": 2078,
          "text": "handoff doc 的 \"reused file-local components\" 段（M36 已要求）逐项对得上走查表。"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~12",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2167,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 5,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 2207,
          "lineDistance": 40
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2123,
          "lineDistance": 44
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 174
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 5,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2168,
          "text": "全产品所有 selected 列表项视觉一致（**3 层全齐**：1-side left accent **4px** BRAND + Layer_3 bg + selection-driven chrome）"
        },
        {
          "line": 2169,
          "text": "rail 宽度 **必从 Spacing token 取**——mockup 端用 `strokeLeftWeight = 4` 对齐 `--sp-xxs`；任何 off-token 数值（3 / 5 / 6 等）视为违规"
        },
        {
          "line": 2170,
          "text": "**rail + fill 均必绑 Color Variable**（M-COLOR C1）；raw hex 视为违规"
        },
        {
          "line": 2171,
          "text": "**第 3 层 chrome 必须在 selected 时显示、unselected 时隐藏**（不允许 always-on 占位）"
        },
        {
          "line": 2172,
          "text": "annotation 层用 BLUE，product UI selected 用 BRAND，两色 scope 不混"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~13",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2185,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 2207,
          "lineDistance": 22
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2123,
          "lineDistance": 62
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 192
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2186,
          "text": "post-build 必跑扫描：`frame.findAll(n => n.type === 'TEXT' && [10,11,13,15,17,19,21].includes(n.fontSize))` 命中数应 = 0"
        },
        {
          "line": 2187,
          "text": "命中即视为违规，必须 round 到最近 grid 尺寸（10→12 / 11→12 / 13→14 / 15→14 / 17→18）"
        },
        {
          "line": 2188,
          "text": "推荐用 setTextStyleIdAsync 绑定具体 textStyle 而非赤裸 fontSize"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M39",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2288,
      "heading": "M39 — Variant text property abstraction（component build 必备）— 2026-05-26 新增",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 4,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 2207,
          "lineDistance": 81
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2123,
          "lineDistance": 165
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 295
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 4,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2289,
          "text": "建 variant 起手必估算\"此 variant 各文本字段在 deliverable 中预期不同值数\""
        },
        {
          "line": 2290,
          "text": "≥ 3 → 必抽 component property + ledger 注明（不抽则视为违规）"
        },
        {
          "line": 2291,
          "text": "≤ 2 → inline override 可，但 ledger 注明\"future-promote 候选\""
        },
        {
          "line": 2292,
          "text": "Instance 创建后**只通过 setProperties() 改文本**，不再 findOne + characters 直改"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M40",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2313,
      "heading": "M40 — `#N` list item 标号必须文档化 sequence vs name semantic — 2026-05-26 新增",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 2207,
          "lineDistance": 106
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2123,
          "lineDistance": 190
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 320
        }
      ],
      "lexicalHint": {
        "hitItems": 1,
        "totalItems": 3,
        "kinds": [
          "self-declaration"
        ],
        "note": "⚠️ 有核查项带「不可机检」词法特征 ⇒ 人工判读时优先看这条"
      },
      "items": [
        {
          "line": 2314,
          "text": "Spec mockup 含 `#N` list item 必在 Design Rules card / state-label 显式声明语义类型"
        },
        {
          "line": 2315,
          "text": "Sequence 类型在 Remove confirmation flow 后必显示 renumbered list（mockup 必画一帧 after-remove，参 M16.1）"
        },
        {
          "line": 2316,
          "text": "跨 spec 文档 / PRD / 实现代码三处文档 ID 语义必一致，不允许 spec sequence + 实现 name"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M41",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2357,
      "heading": "M41 — Destructive confirm modal: 全屏 scrim + 居中单 dialog — 2026-05-26 新增",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 4,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 2207,
          "lineDistance": 150
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2123,
          "lineDistance": 234
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 364
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 4,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2358,
          "text": "Spec mockup 含 destructive confirm flow 必有专门一帧画 modal-overlay 态（M16.1 default+override 中的 override）"
        },
        {
          "line": 2359,
          "text": "该帧 scrim 数值精确（20% black + blur 8）"
        },
        {
          "line": 2360,
          "text": "Dialog 必是 TVU `Notification` instance，非 detach 自建"
        },
        {
          "line": 2361,
          "text": "Multi-variant 区如有展示，必标 \"artifact / variants reference\"，与 user-flow frame 分隔"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~15",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2402,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 2207,
          "lineDistance": 195
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2123,
          "lineDistance": 279
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 1993,
          "lineDistance": 409
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2404,
          "text": "page name 三段式齐全"
        },
        {
          "line": 2405,
          "text": "FB-id 真实有效（gh / jira API 可查）"
        },
        {
          "line": 2406,
          "text": "与同 file 内其它 page 命名风格一致（probe `figma.root.children.map(p=>p.name)` 抽样检查）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~16",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2440,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 2207,
          "lineDistance": 233
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2684,
          "lineDistance": 244
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 2872,
          "lineDistance": 432
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2441,
          "text": "起手已判定新需求 / 迭代既有；全新需求 → 新建独立 page"
        },
        {
          "line": 2442,
          "text": "新 page 建在 `To be confirmed` 分隔符正下方（无该分类则文件最上方）"
        },
        {
          "line": 2443,
          "text": "page 命名符合 §M45（无 Jira 用 `<Title EN> YYYYMMDD`）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~17",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2474,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2684,
          "lineDistance": 210
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 2207,
          "lineDistance": 267
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 2872,
          "lineDistance": 398
        }
      ],
      "lexicalHint": {
        "hitItems": 1,
        "totalItems": 3,
        "kinds": [
          "self-declaration"
        ],
        "note": "⚠️ 有核查项带「不可机检」词法特征 ⇒ 人工判读时优先看这条"
      },
      "items": [
        {
          "line": 2476,
          "text": "mockup 所有 user-facing label 过一遍 checklist 3 问"
        },
        {
          "line": 2477,
          "text": "PRD 在\"关键元素 Key Elements\"段为每个新 label 显式声明 EN/ZH 业务名 + 数据来源后端字段（M22 acknowledgment 内联）"
        },
        {
          "line": 2478,
          "text": "后端服务名 / 内部代号 / 数据库字段名仅出现在 dev-only annotation（M33 注释 vs 产品 UI 语言隔离）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~18",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2555,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 6,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2684,
          "lineDistance": 129
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 2872,
          "lineDistance": 317
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 2207,
          "lineDistance": 348
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 6,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2557,
          "text": "mockup 含「正常 / 截断 / hover tooltip」3 状态（或在 M23 多状态流程图中显式标注）"
        },
        {
          "line": 2558,
          "text": "sample data 含 ≥ 1 条超长记录证明截断态可见"
        },
        {
          "line": 2559,
          "text": "行高 / maxLines 决策有文档化依据（默认表 OR 显式 override + 理由）"
        },
        {
          "line": 2560,
          "text": "tooltip 用 library `tooltip/default`，未自画"
        },
        {
          "line": 2561,
          "text": "dev 实现含 `scrollWidth > clientWidth` truncation detection（避免无谓 tooltip）"
        },
        {
          "line": 2562,
          "text": "a11y：`aria-describedby` + `title` fallback 双保险"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M43.2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2608,
      "heading": "M43.2 Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 4,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2684,
          "lineDistance": 76
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 2872,
          "lineDistance": 264
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 2207,
          "lineDistance": 401
        }
      ],
      "lexicalHint": {
        "hitItems": 2,
        "totalItems": 4,
        "kinds": [
          "self-declaration",
          "eyeball-render"
        ],
        "note": "⚠️ 有核查项带「不可机检」词法特征 ⇒ 人工判读时优先看这条"
      },
      "items": [
        {
          "line": 2610,
          "text": "handoff 截图含每列 zoom-in（或显式声明哪些列做了 audit + audit 结果）"
        },
        {
          "line": 2611,
          "text": "Multi-element cell（action group / status badge / icon group）单独 zoom 验证"
        },
        {
          "line": 2612,
          "text": "Header 行单独截图确认无 label 换行"
        },
        {
          "line": 2613,
          "text": "列宽变更后立即跑 audit，不放到最后批量"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~19",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2709,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2684,
          "lineDistance": 25
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 2872,
          "lineDistance": 163
        },
        {
          "gate": "scripts/audit-mockup-handoff-evidence.mjs",
          "nearestCoveredLine": 3111,
          "lineDistance": 402
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2711,
          "text": "post-clone 必跑 direct children enumeration（含 decoration），结果入 handoff"
        },
        {
          "line": 2712,
          "text": "任何加 overlay 操作必有\"已 grep 源, 既有同语义元素 N 个\"的 trace"
        },
        {
          "line": 2713,
          "text": "任何 AUTO → ABSOLUTE 转换必有\"原 derived x=?, y=? → 手动 set x=parent.paddingLeft, y=...\" 的 trace"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M42.3@blind:2730",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2730,
      "heading": "M42.3 — Clone Placement Discipline: 就地改优先，禁旁路克隆搭样板（M42 extension）— 2026-06-17 新增",
      "form": "list-bold",
      "blindSpot": true,
      "itemCount": 1,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "ACC_RE-blind"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2684,
          "lineDistance": 46
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 2872,
          "lineDistance": 142
        },
        {
          "gate": "scripts/audit-mockup-handoff-evidence.mjs",
          "nearestCoveredLine": 3111,
          "lineDistance": 381
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 1,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2731,
          "text": "**与 M42 / M42.2 区别**：M42/M42.2 管\"clone 时不传播 bug / 结构\"；本条管\"**该不该 clone**\"——优先不 clone，就地改。"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~20",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2772,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2684,
          "lineDistance": 88
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 2872,
          "lineDistance": 100
        },
        {
          "gate": "scripts/audit-mockup-handoff-evidence.mjs",
          "nearestCoveredLine": 3111,
          "lineDistance": 339
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2774,
          "text": "改 mockup 前 probe 输出 instance 可改性（componentProperties / text override / cell count grouping）"
        },
        {
          "line": 2775,
          "text": "detach 限制在 minimum necessary scope（不 detach 整行整表）"
        },
        {
          "line": 2776,
          "text": "自画 overlay 仅作 transient debugging，handoff 前必须删干净（见 design-process.md §Delivery Cleanup Gate）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~22",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2888,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 2872,
          "lineDistance": 16
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2684,
          "lineDistance": 204
        },
        {
          "gate": "scripts/audit-mockup-handoff-evidence.mjs",
          "nearestCoveredLine": 3111,
          "lineDistance": 223
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2890,
          "text": "任何 fontName 改动前 probe 原 `textStyleId`"
        },
        {
          "line": 2891,
          "text": "fontName 改完后重新绑回 textStyleId（若 originalStyleId 非空）"
        },
        {
          "line": 2892,
          "text": "改完截图 zoom-in 验证 cell 视觉与同列其他 cell 一致（无变灰 / 变小 / 变歪）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-DISCIPLINE.SOURCE",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2953,
      "heading": "M-DISCIPLINE.SOURCE — 一条新规则该进本真源、还是留在项目 repo — 2026-08-05 新增",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 2872,
          "lineDistance": 81
        },
        {
          "gate": "scripts/audit-mockup-handoff-evidence.mjs",
          "nearestCoveredLine": 3111,
          "lineDistance": 158
        },
        {
          "gate": "scripts/audit-mockup-binding-fidelity.mjs",
          "nearestCoveredLine": 3153,
          "lineDistance": 200
        }
      ],
      "lexicalHint": {
        "hitItems": 1,
        "totalItems": 3,
        "kinds": [
          "author-answerable"
        ],
        "note": "⚠️ 有核查项带「不可机检」词法特征 ⇒ 人工判读时优先看这条"
      },
      "items": [
        {
          "line": 2955,
          "text": "写任何新规则前，先说出它过了三问的哪一档，并在 commit message 或 handoff 里留一句落点理由"
        },
        {
          "line": 2956,
          "text": "真源条文里出现具体 node id / file key / 像素取值表 / 人名时，必须能说明它为什么跨产品通用；否则改为指向项目 repo 的指针"
        },
        {
          "line": 2957,
          "text": "拆两半时两边各留指针（真源 → 项目 repo 路径；项目 repo → 真源 §锚点）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-DISCIPLINE.SCOPE",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2989,
      "heading": "M-DISCIPLINE.SCOPE — scope 由「对象全集」推导，不由「我做了什么」推导 — 2026-07-30 新增",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 7,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 2872,
          "lineDistance": 117
        },
        {
          "gate": "scripts/audit-mockup-handoff-evidence.mjs",
          "nearestCoveredLine": 3111,
          "lineDistance": 122
        },
        {
          "gate": "scripts/audit-mockup-binding-fidelity.mjs",
          "nearestCoveredLine": 3153,
          "lineDistance": 164
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 7,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2991,
          "text": "任何清单 / 审计报告的标题或首行含一句显式 scope 声明（覆盖哪些对象 + 是否含 instance 子树）"
        },
        {
          "line": 2992,
          "text": "走查 scope = 本轮触碰过的**所有**节点，不由用户指摘句框定"
        },
        {
          "line": 2993,
          "text": "债务 / 待办清单 scope = 该 surface 的**对象全集**，不是本轮触碰集"
        },
        {
          "line": 2994,
          "text": "审计脚本的枚举维度是\"全部非目标值\"，不是\"预期的那一个值\"（能答\"我扫的是白名单外全部，还是只扫了 X\"）"
        },
        {
          "line": 2995,
          "text": "扫查脚本的每个过滤条件都能答\"它排除了什么、为什么目标不在被排除的那部分\"，且已用一个已知必然命中的目标当探针验证过（硬约束 5）"
        },
        {
          "line": 2996,
          "text": "口径 / 取值类改动：对象全集含**产品帧本体**（cell 值 / 列头 / 图层名），不止交付层；改完按同一清单机器复验「不合新口径的残留 = 0」（硬约束 7）"
        },
        {
          "line": 2997,
          "text": "截图 / 标注类证据：每条写进交付物的判定都能点名\"依据是哪个 node 的原始分辨率图\"，未逐图看完前没有向 owner 声明过\"某处标注缺失\"（硬约束 8）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-DISCIPLINE.SYNC@blind:3079",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3079,
      "heading": "M-DISCIPLINE.SYNC — 编辑 confirmed → 自动自检 + 交付物同步（状态转移触发，2026-06-18 新增，修 W3/W5）",
      "form": "indented-bold",
      "blindSpot": true,
      "itemCount": 0,
      "lineExists": true,
      "fixClass": "F4",
      "criterion": "结构判据：段内 0 条核查项",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor",
        "ACC_RE-blind"
      ],
      "machineCheckability": "n/a（先补核查项）",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-handoff-evidence.mjs",
          "nearestCoveredLine": 3111,
          "lineDistance": 32
        },
        {
          "gate": "scripts/audit-mockup-binding-fidelity.mjs",
          "nearestCoveredLine": 3153,
          "lineDistance": 74
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 2872,
          "lineDistance": 207
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-DISCIPLINE.SYNC@blind:3107",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3107,
      "heading": "M-DISCIPLINE.SYNC — 编辑 confirmed → 自动自检 + 交付物同步（状态转移触发，2026-06-18 新增，修 W3/W5）",
      "form": "indented-bold",
      "blindSpot": true,
      "itemCount": 0,
      "lineExists": true,
      "fixClass": "F4",
      "criterion": "结构判据：段内 0 条核查项",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor",
        "ACC_RE-blind"
      ],
      "machineCheckability": "n/a（先补核查项）",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-handoff-evidence.mjs",
          "nearestCoveredLine": 3111,
          "lineDistance": 4
        },
        {
          "gate": "scripts/audit-mockup-binding-fidelity.mjs",
          "nearestCoveredLine": 3153,
          "lineDistance": 46
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 2872,
          "lineDistance": 235
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "id": "docs/internal/mockup-conventions.md#Acceptance~23",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3113,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-handoff-evidence.mjs",
          "nearestCoveredLine": 3111,
          "lineDistance": 2
        },
        {
          "gate": "scripts/audit-mockup-binding-fidelity.mjs",
          "nearestCoveredLine": 3153,
          "lineDistance": 40
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 2872,
          "lineDistance": 241
        }
      ],
      "lexicalHint": {
        "hitItems": 2,
        "totalItems": 3,
        "kinds": [
          "self-declaration"
        ],
        "note": "⚠️ 有核查项带「不可机检」词法特征 ⇒ 人工判读时优先看这条"
      },
      "items": [
        {
          "line": 3115,
          "text": "起手协议执行后、画第一个产品 frame 前，conversation 内可见一次 `TodoWrite` 调用，list 含本次任务适用规则编号"
        },
        {
          "line": 3116,
          "text": "handoff doc 顶部必含一行 **\"Rule checklist: \\[M0 ✅ / M23 ✅ / M23.8 ✅ / M45 ✅ / ...\\]\"**，所有适用规则状态显式"
        },
        {
          "line": 3117,
          "text": "任何 \"ready for walkthrough\" 声明前，todo list 内 pending/in_progress 数 = 0"
        }
      ]
    },
    {
      "id": "docs/internal/domain-tvu.md#M10",
      "file": "docs/internal/domain-tvu.md",
      "line": 129,
      "heading": "M10 — List row Inactive 状态至少分两子型（Idle vs NeverStarted）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-geometry-consistency.mjs",
          "nearestCoveredLine": 211,
          "lineDistance": 82
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 130,
          "text": "Component 设计：variant property `state` 至少包含 `{Active, Inactive-Idle, Inactive-NeverStarted}` 三值"
        },
        {
          "line": 131,
          "text": "Mockup 设计：list 内同时出现两子型 row 时，副标题措辞必须区分（\"Last ran X\" vs \"Never started\"），不混用"
        },
        {
          "line": 132,
          "text": "Bootstrap session 必为 NeverStarted 子型，对应 CTA 必为 literal verb（如 `Set Stream A and Stream B`）"
        }
      ]
    },
    {
      "id": "docs/internal/domain-tvu.md#M11",
      "file": "docs/internal/domain-tvu.md",
      "line": 154,
      "heading": "M11 — Trend visualization: icon + 数值颜色双层信号",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-geometry-consistency.mjs",
          "nearestCoveredLine": 211,
          "lineDistance": 57
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 155,
          "text": "Trend rule 文档必含三层信号映射表（icon + 数值色 + token）"
        },
        {
          "line": 156,
          "text": "Mockup 中相同 trend 状态视觉一致（不同帧不允许颜色不一）"
        },
        {
          "line": 157,
          "text": "颜色必绑 TVU Variable，不写 raw hex（与 M-COLOR C1 / 原则 4 一致）"
        }
      ]
    },
    {
      "id": "docs/internal/domain-tvu.md#M12",
      "file": "docs/internal/domain-tvu.md",
      "line": 179,
      "heading": "M12 — 外部/异步事件不得静默 no-op：检测 → 告知 → 给前进路径",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-geometry-consistency.mjs",
          "nearestCoveredLine": 211,
          "lineDistance": 32
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 180,
          "text": "每个“进行中”模式，枚举其可能遭遇的外部/异步事件（参 design-process 枚举第 6 项），逐一确认有 检测→告知→前进路径，**或 owner 显式豁免 + rationale**，无静默 no-op"
        },
        {
          "line": 181,
          "text": "反馈按谱系取对应库 variant（设备 `Message` / web `Notification`），需操作则用带按钮组件，不自画"
        },
        {
          "line": 182,
          "text": "广播域安全默认成立：不擅自自动切换信源 / 推流"
        }
      ]
    },
    {
      "id": "docs/internal/domain-tvu.md#M13",
      "file": "docs/internal/domain-tvu.md",
      "line": 194,
      "heading": "M13 — 突发中断后必须有恢复态（reboot / 会话恢复）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-geometry-consistency.mjs",
          "nearestCoveredLine": 211,
          "lineDistance": 17
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 195,
          "text": "每个“可被突发中断打断的进行中任务”（推流 / 录制 / 传输）定义 中断 → 恢复 的状态还原 + 完整性告知"
        },
        {
          "line": 196,
          "text": "恢复态告知用对应谱系反馈组件（设备 `Message` / web `Notification`）"
        },
        {
          "line": 197,
          "text": "不允许中断后静默回初始态；确无需恢复态者须写 rationale"
        }
      ]
    },
    {
      "id": "docs/internal/domain-tvu.md#M17.1",
      "file": "docs/internal/domain-tvu.md",
      "line": 253,
      "heading": "M17.1 — 枚举值选择一律用 LCD 选项列表 canonical 范式",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 5,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-geometry-consistency.mjs",
          "nearestCoveredLine": 211,
          "lineDistance": 42
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 5,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 254,
          "text": "新 LCD 设置页开建前，handoff / design-record 里写明「范式来源 = 该 surface 的 canonical 范式帧」（帧 id 见项目 repo 登记：`TVU Pack/docs/specs/lcd-canonical-spec.md` §3）+ 本轮实测取值"
        },
        {
          "line": 255,
          "text": "行高 / 控件列右对齐 / 下向三角展开标记 / 底栏 `OK`+`Home` 四项逐条可核（行高等取值以项目 spec §1 登记值为准，**贴实测数字**，目测不算通过）"
        },
        {
          "line": 256,
          "text": "底栏没有 `Back` 按钮；左上角有返回箭头"
        },
        {
          "line": 257,
          "text": "底栏每个按钮 `getMainComponentAsync().remote === false`（本文件 `LCD Button`），无远端库按钮混入；禁用态查到的是 `Status=Disabled` 而非 opacity"
        },
        {
          "line": 258,
          "text": "不可改态下 `OK` 与参数控件同步置灰"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#参考物落地（Reference",
      "file": "docs/internal/design-process.md",
      "line": 181,
      "heading": "参考物落地（Reference material on canvas）— 2026-07-29 owner 回流",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 5,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 331,
          "lineDistance": 150
        },
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 476,
          "lineDistance": 295
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1379,
          "lineDistance": 1198
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 5,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 182,
          "text": "有参考物的任务，画布上能看到 `REFERENCE` Section，且在交付 Section 左侧"
        },
        {
          "line": 183,
          "text": "参考物旁有 caption 写明来源（文件 key + node id）与「非交付物」定性"
        },
        {
          "line": 184,
          "text": "**caption 里的源标识是可点击链接** —— `getStyledTextSegments(['hyperlink'])` 实测该 range 非 null（机器输出，不靠目测），锚文本为短标识而非长句"
        },
        {
          "line": 185,
          "text": "有逐项去向对照表，参考物的每一项都能在表里查到去向"
        },
        {
          "line": 186,
          "text": "handoff 含 §M37 的 5 行 reference probe 表（数值实测，非目测）"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#Acceptance~5",
      "file": "docs/internal/design-process.md",
      "line": 614,
      "heading": "Acceptance（Pre-Phase 0 自检）",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 4,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 560,
          "lineDistance": 54
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 331,
          "lineDistance": 283
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1379,
          "lineDistance": 765
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 4,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 616,
          "text": "已用 Jira API / MCP 读了 task ticket 完整评论 (`fields: [\"comment\"]` 全量)"
        },
        {
          "line": 617,
          "text": "已枚举 `issuelinks` + 沿 outwardIssue / inwardIssue 读完所有 linked ticket 评论"
        },
        {
          "line": 618,
          "text": "评论链发现的新 context 显式登记进 PRD 草稿（Step B），含 stakeholder 决策 / open question / 跨 ticket 关联约束"
        },
        {
          "line": 619,
          "text": "评论链与 ticket description 冲突时**显式标记冲突**给用户拍板，不擅自选一边"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#Step",
      "file": "docs/internal/design-process.md",
      "line": 669,
      "heading": "Step B — PRD 起草 + 写入目标 Figma",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 5,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 560,
          "lineDistance": 109
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 331,
          "lineDistance": 338
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1379,
          "lineDistance": 710
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 5,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 670,
          "text": "写入前有一次只读勘察（搜过同类件 + 看过版本排布 + 参照过现有样式）"
        },
        {
          "line": 671,
          "text": "已有同类 PRD / Spec → 更新它而非新建第二份"
        },
        {
          "line": 672,
          "text": "**三层粒度都过**：无平级第二份制品 · 同一 feature 无平级第二张 UX / Journey 卡 · PRD 与卡内无字母后缀段（`§4b` 这类），衍生轮内容已并进既有段并连续重编号"
        },
        {
          "line": 673,
          "text": "**并段后跑过 §2a ③ 轮互斥对照** —— 被本轮推翻的旧 scope 声明句已删或已划线标注"
        },
        {
          "line": 674,
          "text": "dispatch subagent 写 Figma 时，prompt 显式含「先勘察现有同类件、定更新 vs 新建 + 相对定位 + 主题对齐」，不只说「新建」"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#Canonical",
      "file": "docs/internal/design-process.md",
      "line": 714,
      "heading": "Canonical Terms Discipline（2026-06-02 新增）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 560,
          "lineDistance": 154
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 331,
          "lineDistance": 383
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1379,
          "lineDistance": 665
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 715,
          "text": "设计阶段（Phase 0，非 PRD frame），Canonical Terms 表 ≥ 3 行（核心概念至少 3 个）"
        },
        {
          "line": 716,
          "text": "所有 mockup 文本（radio option / hint / state label / spec card）grep 一遍，无表外同义词"
        },
        {
          "line": 717,
          "text": "handoff doc 复用同一张表，dev 看 mockup 与 doc 术语 1:1"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#⚠️",
      "file": "docs/internal/design-process.md",
      "line": 833,
      "heading": "⚠️ State-Completeness Enumeration（F2-late + 体验地图 必做前置，2026-06-04 新增；2026-06-15 起亦为 M48 起手清单强制一行）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 560,
          "lineDistance": 273
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 331,
          "lineDistance": 502
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1379,
          "lineDistance": 546
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 834,
          "text": "枚举清单逐项标 ✅有图 / 🟡注释说明 / 🔴缺失；🔴 项必须在 report 顶部列为 priority gap"
        },
        {
          "line": 835,
          "text": "体验地图的 Pain Points lens 必含\"哪些状态当前 mockup 未表达\""
        },
        {
          "line": 836,
          "text": "不允许只交\"happy-path 旅程描述\"当 journey map 通过"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#Acceptance~6",
      "file": "docs/internal/design-process.md",
      "line": 887,
      "heading": "Acceptance（F2-late 验收）",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 4,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 560,
          "lineDistance": 327
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1379,
          "lineDistance": 492
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 331,
          "lineDistance": 556
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 4,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 889,
          "text": "至少 2 personas × 5 stages × 5 lenses 全覆盖"
        },
        {
          "line": 890,
          "text": "每 Stage 至少 1 个 ✅ 本期命中点"
        },
        {
          "line": 891,
          "text": "至少 1 个 🟡 下一期候选（避免 happy-path bias）"
        },
        {
          "line": 892,
          "text": "长文本 / 异常态 / 跨页面跳转场景至少出现在 Pain Points 或 Touchpoints 一次"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#M16.1",
      "file": "docs/internal/design-process.md",
      "line": 1136,
      "heading": "M16.1 — Multi-state spec mockup：默认态 + 越权态双 frame 覆盖",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1379,
          "lineDistance": 243
        },
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 560,
          "lineDistance": 576
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 331,
          "lineDistance": 805
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1137,
          "text": "任何含 state-machine / interactive list 的 deliverable 至少包含 1 default + 1 override frame"
        },
        {
          "line": 1138,
          "text": "frame 名命名必含 state 字段（如 `M5 · default accordion`、`M-MultiExp · user manual expand`、`M8 · user all-collapse`），不允许只标 frame 编号"
        },
        {
          "line": 1139,
          "text": "State-label 必显式说明该 frame 是 default 还是 override（与 M22 design intent 衔接）"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#M21.1",
      "file": "docs/internal/design-process.md",
      "line": 1208,
      "heading": "M21.1 — 建新 component 优先 clone existing functional row + mutate variant",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1379,
          "lineDistance": 171
        },
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 560,
          "lineDistance": 648
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 331,
          "lineDistance": 877
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1209,
          "text": "建 component 起手必声明：\"derive from `<source_element_id>`\" 或 \"from-scratch with rationale\""
        },
        {
          "line": 1210,
          "text": "Clone 路径必绑 M42 Clone Gate（probe brand-color paint bindings）—— 不能盲 clone 把源 bug 放大到 N variants"
        },
        {
          "line": 1211,
          "text": "From-scratch 路径必含视觉契约 probe table（M21 §\"起手 mandatory probe — Sibling Visual Contract\" 5 row）"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#M21.2",
      "file": "docs/internal/design-process.md",
      "line": 1264,
      "heading": "M21.2 — Feature Iteration Color Contract（功能迭代色值合同）",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1379,
          "lineDistance": 115
        },
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 560,
          "lineDistance": 704
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 331,
          "lineDistance": 933
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1266,
          "text": "代码第一块是带来源注释的 Color Contract"
        },
        {
          "line": 1267,
          "text": "Color Contract 中每个色值都标注了来源 node ID + hex 值（供 reviewer 验证）"
        },
        {
          "line": 1268,
          "text": "未见 TVU DS token hex 值（`#2FB54E` / `#30B54E` / `#EA4233` 等）出现在 US-3 产品 mockup 颜色常量中，除非 sibling probe 确认两者相同"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#Acceptance~7",
      "file": "docs/internal/design-process.md",
      "line": 1282,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 2,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1379,
          "lineDistance": 97
        },
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 560,
          "lineDistance": 722
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 331,
          "lineDistance": 951
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 2,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1284,
          "text": "Phase 0 mapping table 上方加 \"**PRD examples scoped**\" 段，逐条列出 PRD 中所有 e.g. 集合 + 与用户对齐后的 in-scope 子集"
        },
        {
          "line": 1285,
          "text": "命中 \"例如\" 字眼直接 ask user 不 assume"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#Acceptance~8",
      "file": "docs/internal/design-process.md",
      "line": 1309,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 2,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1379,
          "lineDistance": 70
        },
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 560,
          "lineDistance": 749
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 331,
          "lineDistance": 978
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 2,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1311,
          "text": "Phase 0 mapping doc 必含 \"Cardinality self-check\" 段，5 问 5 答"
        },
        {
          "line": 1312,
          "text": "命中\"问不清\"立即向用户 ask，**不 assume**"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#Acceptance~9",
      "file": "docs/internal/design-process.md",
      "line": 1346,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 2,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1379,
          "lineDistance": 33
        },
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 560,
          "lineDistance": 786
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 331,
          "lineDistance": 1015
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 2,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1348,
          "text": "Phase 0 mapping doc 顶部必含 \"IA 树\" + \"Selection model\" 两段"
        },
        {
          "line": 1349,
          "text": "与用户 alignment 后才创建 first frame"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#Acceptance~11",
      "file": "docs/internal/design-process.md",
      "line": 1431,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1379,
          "lineDistance": 52
        },
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 560,
          "lineDistance": 871
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 331,
          "lineDistance": 1100
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1433,
          "text": "Mockup handoff 时所有 sibling area visible 状态与 clone source 一致（无意外隐藏）"
        },
        {
          "line": 1434,
          "text": "Scope-narrow 声明只导致**改动范围收窄**，不导致 mockup **可见范围收窄**"
        },
        {
          "line": 1435,
          "text": "若确实需要隐藏 sibling（如 sibling 已废弃 / 极少出现），必须显式 user confirm"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#Acceptance~12",
      "file": "docs/internal/design-process.md",
      "line": 1481,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 5,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1379,
          "lineDistance": 102
        },
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 560,
          "lineDistance": 921
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 331,
          "lineDistance": 1150
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 5,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1483,
          "text": "收尾前过 cleanup checklist（每项显式确认 keep / delete）"
        },
        {
          "line": 1484,
          "text": "最终 mockup 仅含主交付物 + 必要 annotation 卡 + 必要 state preview"
        },
        {
          "line": 1485,
          "text": "无重复讲同一规则的多 artifact"
        },
        {
          "line": 1486,
          "text": "无被 supersede 的临时 spec / overlay / code 卡"
        },
        {
          "line": 1487,
          "text": "交付物（含 Figma frame 内文字）扫过 open-questions wording 黑名单（`TBD` / `待 confirm` / `待 PM 拍板` / `TODO` / 单字 `?` / \"Open questions\" / \"可能要 X\" / \"需进一步讨论\"），无残留未决项（§ No Open Questions / 触发器 P）"
        }
      ]
    }
  ],
  "controls": [
    {
      "id": "must-hit-0/itemcount-matches-dump",
      "pass": true,
      "detail": "逐条对不齐的段 = 0"
    },
    {
      "id": "must-hit-1/ids-frozen-67",
      "pass": true,
      "detail": "本器 67 条 · dump 67 条 · id 集合逐字相等 = true"
    },
    {
      "id": "must-hit-2/zero-item-sections-really-empty",
      "pass": true,
      "detail": "零核查项段 = 10（预期 10），其中行号不存在的 = 0"
    },
    {
      "id": "must-hit-3/gold-test-was-run-and-recorded",
      "pass": true,
      "detail": "裁定 = FAILED（召回 2/32 = 0.063，下界 0.75；误报 0/27）"
    },
    {
      "id": "must-not-hit-0/no-lexical-derived-class",
      "pass": true,
      "detail": "fixClass 非结构判据产出的行 = 0"
    },
    {
      "id": "must-hit-4/machine-checkability-left-to-human",
      "pass": true,
      "detail": "被本器擅自判了可机检性的行 = 0"
    },
    {
      "id": "must-hit-5/every-row-exactly-one-class",
      "pass": true,
      "detail": "三类求和 = 67 · 去重 id = 67（都应为 67）"
    },
    {
      "id": "must-hit-6/blind-count-8-and-anchor-cross-checked",
      "pass": true,
      "detail": "ACC_RE-blind = 8（预期 8）· 锚点不稳 = 33 · 带 ~N 的 27 行全被覆盖 = true"
    },
    {
      "id": "must-hit-7/f1-rows-carry-candidate-gates",
      "pass": true,
      "detail": "F1 行 = 57，其中给不出候选闸的 = 0"
    },
    {
      "id": "must-not-hit-1/blockers-never-decide-class",
      "pass": true,
      "detail": "清空 blockers 后 fixClass 逐条不变 = true（差异 0 条）"
    },
    {
      "id": "must-not-hit-2/no-class-is-everything",
      "pass": true,
      "detail": "F1/F2/F4 = 57 / 0 / 10（至少两类非空、无一类吃满 67）"
    }
  ]
}