[
  {
    "component": "switch",
    "field": "rootPadding.top",
    "entryScope": "*",
    "reason": "Switch rootPadding 2px is thumb-inset positioning (code uses padding + transform; Figma positions thumb absolutely with root padding=0).",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立。`tvu-switch` 实测 shadow-DOM CE（被测 .switch 的 rootNode=ShadowRoot），thumb-inset 定位全在 SFC 自带样式里、随 CE 一起进 shadow ⇒ 不依赖任何跨边界的全局规则；两链同 18 条失败、actual 逐条相同。"
  },
  {
    "component": "switch",
    "field": "rootPadding.right",
    "entryScope": "*",
    "reason": "同 rootPadding.top：thumb-inset 定位差异，code 用 padding + transform，Figma 用绝对定位 + root padding=0。",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立，同 rootPadding.top（shadow-DOM CE，两链 18/18 同值）。"
  },
  {
    "component": "switch",
    "field": "rootPadding.bottom",
    "entryScope": "*",
    "reason": "同 rootPadding.top：thumb-inset 定位差异，code 用 padding + transform，Figma 用绝对定位 + root padding=0。",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立，同 rootPadding.top（shadow-DOM CE，两链 18/18 同值）。"
  },
  {
    "component": "switch",
    "field": "rootPadding.left",
    "entryScope": "*",
    "reason": "同 rootPadding.top：thumb-inset 定位差异，code 用 padding + transform，Figma 用绝对定位 + root padding=0。",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立，同 rootPadding.top（shadow-DOM CE，两链 18/18 同值）。"
  },
  {
    "component": "switch",
    "field": "rootFillHex",
    "entryScope": "switch--darktheme-off--status-off--enable-no--loading-no--*",
    "reason": "**满幅覆盖层合成的唯一残余**（[[INFRA-F129]] ② 2026-08-20 落地后重写本行）：该族 12 个 `enable=no` 变体里，11 个的轨道色画在**满幅 RECTANGLE** `Rectangle 535` 上、已由 `scripts/lib/full-bleed-cover.mjs` 合成进 `rootFillHex`（两链各 13 个 check 由红转绿）。剩下 `337:18086`（dark theme=off, status=off, enable=no, loading=no）那一个，同名同位同尺寸的那块在 Figma 里是**被拍平过的 VECTOR**（`type: \"VECTOR\"`, fill `#cccccc`, box 与帧逐字相同），而「bbox 等于帧」对 VECTOR **不能**推出「填满帧」—— 全库实测 74 个 VECTOR / 14 个 BOOLEAN_OPERATION / 11 个 ELLIPSE 的 bbox 都等于帧，它们全是图标路径与开关圆点。⇒ 拿类型放行它就是启发式（撞 `FIGMA_AS_SOURCE_OF_TRUTH.md` §验证方法），本行按 fail closed 保留。**修法方向**：extract 额外烘出 `fillGeometry` 路径数据，再机械证明路径覆盖边界盒（当前 tokenized 数据里没有任何几何字段）；或由 designer 在 Figma 把它改回真 RECTANGLE（与同族另外 11 个一致，那样本行自动不再命中）。",
    "fixDirection": "extract-pipeline",
    "addedAt": "2026-08-20",
    "reviewBy": "2027-02-16",
    "ceReviewedAt": "2026-08-20",
    "ceNote": "两链同形，本轮各自重跑取证：Vue 与 React/CE 两条链在这一条上都仍红、actual 同为 `#cccccc`、同族另外 11 条在两链同时转绿 ⇒ 缺口在 expected（extract）侧，与渲染宿主无关。"
  },
  {
    "component": "Step/Item",
    "field": "textFillHex",
    "entryScope": "*",
    "reason": "StepItem completed state renders <Icon name=\"selected\"/> not .step-num text — textTargetSelector misses (falls back to root #000). harness limitation: verifier needs state-conditional textTargetSelector. ⚠️ 本行放大 +4（18 条中今天 14 条失败）：另 4 条是否命中取决于该变体有没有渲染出 icon，属同一缺陷。",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立。shadow-DOM CE；textTargetSelector 与 <Icon> 在同一棵 shadow 树内，Playwright locator 穿透 shadow ⇒ 解析行为与 Vue 侧一致。两链同 14 条失败、actual 均为 `#000000`（与理由所述的 root 回退一致）。"
  },
  {
    "component": "Tooltips",
    "field": "rootPadding.top",
    "entryScope": "*",
    "reason": "⛔ 2026-08-20 成因订正（INFRA-F129 (b)）：原写「extract drops root autolayout padding」——**节点写错了**。Figma root 是 wrapper，padding 4/8/4/8 在子节点 SLOT \"Content\" 上；而 figma-sync/extract.mjs 的 nodeGeometry() 给**所有子节点**只记它自己 return 的那几个字段（⛔ 2026-08-21 订正：原写「11 个字段」，而紧挨着的枚举本身列的是 12 个 —— 手抄的数与手抄的清单同时错且互斥；活源 = nodeGeometry() 的 return 对象，实测数与取数命令只在 backlog INFRA-F129 (b) 留一份），**不含 padding / gap / layoutMode / strokeWeight** —— 那些只在 root 走的 extractNodeFrame() 里有。⇒ SLOT 真实的 4/8/4/8 根本不在 figma-data 里，expected 只能是 0。修法 = 扩 child 字段集后重跑 extract（独立项，影响全库所有组件 children，别顺手做）。",
    "fixDirection": "extract-pipeline",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-20",
    "ceNote": "成立且与 DOM 边界无关：缺口在 expected 侧（figma-data 里没有这个数），不在渲染侧。2026-08-20 两链重跑仍 12/12 同值（actual 均为 4/8/4/8）。"
  },
  {
    "component": "Tooltips",
    "field": "rootPadding.right",
    "entryScope": "*",
    "reason": "同 rootPadding.top（2026-08-20 一并订正）：缺口在 extract 的**子节点**字段集，不是「root autolayout 被丢」。",
    "fixDirection": "extract-pipeline",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-20",
    "ceNote": "成立，同族（expected 侧缺口，与链无关；2026-08-20 两链 12/12 同值）。"
  },
  {
    "component": "Tooltips",
    "field": "rootPadding.bottom",
    "entryScope": "*",
    "reason": "同 rootPadding.top（2026-08-20 一并订正）：缺口在 extract 的**子节点**字段集，不是「root autolayout 被丢」。",
    "fixDirection": "extract-pipeline",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-20",
    "ceNote": "成立，同族（expected 侧缺口，与链无关；2026-08-20 两链 12/12 同值）。"
  },
  {
    "component": "Tooltips",
    "field": "rootPadding.left",
    "entryScope": "*",
    "reason": "同 rootPadding.top（2026-08-20 一并订正）：缺口在 extract 的**子节点**字段集，不是「root autolayout 被丢」。",
    "fixDirection": "extract-pipeline",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-20",
    "ceNote": "成立，同族（expected 侧缺口，与链无关；2026-08-20 两链 12/12 同值）。"
  },
  {
    "component": "Tooltips",
    "field": "rootGap",
    "entryScope": "*--pointing-*-down--*",
    "reason": "⛔ 2026-08-20 成因订正 + 改方向（INFRA-F129 (b)）：原写「expected -6 是缺数据的产物」——**那是假的**。root 的 gap = -6 是 Figma 真值，算术闭合：SLOT h 24 + arrow h 8.485281944 + (-6) = 26.485282 = root h（残差 ~9.5e-7 是浮点噪声）。它表达的是 Figma 用 vertical autolayout 把气泡和箭头**负叠**；code 的 .tooltip-arrow 是绝对定位 ⇒ 那层 wrapper 在 code 里没有对应物。与 switch rootPadding 同形态（两侧用不同手段表达同一视觉）⇒ 方向由 extract-pipeline 改为 harness-verifier。只命中 pointing=*-down 的 6 条（*-up 那批 root 无 autolayout、gap 为 null ⇒ expected 0 == actual 0，本就 pass）。",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-20",
    "ceNote": "成立，同族（2026-08-20 两链 6/6 同值，actual 均为 0，作用面也相同）。改的是成因与方向，作用面未放大。"
  },
  {
    "component": "Tooltips",
    "field": "rootWidth",
    "entryScope": "*--pointing-*-up--*",
    "reason": "⛔ 2026-08-20 成因订正 + 改方向（INFRA-F129 (b)）：真因不是「文字 hug 测量值」，而是 pointing=*-up 那批的 root **完全没有 autolayout**（layoutMode / layoutSizing* 全为 null）⇒ pushSizedNumber 没有 HUG 模式可 skip，直接落到数值比；而被比的 root 是 wrapper，不是 code 的 .tooltip-box。*-down 那批 root 是 HUG/HUG ⇒ 走 pass-by-mode-skip，从来没红过，所以表里也没有它们。方向改 harness-verifier（比的是两个不同层级，不是 extract 缺数据）。",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-20",
    "ceNote": "成立，同族（2026-08-20 两链 6/6 同值）。"
  },
  {
    "component": "Tooltips",
    "field": "rootHeight",
    "entryScope": "*--pointing-*-up--*",
    "reason": "同 rootWidth（2026-08-20 一并订正 + 改方向）：*-up 的 root 无 autolayout ⇒ 无 HUG 可 skip；且 root 的 h 含箭头（30.485 = 气泡 24 + 箭头 8.485，无负 gap），而 code 的 .tooltip-box 只有气泡（26 = 4+16+4 + 上下各 1px border）。⛔ 也别把 rootHeight 下降到 SLOT 去「修」它：SLOT h=24（Figma INSIDE stroke）vs code 26（CSS border 在 padding box 外）是盒模型差，下降只会把今天的豁免换成一条永久红。",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-20",
    "ceNote": "成立，同族（2026-08-20 两链 6/6 同值）。"
  },
  {
    "component": "Chart",
    "field": "rootWidth",
    "entryScope": "*",
    "reason": "Chart renders into an inline SVG via ECharts — verifier reads only root wrapper computed style; pixel content not introspectable.",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立。`tvu-chart` 实测 shadow-DOM CE；ECharts 在 shadow 树内同样只向 verifier 暴露 wrapper。两链 12/12 同值（actual 352 vs expected 240）。"
  },
  {
    "component": "Chart",
    "field": "rootHeight",
    "entryScope": "*",
    "reason": "同 rootWidth：ECharts 内联 SVG 的像素内容不可内省。",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立，同族（两链 12/12 同值）。"
  },
  {
    "component": "Chart",
    "field": "rootGap",
    "entryScope": "*",
    "reason": "同 rootWidth：ECharts 内联 SVG 的像素内容不可内省。",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立，同族（两链 12/12 同值）。"
  },
  {
    "component": "Chart",
    "field": "textFillHex",
    "entryScope": "*",
    "reason": "同 rootWidth：文字在 SVG 内部，verifier 读的是 wrapper。⚠️ 本行放大 +1（12 条中今天 11 条失败）：donut/light 那条今天 pass 是偶然，限制对全部 chart type 通用。",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立，同族。⚠️ 那条「放大 +1」在 CE 链同样成立：React 侧也是 12 条 scope / 11 条失败，同一条 donut-light 今天 pass。"
  },
  {
    "component": "Breadcrumb/Item",
    "field": "textFillHex",
    "entryScope": "*",
    "reason": "BreadcrumbItem label uses <slot/> — harness limitation: empty slot content makes label dimensions 0 → not visible to verifier; textFillHex falls back to root LI and reads #000000. Real text colour resolves correctly at runtime.",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立，但**成因链在 CE 侧不同、观测相同**：Vue 侧是 Vue slot 无内容；CE 侧 `tvu-breadcrumb-item` 是 shadow-DOM CE、走原生 <slot>，harness 未投影任何 light-DOM 子节点 ⇒ 同样量到 0 尺寸。两链 8/8 同值、actual 均 `#000000`。⇒ 豁免的观测与 fixDirection 都不变。"
  },
  {
    "component": "Message",
    "field": "rootFillHex",
    "entryScope": "message--status-success--*--theme-dark",
    "reason": "🔴 **不是 code 债，FAIL 是假阳**（2026-08-28 读 Figma 活源后归类订正；晚间复核确认本行的订正成立 —— 同组件 textFillHex 那行的同批订正是错的，已改回）。节点 1408:17150 / 1545:19942 的 root fill 在 raw 里逐字为 `fills=[{SOLID,hex:#f1fbf3}]` 且**该 paint 没有 `v` 字段**（`v` = extract 写入的绑定 ID，`figma-sync/extract.mjs:98`）⇒ Figma 这一层是**单值、与主题无关**。活源亲验：`get_variable_defs(1408:17150)` 返回的变量里**没有** `UX/Brand/Match,Hover`（= 那个 dark #0b2b13 / light #f1fbf3 的变量）；渲染图采样背景 #f1fbf3 占 89.1%。code 现值 `--prompt-success-bg: #f1fbf3` 逐字等于 Figma 真值 ⇒ 本 check 的两主题 expected 是 extract 侧生成的（推测机制：按值反查 —— #f1fbf3 恰为 `--brand-match` 的 light 值）。⛔ 别再按本行去改 code：2026-08-28 owner 拍板试修过一轮，视觉签核当场否掉（#0b2b13 不是 Figma 的样子），改动已全部回滚。⛔ **别把本行的结论外推到其它 check** —— 全仓同型（两主题 expected 不同）97 处里，只有本行覆盖的 2 处是无绑定，其余 93 处 Figma 真有绑定。现取判据 `node scripts/f107-theme-expected-binding-triage.mjs`。详见 [[INFRA-F107]]。",
    "fixDirection": "extract-pipeline",
    "addedAt": "2026-08-07",
    "reviewBy": "2026-11-05",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立，同上（两链 2/2 同值，actual 逐条 `#f1fbf3`，与理由所述逐字一致）。 | 2026-08-28 订正：原 ceNote 的「债在共用 SFC 的 token 定义里」是按「code 债」前提写的，该前提对**本行**确已被 Figma 活源推翻（见 reason）。两链同值这个观察本身仍成立。"
  },
  {
    "component": "Drop down List/Item",
    "field": "rootFillHex",
    "entryScope": "*-disabled-yes-hover-yes--*",
    "reason": "DropDownListSelect disabled+hover 是 Figma 预览态；code intentionally suppresses for runtime UX correctness。已登记 divergence。",
    "fixDirection": "figma-schema-gap",
    "divergenceRef": "translation/divergences.md#dropdown-disabled-hover-preview-state",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立。⭐ 本行所属组件是 37 行里**唯一真正的 light-DOM CE**（`tvu-drop-down-list-select` 在 register.ts 标 shadowRoot:false，实测被测 .dropdown-item 的 rootNode=HTMLDocument）—— 因此这里全局 element 规则可达，但本行的理由是 Figma 预览态 vs runtime 语义，与 DOM 边界无关。两链 4/4 同值。"
  },
  {
    "component": "Drop down List/Item",
    "field": "rootFillHex",
    "entryScope": "*-type-multi-is-parent-yes-checked-yes-active-yes-disabled-no-hover-no--*",
    "reason": "Figma Is Parent=Yes 没有对应的 DropDownListSelect runtime prop，视觉差属 boundary/schema gap。与 disabled+hover 那组是两个成因，故单列一行。",
    "fixDirection": "figma-schema-gap",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立，同为 light-DOM CE 且理由与边界无关（两链 2/2 同值）。"
  },
  {
    "component": "Drop down List/Item",
    "field": "textFillHex",
    "entryScope": "*-radio-is-parent-yes-checked-yes-active-no-disabled-yes-hover-no--theme-light",
    "reason": "同 Is Parent=Yes 无 runtime prop 的 schema gap，只命中 light 主题那一条。",
    "fixDirection": "figma-schema-gap",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立，同上（两链 1/1 同值）。"
  },
  {
    "component": "Tab List",
    "field": "rootBorderHex",
    "entryScope": "*--fill-line--*",
    "reason": "Tab List rootBorder 是 verifier resolution 限制：Figma extract 给的是聚合 root 颜色，code 用的是 per-side border（active 指示线）。含 tab-shell 与 tab-list 两种入口，Tab 与 TabList 实现同一个 Figma 节点、必须视觉一致。",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立，但**作用面在 CE 链只有一半**：理由提的两个入口里，`tab-shell--*` 的 codeComponent 是 `Tab`，不在 react-scope.mjs 的 28 个名单里（react-pilot harness 未绑定），⇒ Vue 侧 4 条、React 侧 2 条。共有的 2 条 actual 逐条相同（bottom 边=expected 值、其余边是聚合串），理由本身不依赖 DOM 边界。"
  },
  {
    "component": "Tab List",
    "field": "textFillHex",
    "entryScope": "*--fill-filled--*--theme-light",
    "reason": "Filled 型的 textFillHex 同属 verifier resolution 限制：Figma 聚合色 vs code 的 per-tab-state 文字色。",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立，作用面同上（Vue 2 条 / React 1 条，差的那条是 `Tab` 入口不在 react-scope）。共有的 1 条同值。"
  },
  {
    "component": "Tab/Item",
    "field": "rootBorderHex",
    "entryScope": "*--state-active--color-white--fill-line--*",
    "reason": "TabItem Line type rootBorderHex 与 TabList 同族：Figma extract 给聚合 root 颜色，code 只画 bottom border 作 active 指示。",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立。shadow-DOM CE，两链 2/2 同值（bottom 边= expected 的 `#434343`/`#cccccc`，其余边是聚合串）。"
  },
  {
    "component": "Slider",
    "field": "rootHeight",
    "entryScope": "*",
    "reason": "Figma 的 root COMPONENT 声明高 16(size=M)/12(size=S)，把溢出的 TEXT 子节点（w=40 h=21）排除在帧外；code 的 .slider 是 grid，行高被同一段文字撑成 21。两侧的文字都是 21 ⇒ 视觉一致，不可比的是「root frame 声明高度」这个量本身。与 rootWidth 是同一个 root frame 的一体两面（宽度可比、高度不可比），同属 INFRA-F129「root 的视觉不只由帧自身决定」那一族。owner 2026-08-28 拍板按 harness-verifier 归类；更干净但更贵的替代路线 = 让 harness 支持分字段对照物（宽比 .slider、高比 .slider__input），属新能力、未立项。",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-08-28",
    "reviewBy": "2027-02-24",
    "ceReviewedAt": "2026-08-28",
    "ceNote": "成立。Vue 链与 React 链**独立量到同一个 21**（四变体全 21）⇒ 21 是组件真实高度、不是某条链的 harness artifact；两链 4/4 同值（expected 16/12 · actual 21）。"
  },
  {
    "component": "Slider",
    "field": "textFillHex",
    "entryScope": "slider--theme-light--*",
    "reason": "2026-09-04 owner 亲自查 Figma 后订正根因：这个 TEXT 节点绑的变量在 Figma 里显示名叫 「Color Type/Text/Text_2」，但其 id（b35edd8cd173ead8f0ac251b3f00a9ec9a7b61f4/3010:117）跟设计系统真正的本地 Text_2 变量（2611:57609，Dark #cccccc / Light #434343，已映射到 --text-2）不是同一个 —— 是另一个同名但不跟随主题的变量（两个 mode 都是 #cccccc），Slider 组件当初被绑到了错的那个。code 侧 --text-2 本来就是对的，问题在 Figma 绑定，不在 code。fixDirection 从此前误判的 code-fix-deferred 改判 figma-schema-gap（Figma 自身的绑定缺陷，不是 code 债）。 🔴 2026-09-15 owner 终裁：**不回头改已发布 Figma 库，维持现状**，原 backlog entry INFRA-F106 当日整条删档。⛔ reviewBy 到期变红时，正确动作**不是**重新提「要不要去 Figma 重绑」—— 那已经拍过了。影响面（现取 `grep -ro '3010:117' figma-data/raw/components/ | wc -l` → 100 = 75 个真实 TEXT 绑定 + 25 个 extractor 派生镜像）：slider 4 · progress 16 · chart 55；重绑这 75 个也修不好产品 mockup 文件里那 1186 处引用（不同文件）。规则已回流 docs/internal/figma-technical-reference.md §Q30（变量显示名会撞，判绑定只能核 id），封路理由 + 重开条件的真源 = figma-sync/variable-map.mjs 那三条 External/legacy 映射上方的注释。🔓 重开条件只有两个：① 有人报出 light 模式下具体受损场景 ② Figma 侧因别的原因本来就要动这些 TEXT 节点（顺路改）。",
    "fixDirection": "figma-schema-gap",
    "addedAt": "2026-09-04",
    "reviewBy": "2027-03-03",
    "ceReviewedAt": "2026-09-04",
    "ceNote": "成立。get_variable_defs 现取两个变体节点（4934:7194 light-M / 4934:7182 dark-M）均解析出同一变量 id、同一值 #cccccc，证实该变量不随 mode 变化；对照 figma-data/normalized/variables.json 里真正的本地 Text_2（id 2611:57609）才是 Dark/Light 分离的那个。"
  },
  {
    "component": "Button/url link",
    "field": "rootPadding.right",
    "entryScope": "*",
    "reason": "owner 2026-08-07 裁定「URL link 不由 canonical Button 承载」，按合法 divergence 第 6 类（用户显式 code-first）登记。Figma URL-link 变体横向 padding 4，canonical Button 渲成 16。",
    "fixDirection": "code-first-divergence",
    "divergenceRef": "button-url-link-not-carried-by-canonical-button-2026-08-07",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立且与链无关：owner 裁定属决策层，不随渲染宿主变化。实测 shadow-DOM CE，两链 4/4 同值。"
  },
  {
    "component": "Button/url link",
    "field": "rootPadding.left",
    "entryScope": "*",
    "reason": "同 rootPadding.right：owner 2026-08-07 code-first 裁定。",
    "fixDirection": "code-first-divergence",
    "divergenceRef": "button-url-link-not-carried-by-canonical-button-2026-08-07",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立，同上（两链 4/4 同值）。"
  },
  {
    "component": "Button/url link",
    "field": "textFillHex",
    "entryScope": "*",
    "reason": "Figma URL link 变体有自己的 typography/underline，canonical Button 不实现 —— 与 padding / hover 底色属同一裁定的三个面。",
    "fixDirection": "code-first-divergence",
    "divergenceRef": "button-url-link-not-carried-by-canonical-button-2026-08-07",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立，同上（两链 4/4 同值）。"
  },
  {
    "component": "Button/url link",
    "field": "rootFillHex",
    "entryScope": "*--status-hover--*",
    "reason": "Figma URL-link hover 无底色，canonical Button 给了 #434343 灰底。同属 owner 2026-08-07 code-first 裁定。",
    "fixDirection": "code-first-divergence",
    "divergenceRef": "button-url-link-not-carried-by-canonical-button-2026-08-07",
    "addedAt": "2026-08-07",
    "reviewBy": "2027-02-03",
    "ceReviewedAt": "2026-08-17",
    "ceNote": "成立，同上（两链 2/2 同值，hover 态在 CE 侧同样能被 locator.hover 触发）。"
  },
  {
    "component": "Button/dark M",
    "field": "rootPadding.top",
    "entryScope": "*",
    "reason": "INFRA-F145 (a) 新增 status 切片当场暴露的存量偏差，⛔ 不是新引入的：.btn 只声明 padding-inline + height:32px，从不声明 padding-block ⇒ 量到的 1px 是浏览器对 <button> 的 UA 默认值漏出来的；Figma 建模为 padding 10 + HUG 高度，两者渲染高度同为 32px。按 FIGMA_AS_SOURCE_OF_TRUTH 这属实现策略差异、应改 code 跟 Figma，但落点是最常用组件的盒模型，改它需要 owner 视觉签核（VISUAL_COMMIT_APPROVED，AI 不得自设）⇒ 具名短期挂账。⛔ 别把这条读成「padding 没问题」。",
    "fixDirection": "code-fix-deferred",
    "addedAt": "2026-09-11",
    "reviewBy": "2026-12-09",
    "ceReviewedAt": "2026-09-11",
    "ceNote": "成立。当日两条链各跑一次全量：Vue 链与 React/CE 链的 A_TRUE_DRIFT_CANDIDATE 均为 16、字段同为 rootPadding.top/bottom、8 条 entry 同批、actual 1 / expected 10 逐位相同 ⇒ 不是 Vue 侧或 shadow-DOM 产物，病灶在两链共用的 .btn 样式表。同批 11/13 个字段（含全部颜色字段）两链皆 PASS。"
  },
  {
    "component": "Button/dark M",
    "field": "rootPadding.bottom",
    "entryScope": "*",
    "reason": "同上（top/bottom 成对出现，同一条缺 padding-block 的根因）。⛔ 别单独删其中一行。",
    "fixDirection": "code-fix-deferred",
    "addedAt": "2026-09-11",
    "reviewBy": "2026-12-09",
    "ceReviewedAt": "2026-09-11",
    "ceNote": "成立，同上（两链同值）。"
  },
  {
    "component": "Button/light M",
    "field": "rootPadding.top",
    "entryScope": "*",
    "reason": "同 Button/dark M —— 同一份 .btn 样式表，浅色档读数与深色档逐位相同（actual 1 / expected 10）。",
    "fixDirection": "code-fix-deferred",
    "addedAt": "2026-09-11",
    "reviewBy": "2026-12-09",
    "ceReviewedAt": "2026-09-11",
    "ceNote": "成立，同上（两链同值）。"
  },
  {
    "component": "Button/light M",
    "field": "rootPadding.bottom",
    "entryScope": "*",
    "reason": "同上（top/bottom 成对出现，同一条缺 padding-block 的根因）。⛔ 别单独删其中一行。",
    "fixDirection": "code-fix-deferred",
    "addedAt": "2026-09-11",
    "reviewBy": "2026-12-09",
    "ceReviewedAt": "2026-09-11",
    "ceNote": "成立，同上（两链同值）。"
  },
  {
    "component": "Drop down List/Select",
    "field": "textFillHex",
    "entryScope": "*",
    "reason": "**量具产物，不是 drift。** 该 target 量的是面板容器 `.dropdown-select`，它本身不含任何文字 —— 每个标签都活在子节点 `.dropdown-item` 里，而那一层已由 82 条 `Drop down List/Item` entry 逐条量着。因此 target 刻意不设 `textTargetSelector`（判据与理由的真源 = 生成器里该 target 的头注释），verifier 于是退回读 root 的 computed `color`，8/8 恒得 `#000000`。⇒ 与 `Breadcrumb/Item`（slot 取不到 label）、`Chart`（无文字节点）已登记的是同一条 harness 限制。**修法方向**：verifier 支持「本 target 无自有文字 ⇒ 不发 textFillHex check」的显式声明（当前只能给或不给选择器，给不了「没有」这个语义），届时本行匹配不到即由 S6 点名删除。",
    "fixDirection": "harness-verifier",
    "addedAt": "2026-09-14",
    "reviewBy": "2027-03-13",
    "ceReviewedAt": "2026-09-14",
    "ceNote": "成立。2026-09-14 两条链各跑一次全量（隔离端口，双方 navigationFailures=0 / measuredEntries 满额）：Vue 8/8 与 React/CE 8/8 的 textFillHex actual **逐字相同**、全为 `#000000`。⇒ 成因在 verifier 的取值方式，与渲染宿主 / DOM 边界无关（`tvu-drop-down-list-select` 是 light-DOM CE）。"
  },
  {
    "component": "Drop down List/Select",
    "field": "rootGap",
    "entryScope": "drop-down-list-select--darktheme-on--type-radio--*",
    "reason": "**Figma 侧作者不一致，⛔ 别去追那个 8。** 现取 `figma-data/raw/components/drop_down_list_select__1446_116439.json`（raw 与 tokenized 两层同值，⇒ 不是 tokenize 产物）：8 个变体里只有 `Dark Theme=on` 的 **Radio 与 Multi** 带 `gap: 8`，其余 6 个（含它们各自的 light 孪生）全是 `gap: null`。而**那个 8 对应不到任何几何差异** —— dark 与 light 的 Radio 容器 `h` 同为 128、`pV` 同为 8、三个子节点（Search Area 40 / Select Item 112 / Operation Area 37）逐个同高，且子节点是叠放的（y 重合、Operation Area 超出容器高），面板可见高度由 `Select Item` 单独决定，不由 gap 堆出来。code 侧只有一个两主题共用、不声明 `gap` 的面板 ⇒ actual 恒 0。⇒ 若按 dark 侧把 code 改成 `gap: 8`，light 侧反而会从对变错。**这属 Figma 真源自身的不一致，按硬规则 #1 ⛔ 不去改 Figma**；正解是由 owner 在 Figma 侧把这两个变体的 gap 与它们的 light 孪生统一，统一后本行匹配不到即由 S6 点名删除。",
    "fixDirection": "figma-schema-gap",
    "addedAt": "2026-09-14",
    "reviewBy": "2027-03-13",
    "ceReviewedAt": "2026-09-14",
    "ceNote": "成立。2026-09-14 两链各跑一次全量：Vue 与 React/CE 在本行上都失败、actual 同为 0 / expected 同为 8 ⇒ 与渲染宿主无关，缺口在 expected（Figma）侧。"
  },
  {
    "component": "Drop down List/Select",
    "field": "rootGap",
    "entryScope": "drop-down-list-select--darktheme-on--type-multi--*",
    "reason": "同 `type-radio` 那行（同一条 Figma 作者不一致：dark 变体 `gap: 8`、light 孪生 `gap: null`）。⛔ 单列一行而不是写成一个更宽的 glob —— 另外两个 Type（Operation List / Sort By）两主题皆 null、本就 pass，把它们圈进来会让豁免面无谓扩大。",
    "fixDirection": "figma-schema-gap",
    "addedAt": "2026-09-14",
    "reviewBy": "2027-03-13",
    "ceReviewedAt": "2026-09-14",
    "ceNote": "成立，同 type-radio 那行（两链同值，actual 0 / expected 8）。"
  }
]
