{
  "auditId": "unclassified-fix-triage",
  "subjectSha": "d10e151b",
  "pin": "/Users/nancy/.ai-ds-lab/pins/tvu-ds-d10e151b",
  "pinId": "d10e151b",
  "pre": null,
  "dirty": false,
  "checkedAt": "2026-09-15T03:41:14.190Z",
  "dumpSource": "subjects/tvu-ds/inventory/acceptance-coverage-d10e151b.json",
  "gold": {
    "preRegistered": {
      "recallN": 3,
      "recallD": 52,
      "recall": 0.057692307692307696,
      "fpN": 0,
      "fpD": 47,
      "fp": 0,
      "thresholds": {
        "MIN_RECALL": 0.75,
        "MAX_FALSE_POSITIVE": 0.26,
        "MIN_SEPARATION": 0.5
      }
    },
    "postHoc": {
      "note": "🔴 事后切分，⛔ 不作为通过判据 —— 剔除了整份文件级豁免的段（其豁免理由是【射程】不是【不可机检】）",
      "recallN": 3,
      "recallD": 34,
      "recall": 0.08823529411764706,
      "fpN": 0,
      "fpD": 47,
      "fp": 0
    },
    "contamination": {
      "fileLevelExempt": 18,
      "sectionLevelExempt": 34,
      "files": [
        "docs/internal/figma-technical-reference.md"
      ]
    },
    "outcome": {
      "verdict": "FAILED",
      "consequence": "🔴 FAILED ⇒ 本器**已降级**：fixClass 只由结构判据产出，⛔ 不再产出 F3（建议走豁免）。「这条其实该走豁免吗」留给人工逐条判 —— 见每行的 machineCheckability / lexicalHint。",
      "diagnosis": "可机检性取决于【被测物存放在哪个面】（repo 文件 vs Figma 画布 / Slack 消息 / 一次对话 / 一张渲染图），⛔ 与措辞无关 ⇒ 词法判据结构上就够不着。"
    }
  },
  "counts": {
    "F1": 36,
    "F2": 0,
    "F4": 7
  },
  "blockerCounts": {
    "none": 27,
    "anchor": 8,
    "blind": 3,
    "both": 5
  },
  "orthogonality": {
    "identical": true,
    "diff": 0
  },
  "criterionCollision": {
    "a": {
      "name": "slug 碰撞（本器现行判据：id 会带 ~N 序号 ⇒ 锚点会漂）",
      "n": 13
    },
    "b": {
      "name": "标题不是具名规则（计划书预注册用的定义）",
      "n": 21
    },
    "sameCount": false,
    "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:1038",
      "docs/internal/mockup-conventions.md#M-INTEGRITY@blind:1475",
      "docs/internal/mockup-conventions.md#M-INTEGRITY@blind:1484",
      "docs/internal/mockup-conventions.md#M23.6",
      "docs/internal/mockup-conventions.md#M-DISCIPLINE.SYNC@blind:3751",
      "docs/internal/mockup-conventions.md#M-DISCIPLINE.SYNC@blind:3779"
    ],
    "onlyB": [
      "docs/internal/mockup-conventions.md#验收标准@blind:784",
      "docs/internal/mockup-conventions.md#M23.9",
      "docs/internal/mockup-conventions.md#(B)",
      "docs/internal/mockup-conventions.md#允许内容@blind:1924",
      "docs/internal/mockup-conventions.md#M23.11",
      "docs/internal/mockup-conventions.md#M31",
      "docs/internal/mockup-conventions.md#M32.3",
      "docs/internal/mockup-conventions.md#M33",
      "docs/internal/mockup-conventions.md#M38",
      "docs/internal/mockup-conventions.md#M-FONT",
      "docs/internal/mockup-conventions.md#M44",
      "docs/internal/mockup-conventions.md#M43",
      "docs/internal/mockup-conventions.md#M42.2",
      "docs/internal/design-process.md#参考物落地（Reference",
      "docs/internal/design-process.md#⚠️",
      "docs/internal/design-process.md#User",
      "docs/internal/design-process.md#Scope"
    ]
  },
  "rows": [
    {
      "id": "docs/internal/mockup-conventions.md#C6",
      "file": "docs/internal/mockup-conventions.md",
      "line": 500,
      "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": 482,
          "lineDistance": 18
        },
        {
          "gate": "scripts/audit-mockup-connector.mjs",
          "nearestCoveredLine": 463,
          "lineDistance": 37
        },
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 566,
          "lineDistance": 66
        }
      ],
      "lexicalHint": {
        "hitItems": 1,
        "totalItems": 3,
        "kinds": [
          "ask-user"
        ],
        "note": "⚠️ 有核查项带「不可机检」词法特征 ⇒ 人工判读时优先看这条"
      },
      "items": [
        {
          "line": 501,
          "text": "新建颜色/文字节点前，已跑 `get_libraries` 确认该文件实际订阅的全部库"
        },
        {
          "line": 502,
          "text": "绑定 API 与库发布形态匹配（Variable 库用 `setBoundVariableForPaint`，Style-only 库用 `setFillStyleIdAsync`/`setTextStyleIdAsync`）"
        },
        {
          "line": 503,
          "text": "查不到对应项时已显式反馈用户，未自行估算 hex 顶替"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#验收标准@blind:784",
      "file": "docs/internal/mockup-conventions.md",
      "line": 784,
      "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": 938,
          "lineDistance": 154
        },
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 566,
          "lineDistance": 218
        },
        {
          "gate": "scripts/audit-mockup-binding-fidelity.mjs",
          "nearestCoveredLine": 519,
          "lineDistance": 265
        }
      ],
      "lexicalHint": {
        "hitItems": 2,
        "totalItems": 8,
        "kinds": [
          "subjective-judgement"
        ],
        "note": "⚠️ 有核查项带「不可机检」词法特征 ⇒ 人工判读时优先看这条"
      },
      "items": [
        {
          "line": 786,
          "text": "深色 canvas 上：所有注释文字可读，颜色无依赖画布背景"
        },
        {
          "line": 787,
          "text": "浅色 canvas 上：navy chip 作为 overlay 突出可识别（无需截图验证，配色规则保证）"
        },
        {
          "line": 788,
          "text": "Figma canvas 上无多余 \"Frame\" 标签（条件标签是 GROUP）"
        },
        {
          "line": 789,
          "text": "Arrow ID 和坐标已存入 sharedPluginData（可通过 `getSharedPluginData` 验证）"
        },
        {
          "line": 790,
          "text": "Header chip 和规则卡有语义化名称（非默认 \"Frame\"）"
        },
        {
          "line": 791,
          "text": "所有注释文案同时提供中英文，排版符合内联式（A-右 / A-下 / A-逐行）/ 分节式（B）分类规范"
        },
        {
          "line": 792,
          "text": "多行 body 走 A-逐行 时：每行 EN 后紧跟对应 ZH 同视框（无 ZH 整块甩末尾的反模式）"
        },
        {
          "line": 793,
          "text": "所有 Noto Sans SC 字符区间的 fill opacity ≈ 0.45（probe 脚本可验证，无需截图）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.12",
      "file": "docs/internal/mockup-conventions.md",
      "line": 878,
      "heading": "M23.12 — UX/PRD 卡 Placement & Sizing（紧邻其描述的 mockup + 竖向 Auto Layout hug + 标准宽）— 2026-06-01/06-05 合并（原 M23.12 placement + M23.13 sizing）",
      "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": 938,
          "lineDistance": 60
        },
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 1058,
          "lineDistance": 180
        },
        {
          "gate": "scripts/audit-mockup-default-white-bg.mjs",
          "nearestCoveredLine": 1099,
          "lineDistance": 221
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 879,
          "text": "卡距对应 mockup 最近边 ≤ 200px、一屏内同见（PRD 卡置顶跨列 / 紧邻 Jira widget）"
        },
        {
          "line": 880,
          "text": "卡**不得**手设固定高度（必 `primaryAxisSizingMode='AUTO'`）；同一交付集合内卡宽一致"
        },
        {
          "line": 881,
          "text": "改卡内文案后无需手动 resize 卡高"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.12~2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 890,
      "heading": "M23.12 — UX/PRD 卡 Placement & Sizing（紧邻其描述的 mockup + 竖向 Auto Layout hug + 标准宽）— 2026-06-01/06-05 合并（原 M23.12 placement + M23.13 sizing）",
      "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": 938,
          "lineDistance": 48
        },
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 1058,
          "lineDistance": 168
        },
        {
          "gate": "scripts/audit-mockup-default-white-bg.mjs",
          "nearestCoveredLine": 1099,
          "lineDistance": 209
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 2,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 891,
          "text": "一个 feature 的 PRD + **AFTER** mockup + UX Delivery + User Journey **同属一个具名 feature Section**；**BEFORE 置于 Section 外**作对照"
        },
        {
          "line": 892,
          "text": "PRD 卡宽 == UX Delivery 卡宽 == User Journey 卡宽（**同一数值 = PRD 宽度**）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.14~2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 962,
      "heading": "M23.14 — 卡内排版：双语堆叠行距 + 段名层级（M23 §双语 extension）— 2026-06-18/06-23 合并（原 M23.14 双语行距 + M23.15 段名层级）",
      "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": 938,
          "lineDistance": 24
        },
        {
          "gate": "scripts/audit-mockup-colors.mjs",
          "nearestCoveredLine": 1058,
          "lineDistance": 96
        },
        {
          "gate": "scripts/audit-mockup-default-white-bg.mjs",
          "nearestCoveredLine": 1099,
          "lineDistance": 137
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 963,
          "text": "卡内模块段名 = cyan `#33A4FD` + Roboto Medium + 字号 > 正文（probe `getStyledTextSegments` 验 fill / size）"
        },
        {
          "line": 964,
          "text": "ZH 段名同 cyan + opacity 0.45 + 小 2px"
        },
        {
          "line": 965,
          "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": 1023,
      "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": 1058,
          "lineDistance": 35
        },
        {
          "gate": "scripts/audit-mockup-default-white-bg.mjs",
          "nearestCoveredLine": 1099,
          "lineDistance": 76
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 938,
          "lineDistance": 85
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.18.1@blind:1038",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1038,
      "heading": "M23.18.1 — Page 画布底色跟随 mockup 主题（同源扩展，2026-07-22 owner 回流）",
      "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": 1058,
          "lineDistance": 20
        },
        {
          "gate": "scripts/audit-mockup-default-white-bg.mjs",
          "nearestCoveredLine": 1099,
          "lineDistance": 61
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 938,
          "lineDistance": 100
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-INTEGRITY@blind:1475",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1475,
      "heading": "M-INTEGRITY §I5 — 替换既有节点前先 diff（2026-06-17 新增）",
      "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": 1465,
          "lineDistance": 10
        },
        {
          "gate": "scripts/audit-mockup-overlap.mjs",
          "nearestCoveredLine": 1538,
          "lineDistance": 63
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1384,
          "lineDistance": 91
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-INTEGRITY@blind:1484",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1484,
      "heading": "M-INTEGRITY §I6 — create / move / place 前先 probe 目标坐标区（防叠加）（2026-06-17 新增）",
      "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": 1465,
          "lineDistance": 19
        },
        {
          "gate": "scripts/audit-mockup-overlap.mjs",
          "nearestCoveredLine": 1538,
          "lineDistance": 54
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1384,
          "lineDistance": 100
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.6",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1719,
      "heading": "M23.6 — Connector Endpoint Anchoring（两端锚定）+ Frame Content Avoidance（M23 extension）",
      "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-integrity.mjs",
          "nearestCoveredLine": 1555,
          "lineDistance": 164
        },
        {
          "gate": "scripts/audit-mockup-overlap.mjs",
          "nearestCoveredLine": 1538,
          "lineDistance": 181
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2039,
          "lineDistance": 320
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1751,
          "text": "**判据**：标签的**可见字形**外框距其目标段 **≤ 60px**。"
        },
        {
          "line": 1752,
          "text": "**推荐范式**（一套交付物内取一个并贯彻）：贴在「通向目标态的那段**横线**」上方 **19–25px**、距该段起点右移 **60–72px**。"
        },
        {
          "line": 1753,
          "text": "⛔ **别把标签挂在竖直段旁边** —— 见下方量法陷阱，那是本条唯一真正会翻车的几何。"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.9",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1808,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 5,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2039,
          "lineDistance": 231
        },
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 2052,
          "lineDistance": 244
        },
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1555,
          "lineDistance": 253
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 5,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1810,
          "text": "state-preview 元素 absoluteBoundingBox 与产品 frame absoluteBoundingBox 无重叠"
        },
        {
          "line": 1811,
          "text": "state-preview 与 trigger element 之间有 1 条 VECTOR connector（遵守 M23 + M23.6）"
        },
        {
          "line": 1812,
          "text": "connector tip 落在 trigger element bbox 内（M23.6 (A)）"
        },
        {
          "line": 1813,
          "text": "connector 路径不穿越 frame 内部 sub-header / table rows / cards 内容（M23.6 (B)）"
        },
        {
          "line": 1814,
          "text": "state-preview 元素有独立 frame name（如 `Dropdown preview — Environment edit`），不与产品 UI 同名"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#(B)",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1914,
      "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-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2039,
          "lineDistance": 125
        },
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 2052,
          "lineDistance": 138
        },
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1555,
          "lineDistance": 359
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1915,
          "text": "卡内无 `this round` / `shipped MM-DD` / `(2026-08-04)` 这类日期充当章节骨架（Section Header 的 `updated YYYY-MM-DD` 元信息行不受此限）"
        },
        {
          "line": 1916,
          "text": "卡内无「取代此前…」「此前只有…」「原为…」这类沿革句"
        },
        {
          "line": 1917,
          "text": "卡内无帧尺寸 / 列内间距 / 等高不变量这类施工记录"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#允许内容@blind:1924",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1924,
      "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-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2039,
          "lineDistance": 115
        },
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 2052,
          "lineDistance": 128
        },
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1555,
          "lineDistance": 369
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.11",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1926,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 2,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2039,
          "lineDistance": 113
        },
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 2052,
          "lineDistance": 126
        },
        {
          "gate": "scripts/audit-mockup-integrity.mjs",
          "nearestCoveredLine": 1555,
          "lineDistance": 371
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 2,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1928,
          "text": "每条 bullet 过 3 问筛掉 tangential"
        },
        {
          "line": 1929,
          "text": "段数 ≤ 5（Section Header + Why + Changes + Interaction + Acceptance）—— Persona / Out-of-scope / Future plans 不入卡；**Data Contract 2026-09-10 起移出 UX 卡**（落 handoff / dev spec，见 §M23.0 owner 回流 ②）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M23.7",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1956,
      "heading": "M23.7 — State-label = what + why + invariants（M23 / M33 extension，2026-05-26）",
      "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": 2039,
          "lineDistance": 83
        },
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 2052,
          "lineDistance": 96
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 2305,
          "lineDistance": 349
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1957,
          "text": "每 frame state-label 含 what / why / invariants 三段，不允许只 1-2 段"
        },
        {
          "line": 1958,
          "text": "业务场景 frame（如 bein sports case）必显式提及业务名 / persona / 用例"
        },
        {
          "line": 1959,
          "text": "Invariants 段必显式列规则编号（M-XX），不允许只口语描述"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M31",
      "file": "docs/internal/mockup-conventions.md",
      "line": 1989,
      "heading": "Acceptance",
      "form": "heading",
      "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": 2039,
          "lineDistance": 50
        },
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 2052,
          "lineDistance": 63
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 2305,
          "lineDistance": 316
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1991,
          "text": "任何 dialog box / sidebar / footer button row / 列表 row / chip → **必须 Auto Layout**（`layoutMode !== 'NONE'`）"
        },
        {
          "line": 1992,
          "text": "任何 product UI 用绝对定位 → handoff doc 必须写明理由（\"overlay on backdrop\" / \"anchor to canvas annotation\" 等）"
        },
        {
          "line": 1993,
          "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#M32.3",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2099,
      "heading": "Acceptance",
      "form": "heading",
      "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": 2073,
          "lineDistance": 26
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2039,
          "lineDistance": 60
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 2305,
          "lineDistance": 206
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 4,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2101,
          "text": "handoff / wrap-up 能回答：本次所有 `search_design_system` 均带 `includeLibraryKeys: ['lk-057f6ba0...']`（贴一次调用样例）。"
        },
        {
          "line": 2102,
          "text": "任一资产 miss → handoff 有一行「`<asset>`: TVU UX Design System 无此资产 → [file-local / 自画+backlog / 退用户]」，**不得**出现\"改用 X 库\"字样。"
        },
        {
          "line": 2103,
          "text": "走查产出 remote-instance 来源库清单；非 `TVU UX Design System` 的实例 = flag，须给出处置。"
        },
        {
          "line": 2104,
          "text": "派 subagent 的 prompt 里 grep 得到 library key + 「不 fallback」约束串（子代理 prompt 自查）。"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M32.4",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2142,
      "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": 2073,
          "lineDistance": 69
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2039,
          "lineDistance": 103
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 2305,
          "lineDistance": 163
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 4,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2143,
          "text": "每处禁用表达都能回答\"这个控件有没有 `enable` 轴\"，且答案来自 live 全枚举输出而非印象"
        },
        {
          "line": 2144,
          "text": "有变体的一律切变体，且**容器上没有额外的 `opacity < 1`**（双重处理 = FAIL）"
        },
        {
          "line": 2145,
          "text": "无变体而降透明度的，数值在本交付集合内统一，且 UX 卡已写\"dev 不要照搬\""
        },
        {
          "line": 2146,
          "text": "因变体轴互斥而丢失的能力，已登记 backlog + 已在 UX 卡写明代码侧要求"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M33",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2221,
      "heading": "Acceptance",
      "form": "heading",
      "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": 2305,
          "lineDistance": 84
        },
        {
          "gate": "scripts/audit-commit-affordance-trace.mjs",
          "nearestCoveredLine": 2305,
          "lineDistance": 84
        },
        {
          "gate": "scripts/audit-mockup-library-origin.mjs",
          "nearestCoveredLine": 2073,
          "lineDistance": 148
        }
      ],
      "lexicalHint": {
        "hitItems": 1,
        "totalItems": 3,
        "kinds": [
          "self-declaration"
        ],
        "note": "⚠️ 有核查项带「不可机检」词法特征 ⇒ 人工判读时优先看这条"
      },
      "items": [
        {
          "line": 2223,
          "text": "任何 product frame（识别：name 命中设备 mockup 模式如 `S<N>` / `M<N>` / 设备屏幕 frame） → probe 所有 TEXT 节点 `fontName.family`，**不应**出现 `Noto Sans SC`"
        },
        {
          "line": 2224,
          "text": "注释 chip 内 ZH range opacity 仍走 0.45（M23 verbatim 不变）"
        },
        {
          "line": 2225,
          "text": "handoff doc 必含一行 \"Product UI language: \\<device locale, e.g. en-US\\>\""
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M38",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2559,
      "heading": "Acceptance",
      "form": "heading",
      "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": 2599,
          "lineDistance": 40
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2513,
          "lineDistance": 46
        },
        {
          "gate": "scripts/audit-mockup-variant-axis.mjs",
          "nearestCoveredLine": 2705,
          "lineDistance": 146
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 5,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2560,
          "text": "全产品所有 selected 列表项视觉一致（**3 层全齐**：1-side left accent **4px** BRAND + Layer_3 bg + selection-driven chrome）"
        },
        {
          "line": 2561,
          "text": "rail 宽度 **必从 Spacing token 取**——mockup 端用 `strokeLeftWeight = 4` 对齐 `--sp-xxs`；任何 off-token 数值（3 / 5 / 6 等）视为违规"
        },
        {
          "line": 2562,
          "text": "**rail + fill 均必绑 Color Variable**（M-COLOR C1）；raw hex 视为违规"
        },
        {
          "line": 2563,
          "text": "**第 3 层 chrome 必须在 selected 时显示、unselected 时隐藏**（不允许 always-on 占位）"
        },
        {
          "line": 2564,
          "text": "annotation 层用 BLUE，product UI selected 用 BRAND，两色 scope 不混"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-FONT",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2577,
      "heading": "Acceptance",
      "form": "heading",
      "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": 2599,
          "lineDistance": 22
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 2513,
          "lineDistance": 64
        },
        {
          "gate": "scripts/audit-mockup-variant-axis.mjs",
          "nearestCoveredLine": 2705,
          "lineDistance": 128
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2578,
          "text": "post-build 必跑扫描：`frame.findAll(n => n.type === 'TEXT' && [10,11,13,15,17,19,21].includes(n.fontSize))` 命中数应 = 0"
        },
        {
          "line": 2579,
          "text": "命中即视为违规，必须 round 到最近 grid 尺寸（10→12 / 11→12 / 13→14 / 15→14 / 17→18）"
        },
        {
          "line": 2580,
          "text": "推荐用 setTextStyleIdAsync 绑定具体 textStyle 而非赤裸 fontSize"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M39",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2760,
      "heading": "M39 — Variant text property abstraction（component build 必备）— 2026-05-26 新增",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 4,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-variant-axis.mjs",
          "nearestCoveredLine": 2705,
          "lineDistance": 55
        },
        {
          "gate": "scripts/audit-mockup-hash-n-semantic.mjs",
          "nearestCoveredLine": 2822,
          "lineDistance": 62
        },
        {
          "gate": "scripts/audit-mockup-feedback-not-selfdrawn.mjs",
          "nearestCoveredLine": 2869,
          "lineDistance": 109
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 4,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2761,
          "text": "建 variant 起手必估算\"此 variant 各文本字段在 deliverable 中预期不同值数\""
        },
        {
          "line": 2762,
          "text": "≥ 3 → 必抽 component property + ledger 注明（不抽则视为违规）"
        },
        {
          "line": 2763,
          "text": "≤ 2 → inline override 可，但 ledger 注明\"future-promote 候选\""
        },
        {
          "line": 2764,
          "text": "Instance 创建后**只通过 setProperties() 改文本**，不再 findOne + characters 直改"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M45",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2931,
      "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-feedback-not-selfdrawn.mjs",
          "nearestCoveredLine": 2869,
          "lineDistance": 62
        },
        {
          "gate": "scripts/audit-mockup-hash-n-semantic.mjs",
          "nearestCoveredLine": 2822,
          "lineDistance": 109
        },
        {
          "gate": "scripts/audit-mockup-variant-axis.mjs",
          "nearestCoveredLine": 2705,
          "lineDistance": 226
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2933,
          "text": "page name 三段式齐全"
        },
        {
          "line": 2934,
          "text": "FB-id 真实有效（gh / jira API 可查）"
        },
        {
          "line": 2935,
          "text": "与同 file 内其它 page 命名风格一致（probe `figma.root.children.map(p=>p.name)` 抽样检查）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M45~2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 2969,
      "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-feedback-not-selfdrawn.mjs",
          "nearestCoveredLine": 2869,
          "lineDistance": 100
        },
        {
          "gate": "scripts/audit-mockup-hash-n-semantic.mjs",
          "nearestCoveredLine": 2822,
          "lineDistance": 147
        },
        {
          "gate": "scripts/audit-mockup-variant-axis.mjs",
          "nearestCoveredLine": 2705,
          "lineDistance": 264
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 2970,
          "text": "起手已判定新需求 / 迭代既有；全新需求 → 新建独立 page"
        },
        {
          "line": 2971,
          "text": "新 page 建在 `To be confirmed` 分隔符正下方（无该分类则文件最上方）"
        },
        {
          "line": 2972,
          "text": "page 命名符合 §M45（无 Jira 用 `<Title EN> YYYYMMDD`）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M44",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3003,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-mockup-feedback-not-selfdrawn.mjs",
          "nearestCoveredLine": 2869,
          "lineDistance": 134
        },
        {
          "gate": "scripts/audit-mockup-hash-n-semantic.mjs",
          "nearestCoveredLine": 2822,
          "lineDistance": 181
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 3256,
          "lineDistance": 253
        }
      ],
      "lexicalHint": {
        "hitItems": 1,
        "totalItems": 3,
        "kinds": [
          "self-declaration"
        ],
        "note": "⚠️ 有核查项带「不可机检」词法特征 ⇒ 人工判读时优先看这条"
      },
      "items": [
        {
          "line": 3005,
          "text": "mockup 所有 user-facing label 过一遍 checklist 3 问"
        },
        {
          "line": 3006,
          "text": "PRD 在\"关键元素 Key Elements\"段为每个新 label 显式声明 EN/ZH 业务名 + 数据来源后端字段（M22 acknowledgment 内联）"
        },
        {
          "line": 3007,
          "text": "后端服务名 / 内部代号 / 数据库字段名仅出现在 dev-only annotation（M33 注释 vs 产品 UI 语言隔离）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M43",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3084,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 6,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 3256,
          "lineDistance": 172
        },
        {
          "gate": "scripts/audit-mockup-feedback-not-selfdrawn.mjs",
          "nearestCoveredLine": 2869,
          "lineDistance": 215
        },
        {
          "gate": "scripts/audit-mockup-hash-n-semantic.mjs",
          "nearestCoveredLine": 2822,
          "lineDistance": 262
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 6,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 3086,
          "text": "mockup 含「正常 / 截断 / hover tooltip」3 状态（或在 M23 多状态流程图中显式标注）"
        },
        {
          "line": 3087,
          "text": "sample data 含 ≥ 1 条超长记录证明截断态可见"
        },
        {
          "line": 3088,
          "text": "行高 / maxLines 决策有文档化依据（默认表 OR 显式 override + 理由）"
        },
        {
          "line": 3089,
          "text": "tooltip 用 library `tooltip/default`，未自画"
        },
        {
          "line": 3090,
          "text": "dev 实现含 `scrollWidth > clientWidth` truncation detection（避免无谓 tooltip）"
        },
        {
          "line": 3091,
          "text": "a11y：`aria-describedby` + `title` fallback 双保险"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M43.2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3137,
      "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": 3256,
          "lineDistance": 119
        },
        {
          "gate": "scripts/audit-mockup-feedback-not-selfdrawn.mjs",
          "nearestCoveredLine": 2869,
          "lineDistance": 268
        },
        {
          "gate": "scripts/audit-mockup-hash-n-semantic.mjs",
          "nearestCoveredLine": 2822,
          "lineDistance": 315
        }
      ],
      "lexicalHint": {
        "hitItems": 2,
        "totalItems": 4,
        "kinds": [
          "self-declaration",
          "eyeball-render"
        ],
        "note": "⚠️ 有核查项带「不可机检」词法特征 ⇒ 人工判读时优先看这条"
      },
      "items": [
        {
          "line": 3139,
          "text": "handoff 截图含每列 zoom-in（或显式声明哪些列做了 audit + audit 结果）"
        },
        {
          "line": 3140,
          "text": "Multi-element cell（action group / status badge / icon group）单独 zoom 验证"
        },
        {
          "line": 3141,
          "text": "Header 行单独截图确认无 label 换行"
        },
        {
          "line": 3142,
          "text": "列宽变更后立即跑 audit，不放到最后批量"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M42.2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3293,
      "heading": "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": 3256,
          "lineDistance": 37
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 3488,
          "lineDistance": 195
        },
        {
          "gate": "scripts/audit-source-discipline-identifiers.mjs",
          "nearestCoveredLine": 3569,
          "lineDistance": 276
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 4,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 3295,
          "text": "post-clone 必跑 direct children enumeration（含 decoration），结果入 handoff"
        },
        {
          "line": 3296,
          "text": "任何加 overlay 操作必有\"已 grep 源, 既有同语义元素 N 个\"的 trace"
        },
        {
          "line": 3297,
          "text": "任何 AUTO → ABSOLUTE 转换必有\"原 derived x=?, y=? → 手动 set x=parent.paddingLeft, y=...\" 的 trace"
        },
        {
          "line": 3298,
          "text": "cloned 子树内**无沿用源语义的图层名**（实证 2026-09-01 RPSV3-134：`Reboot failed` 帧里的提示实例，图层名一直是从 `Rebooting` 帧克隆来的 `Notice — Rebooting`，跨两轮走查未被发现 —— 本条此前只比结构与文本，不比名字）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M42.3@blind:3315",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3315,
      "heading": "M42.3 — Clone Placement Discipline: 就地改优先，禁旁路克隆搭样板（M42 extension）— 2026-06-17 新增",
      "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": 3256,
          "lineDistance": 59
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 3488,
          "lineDistance": 173
        },
        {
          "gate": "scripts/audit-source-discipline-identifiers.mjs",
          "nearestCoveredLine": 3569,
          "lineDistance": 254
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 1,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 3316,
          "text": "**与 M42 / M42.2 区别**：M42/M42.2 管\"clone 时不传播 bug / 结构\"；本条管\"**该不该 clone**\"——优先不 clone，就地改。"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M47.2~2",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3504,
      "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": 3488,
          "lineDistance": 16
        },
        {
          "gate": "scripts/audit-source-discipline-identifiers.mjs",
          "nearestCoveredLine": 3569,
          "lineDistance": 65
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 3256,
          "lineDistance": 248
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 3506,
          "text": "任何 fontName 改动前 probe 原 `textStyleId`"
        },
        {
          "line": 3507,
          "text": "fontName 改完后重新绑回 textStyleId（若 originalStyleId 非空）"
        },
        {
          "line": 3508,
          "text": "改完截图 zoom-in 验证 cell 视觉与同列其他 cell 一致（无变灰 / 变小 / 变歪）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-DISCIPLINE.SCOPE",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3605,
      "heading": "M-DISCIPLINE.SCOPE — scope 由「对象全集」推导，不由「我做了什么」推导 — 2026-07-30 新增",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 8,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-source-discipline-identifiers.mjs",
          "nearestCoveredLine": 3569,
          "lineDistance": 36
        },
        {
          "gate": "scripts/audit-mockup-bilingual-spacing.mjs",
          "nearestCoveredLine": 3488,
          "lineDistance": 117
        },
        {
          "gate": "scripts/audit-mockup-handoff-evidence.mjs",
          "nearestCoveredLine": 3804,
          "lineDistance": 199
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 8,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 3607,
          "text": "**(1a) Figma 侧走查／审计清单**的标题或首行含一句显式 scope 声明（覆盖哪些产品帧 + 是否含 INSTANCE 子树）—— ⚠️ **机器判不了**，见下方「拆分」段"
        },
        {
          "line": 3608,
          "text": "**(1b) 仓库落盘的审计报告**（射程 = `docs/internal/_reports/` 下的 `.md`，现取 8 份）标题或首行含一句显式 scope 声明（这份报告扫了哪些对象／扫描面是什么）—— ⚠️ **判据形态未定，现在没有闸**，见下方「拆分」段"
        },
        {
          "line": 3609,
          "text": "走查 scope = 本轮触碰过的**所有**节点，不由用户指摘句框定"
        },
        {
          "line": 3610,
          "text": "债务 / 待办清单 scope = 该 surface 的**对象全集**，不是本轮触碰集"
        },
        {
          "line": 3611,
          "text": "审计脚本的枚举维度是\"全部非目标值\"，不是\"预期的那一个值\"（能答\"我扫的是白名单外全部，还是只扫了 X\"）"
        },
        {
          "line": 3612,
          "text": "扫查脚本的每个过滤条件都能答\"它排除了什么、为什么目标不在被排除的那部分\"，且已用一个已知必然命中的目标当探针验证过（硬约束 5）"
        },
        {
          "line": 3613,
          "text": "口径 / 取值类改动：对象全集含**产品帧本体**（cell 值 / 列头 / 图层名），不止交付层；改完按同一清单机器复验「不合新口径的残留 = 0」（硬约束 7）"
        },
        {
          "line": 3614,
          "text": "截图 / 标注类证据：每条写进交付物的判定都能点名\"依据是哪个 node 的原始分辨率图\"，未逐图看完前没有向 owner 声明过\"某处标注缺失\"（硬约束 8）"
        }
      ]
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-DISCIPLINE.SYNC@blind:3751",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3751,
      "heading": "M-DISCIPLINE.SYNC — 编辑 confirmed → 自动自检 + 交付物同步（状态转移触发，2026-06-18 新增，修 W3/W5）",
      "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": 3804,
          "lineDistance": 53
        },
        {
          "gate": "scripts/audit-mockup-binding-fidelity.mjs",
          "nearestCoveredLine": 3850,
          "lineDistance": 99
        },
        {
          "gate": "scripts/audit-source-discipline-identifiers.mjs",
          "nearestCoveredLine": 3569,
          "lineDistance": 182
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "id": "docs/internal/mockup-conventions.md#M-DISCIPLINE.SYNC@blind:3779",
      "file": "docs/internal/mockup-conventions.md",
      "line": 3779,
      "heading": "M-DISCIPLINE.SYNC — 编辑 confirmed → 自动自检 + 交付物同步（状态转移触发，2026-06-18 新增，修 W3/W5）",
      "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": 3804,
          "lineDistance": 25
        },
        {
          "gate": "scripts/audit-mockup-binding-fidelity.mjs",
          "nearestCoveredLine": 3850,
          "lineDistance": 71
        },
        {
          "gate": "scripts/audit-source-discipline-identifiers.mjs",
          "nearestCoveredLine": 3569,
          "lineDistance": 210
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 0,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": []
    },
    {
      "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-feedback-not-selfdrawn.mjs",
          "nearestCoveredLine": 179,
          "lineDistance": 50
        },
        {
          "gate": "scripts/audit-mockup-geometry-consistency.mjs",
          "nearestCoveredLine": 228,
          "lineDistance": 99
        }
      ],
      "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-feedback-not-selfdrawn.mjs",
          "nearestCoveredLine": 179,
          "lineDistance": 25
        },
        {
          "gate": "scripts/audit-mockup-geometry-consistency.mjs",
          "nearestCoveredLine": 228,
          "lineDistance": 74
        }
      ],
      "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#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-feedback-not-selfdrawn.mjs",
          "nearestCoveredLine": 179,
          "lineDistance": 15
        },
        {
          "gate": "scripts/audit-mockup-geometry-consistency.mjs",
          "nearestCoveredLine": 228,
          "lineDistance": 34
        }
      ],
      "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": 272,
      "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": 228,
          "lineDistance": 44
        },
        {
          "gate": "scripts/audit-mockup-feedback-not-selfdrawn.mjs",
          "nearestCoveredLine": 179,
          "lineDistance": 93
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 5,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 273,
          "text": "新 LCD 设置页开建前，handoff / design-record 里写明「范式来源 = 该 surface 的 canonical 范式帧」（帧 id 见项目 repo 登记：`TVU Pack/docs/specs/lcd-canonical-spec.md` §3）+ 本轮实测取值"
        },
        {
          "line": 274,
          "text": "行高 / 控件列右对齐 / 下向三角展开标记 / 底栏 `OK`+`Home` 四项逐条可核（行高等取值以项目 spec §1 登记值为准，**贴实测数字**，目测不算通过）"
        },
        {
          "line": 275,
          "text": "底栏没有 `Back` 按钮；左上角有返回箭头"
        },
        {
          "line": 276,
          "text": "底栏每个按钮 `getMainComponentAsync().remote === false`（本文件 `LCD Button`），无远端库按钮混入；禁用态查到的是 `Status=Disabled` 而非 opacity"
        },
        {
          "line": 277,
          "text": "不可改态下 `OK` 与参数控件同步置灰"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#参考物落地（Reference",
      "file": "docs/internal/design-process.md",
      "line": 187,
      "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": 370,
          "lineDistance": 183
        },
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 530,
          "lineDistance": 343
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1333,
          "lineDistance": 1146
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 5,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 188,
          "text": "有参考物的任务，画布上能看到 `REFERENCE` Section，且在交付 Section 左侧"
        },
        {
          "line": 189,
          "text": "参考物旁有 caption 写明来源（文件 key + node id）与「非交付物」定性"
        },
        {
          "line": 190,
          "text": "**caption 里的源标识是可点击链接，且一眼看得出可点** —— `getStyledTextSegments(['hyperlink','fills','textDecoration'])` 实测该 range：hyperlink 非 null **且** `fills[0]` = `#33A4FD` **且** `textDecoration` = `UNDERLINE`（机器输出，不靠目测 —— 2026-09-10 实证「链接全在但 8/8 与正文同色」这种状态"
        },
        {
          "line": 191,
          "text": "有逐项去向对照表，参考物的每一项都能在表里查到去向"
        },
        {
          "line": 192,
          "text": "handoff 含 §M37 的 5 行 reference probe 表（数值实测，非目测）"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#Step~2",
      "file": "docs/internal/design-process.md",
      "line": 725,
      "heading": "Step B — PRD 起草 + 写入目标 Figma",
      "form": "bold",
      "blindSpot": false,
      "itemCount": 5,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [
        "N-D1-anchor"
      ],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 616,
          "lineDistance": 109
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 370,
          "lineDistance": 355
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1333,
          "lineDistance": 608
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 5,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 726,
          "text": "写入前有一次只读勘察（搜过同类件 + 看过版本排布 + 参照过现有样式）"
        },
        {
          "line": 727,
          "text": "已有同类 PRD / Spec → 更新它而非新建第二份"
        },
        {
          "line": 728,
          "text": "**三层粒度都过**：无平级第二份制品 · 同一 feature 无平级第二张 UX / Journey 卡 · PRD 与卡内无字母后缀段（`§4b` 这类），衍生轮内容已并进既有段并连续重编号"
        },
        {
          "line": 729,
          "text": "**并段后跑过 §2a ③ 轮互斥对照** —— 被本轮推翻的旧 scope 声明句已删或已划线标注"
        },
        {
          "line": 730,
          "text": "dispatch subagent 写 Figma 时，prompt 显式含「先勘察现有同类件、定更新 vs 新建 + 相对定位 + 主题对齐」，不只说「新建」"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#⚠️",
      "file": "docs/internal/design-process.md",
      "line": 901,
      "heading": "⚠️ State-Completeness Enumeration（F2-late + 体验地图 必做前置，2026-06-04 新增；2026-06-15 起亦为 M48 起手清单强制一行）",
      "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": 616,
          "lineDistance": 285
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1333,
          "lineDistance": 432
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 370,
          "lineDistance": 531
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 902,
          "text": "枚举清单逐项标 ✅有图 / 🟡注释说明 / 🔴缺失；🔴 项必须在 report 顶部列为 priority gap"
        },
        {
          "line": 903,
          "text": "体验地图的 Pain Points lens 必含\"哪些状态当前 mockup 未表达\""
        },
        {
          "line": 904,
          "text": "不允许只交\"happy-path 旅程描述\"当 journey map 通过"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#User",
      "file": "docs/internal/design-process.md",
      "line": 981,
      "heading": "Acceptance（F2-late 验收）",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 7,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1333,
          "lineDistance": 352
        },
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 616,
          "lineDistance": 365
        },
        {
          "gate": "scripts/audit-mockup-typography-icon.mjs",
          "nearestCoveredLine": 370,
          "lineDistance": 611
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 7,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 983,
          "text": "至少 2 personas × 5 stages × 5 lenses 全覆盖"
        },
        {
          "line": 984,
          "text": "每 Stage 至少 1 个 `HIT` 本期命中点"
        },
        {
          "line": 985,
          "text": "至少 1 个 `NEXT` 下一期候选（避免 happy-path bias）"
        },
        {
          "line": 986,
          "text": "每个 `OUT` 都带拍板依据（`OUT — <结论>: <依据>`），没有裸 `OUT`"
        },
        {
          "line": 987,
          "text": "长文本 / 异常态 / 跨页面跳转场景至少出现在 Pain Points 或 Touchpoints 一次"
        },
        {
          "line": 988,
          "text": "**Figma 端是真网格**（Stage 作列 / Lens 作行），不是纵向文字块（§M23.19）"
        },
        {
          "line": 989,
          "text": "若画了情绪层：已标数据来源 · 跑连线闸时已把折线排除在 M23.6 对象集外 · 卡宽若变已重算全部依附节点"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#M16.1",
      "file": "docs/internal/design-process.md",
      "line": 1233,
      "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": 1333,
          "lineDistance": 100
        },
        {
          "gate": "scripts/audit-deliverable-open-questions.mjs",
          "nearestCoveredLine": 1704,
          "lineDistance": 471
        },
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 616,
          "lineDistance": 617
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1234,
          "text": "任何含 state-machine / interactive list 的 deliverable 至少包含 1 default + 1 override frame"
        },
        {
          "line": 1235,
          "text": "frame 名命名必含 state 字段（如 `M5 · default accordion`、`M-MultiExp · user manual expand`、`M8 · user all-collapse`），不允许只标 frame 编号"
        },
        {
          "line": 1236,
          "text": "State-label 必显式说明该 frame 是 default 还是 override（与 M22 design intent 衔接）"
        }
      ]
    },
    {
      "id": "docs/internal/design-process.md#Scope",
      "file": "docs/internal/design-process.md",
      "line": 1654,
      "heading": "Acceptance",
      "form": "heading",
      "blindSpot": false,
      "itemCount": 3,
      "lineExists": true,
      "fixClass": "F1",
      "criterion": "结构判据：同文件已有闸在扫",
      "confidence": "high",
      "blockers": [],
      "machineCheckability": "needs-human-review",
      "candidateGates": [
        {
          "gate": "scripts/audit-deliverable-open-questions.mjs",
          "nearestCoveredLine": 1704,
          "lineDistance": 50
        },
        {
          "gate": "scripts/audit-handoff-deliverable-sections.mjs",
          "nearestCoveredLine": 1602,
          "lineDistance": 52
        },
        {
          "gate": "scripts/design-kickoff.mjs",
          "nearestCoveredLine": 616,
          "lineDistance": 1038
        }
      ],
      "lexicalHint": {
        "hitItems": 0,
        "totalItems": 3,
        "kinds": [],
        "note": "（无词法线索，⛔ 不代表可机检）"
      },
      "items": [
        {
          "line": 1656,
          "text": "Mockup handoff 时所有 sibling area visible 状态与 clone source 一致（无意外隐藏）"
        },
        {
          "line": 1657,
          "text": "Scope-narrow 声明只导致**改动范围收窄**，不导致 mockup **可见范围收窄**"
        },
        {
          "line": 1658,
          "text": "若确实需要隐藏 sibling（如 sibling 已废弃 / 极少出现），必须显式 user confirm"
        }
      ]
    }
  ],
  "perturbedMismatch": 2,
  "dumpIdsSource": "external-file",
  "controls": [
    {
      "id": "must-hit-0a/identity-arm-rowset-intact",
      "pass": true,
      "detail": "逐条对不齐的段 = 0"
    },
    {
      "id": "must-hit-0b/perturbed-arm-detects-form-drift",
      "pass": true,
      "detail": "扰动臂（仅 stripNoise）对不齐的段 = 2 / 142（判据 ≥1；2026-08-31 @ b3728d38 实测 2）"
    },
    {
      "id": "must-hit-1/ids-match-dump",
      "pass": true,
      "detail": "本器 43 条 · 比对面 43 条（外部 dump 文件）· id 集合逐字相等 = true ⚠️ 跨 pin（`d10e151b` 不在预注册表里）⇒ 只断言一致性"
    },
    {
      "id": "must-hit-2/zero-item-sections-really-empty",
      "pass": true,
      "detail": "零核查项段 = 7，其中行号不存在的 = 0 ⚠️ 跨 pin（`d10e151b` 不在预注册表里）⇒ 只断言一致性"
    },
    {
      "id": "must-hit-3/gold-test-was-run-and-recorded",
      "pass": true,
      "detail": "裁定 = FAILED（召回 3/52 = 0.058，下界 0.75；误报 0/47）"
    },
    {
      "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": "三类求和 = 43 · 去重 id = 43 · 行数 = 43（三者应互等） ⚠️ 跨 pin（`d10e151b` 不在预注册表里）⇒ 只断言一致性"
    },
    {
      "id": "must-hit-6/blind-count-8-and-anchor-cross-checked",
      "pass": true,
      "detail": "ACC_RE-blind = 8 · 锚点不稳 = 13 · 带 ~N 的 5 行全被覆盖 = true ⚠️ 跨 pin（`d10e151b` 不在预注册表里）⇒ 只断言一致性"
    },
    {
      "id": "must-hit-7/f1-rows-carry-candidate-gates",
      "pass": true,
      "detail": "F1 行 = 36，其中给不出候选闸的 = 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 = 36 / 0 / 7（至少两类非空、无一类吃满 43）"
    }
  ]
}