# STATUS Changelog (Archived)

> 历史 session changelog 归档。2026-06-09 从 `docs/STATUS.md` 第 3 行（一条 49KB 单行 blockquote，导致 STATUS.md 整读超 token 上限 / 被截断）拆出，**内容逐字保留、未删减**。
>
> **新 wrap-up 长条目 prepend 到本文件顶部**（紧接此说明之后）；`docs/STATUS.md` 顶部只保留**当日 Last updated 摘要 + 指针**。
> 这样 STATUS.md 始终可一次读完，完整历史在此可检索。

---

> **2026-07-10 — INFRA-F55 支柱① TS/JSON token 出口：实现全 7-task shipped**（SDD，commits `45e7edd8..e5efb194`）——零依赖 emitter `figma-sync/generate-token-exports.mjs`（parseCss→classify→buildTree→emit 四纯函数，纯 stdlib）把 `variables.css` 单一真源转 **DTCG JSON**（`./tokens`：alias 保留 `{path}` reference · 双主题 `$extensions["tvu.mode"]`）+ **resolved TS**（`./tokens/js`：dark `tokens` + `tokensLight` + `TokenName` union）；`main()` 写三文件 tokens.{json,js,d.ts}，挂 build（vite build 之后避 emptyOutDir）+ `audit:token-exports` drift gate 挂 prepublishOnly。方案 A · 无 Style Dictionary · 全量三层（293 token=dark201+light92 → 201 DTCG 节点 · 92 主题覆盖 · 44 whole-value alias）。SDD 逐 task 独立复审校出并修正 **6 处 plan 示例代码/spec 合规缺陷**（单行块吞 token · 多行值丢失 font/shadow · section 被散文注释冲掉 · classify 4-bug〔size 误入语义/prefix 覆盖/循环判层/mask 误判 shadow〕· 复合 var 未解析成字面 · **tokensLight 光值 reference 静默错退 dark〔13 token〕**）。GETTING_STARTED §8 补消费文档。**同日顺带修** docs React-toggle bug（`d6762979`）。**同日（另 session）INFRA-F59 外观变体 prop 命名统一 SDD 全 9-task shipped**（8 组件 11 改名+1 删除统一为 fill/type/color/state + audit-prop-naming 横向一致性 gate；git `39b8b5a5..HEAD`）。前情 → **INFRA-F55 全生命周期优化程序推进**：① **INFRA-F58 文档一致性 + SoT 单一化全 7 子项 shipped**（`21c8c819` + `2a6eee5e`）· ② 精简（删 222 死件 `1b6f684d`）· ③ **支柱④ 上游理解-分析 gate 设计 spec + 全 11-task 实现 shipped**（`a043a2c1`/`75daf749`/`c4691e51..c1b10a86`，428 vitest 绿）。· **（仅规则回流）** V4-2333 触发 `mockup-conventions.md §M23.12` 回流（一 feature 一 Section 归组 = AFTER 交付集 · BEFORE 移出作对照 · 文档卡统一 PRD 宽度）+ 术语全局改名 UX Journey Map → User Journey Map。

---

> **2026-07-08（续² · INFRA-F54）** — **INFRA-F54 ✅ 全修完**：剩余 3 个 prop-fallback 竞争组件（FormItem label / Tooltip content / PopupBox footer）用新 CE-safe composable `useHasSlot`（`src/canonical/composables/useHasSlot.ts`）修复。根因彻底钉死（Vue 3.5 runtime-dom 源码）：`VueElement._createVNode()` 建 CE root vnode 时**只传 props、不传 slot children** → canonical root `$slots` 恒空 → `v-if="$slots.x"` 恒 false 丢 slot。composable 双路径检测（shadow/light/SFC 回退），只在真有 slot 时转发。真实 React island + 像素截图实证 6/6 + 回归守卫 + vue-tsc + 395 vitest 全绿。

---

> **2026-07-08（续 · INFRA-F53）** — docs 站部署冻结 ✅ 修复（plan B）+ F46/F48/F47 全部 live。根因确证：F46 react islands 经 `@demos` alias 把 react-dom 拉进主 playground build，服务端无 install → 冻结 07-06。plan B（commit `5bf6d765`）= 镜像 react-pilot/dist META-02 模式：`playground-dist` 纳入 track + build best-effort + `git checkout` 兜底，push 后 ~20s 线上恢复。收尾揪出第 3 个静默红：GitHub Stale Anchors workflow `setup-node@v5` 找不存在的 pnpm → `package-manager-cache: false` 修（`22f365b7` 转绿）。F53 收尾 HEAD `22f365b7`。另起：Vue↔React demo 结构对比工具（`3d96da3b`）揪出并部分修 F54。

---

> **2026-07-08（分析 session · 只读）** — 完成"全生命周期流程完整性"评估 → 存档 `full-lifecycle-assessment-2026-07-08.md`（自触发脊梁 + 四支柱〔契约/双质量网/薄适配器/上游理解-分析 gate〕+ 元层 + PR 关卡）。入口 `_plans/next-session-pickup-2026-07-08-full-lifecycle-optimization.md`（tracked = backlog INFRA-F55）。更正两处历史误判：单测在 CI（Gitea `pr-checks.yml`）、设计走查有正式 gate。

---

> **2026-07-08（F47 站内 changelog）** — **INFRA-F47 站内 changelog ✅ 代码 shipped（三端 push）但收尾时发现线上未 live**。版本菜单 404 真根因 = 外链硬编码 `/blob/main/`（repo 默认分支 master、无 main）+ repo 私有（baseline 证伪 backlog "部署/多版本快照" 假设）；修法 = 站内渲染 CHANGELOG（**H 方案**：零依赖 / 无 v-html / 无产物，`parseVersions` + `{{}}` 插值 `<pre>`，菜单改站内 transient 滚动）。全闸绿 + headless 7/7（含自纠：headless 抓 URL 深链被规范化抹段的滚动 bug）。commit `5b0fac32`(feat) / `0c4af48f`(补 site-review-manifest 修 audit:docs-site) / `0011ae00`+`65d0d926`(backlog) / `2e0a5fda`(修 F52)。**⚠️ 收尾 live 核验揪出 2 个 pre-existing 静默失败**：**INFRA-F53** docs 站自动部署冻结在 07-06（→ 已于当日 plan B 修复，见下条 07-08 尾）· **INFRA-F52（已修）** GitHub CI 自 ~07-02 全红一周（divergence `logo-menulist` verifyHint grep gitignore 产物 `dist-wc/`，改指 committed `components.config.ts`）。

---

> **2026-07-07（F49/F50）** — **INFRA-F49 + INFRA-F50 ✅ SHIPPED**（三端 push）。**F49** radio 选中标签 ±1.5px 瞬移：根因**非** backlog 假设的 React re-render/12-wrapper re-push（实测只翻转的 2 个 radio 动）——真因是 `<tvu-radio>` CE 宿主盒比 21px label 高 ~1.5px（line-box strut 余量），dot 的 v-if 切换使 label 在余量内滑动；修法 `:host { display:inline-flex }` 收缩宿主，实测 ±1.5→0（Vue 侧一直 0）。**F50** Pagination 页大小选择器由原生 `<select>` 换为 DS SelectBox（Figma 真源即 `select box/line`+`/filled`）；theme 由运行时探测祖先 `[data-theme]` 驱动 SelectBox darkTheme（Pagination 公共 API 无变更，比 backlog 估的轻）；`tvu-pagination` 转 `shadowRoot:false` 使 teleport 下拉浮层在 React/CE 侧有样式（backlog 漏掉的一环）。全 gate 绿（vue-tsc / vitest 391 / build:wc / render-verification 930 · drift A=0 / figma-vs-sot A=0 / self-audit-phase2 / demo-slot-boolean）+ 双框架×双主题视觉复核（light 白 / dark 深，下拉 teleport 有样式）。

---

> **2026-07-07（续）** — **INFRA-F46 owner live 走查 → 5 fixes SHIPPED**（commit `91df2561`，三端 push，`VISUAL_COMMIT_APPROVED=1`）。owner 本地 :4321 拨 React 走查 fan-out 页，报 7 finding：批量修 5、defer 2。**A** Switch loading 显禁用视觉（Figma SoT 实证所有 `loading=yes` 恒 `enable=no`，补齐镜像 disabled 的 track/thumb 规则，旧代码只设 cursor:wait）· **B** InputNumber demo +/- 交互化（双框架；根因 `currentValue = props.modelValue ?? uncontrolledValue` 静态 modelValue 屏蔽内部更新→各实例改 reactive state）· **5** Breadcrumb 加 `separatorType='slash'`（code-first，Figma 无此变体；base+canonical+config+regen wrapper+双 demo+API+divergence 登记）· **6** 删 Pilot 分类+页（fan-out 后冗余；顺修 slot-boolean audit 的 checkVueDemo 解析 import 别名——Button Vue 检测原靠被删 gallery 页字面 `<ButtonBridge>` 兜底，实际一直在 ButtonPage 以 `<Button>`(别名) + slot 内容真实演示）· **7** 左导航独立滚动条（`.docs-sidebar` max-height+overflow-y:auto，mobile 重置）。全 gate 绿 + headless 复验 5 项全过（含纠错：一度误判 InputNumber fix 破坏 island，实为 navigate 错路由 `inputnumber` vs `input-number`→fallback 页；标准 gallery 交叉验证排除，no-fabrication）。**defer 单排**（登记 INFRA-F49/F50）：#3 React radio 文字瞬时跳动（shadow-DOM CE + setState 全 wrapper re-push reflow，infra 级）· #4 Pagination 原生 select→DS Select（需给 theme-agnostic Pagination 加 theme prop thread 到 consumer，核心 API 变更）。

> **2026-07-07** — **INFRA-F46 fan-out（Plan v2）SHIPPED**（commit `d60c76c5`，三端 push gitea+github）。把 pilot 已验证 full-parity React island 范式从 4 pilot 组件铺到剩余 21 in-scope 组件页（Badge/CheckBox/Pagination/Input/InputNumber/Slider/FormItem/Radio/Message/Notification/Progress/Rating/Pill/Steps/Tabs/Breadcrumb/Switch/Select/DateTime/Tooltip/TopBar）= 全 25 in-scope 组件页 demo 区可拨 React（导航/TOC/API 表/双语/主题全复用 Vue 外壳）。每组件 = `demos/<C>.tsx`（镜像 Vue 页 section + slot 投影 + boolean live + 交互 parity）+ `<c>-demo.css`(@import demo-shared.css) + Page 接 `FrameworkDemoRegion` + App.tsx 消费 + PILOT_MAP 注册。5 批并行 subagent-driven（每批各碰 3 独立文件，主线串行集成 App.tsx+PILOT_MAP+跑权威双闸）。全 gate 绿（主线亲验）：parity 25/25 PASS(blocking) / F45 28-in-scope side-failures=0 / vitest 386 / vue-tsc / build:playground + react-pilot build / self-audit-phase2 / 0 undefined-token / 0 孤儿 class / 无内联 SVG。过程修 pilot 遗留 bug：3 处 undefined token（`--text-1`/`--text-primary`/`--line-default`→合法 theme-aware token）、Steps 老页假 PASS（`example-section` 裸 `<h2>`→加 `docs-section__title` 标准化）、gallery `main.tsx` import docs.css（tech-debt#2 base 类策略）。opus whole-branch final review = READY TO MERGE，2 Important 已修（Progress.tsx unkeyed fragment→`<Fragment key>`；Tooltip.tsx 裸 CE camelCase `darkTheme`→kebab `dark-theme`）。收尾 commit 前主线复验：vue-tsc/parity 25-25/slot-boolean 28/builds 全绿 + fix 独立 grep 实证在源码 + react-pilot/dist 重建幂等（同 hash）+ headless live 终验 Badge/Notification/Select/Tooltip × light/dark 8 组全挂载 0 error。stage 显式排除 2 个 figma-data 时间戳文件（非 F46，别 session 副产物）。余留：owner 可选浏览器手感走查 + tech-debt N-copy 抽取（defer）。

> **2026-07-06** — **INFRA-F46 pilot Task 1-8 shipped（Button 切片 owner 签收）**。docs 全局 Vue↔React 框架开关（React islands + full parity）：build 基建 + `useDocsFramework` + `ReactIsland.vue` + `FrameworkDemoRegion.vue` + DocsShell 全局 framework 开关 + Button full-parity demo（`react-pilot/src/demos/Button.tsx`）+ F45 audit 扩展解析 `demos/*.tsx`（硬规则 #8 不回归）+ `audit:demo-framework-parity` + ButtonPage 接入。Button 垂直切片 owner 已视觉签收（本地预览真悬停验证；含 CSS parity 共享 `button-demo.css` + hover 交互 parity）。commit 4939945f→db3c0a2f。（Task 9-12 于 2026-07-07 续完，见 STATUS 当日摘要。）

> **2026-07-03** — **开放项（未完成）**：**INFRA-F45**「组件 demo 必演示 Slot+Boolean（Vue+React）」全量回填 + audit gate（AGENTS 硬规则 #8 的 enforcement；PopupBox exemplar 已 ship，规则前维持 L1）。**本日已修并移出 backlog**：INFRA-F43（light-DOM CE + Teleport + slot 不投影 → Teleport 上移 canonical CE 根，slot 正常投影，React PopupBox 弹窗 FormItem slot 实证 + 回归 spec）· INFRA-F44（React wrapper 数组 prop mount 竞态 → Chart `datasets` 补 `() => []` 默认，console 12 错→0）。（F45 已于 2026-07-06 shipped，见 STATUS 当日摘要。）

> **2026-06-23 mockup-flow conventions 回流（消费侧 V4-2285/2286 Embedded Audio）** — `mockup-conventions.md` 新增 **M23.8.1**（PRD「需求来源/Source」段须列全需求链上**所有相关 ticket**：客户 `SEC-*` / 功能 `FB-*` / 开发 `V4-*`，以 Jira issuelinks 核全无遗漏；每个 ticket ID + Slack 等外链**必 `setRangeHyperlink` 可点击**（禁纯文本 ID）+ 建议 cyan `#33A4FD` 高亮；**create 与 update 都遵守**，后续新增关联 Jira/Slack 时 update 须回补）+ 路由表 M23.8 触发行扩到「写改 PRD 需求来源段」；`design-process.md` Step B 需求来源定义加同款要求 + 指向 §M23.8.1。**实证**：V4-2285/2286 Embedded Audio PRD 来源只写 V4-2285/V4-2286，漏 FB-9586/FB-9587（功能请求）+ SEC-669（客户 Epic）且全纯文本不可点击（用户抓「需求缺 FB JIRA + 链接为什么不可点击」）→ 回补全链 + 逐 ID setRangeHyperlink + cyan 高亮。**另补 Q15 复发治本**：把「往 Section 内 create/move/定位节点」加进 §AI 读取指引路由表，强制起手 load `figma-technical-reference.md` Q15（SECTION 子节点 = section-relative；2026-06-04 立后多次重踩，根因 = Q15 不在路由表、scoped-load 扫不到）。commit（本 session）。

> **Last updated**: 2026-06-11 — **v0.9.0 published & verified + backlog 全量 reconciliation**：① **v0.9.0 发版**（3 minor：⭐ship-token-css 修 v0.2–v0.8 潜伏的 `dist/style.css` 零 token 缺口 / TopBar Digital Numbers 时钟字体 / showMenu default→false）——发版前 **consumer 真渲染双路径 9/9 PASS** 实证闭盲区，本地 16 闸+render-gate（926 entries A=0）全绿 → CI publish success → **Packages API verified `0.9.0` created 07:21:09Z**。② **backlog 35 条 ### → 1 条真待办**（794→~40 行，每条 code/audit/A=0/live-Figma 实证移除）+ 新建 [`design-review-queue.md`](./design-review-queue.md)（设计侧观察队列，6 迁入全 live 复核→3 删 3 留）。③ 2 条流程 memory（reconcile 主动判定 + **外部声明搬动前必 live 重验**）。**当前无立即可推进工程 backlog**——下一步在 owner 侧（v1.0 gated / design-review-queue 3 条待设计师 / F41 icon 注解 Low）。⚠️ vue@3.5.36 npm latest 官方损坏，consumer fresh install 钉 vue@3.5.35。④ **Claude Design 导出管线 ✅ shipped（commit `863ff5eb`）**：`pnpm export:claude-design-bundle` 产出 38-entry 策展 ZIP（13 篇 reference docs + 644 矢量 SVG sprite + 18 类图标目录 + token CSS + SKILL.md），触发词「更新 Claude Design 文件包」= `pnpm build && pnpm export:claude-design-bundle`，SOP = `docs/CLAUDE_DESIGN_SETUP.md`。TVU 第三条 AI 分发轨道完成。⑤ **流程基础设施补强（/insights 月度复盘触发）**：detect-figma-task hook 加图标 Library-First 红线（引导先走 affordance-search agent，commit `8dce1e8f`）；落可复用「设计规范+流程体系完整性 review」起手 prompt（[`design-spec-process-review.prompt.md`](./_prompts/design-spec-process-review.prompt.md)，commit `552b5ae3`，**下个 session 可直接跑**）；全局工作规则「批量任务走 subagent」。复盘实证两个被报告夸大的结论：所谓"1/3 session 因 token 丢工作" = insights 分析工具自身 500-token 上限总结不动超大 session，真实 transcript/commit 无损；"21 次 wrong_approach"真系统漏洞仅 1（图标违例，已 hook 补）。

> **2026-06-11 backlog 全量 reconciliation + design-review-queue 拆分 + v0.9.0 发版（本 session）** — ① backlog 从 35 条 ### 收敛到 1 条真待办（794→~40 行）：移除 ~32 条已完成/已 dispositioned/obsolete，每条经 code/audit/A=0/live-Figma 实证（非按 entry 自述）；INFRA-F21（v2 被 render-drift-gate 取代+原 framing 违禁启发式、v3 eslint 已入 pre-commit、v4 冗余）/ F25（docs 对比度已被 axe a11y CI 覆盖）判 obsolete 移除；唯一剩 INFRA-F41（icon 注解 Low/可选，live 证伪旧 grey-13 claim——112 变体 152 图标叶子全绑 Icon/Default 零 drift）。commit `1b7adc45`。② 新建 [`design-review-queue.md`](./design-review-queue.md)（设计侧观察队列，从 BRIDGE-DESIGN-REVIEW 迁出）：6 条迁入全量 live 复核 → 3 删（图标 grey-13 散绑/placeholder 散绑/sort 方向图标均已被设计师修）/ 3 留盖 live 2026-06-11 戳。③ 2 条流程 memory：reconcile 主动判定 + **外部声明搬动前必 live 重验**（无降级选项、不搞全局时效戳——用户点出的递归性 stale-propagation 问题，上机制不上规则）。④ consumer 真渲染验证双路径 9/9 PASS（闭 v0.2–v0.8 token 缺口盲区，截图入 `_reports/`）。⑤ **v0.9.0 published & verified**（3 minor：ship-token-css/时钟字体/showMenu；本地 16 闸+render-gate 926 entries A=0 全绿 → CI publish run 27330427930 success → Packages API created 07:21:09Z）。commits `8a1a7de7`+`1e44db6f`。生态注：vue@3.5.36 npm latest 官方损坏，consumer fresh install 钉 vue@3.5.35。

> **2026-06-11 TopBar 时钟字体 + showMenu default + ⭐consumer token 缺口修复（commit `2ab5356c`, gitea master，并行 session）** — 从"docs 站时钟字体与 Figma 不符"切入挖出三层问题：① **时钟字体**——Figma node `4771:7194` 用 "Digital Numbers"(Stephan Ahlf, SIL OFL 1.1)，self-host 原版与 Figma 同字体（先误用 DSEG7 替代，owner 纠正"该先查是否开源"→ memory [[feedback_verify-resource-availability-before-workaround]]）+ 新增 `--font-family-clock` token；② **showMenu** default `true→false` 跟 Figma 组件集 `4771:7173`；③ ⭐ **修复 `src/index.ts` 从不 import `variables.css` → `dist/style.css` 零 token 定义的发布缺口**（v0.2–v0.8 一直存在、consumer 组件 unstyled）。3 changeset → 已随 v0.9.0 发版。

> **2026-06-11 contrast 全线收口 + Notification Figma 元数据修正（并行 session）** — ① color-contrast library 47 对 + non-text 20 对全部收口、零 Figma 改动——A=品牌决策 accept；C=owner ruling accept（"以 Figma 为真源，不修改"）；B #5 与 D #11/#8/#14 = playwright 实测 axe body-bg fallback 测量伪影（真实绘制底白色 ≥7:1 PASS）；non-text 20 对 owner 拍板有意设计 accept。② live Figma 复核：Notification Confirm/Delete fill 已绑 `UX/Brand/Brand`/`UX/Red/Default`（raw hex 不存在）→ 子项 resolved。③ owner 授权 API 更新 Notification set `1408:17154` description：旧 `status` 轴 → form×type×closable 双轴 + Module Width，写后读回验证，owner 手动 publish 后 live read 实证传播（32 变体）。

> **BRIDGE-MOCKUP-008 Phase D ✅ shipped 2026-05-28** — 新增 `audit:figma-vs-sot`，把 Figma published icon library vs `affordance-categories.json` 纳入 `sync:figma-library` Step 14 blocking audit；首次实跑 C=3 rename drift（Calender→Calendar 等）→ in-place patch SoT → 复跑 A=B=C=D=0 全绿。

> **2026-06-10 元层合理性审计（system-design-review）→ 修复批 1-4 ✅ 全部 shipped（同日）** — 审计：6 维度 Workflow fan-out + 对抗 verify（29 agent）产出 [`_reports/system-review-2026-06-10.md`](./_reports/system-review-2026-06-10.md)（9 P1 / 9 P2 / 5 INFO）。修复 **23/23 全清**：**批1** `15957998` enforcement 真相对齐（pre-commit 挂 D/F/G 条件 gate / 新建 `ci.yml` master-push audit-matrix / status-consistency 加 **C4** backlog 计数自动核对 / RELEASING 10→15 闸 + render-gate / AGENTS 硬规则表加 Enforcement 层级列 L1-L5）· **批2** `3086c9ca` 契约 gate 补强（docs 站三视图 views 声明+双向校验 / a11y 非阻塞 report job / changeset 消费 tag-time guard）· **批3** `c23537a1` onboarding 重构方案 A（L-core 4 份全读 / L-ref 触发深读 两层）· **批4** `9e557ebc`（eslint dogfood `lint:ds` 进 prepublishOnly+pre-commit / token-contract pre-commit / `pnpm release` 一键脚本）。

> **2026-06-04 mockup-flow conventions 回流（消费侧 MicroApps MC-44）** — Graphics Insertion 双预览 mockup 交付：**mockup-conventions.md M23.9** 加「Confirm/delete-confirm popover 必 frame 外 + 连线 + UX 说明」；**design-process.md** 加「State-Completeness Enumeration」。commit `536ac40b`（gitea origin/master）。

> **2026-06-03 mockup-flow conventions 回流（消费侧 V4-2312）** — design-process.md 8 步流程：加「Section 包裹整份交付物」+ Jira 组件须 clone 同文件 instance + 「交付收尾」段；mockup-conventions.md M23.8 加 `Jira requirement` per-file key/instance 登记表；新增 `_feature-design-record.template.md`。commit `1a91ca63`。

> **BRIDGE-MOCKUP-008 Phase D ✅ shipped 2026-05-28** — 新增 `audit:figma-vs-sot`，把 Figma published icon library vs `affordance-categories.json` 纳入 `sync:figma-library` Step 14 blocking audit。首次实跑 figma 643 vs SoT 643，A=B=C=D=0（3 个 C rename drift plan owner verify 后 patch）。`Calender→Calendar` typo Figma 端正名落地。

---

**Last updated**: 2026-06-10 — **INFRA-F42 ✅ shipped**（图标导出 diff 化:内容 hash + file-version 快门 + orphan 定向清理 + 中断安全;commit 14c69d2c)。**docs QA + 组件保真批 ✅**（commit c91e1bc3）: Chart 展示全局 2 列无滚动条 + content-fit / PopupBox 页换 DS Button + 真声明式表单弹窗 demo + Figma Coverage + 删冗余 alert/confirm/open / **base PopupBox footer 按钮 bug**(传已废弃 variant/size 死 prop→两钮都掉默认绿 → 改 canonical Button API,Cancel ghost≠Save fill) / **Button 自带 DS 字体**(font-family inherit→`--font-family-base`,修 Teleport 出 app 字体上下文渲染) / **SelectBox value 左对齐**(覆盖 native button UA center 继承,Figma 左对齐) / **canonical-compliance 白名单识别 root-fix**(向上扫整个紧邻注释块,修注解插入挤开 allow 标记→master RED 转绿) / docs nav Feedback 拆 **Overlays&Messaging** 按交互模式分组 + when-to-use + Progress→Data / Notification 加 side-pop 侧边锚定 demo / **`ds-enforcement-scenarios-spec.md`**(场景化强制 G1-G4 spec 草案,对齐 R7/R6/M21)。**C + G1-G4 ✅ shipped（同日续 session）**: **C** Select 下拉 Teleport→body+fixed 定位+跨边界 click-outside（修 PopupBox 内 overflow:auto 裁切）+ 下拉自带 DS 字体（teleport 出 body 继承 Times 衬线）+ 顺带修 InputBox disabled placeholder/textarea 文字色 20 条 render-drift（stale report 掩盖,按 Figma 真源逐节点修,A=0）（commit `206759f7`）· **G1** `no-native-element` ESLint 规则 + CLI R15（`ae9b0ba5`）· **G3** 消费接线 eslint.config/lint-staged fragment + setup Step 2.6 场景感知（`f0faa32b`）· **G4** `audit:mockup-conformance` **手动总闸**（event-driven：mockup 交付收尾 + consumer `audit:mockup` 时跑，DS 仓不在 commit 时 gate）合并 5 个 mockup audit + 接 orphan library-origin（`adc183be`）· **G2** `no-hardcoded-spacing` 规则 + CLI R2S + px↔token 共享映射（`ed510c6d`）。enforcement 全场景感知（strict=recommended config / 增量=lint-staged 改动文件 / mockup=`--non-blocking`,守 R6 不全量误报 legacy）。**预存 render-coverage finding ✅ resolved**: `audit:render-verification-coverage` 此前报 InputBoxBase/SelectBoxBase/PillCounter 缺 mapping（pre-session 即 RED）→ 核实后加 `COVERAGE_EXEMPT` allowlist（SelectBoxBase/InputBoxBase = 复合基层经 wrapper 覆盖 144/112 entries；PillCounter = 代码先行 Figma `Pill/Counter` 未发布 BRIDGE-MOCKUP-003）→ `audit:self-audit-phase2` 转全绿。**Notification 重构 Figma ✅ publish（code §4 待做）**: owner-directed 把扁平 `status` 重构为 `form`(dialog/alert/pop confirm/slide)× `type`(warning/secondary warning/error/info/success/none)× theme = **32 变体**(GRID 布局),唯一布尔属性 `closable`,按钮**按 form 固定**(dialog/pop-confirm=Cancel+Confirm、**alert=单 OK 绿**新增、slide=无按钮),宽度绑 token(dialog/alert/pop-confirm=480 XL、slide=320 M),图标严重度阶梯(warning=warning 2 橙<secondary warning=Error 4 红三角<error=Error 2 红✕)。多轮 owner 修订(恢复 dialog/info、加 alert form、rename quick confirm→pop confirm、删 cancel/confirm 布尔改 form-intrinsic、颜色手动校 token、set 转 GRID)后已 **publish**。**code §4(breaking major)✅ shipped（commit `a9423de4`，同日续 session 收尾）**: sync ✅ + base/canonical `status→form+type+closable+alert` 重写 + 全 6 gate 绿（vitest 244 / vue-tsc 0 / render-verification 926 / **drift-gate A=0** / self-audit-phase2 / figma-vs-sot 644 全零）+ major changeset。收尾两项实做超出 pickup 描述：①drift 假阳根子是**全 32 条** expected 误取 Title 节点（非仅 7 条 alert）→ generator 加 `textNodeNamePattern` 按名定位 "↳ Description"；顺带 extract 实证修 2 处真 code drift（**pop confirm desc 主文字色** `--text-body` + **gap 24** `--sp-l`）+ GRID 布局把 32 cell 变 FILL 丢 Module-Width 绑定 → generator `fillSizingIsGridArtifact` 宽度不校假值；**同日 owner 指示立即修**：use_figma 把 32/32 cell 重设 FIXED + 绑 Module Width XL(480)/M(320)（读回 32/32 + 截图验证）→ 全量 re-sync 后宽度数值校验恢复、守卫自动失活（保留防复发）；owner 待 Figma UI publish 一次；②demo 真实定位 ✅：NotificationPage Interactive Scenario + slide demo Teleport（dialog/alert/pop confirm=居中模态+遮罩、slide=视口右上）、PromptMessagePage try-it Teleport 视口顶部、pop confirm demo 去 title（Figma 无 Title 节点）、navigation.ts 简介更新双轴模型、component-affordances Notification entry 更新（修 H gate stale）、52 张视觉 baseline 刷新。**contrast library 段全收口 + BRIDGE Notification staleness 清（同日续）**：Group C = owner ruling accept（"以 Figma 为真源，不修改"）；Group D #11/#8/#14 + Group B #5 = plan owner playwright 实测**全是 axe body-bg fallback 测量伪影**（真实绘制底白色 ≥7:1 PASS；body light 主题仍 #141414，axe 漏识别中间白层）→ **library 段 47 配对零 Figma token 改动需求**；live Figma 复核实锤 owner 已修 Notification Confirm/Delete raw-hex→`UX/Brand/Brand`/`UX/Red/Default` 绑定（GRID 宽度修复 = `af1b6fef`）→ backlog button-fill 子项 resolved + 新登记 **set `1408:17154` description 仍旧 status 轴文案** stale 待 designer 随下次 publish 更新。当日及历史完整摘要 → [`docs/internal/STATUS-CHANGELOG.md`](./internal/STATUS-CHANGELOG.md).

**Last updated**: 2026-06-09 — (pm session) Figma 对齐 follow-up + owner token 修正：InputBoxBase 图标状态 ux-prop 驱动 / StepItem active 标题 + icon-completed 连接线 / Chart legend 圆点 + 去 type-switcher 平铺 / Border-Color-Chart 页 isDark 主题 wiring / FormItem matrix textarea 渲真控件 / **Step completed 勾浅色黑勾根因 → owner 新增 `Text/Primary Button`(--text-primary-btn #f8f8f8 两主题一致) + working-principles §4.1「填充上的内容色」规则** + scoped re-extract 把 4 组件刷 #f8f8f8。**立 INFRA-F42**（图标管线 diff 化，消除全删再重建）。— 上面 INFRA-F41 Task 5 (icon family, gap→19) + 设计系统全维度优化.

**Last updated**: 2026-06-09 (**INFRA-F41 Task 5 + 设计系统全维度优化（7 commits）**：核心诊断=不是缺规则，是规则过载 + 只在 commit 时执法 + 多 SoT 互相矛盾；治本=把规则变成机器可校验 gate。**① INFRA-F41 gap 28→19**：InputBox search 注解 dark `Icon/Default` 1436:31248 + token→`--icon-default`（`b298b465`）；**owner 拍板图标状态规则**（rest=Icon/Default、hover/选中=Icon/Active；light raw grey-13 是 Figma hygiene outlier，code 跟语义 token）→ input/select clear ×（仅 focused 渲染）`--icon-active` + 注解 dark 节点（1436:31303 / 1436:35070）双 nodeCheck PASS、close × 加 :hover（`7ee2d04e`，gap 25→19）。剩 Figma-side：designer rebind light feature/clear 变体（低优、code 已对）。**② governance 批（`8fde934c`）**：6 agent 实证 → 解 `audit:status-consistency` 红闸假阳、AGENTS/PROJECT_MAP 冻结阶段块→指 STATUS、FIGMA_SOT manifest 待建→已建、3 个 prepublishOnly 假 gate（exit 0）→真闸、stale Alert→resolved。**③ STATUS.md 拆分（`a20b5f2a`）**：49KB changelog 单行→ [`STATUS-CHANGELOG.md`](./internal/STATUS-CHANGELOG.md)，80KB→18KB 可一次读完（"已读不执行"机械成因）。**④ Q3 3 层 token 管线（`1664b49b`）**：generate-tokens 改 primitive tier 从 Figma in-place sync + 保留 236 手写 semantic/component token（修 foot-gun）、honest header、新 `audit:token-contract` gate（prepublishOnly + sync Step 8.5）、sync Step 2.5 补 variables.json→variables.css 断链；byte-identical token 值。**⑤ Q4 文件瘦身（`9c2ea114`+`20073400`）**：归档 29 旧 pickup（_plans/ 30→1）+ 163 已合并 prompt（_prompts/ 144→0），filesystem-driven 重写 inbound link、0 新断链。roadmap [`design-system-optimization-roadmap-2026-06-08.md`](./internal/_reports/design-system-optimization-roadmap-2026-06-08.md) 余结构项（changesets / render-gate 进日常 CI / RFC gate / docs 角色视图 Q2 / Code Connect）待 owner 拍板。**完整历史 changelog → [`STATUS-CHANGELOG.md`](./internal/STATUS-CHANGELOG.md)**。)

---

**Last updated**: 2026-06-08 (**INFRA-F41 Task 5 再续 part5：EXTRACT-icon-token-fidelity 机制 shipped + 2 icon 闭合（gap 30→28）**：① `575eb386` **机制**——icon instance fill 绑 published-library(remote) 变量、raw getVariables 只返回 local collection、Pro plan 离线拿不到 remote 变量名 → normalize hex-fallback 在 #9e9e9e 处歧义。解=翻译层 `figma-sync/remote-variable-aliases.json`（live Figma get_variable_defs seed remote-ID→cssVar，remote ID 跨组件稳定），resolvePaintToken 在 hex-fallback 前查（strategy remote-variable-alias）；首条 Icon/Default。**Breadcrumb separator 端到端验证**：解析 --icon-default + manifest showSeparator:true 让 nodeCheck 实跑 → 双 theme PASS（非假 covered），gap→29。② `3965e729` **InputNumber +/-**：绑 LOCAL Icon/Default(v=2611:57617)、已直接解析，注解双 button 双 theme PASS，gap→28。**关键认知修正**：icon 族多是**状态依赖**——default 态基本绑 Icon/Default（local 或 remote-via-alias，可干净注解验证，如 InputNumber/Breadcrumb），focus/active 态才变色（grey-13/grey-2）；真·固定 raw-grey（如 PromptMessage close=grey-6 无状态）才是 binding-hygiene 待 designer rebind。InputBox feature/clear（6）default 态可匹配（--text-tips/--icon-default 同值 #9e9e9e/#595959），留聚焦续做（需确认 harness 渲染 default 态 + 处理状态变化）。

---

**前序同日 part4：owner 澄清「Figma 唯一真源」后纠正分类 + live Figma 实测改 code**：owner 质疑我把若干盲区误归 floor/延后——用 live Figma `get_variable_defs` 实测纠正：① `2f3c3a1a` **Progress track 真 drift**：Figma 4915:7195=`Background/Layer_3`(#262626/#f0f0f0)，code 用 `--line-deep`(#353535)（CANONICAL-004 所致）→ 改 `--bg-layer3`（supersede CANONICAL-004，回归 T1b 原意）+ 注解 track，PASS，gap 31→30。② `69e371b2` **Breadcrumb separator 真 drift**：Figma 5004:1478=`Icon/Default`(#9e9e9e/#595959)，code 用 `--text-2`(#cccccc) → 改 `--icon-default`（视觉对齐；注解暂卡 extract）。③ **立 EXTRACT-icon-token-fidelity（icon 族 ~11 项真正卡点）**：extract `resolveInstancePaint` 把 icon lifted 字形色存成 raw hex 但**丢了变量绑定**（实证 separator 提取后 `token=none`）→ normalize hex-fallback 在 #9e9e9e 处分不清 icon-default/text-tips/grey-6、且无 token 无法 theme-resolve → 无-theme-axis 组件 light 假 mismatch。治本=resolveInstancePaint 记录 lift vector 的变量绑定→按名映射 cssVar；落地后 icon 族可注解、且能区分 Figma 绑 Icon/Default(theme-aware,注解即过) vs 绑 raw grey(binding-hygiene 待 rebind)。**分类纠正**：B「icon 族」真因是 extract 丢绑定（非纯设计问题）；C「候选 drift」owner 定调即 Figma 为真→直接改 code（已做 2 个）；A「floor」过武断（多色 mark 可下钻、tooltip-arrow 可改 verifier 读单边 border、disabled 文字色可对 Figma disabled 变体验，多数非永久 floor）；D dropdown-select 容器组件 `drop_down_list_select__1446_116439` 存在→可补 manifest config。

---

**前序同日 part3：gap 48→31（8 commits）+ 双 infra 治本（child-node theme-resolution + audit-fidelity）**：`816e4bf3` **audit-fidelity 治本 gap 40→31**——`audit:render-coverage-gaps` 原按单类精确匹配 covered，复合/修饰符 selector（`.tab-item--filled.tab-item--active-green`/`.tvu-input--filled`/`.notif--dark`/`.tab-list--filled`）虽其 base 元素已是 rootTargetSelector、per-variant 逐 state 验 rootFillHex/rootBorderHex（实证 TabItem 12 entry / Notification 14 / InputBoxFilled 112 / TabList filled 2 全 PASS），却因复合 leaf≠单类被误报盲区；修 = `rootCheckedSelectors` + `isModifierOfRootSelector(leaf, setsBgBorder)`（BEM base ∈ rootSel 且设 bg/border 才 credit），**FP guard `BG_BORDER_PROPS` 排除 color**（`.cb--disabled`/`.radio--disabled { color }` root 不验 text color → 留 floor，安全 under-report），并修锚 `(?:^|[\s;{])` 让首属性可匹配。清 9 false-gap（TabItem 5+TabList 1+Notification 2+tvu-input--filled 1），纯 audit 逻辑改、drift-gate 不受影响。**part2 已 ship 7 组件**（PopupBox/StepItem+infra/Progress/Switch/Table/Badge/FormItem，见下）。**剩 31 盲区**：~14 纯 floor + clear/close 图标族 ~9（延后，Figma raw-grey vs code --icon-default，待 designer rebind）+ 候选 drift 批 2-3（Breadcrumb separator / Progress track，待 live Figma+owner）+ `.dropdown-select`（下拉面板，需新增 Drop down List 容器 manifest entry）+ `.tvu-input-count`（待判）。pickup §0.5 已更新。

---

**前序同日 part2：逐组件清盲区 gap 48→40（7 commits）+ child-node theme-resolution 治本 + Badge rootTargetSelector**：组件清单 — `fc71c68c` PopupBox 3→2、`6f00de4f` StepItem 3→1（+ normalize 递归 enrichChildren 治本无-theme-axis 子节点 theme-resolution，audit-tokenized-diff 对称 stripTokenizedChildren）、`80e159a5` Progress 2→1、`af0e7d59` Switch 1→0、`d7c4a4ce` Table 2→1（cell text，再验治本）、`e613743e` Badge 1→0（补 rootTargetSelector .canonical-badge，80 root fill/border check 全 PASS）、`e92c91fe` FormItem 1→0（error message --red）。全程 gate A=0 / node mismatch=0 / tokenized-diff 0 drift / vitest 219 / vue-tsc 0，scoped Path B 一组件一 commit，并行 session dirty 文件全程未碰。**剩 40 盲区已彻底分类**：① 纯 floor ~16（CheckBox/Radio/Notification 各 2 = state-modifier+多色 glyph mark、Pill dot×2、Rating star、StepItem step-desc、PopupBox overlay+body、Tooltip anchor+arrow、Pagination ellipsis、Table .tbl —— 无 Figma 节点 / 多色内部 mark / runtime placeholder / verifier per-side-border 局限）；② **clear/close 图标族 ~9 延后**（InputBox feature/clear ×6、SelectBox select-clear ×3 + PromptMessage close）= Figma 绑 raw-grey vs code --icon-default(theme-aware)，owner 已批 --icon-default、待 designer rebind theme-aware icon token；③ **候选 drift 延后批**（BreadcrumbItem separator #9e9e9e vs --text-2、Progress track --line-deep vs Figma --bg-layer3）= code 语义 token vs Figma 实测值不符，需 live Figma + owner design-hygiene 批量裁定，不盲改；④ **audit-fidelity false-gap**（TabItem 5 复合变体 selector + InputBox .tvu-input--filled）= bg 实际已被 root/base 覆盖，但 audit leafClass 按单类 credit、复合/修饰符 selector 无法 credit → 需治本 audit（教它「修饰符 selector 在 base 是 rootTargetSelector 或被注解时算 covered」，一次清 6+）；⑤ 少量 maybes（tvu-input-count、Tab/TabList .tab--filled、dropdown-select、Rating star）待逐判。**下一杠杆 = audit-fidelity 治本（清 false-gap 批）**。pickup §0.5 已更新。

---

**前序同日：INFRA-F41 Task 5 再续：逐组件清盲区 gap 48→43（4 commits）+ child-node theme-resolution 治本**：① `fc71c68c` **PopupBox 3→2** scoped re-extract 1939:43682 + 注解 .popup-box__close→close glyph 1869:68902 (#9e9e9e=--icon-default dark, PASS)；overlay(runtime backdrop 无 Figma 节点)+body(透明 Content frame)=documented floor。② `6f00de4f` **StepItem 3→1** 注解 .step-line→4943:7246 + .step-marker--number→纵向 marker 4943:7269 (both completed #2fb54e=--brand)；**+治本 INFRA**：注解暴露 light-theme 假 mismatch (#299f45 vs #2fb54e)，根因=normalize-component-tokens 只 enrich root、不递归 children→child fill 无 token.cssVar→buildExpectedNodes 无法 theme-resolve(无-theme-axis 组件同 node 双 theme 触发)；修 enrichChildren 递归 enrich(靠 hex-fallback 映回 cssVar)+audit-tokenized-diff 对称 stripTokenizedChildren(685/685 结构恒等)。floor: .step-desc(无 description 节点)+checkmark。③ `80e159a5` **Progress 2→1** 注解 .progress__fill→4915:7196(#2fb54e brand)；.progress__track=候选 drift(code --line-deep #353535 CANONICAL-004 vs Figma extract --bg-layer3 #262626)挂 BRIDGE-DESIGN-REVIEW 不盲改。④ `af0e7d59` **Switch 1→0** 注解 .switch-thumb→Ellipse 337:18011(#ffffff theme-invariant)。**全程 gate A=0/node mismatch=0/tokenized-diff 0 drift/vitest 219/vue-tsc 0，scoped Path B 一组件一 commit**。**剩 43 盲区**=纯 floor(CheckBox/Radio/Notification 各 2、Pill dot×2)+待做真盲区(Table/Tooltip/Badge/Breadcrumb/Pagination/InputNumber/PromptMessage/FormItem message/dropdown-select)+2 延后专项: input/select action/clear 图标族(live Figma 确认 --icon-default vs 提取 #f8f8f8/#141414 hover 二义)、TabItem 5 复合变体 selector(audit leafClass 无法 credit 复合,需 audit-fidelity 治本)。pickup _plans/next-session-pickup-2026-06-08-infra-f41-task5-continue.md。

---

**前序同日：INFRA-F41 Task 5 续：逐组件 data-figma-node-id 注解 + verifier node-check 选属性治本（gap 56→48，5 commits）**：① `f94054b7` dropdown arrow → `--text-body`（4/4 变体 live Figma 实证真全局 drift，arrow=主文本色 grey-13 light/grey-2 dark，旧 `--text-tips` 低一档）。② `8aaf9df2` **FormItem composition 重构（CANONICAL-033）**：用户指出「手搓假占位本身就是问题、应直接导入现成组件」（纠正我把它当 stop-at-instance allowlist 合理化的错），base `components/FormItem` 降为纯 Label+Content-slot+message 外壳、canonical FormItem 默认 slot 按 type 复用真 InputBoxFilled/SelectBoxFilled/Radio/CheckBox/Switch（Figma Content slot 本就嵌真 instance + FormItemPage 文档亦明示 shell 设计）→ 5 个假 selector 消失，gap 6→1。③ **verifier node-check 选属性治本**（`a9673cd7` 先试 `fillRole`-by-Figma-source-type，radio circle 是 VECTOR 但渲染成 background → type 测不准，**弃**；`c70dccb4` 改成**代码侧 bg-transparency**：看被注解元素 computed `backgroundColor` 非透明→比 backgroundColor，否则比 color——code-truth、自动、零人工遗漏，注解承载色的 leaf）→ CheckBox `.cb-box`→`4600:14666`、Radio `.radio-circle`→`1548:36921`、Notification `.notif__close`→`1392:1817` 全 PASS。④ `ac669bd1` 修 `audit:render-coverage-gaps` 嵌套 `<template v-if>` 抽取 bug（非贪婪 `</template>` 停在第一个内层 → 漏后续分支注解，Notification close 被误报未覆盖；改 strip script/style 扫剩余）。**全程 gate A_TRUE_DRIFT=0 / full-tree node mismatch=0 / vitest 219 / vue-tsc 0**。**用户硬规则记忆 [[feedback_lead-with-robust-not-cheapest]]**（稳健性/正确性第一、复杂度·成本·diff 不进排序——方案选型 + 方案内部子机制都适用；本 session 连犯 2 次：FormItem allowlist 合理化 + fillRole 内部又挑 Figma-type 这个最省事子机制，用户追问才纠）。**documented floor**：多色 glyph 内部 mark（checkmark/dot）+ 根 state-modifier（--disabled/--dark/--light）。**剩 48 盲区 = 纯机械套已证三范式（单色 icon / box-like glyph bg / composition 重构）**，pickup [`_plans/next-session-pickup-2026-06-08-infra-f41-task5-continue.md`](./internal/_plans/next-session-pickup-2026-06-08-infra-f41-task5-continue.md)。

---

**Input/Select `status` 轴改名同步 + v0.7.0 发布并验证**：owner 在 Figma 把 Input box / Select box（line+filled 4 set）`status` 内容态改名 `default→Placeholder` / `normal→Value`（`multi select` 不变，便于 AI 识别）。scoped 提取 4 node-id + 下游 regen + 外科手术式传播进 code（option B，canonical==Figma）：manifest-gen 映射 / 6 canonical Status 类型+默认值+InputBoxBase showClear / playground(helpers,showcase) / 3 docs 页 / InputBoxBase.test。**按 owner 要求剔除 scoped re-extract 顺带带进的 INFRA-F41 per-child visual props（~5万行无关 schema）**：raw/tokenized revert HEAD + 纯变体名 sed（限 input/select 4 文件）+ regen manifest → 最终 diff = 纯改名（commit `ccb41049`）。迁移登记 divergences.md（commit `1277891d`）。验证：vue-tsc 0 / render-verification 908 PASS / drift-gate A=0 / full-tree mismatch=0 / tokenized-diff 685/0 / vitest 219。**v0.7.0 发布（owner 要求不拖下个版本）**：changeset(minor) → cut v0.7.0 → 首次 tag push publish CI 失败在 `audit:status-consistency`（STATUS 版本号未同步，13-strict 闸正常拦截）→ 修 STATUS + 移 tag 重推 → 第二次 CI 全绿（audit-matrix Node20/22 + render-gate）→ **Packages API 实物验证 `0.7.0` created 2026-06-08T02:48:54Z**（[[feedback_release-verify-packages-page]] 闭环）。v0.7.0 = BREAKING status 改名 + v0.6.1 以来 ~270 commits accumulated work。pre-commit 两闸过法实证：figma-data 写入闸补今日 figma-sync-report 作 signal、visual 闸 VISUAL_COMMIT_APPROVED=1（本次非视觉改动）。

---

**前序 2026-06-06：INFRA-F41 Step 2 全树确定性 verifier 机制+gate 端到端落地（Task 1→Final，subagent-driven）**：起因 = render-verifier 只校 root+text、子元素（chip×/箭头/clear/checkmark/dot）全漏（首跑 91 styled selector / 62 未覆盖 68%）。按 `_plans/2026-06-06-infra-f41-fulltree-verifier.md` 证机制：**Task 1**（`f96e3b22`）extract `nodeGeometry` 给每 child 加 fills/strokes/opacity/r（plan 误以为已带 fills——实为「几何 only」，加 fills 是关键修正）；**Task 1.5**（`169512c7`，owner 拍板）icon INSTANCE 自身 fills 空 → `resolveInstancePaint` DFS 下钻内部 vector 提升 resolved 字形色（几何仍 stop-at-instance，只多读一个颜色值）——chip-close `1436:36578` live Figma 实证 grey-6 #9e9e9e；**Task 2**（`f91b7600`）manifest 每 entry 加 `expectedNodes[]`（复用 flattenGeometryChildren + compositePaintsForTheme）；**Task 3**（`b17fe0bb`）verifier 加**加性 FP-safe** tree-walk `collectNodeChecks`：按 `[data-figma-node-id]` 定位，count===0→coverage-gap（永不 fail），found→type-aware 比色；结果进**独立** `nodeChecks` + 顶层 `nodeCoverage`，**不**入 checks/status/A → **A 全程守 0**（FP=0 是命根，起因即 2026-05-20 启发式 40% 假阳）；**Task 4**（`879379e0`）注解 SelectBoxBase `.select-chip`=1436:36576 + `.select-chip__close`=1436:36578（v-for 用代表变体 node-id，first-instance verified）+ 教 `audit:render-coverage-gaps` 认 data-figma-node-id 为 covered → **loop 闭合**：chip-close #9e9e9e PASS / chip-frame #f0f0f0 PASS，gap **62→56**（SelectBoxFilled/Line wrap base 各 -2）；**Task Final**（`b024fb87`）`audit:render-drift-gate` 把 nodeCoverage.mismatches 纳入闸（gap 不闸 mismatch 闸）→ **chip-close 色（INFRA-F41 起因 bug）现 regression-gated**。**机制副产实证**：tree-walk surface 真候选 drift——dropdown arrow Figma grey-13 #141414（live `get_variable_defs` 实证）vs code `.select-arrow` --text-tips；未注解故不闸，挂 follow-up（跨变体核实/BRIDGE-DESIGN-REVIEW，不盲改 code）。vitest 219 / drift A=0 / node mismatch=0。**Task 5+（逐组件注解清剩 56 盲区）= 大批量机械重复，plan 明示 fresh focused session**；前置 = 各组件需 re-extract 填 expectedNodes（否则注解只让静态 audit 标 covered 但无可比对 = 空覆盖），推荐 full `sync:figma-library --with-extract` 一次性 populate 全 685（本 session 仅 scoped select_box_filled）。**并行 session 实证**：全程与 owner icon-canonical 重构（`6a2e95d8`）并行，surgical partial-stage 只提我 2 个注解 hunk、不碰其 arrow rename + 8 文件，零交叉污染（[[user_parallel-sessions]]）。pickup [`_plans/archived/next-session-pickup-2026-06-06-infra-f41-task5-annotations.md`](./internal/_plans/archived/next-session-pickup-2026-06-06-infra-f41-task5-annotations.md)。

---

**前序：图标 canonical 名规范化 + audit gate + color-contrast Group A 收口**：① 新 `audit:icon-canonical-names`（确定性解析 `<Icon name>` vs registry，识别短 alias）→ 全库 13 处短 alias 统一成 canonical（search→action/search、arrow-dropdown→navigation/arrow-dropdown 等，net-neutral 同图标），含早先 close→action/close；catalog 名如 FormItem `arrow/down` 识别为合法不误报。② **color-contrast Group A = ACCEPT**：设计师确认当前已发布品牌色 final（WCAG 合规替代 #118536/#30D158 在 Figma 1497:26855 探索但未采用）；plan owner 核实 live Figma `UX/Brand/Brand`=#2fb54e=code（未 stale）→ 白字低 AA 是知情品牌决策。Group B WCAG 豁免 accept。③ clear/close 图标族按 SoT 三分确认（chip-remove=action/clear-2 填充 grey-6 / field+input clear=action/clear 线框 --icon-default / close=action/close --icon-default）。

---

**前序：SelectBox 多选 chip × light 色 bug 修复 + verifier 盲区审计立项 INFRA-F41**：user 在 docs 站发现 light 模式 chip clear × 偏深。live Figma `1436:36574` 实证 = raw grey-6 #9e9e9e（两主题一致），code `.select-chip__close` 原 `--text-tips`（light #595959）→ 改 `--color-grey-6`。**同型 sweep（live Figma 逐个）**：input/select 运行时 clear × Figma 没画（无 SoT 不改）、popup close × 偏深但导出 SVG 值模糊（不盲改）→ 全挂 BRIDGE-DESIGN-REVIEW（建议设计师统一 clear/close × 绑 grey-6）。**user 质疑"为什么没校验出来 / 不该想当然挑几个 selector"** → 追因：verifier 每 entry 只校 root+text target，子元素（chip×/箭头/clear/checkmark/dot）全漏。**立 INFRA-F41 + 落地 `audit:render-coverage-gaps`**：静态列盲区，首跑 **91 styled selector / 62 (68%) 未覆盖**。全树确定性 verifier（data-figma-node-id 注入）作 Step 2 待清单定夺。chip × 非 verifier 检查字段故 drift A 仍 0。

---

**前序同日：组件 Code 化收尾：3 audit 全绿 + Alert orphan 删除**：① `audit:figma-library-vs-canonical` **0/0 bidirectional parity**——3 个 B-finding 登记（InputBoxBase/SelectBoxBase 内部 base + PillCounter code-first 进 audit `KNOWN_CANONICAL_NO_MAPPING` 白名单 + divergences.md）；实测 **40 Figma published → 34 canonical → 0 figma-without-canonical**，组件 Code 化存在性 100%。② **CANONICAL-030 Alert orphan 删除**（owner acked）：删 `src/components/Alert/` + playground import/demo + atomicAssets 引用 + export-coverage allowlist（零残留；allowlist 仅剩 Badge）。③ **CANONICAL-015 close× + CANONICAL-013 R2 残留全收**：PopupBox/PromptMessage close× (live Figma 实证裸 `icon/Edit/Close` 非 Button) + SelectBoxBase chip/clear + InputBoxBase clear 加 inline R2 白名单 → `audit:canonical-compliance` **6→0 全绿**。vue-tsc 0 / vitest 198 / hard-rule 0 / export-coverage PASS。

---

**前序同日：CANONICAL-022 Input opacity 收口 + 同型 sweep**：删 `Input.vue:.tvu-input:disabled` `opacity:0.4`（live Figma 实证 disabled = solid token opacity 1：line `1818:8198` grey-8 #595959 / filled `1431:54613` bg #353535+text #595959；底层 token 已全对齐，opacity 是多余淡化）→ CANONICAL-022 全闭环（Select 端 Wave 1a 早删）。render-verification 908/PASS · drift-gate A_TRUE_DRIFT=0 · vue-tsc 0 · vitest 198。**同型 opacity sweep 实证（live Figma 逐个，关键反例）**：Switch `.switch--live.switch--disabled{opacity:.4}` = **匹配 Figma**（节点 `337:18248` className 含 `opacity-40`，Figma 真用 40%）→ 保留，**反证「opacity 永远是 code 偷懒」**；InputNumber/Slider/Rating = Figma 无 disabled 变体 → 无 SoT 证伪 → 保留 + 挂 BRIDGE-DESIGN-REVIEW；legacy `components/Select/Select.vue` 非 canonical/未导出 → out of scope。**唯 Input 是真 bug，纪律阻止了盲批删（Switch 会回归）**。

---

**前序：INFRA-F40 轨道 A 部分落地 + 2 个潜伏 CI 失败清除**：Gitea `pr-checks.yml` 加 `push: master` 触发（原 `branches-ignore:[master]` 漏掉 Owner 直推这个最该闸的落点）→ **第一次让 CI 在 master 跑 prepublishOnly，立刻照出潜伏 ~1 周的 2 个失败**：① `audit:design-system` 注释里的 Figma-映射 hex 被当硬编码色假阳（修：扫前 stripComments，非删注释 commit `d2474223`）② divergence `input-select-disabled-text-figma-single-variant-outliers-2026-05-25` 实已被 CANONICAL-032/EXTRACT-009 resolved（owner 在 Figma 统一 2 outlier，正如 entry resolutionRef 预言）只是没登记 → 标 resolved + positive verifyHint + tracker 回填。**新 `scripts/audit-render-drift-gate.mjs`**（读 report A_TRUE_DRIFT_CANDIDATE 超 baseline 0 → exit 1，补 `manifest-verifier.spec.ts` 只产 report 不 fail 的 gate 缺口）本地实测 PASS。**render gate 改放 GitHub `publish.yml` 的 `render-gate` job（release-time 闸）**：Gitea act_runner 以普通用户跑（非 root/非容器），装不了 chromium 系统库 `libatk-1.0.so.0`（chrome exitCode 127），且 Owner 确认 runner root 后续也拿不到 → 不绕 root，改用本就 root-capable 的 GitHub 托管 runner（`--with-deps` 开箱即用），发包前 A>baseline 则 block publish。**轨道 A 净落地 = ① GitHub render-gate（release 守不发漂移包）+ ② Gitea push:master 闸住 master 直推的 vue-tsc/vitest/prepublishOnly + ③ gate 脚本任意机器可本地跑**。轨道 B（像素容器化）放弃（同卡 runner 能力；数值 gate 是更优 deterministic 验证）。**已 workflow_dispatch 实测验证**：GitHub runner `--with-deps` 装 chromium OK + render-gate PASS A=0；首跑暴露 CI 比本地慢 → select-box border mount transition race（A 本地 0 / CI 2，#546358 grey↔brand 中间值）→ 修 verifier 对**所有** state 关 transition+animation（原只 hover/focus/editable）→ A 跨机一致 0（commit `544edcbe`）。commits `12492f25`→`544edcbe`（双 remote）。详见 backlog INFRA-F40。**前序 docs 回流（MicroApps Graphics Insertion mockup session）：figma-technical-reference **Q15**（SECTION 子节点是 section-relative 非 page-absolute，落点必 probe absoluteBoundingBox）+ **Q17**（clone absolute 子节点进 auto-layout 父需重设 ABSOLUTE+FIXED 防塌缩）+ mockup-conventions **M23 双语 ZH 配色单一真源化**（中文=EN 同色+opacity 0.45；消 13 处复述/「浅灰 #A6ADB8」漂移孤例，钦定〈字体规范〉〈颜色规范〉唯一源其余引用，commit `86f9acfe`/`13feb048`）+ **design-process 交付收尾 §4「Change log / 版本注释 = 产品需求维度」**（不写 AI 实现过程/既有行为复现）；form_item CANONICAL-019 reversal + INFRA-F36 组件数清理 4729→685 + select/dropdown discovery；CANONICAL-015 Notification→Button R2 10→6；EXTRACT-007 v2 input overlay 清零 + drift 84→5；反模式固化 §触发器 O 派生产物子面**) — **CANONICAL-015 Phase A Task 1（待 commit；plan owner 写 spec → Codex executor apply → plan owner 独立复跑全验证）**：Notification cancel/confirm/delete action 按钮换 canonical `<Button>`（live Figma `1408:17154` 实证这些按钮就是 `Button/M` 组件实例 → cancel `ghost/gray 1/M`、confirm `filling/green/M`、delete `filling/red/M`，`:canonical-theme="theme"`）；close × 实证是裸 `icon/Edit/Close`（**非 Button 实例**）→ 保持 native `<button aria-label>` + inline R2 白名单（修正 CANONICAL-015 原"close × 应走 Button"错误前提）。`audit:canonical-compliance` R2 **10→6**（Notification 4 全清；剩 6 全 pre-existing）；+5 vitest（198 pass）；drift A **不变 84**（Notification 几何/颜色早在 CANONICAL-024 对齐，本次只换按钮实现层）；vue-tsc 0。Confirm/Delete fill = raw-hex override #33ab4f/#ec5050（未绑 brand/red 变量）→ 挂 BRIDGE-DESIGN-REVIEW（canonical Button 用 `--brand`/`--red` 是对的，net-neutral）。**Task 2 eval（PopupBox 页 Alert）**：deterministic 确认 Figma 库**无 Alert 组件**（只 Notification 14 + Popup Box 2 + icons）→ code `Alert.vue` 4 状态色块确属杜撰（owner 直觉对），但已 internal-only 不导出 + CANONICAL-030 待删覆盖 → 推荐**不 code 化**（会违硬规则 #3）；PopupBox 弹窗本身与 Figma `Popup Box` 2 变体对齐非杜撰。**✅ owner ack 2026-06-04**：Alert 走 CANONICAL-030 删除路线（不 code 化），CANONICAL-030 Alert 删除升为 owner-confirmed 可执行。**EXTRACT-007 (Apply v2) ✅ shipped + drift 84→5**：extract 递归 child 几何（穿布局/SLOT、**停在 INSTANCE** 存引用+盒子、不下钻 vector、几何 only；owner 拍板 stop-at-instance = "Figma instance 是引用、import 复用不自建"）+ verifier `textInset.left/right`（递归 TEXT relativeX 统一 flat/slot）+ InputBoxBase 几何修对齐 Figma（CANONICAL-031 resolved：feature/clear icon16 + left·right12 + pad36·36，owner ack 视觉）→ **input overlay 77 A 清零**。**+ owner republish Figma + re-extract Input/Select** → textFillHex 多数 Figma=code 自然清。**total 84→5**。**+ CANONICAL-032 disable 文本色同步（84→5→4）**：owner 发现 Input/Select disable 文本色多处错 → Figma 修正 republish → re-extract surface 12 disable textFillHex drift（Figma `--text-disabled` dark#595959/light#ccc vs code 用错 `--text-tips`）→ 修 `Input.vue:.tvu-input:disabled` token `--text-tips`→`--text-disabled` + 删 3 冗余 override → 12 清零。**剩 4 全 EXTRACT-009 光标"\|"假阳**（select editable ×3 + input click ×1，extract 读光标段色非占位文字；owner "两个色值"理论实证）。opacity:0.4 follow-up（CANONICAL-022 同型）。tokenized-diff 685/0 / vue-tsc 0 / vitest 198 / render-verification pass。**EXTRACT-007 全程 trigger-O 连环纠错**（Apply v1 C.3 gate STOP → ① skip slot 纠成递归 stop-at-instance ② 信提取数据纠成 live Figma ③ size→state→cursor 根因）= FIGMA_AS_SOURCE_OF_TRUTH "不靠提取数据反推" 最强实证。**Q2 视觉 baseline 失真**根因 = CI 没跑视觉 + baseline 本机 exact 无容差 → 非捕获环境全红（clean HEAD 实证 28/31 fail，非 code 改动）→ 立 **INFRA-F40**（数值 verifier 提 CI 主闸 + Docker 像素容器化，owner 批准）。CANONICAL-031 resolved / EXTRACT-009 / INFRA-F40 三条 backlog 立。

---

**反模式固化（commit `6f020008`+`0b69ec92`）**：本 session 一连 3 次把 figma-data 提取产物当 Figma 真源反推（Select "散装"误判 / 4044 "stale 熔断"误判 / dry-run 假性通过），用户两次挑战才纠正 → 固化到 repo `meta-rules.md` §触发器 O「派生产物子面」（团队/跨工具/跨设备真源，非 device memory）+ §7 实证沉淀 + 复盘 `2026-06-03-infra-f36-misdiagnosis`。三条应对：推断上游查 live Figma/读 extract 源码、机制 bug 看 observable effect 非 dry-run、纯结构清理用离线 surgical。

---

**下 session pickup** [`next-session-pickup-2026-06-04-canonical-compliance-and-extract-007.md`](./internal/_plans/archived/next-session-pickup-2026-06-04-canonical-compliance-and-extract-007.md)（Notification→Button / PopupBox-Alert 杜撰评估 / EXTRACT-007）。

---

**form_item fidelity（commit `778022c0`）**：**form_item fidelity（commit `778022c0`）**：INFRA-F39 firstTextNode 修复经 re-extract 应用到 form_item raw（取可见 "Form Label" 而非隐藏星号）surface 41 form_item A（旧提取掩盖在 84）。拆 **18 真 drift（reverse CANONICAL-019）**——live Figma（screenshot + get_variable_defs 1923:49069）实证 error 态 label 保持灰 #9e9e9e、红色在独立 error message + 红边框（code 已有），CANONICAL-019 多余染红 label → 删该规则（label 跟 Figma 灰；CANONICAL-019 是 2026-05-29 fidelity audit mis-fix，被 live Figma 推翻）+ **23 verifier phantom**——manifest 传小写 `theme:'dark'` 让组件 `==='Dark'` 判假→错用 `.form-item--light` 类渲 --text-2 #cccccc，修 manifest-gen 传 'Dark'/'Light'（code token 本就对）。form_item raw 重提取传导 tokenized/index/manifest（count 仍 685）+ 刷 form-item 视觉 baseline（VISUAL_COMMIT_APPROVED）。form_item 41→0（真正干净非星号掩盖）；vue-tsc 0 / vitest 193 pass。

---

**INFRA-F36 组件数清理 4729→685（commit `7b930683`+`8cec0721`）**：真根因 = extract `collectComponents` 把 set 变体当 standalone 重复收集（树节点不带 componentSetId），全 39 set 共 4044 dup；修 collectComponents（COMPONENT_SET 停递归 + REST map 防护）+ orphan-purge 定向 dedup + 离线 surgical 清理。audit:figma-vs-sot 绿（644 icons 完好）；drift 不变 84。**用户两次挑战 trigger-O 驱动纠错**（"Select 是 set 不是散装"→对；先误诊 stale+熔断，实查是 collectComponents 重复收集）。

---

**select/dropdown discovery（commit `9ec6bf82`）→ A 87→84，select/dropdown 真 code drift = 0**：详见下。

---

**（另一 session）TopBar scoped 同步 + Logo 公开导出 + working-principles 原则 8**：用户刚在 Figma 发布 TopBar → **单组件 scoped extract**（`extract.mjs --component-node-id=4771:7173`，绕开 193MB 整文件 getFile）同步 After Login 高度 56→64（两变体现等高，code `--topbar-height-before-login`→`--topbar-height`）；修 docs 页 `docs-demo-grid--single` 被引用但**从未定义 CSS** 导致的 2 列裁切 bug（1920px 顶栏菜单/右侧内容被 `overflow:hidden` 裁掉）；**Logo 组件早造好却没接 `src/index.ts`**（"有组件 ≠ 接进产物"：消费者 import 不到、docs 只能手搓 `brand-pill` 占位）→ 公开导出 + docs 改用真 `<Logo type="tvu">`；新建 **`audit:export-coverage`**（import-graph 可达性单信号 + pre-commit gate）机械化防同类 gap；用户指出我初版双信号是"加规则兼容分叉形式"反模式 → 立 **[working-principles 原则 8](./working-principles.md)**（单一统一方法优先、不为分叉加兼容规则，尤其 Figma 组件库 Code 化：canonical wrap base + 从 index 导出）+ 审计回退单信号 + 2 真 orphan（Alert/Badge legacy，仅 `playground/App.vue` 用）立 **CANONICAL-030** 统一。复盘 [`2026-06-03-topbar-scoped-sync-and-export-coverage.md`](./internal/retrospection/2026-06-03-topbar-scoped-sync-and-export-coverage.md)。commits `45e9d25c`/`fe527c15`/`c1569646`。

---

**INFRA-F39 select/dropdown discovery（10 A 逐个 deterministic 核实，零 code drift）**：(1) **Drop down 3 个 A→B**：全是 `Is Parent=Yes`（组件无 isParent runtime prop，CANONICAL-018 已记）；verifier `classify()` 正则 `no runtime prop` 漏匹配真实 warning `no DropDownListSelect runtime prop` → 误算 A。修 `render-drift-summary.mjs` + `manifest-verifier.spec.ts` 两处正则 `no runtime prop`→`runtime prop`（全报告扫描确认 `runtime prop`/`runtime type` 仅出现于 schema-gap warning，零误伤）→ 3 个 A→B，drift:summary 87→84，fresh verifier Playwright 1 passed + vue-tsc 0。(2) **select box/line+filled 7 个 textFillHex（#595959 vs code #7b7b7b/#cccccc）= Figma-hygiene 假阳，非 code drift**：**Select box 在 Figma 是 COMPONENT_SET**（filled set `1436:32816` 144 variants + line set `1804:26921` 144 variants；SET 文件 + **live Figma `get_variable_defs` 双重 deterministic 确认**）。placeholder 文字色在 **set 内 variant cell 间真实手工绑定不一致**：live Figma 实证同 set 同状态仅尺寸不同 → `dark+click M`=`grey-8 #595959` / `dark+click L`=`grey-7 #7b7b7b`（绑 raw Grey 变量非语义 token）。code 渲一致 #7b7b7b 对齐多数派（同 axis 38 变体 expected #7b7b7b 全 PASS）→ **code 正确，不改**；不 re-point/whitelist（[[feedback_audit-whitelist-vs-sot-refactor]]）→ 挂 BRIDGE-DESIGN-REVIEW（设计师将 set 内 placeholder 统一绑语义 Text token）。**结论：84 A = input 77（EXTRACT-007 blocked）+ select 7（Figma 设计师 set 内散绑 artifact），select/dropdown 真 code drift 清零**。**⚠️ 用户挑战纠错（trigger-O）**：我起初误把提取数据反推成「610 散装 COMPONENT 没 combine 成 set」—— 错。用户指出 Figma 上是 set，实查根因 = **`collectComponents` 每次 extract 把 set 变体当 standalone 重复收集**（树节点不带 componentSetId，旧 `!node.componentSetId` 判真）→ 4044 个（全 39 set）→ **INFRA-F36 已 RESOLVED**（commit `7b930683` orphan-purge 拆分 + `8cec0721` collectComponents 根因修复 + 离线 surgical dedup，4729→685，`audit:figma-vs-sot` 绿 / drift 不变 84）。真实范围 4044（非当初估的 12）。verifier 读 set variant（manifest select 288=144+144）未被污染。plan owner direct（verifier 准确性，path B）。

---

**(同日早些) INFRA-F39 step 1-3 verifier 准确性 ✅ A 247→87 + Table 真 drift 按 Figma 还原 + PillPage ✅** — **INFRA-F39（用户拍板 option 1，新 session 继续）**：修 render-verifier 拓扑准确性，让 `pnpm drift:summary` 数字可信。**A 247→87（-160）**：(1) **FormItem 94→0 全幻影清** —— textFillHex 46 是 extractor 把变体 `text` 取成了隐藏的 required 星号 `*`（`visible:false` fill `#ea4233`），3-part fix：① `extract.mjs firstTextNode` 跳 `visible===false`（根因，future extract 取可见 label）② manifest-gen `expectedFromVariant` 把 invisible text node 视为无 text（当前 baked data，raw 无 children 不能 re-derive）③ verifier `pushExact` 对 textFillHex 加 null-skip（一致 pushNumber）。**关键约束发现**：原计划在 normalize 置 null 会**破 `audit:tokenized-diff`**（断言 raw↔tokenized 结构恒等）→ 改在 verifier 层做。rootGap 48 是 gap 在内层 `.form-item__main` → 新 `gapTargetSelector` capability。(2) **Table 66→12** —— Figma「Table」是单元格（L0/R8/T8/B8 gap4），verifier retarget `<table>`→per-variant cell（`.tbl-head/.tbl-body .tbl-cell--{align}` + gap 量 `.tbl-cell__content` + 新 `suppressRootSize` 跳 cell-frame w/h）清 54 幻影，**暴露 12 真 left-pad drift**（cell L0 vs code 对称 8px，此前在 `<table>` 层巧合相等被掩盖；`get_design_context` 4265:16132 deterministic 实证全 6 变体 L0）→ **owner 当场确认按 Figma 还原**（FIGMA_AS_SOURCE_OF_TRUTH），改 base `Table.vue` `.tbl-cell` padding 左 0（`8px 8px 8px 0`）→ **Table 12→0**（CANONICAL-029 resolved；TablePage 视觉 baseline 重抓，内容左移 8px 贴左符合 Figma）。**双向失真双实证**：247 既虚高（幻影已清）又漏报（Table 真 left-pad 此前被掩盖，retarget 才暴露）。新 reusable verifier capability：`gapTargetSelector` / `suppressRootSize` / per-variant 函数 selector（`resolveSelector`）。剩 **87 A**：input ~77（EXTRACT-007 blocked —— verifier 缺 child geometry 测不了，非已知 code drift）+ select/dropdown ~10（discovery，含 focus-border race ±1 噪声）。Table 已清。**+ PillPage（欠 deliverable，用户 2 次想要）**：`playground/docs/pages/PillPage.vue`（PillStatus 8 变体 Status×Active grid + Status-with-count + PillCounter 4 kind code-first 标注无 Figma SoT + API 表，主题感知单 grid 不 side-by-side）+ 注册 DocsShell/navigation/CanonicalPageId + site-review-manifest 声明（in-review warn）+ Playwright 视觉 baseline（dark+light）+ 双主题全页视觉自查通过（H1 audit + vue-tsc + 193 vitest 全过）。Self-Audit：3 audit exit1（canonical-compliance R2 native-button×10 / render-coverage PillCounter / figma-vs-canonical PillCounter）**全 pre-existing**（CANONICAL-013/015/017 + PillCounter code-first BRIDGE-MOCKUP-003），本 session 零新增。plan owner direct（Infrastructure/verifier path B）。下 session pickup [`next-session-pickup-2026-06-03-f39-residual.md`](./internal/_plans/archived/next-session-pickup-2026-06-03-f39-residual.md)。

---

**(2026-06-02) Select chip/dropdown 1:1 Figma + drift:summary 脚本 + 关键发现「247 drift 大部分是 verifier 幻影」** — 用户在 docs 站逐个发现 Select 视觉 drift（多选 chip close 图标错成裸×而非圆形填充 `action/clear-2`、filled chip 背景错、dropdown 双 theme section 违反 no-side-by-side）→ 全部对 Figma 双主题修复（commit `dcfec1bd`，新增主题感知 token `--select-chip-border`/`--select-chip-filled-bg`）。**根因复盘**：我过度依赖 verifier 绿灯（它只校根元素，看不到 chip 子元素 + docs 页组合）+ 没做主动视觉自查。**机制修复**：(1) audit H1 no-side-by-side 修漏洞 + 挂 pre-commit（`ba6ec1ed`，之前因"引用 docsTheme 整文件豁免"放过 SelectPage）；(2) `pnpm drift:summary` 全站双主题 drift 清单脚本（`8f5b0328`）。**用户要求"全站对齐 Figma 双主题，prefer 脚本"→ 实查最大两个 drift 源 Table(66)+FormItem(94)=247 的 65%，发现代码早已对齐双主题，是 verifier 量错元素**（Table 量 `<table>` 非 Figma 的 cell 组件；FormItem 量灰 label 对隐藏红星号 + gap 量错内外层）。**结论：247 大部分是 verifier 拓扑幻影（~240），真 code drift 仅个位数；且 247 还漏报真 drift（chip 不在里面）。立 backlog INFRA-F39**（修 verifier 准确性：extractor 跳过 visible:false + Table cell-target + FormItem gap/星号 + EXTRACT-007 子组件覆盖）。用户拍板 option 1（修 verifier 准确性）放**新 session**继续。下 session pickup [`next-session-pickup-2026-06-03-verifier-accuracy.md`](./internal/_plans/archived/next-session-pickup-2026-06-03-verifier-accuracy.md)（含欠着的 PillPage 范围）。

---

**(同日早些) CANONICAL-028 Pill Status 收口 ✅** + Wave 1a verifier A-count 确认 + verifier `color(srgb)` fix — **CANONICAL-028（trigger-O 实况修正）**：user 指出 Figma `Pill Status` 实已发布并同步（backlog「blocked on Figma SoT」stale，[[feedback_trigger-O-product-truth-over-onboarding]]）。实测确认：8 变体 Status×Active 已发布 + 同步 + 代码 hue 早对齐（On-air红/Preview绿/Analyzing蓝/Inactive灰）。补 verifier 覆盖（harness `componentLoaders` + `generate-render-verification-manifest.mjs` target，single dark theme，manifest 900→908）→ 颜色 8/8 机器确认正确，但 surface 出 +47 几何 drift（base `Pill.vue` `pad 2/8 gap6 无高` vs Figma `h28 pad4-12-4-10 gap8`）→ 修 `Pill.vue`（`box-sizing:border-box + min-height:28px + padding:4px 12px 4px 10px + gap:8px`）→ **8/8 变体颜色+几何全 pass**，PillStatus uncovered→covered，全局 A 248→**247**。base Pill 改动 PillCounter 一同继承（无 Figma 冲突）。**剩 PillCounter** 仍 code-only 无 Figma SoT（等设计师发布 `Pill/Counter`）。divergences `pill-component-family-2026-05-19` 去 stale（去 "Live"/`--msg-bg-*`，status→`accepted-documented-divergence-with-exceptions`）。plan owner direct（测试门反漂移）。

---

**(同日早些) Wave 1a verifier A-count 确认 + verifier `color(srgb)` fix ✅** — **pickup §3 🥇 v0.7 主线收口**：起手确认 CANONICAL-017 verifier 覆盖已落地（30/34 covered，4 internal-base 走 canonical wrapper），fresh verifier run 实测 Wave 1a 各 CANONICAL 的 A 真清数。**A 295→248 (-47)** at 900-entry 全覆盖分母。**关键**：旧 ledger 92 系列跑在 CANONICAL-017 backfill（633→900 entry）**之前**的小 manifest，与 248 **不同分母不可续接**——tracker §分母重置已立新 baseline。逐项确认：**Notification -14 全清**（CANONICAL-024 border 1.2px + box-sizing）/ **Table -12**（rootWidth，剩 rootPadding/gap）/ **FormItem -18**（CANONICAL-019 error label red，剩 rootGap=verifier-config + 部分 label）/ **CANONICAL-018 dark+light leaf fix 真对**（Drop down 7→3）。**CANONICAL-021/022/026 A-neutral**（视觉对但非 verifier A-field）。**附带 verifier-fidelity fix**（plan owner direct，Infrastructure path B，同 EXTRACT-008）：`tests/visual-verify/manifest-verifier.spec.ts` 的 `colorToHex()` 只解析 `rgb()/rgba()`，把 `color-mix(in srgb,…)` 的 Chromium 计算形态 `color(srgb r g b)` 漏读成假阳 → 任何 color-mix() 输出都假阳；扩 `color(srgb)` 解析后 Drop down 5 假阳清、CANONICAL-018 fix 正确性才显形（dark `#8fd79f` / light `#bfe2c7` 逐通道命中）。input box/filled +1 是 focus-border verifier race 噪声（[[feedback_verifier-css-transition-race]]，非 code/fix 引入）。复盘见 tracker §轨道 A ledger。

---

**(上一条) Component Affordances — AI 组合组件语义层 ✅ shipped** — 给 34 个 canonical 组件建结构化语义层 [`docs/internal/component-affordances.json`](./internal/component-affordances.json)（真源）+ 生成视图 `.md`（`pnpm generate:component-affordances`）+ 防漂移 `audit:component-affordances`（code_name↔canonical 双向覆盖 / npm_export 对账 index.ts / code_props 实证 defineProps / MD 未 stale；已挂 pre-commit 条件 gate + AGENTS.md Sprint Self-Audit §H + Quick Reference 登记 + figma-component-catalog 交叉链接防分叉）。对标图标 affordance 层：图标解决「别自画 SVG」，本层解决「AI 设计产品时没识别 InputNumber 的 step / DropDownListSelect 的 multi 就自拼 primitive」。每条含 `built_in_features` / `do_not_hand_compose` / `composition` / 实证 `code_props`，落地 [`PROJECT_GOAL.md`](./PROJECT_GOAL.md) T4b `compositionSupport`。实证修正：ButtonBridge npm 导出名是 `Button`；InputBoxBase/SelectBoxBase/PillCounter 不在 npm 公开导出（标 `npm_export:null`）。复盘 [`retrospection/2026-06-01-component-affordances-layer.md`](./internal/retrospection/2026-06-01-component-affordances-layer.md)。

---

**(并行同日) CANONICAL-012 composition 复用 ✅ shipped** — **CANONICAL-012（pickup §3 🥇 Wave 2）**：DropDownListSelect Multi row 的手撸 `<span class="dropdown-item__check">`（inline `--brand-match` 底）换成复用 canonical `<CheckBox readonly>`。给 base+canonical CheckBox 新增 **readonly/display-only mode**（去 role/tabindex/aria-checked/keydown + `pointer-events:none`；宿主 row 负责 click + listbox/option ARIA）。**baseline 推翻 pickup「零视觉变更」前提**（[[feedback_baseline-before-plan]]）：inline vs canonical CheckBox size 14↔16 / radius 2↔1.2 / checked-bg `--brand-match`↔`--brand` 三处不同，且 **light-theme inline 近白底 `#f1fbf3`+白勾 = 勾不可见真 bug**。**Figma 1561:8439 截图实证**（[[FIGMA_AS_SOURCE_OF_TRUTH]] deterministic，不靠启发式）= solid-brand 底+白勾 → canonical 才对、inline 是 drift → swap 同时修视觉 bug。`audit:canonical-compliance` R1 1→0（remaining R2:10 native-button 全 pre-existing，HEAD 已 exit1）；+5 vitest（Checkbox readonly ×2 / DropDownListSelect Multi ×3）全 **196 pass**；prop-aliases `runtime-addition-008` 登记 readonly。plan owner direct（Refactor，测试门反漂移）。**未跑 live pixel-diff**：checkbox 几何不在 render-harness（EXTRACT-007 child-geometry gap），但 swap 路由到项目既有 Figma-aligned CheckBox = reuse-by-construction 即对齐保证。

---

**(上一条) INFRA-F38 sync 图标管线 silent-failure 修复 + affordance SoT 分片重构 ✅ shipped**；commit `36f4ebe6` + `f1e63e3b`) — **INFRA-F38（pickup §2 🥇）**：`sync:figma-library` 之前默认不跑图标管线（`sync:icons` 是 `--with-icons` opt-in + 管线**完全缺 `generate:candidates`**）→ 设计师改图标静默漏（本 session 起 "diff=0" 根因）。修：icon 管线默认随 `--with-extract` 跑（Step 13 拆 13a `generate:candidates` 离线 blocking + 13b `sync:icons` 网络 non-blocking，新增 `--skip-icons`）+ `generate-component-candidates` 改 idempotent write。第 3 部分（`audit:figma-vs-sot` null-key 静默 filter → Type F/G warning + name-join 兜底）与并行 SoT-shard 同文件纠缠 → 随 `f1e63e3b` 落地（已确认 27 markers）。**教训**：没盲信 pickup「不跑 sync:icons」框架，实测发现 gap 更深（连 candidates step 都没有，即使 `--with-icons` 也读 stale candidates）；memory [[feedback_figma-sync-canonical-sequence]] 更新「--with-extract 默认含图标，不用再单独补 sync:icons」。+ 顺手删 phase0-ledger 误加的 V4-1865 非消费方 mockup 行（`5f4fe820`）+ 补「仅限消费 TVU 库的产品」维护规则（`4fa87dfe`）。**并行直推 master race 实证**：两 session 并发 commit，我 `git add` ledger 后并行 session 先 commit 了同文件 → 我那条落 "nothing to commit"（无害无空 commit）；收尾干净零交叉污染。

---

**affordance SoT 分片重构 ✅ (commit `f1e63e3b`)** — `docs/internal/affordance-categories.json`（14798 行）拆成目录 `docs/internal/affordance-categories/`：28 分片（按 Figma 图标文件夹 = `path` 顶层切，最大 output.json 1994 行）+ `_index.json`（`_meta` + `affordance_categories` taxonomy）。新增共享 loader [`figma-sync/lib/affordance-sot.mjs`](../figma-sync/lib/affordance-sot.mjs)：`loadAffordanceSot()` 重组回旧 `{_meta, affordance_categories, icons}` 形状 → 3 消费方读 `sot.icons`/`sot._meta` 零改语义；`writeAffordanceSot()` 幂等 re-shard。**目录 = 单一逻辑 SoT，不引入第二份真源**。3 消费方（audit-figma-vs-sot / extract-icon-worklist / phase-c-merge）迁移走 loader；`audit:figma-vs-sot` 全绿（644/644，A=B=C=D=F=G=0）+ loader round-trip byte-identical + 188 vitest pass，pre-commit gate 全过。worklist 顺手刷新一个 doc-lag（Observe 643→644 done，源自更早已提交的 component_key backfill）。**并行 session 纠缠教训**：同一工作树里 audit 文件被另一 session 的 INFRA-F38（F/G null-key/key-mismatch）改动占着；迁移前用 line-count(317→409)/git-status/mtime 三信号实证识破，按 [[user_parallel-sessions]]「dirty 文件假设别 session 在动」先停报告 + 用户拍板后才动；F/G 与迁移同文件无法剥离，commit body 写清 provenance。

---

**(上一条 2026-05-29) 保真度审计 + CANONICAL-018 + Wave 1a/1b + CANONICAL-028 Pill + 3 图标 sync ✅ shipped**；commit `faa610b1`→`e8731f7b`) — **CANONICAL-028 Pill** 1:1 重构（8 变体 Status×Active，On-air=red/Preview=green/Analyzing=blue/Inactive=grey，audit 39 matched）。**设计师更新 3 图标** → 全库 sync：timeline 字形 / Feature/Demo / Observe（新，含 SoT 条目 + 正确 key），figma-vs-sot 全绿。**暴露真 INFRA 缺口**：官方 `sync:figma-library` 不跑图标管线（`sync:icons`）→ 图标更新静默漏；下 session 立 backlog 修。**教训**：两次拿"REST 传播延迟"搪塞 `component_key=null`，真因是查错数据层（key 在 components-tokenized，不在 raw/published）—— 归因外部前先穷举数据层（[[name-search-absent-fallacy]] / [[review-result-vs-rationale]] 实证）。下 session pickup：[`next-session-pickup-2026-05-30-post-fidelity-and-icon-sync.md`](./internal/_plans/archived/next-session-pickup-2026-05-30-post-fidelity-and-icon-sync.md)。

---

(早些) 跑了 34-canonical 全量保真度审计（54-agent workflow + 对抗复核，砍 5 假阳）→ **41 confirmed drift** + v0.7→v1.0 4-tier 排期，报告 [`_reports/figma-vs-code-fidelity-audit-2026-05-29.md`](./internal/_reports/figma-vs-code-fidelity-audit-2026-05-29.md)。**CANONICAL-018** theme-aware composite fix (commit `1db4910c`)。**Wave 1a**（Figma-1:1 保真，commit `203edc61`）：Chart card chrome / Select disabled opacity:0.4 删除 / Progress 主题分叉删除 / Table+Tab+Notification 几何 / FormItem error label / Button 绿禁用 light 色（CANONICAL-019/021/022/024/025/026）；re-verify 砍 3 假阳（CANONICAL-023 全 + Steps weight + InputBox text，含一个会让 light 文字消失的误报）。**Wave 1b**（a11y，非 Figma-1:1 标准实现，用户授权独立 track，视觉零变，commit `bc326ea5`）：CheckBox/Radio/DropDownList/TabItem/SelectBox/InputBox role+键盘+aria（CANONICAL-013/016/027），+25 vitest 全 171 pass。**治理澄清**：用户要点是"不自由发挥、严格 Figma 1:1"——分工不绑工具，只要不漂移/占位，plan owner 可一起执行（workflow re-verify + skeptic + 测试门 = 反漂移机制，本 session 实证砍掉 3 假阳）。剩余：Wave 2 CANONICAL-012 composition（需 CheckBox readonly）/ render-verification A-count 确认（待并行 CANONICAL-017 verifier 线空档）。

---

**(上一条) EXTRACT-008 ✅ shipped + unmask P17d γ-1 部分 reversal → CANONICAL-018 立项** — `scripts/lib/composite-paints.mjs` + 9 vitest cases ✅；bottom-up alpha composite helper 替换 `firstVisiblePaint` only 实现。**关键发现**：composite math 正确后 A 余量保持 92（非 -5 预期），实测 raw fills 暴露 P17d γ-1 假阳前提就是错的：2-layer `brand + #fff@70%` composite = **`#bfe2c7`** ≠ baked `--brand-disable` = `#8fcc9d`（math r=191/226/199 vs 143/204/157 — 视觉差异显著）。Drop down List/Item Radio+Checked+Disabled 6 cell 实际是两套设计：1 Parent baked `#8fcc9d` + 5 Leaf composite `#bfe2c7`。原 [[feedback_figma-fills-must-composite]] "5/6 视觉等价" claim 来自 fills[0]-only 假阳推断，需修正。**CANONICAL-018 立项 (Medium-High)**：P17d γ-2 follow-up — 3 路径（Parent vs Leaf code-side split / designer ask 是否 intentional asymmetry / cross-theme-asymmetries registry），下 session Design prompt 拍板。**A 余量 92 数字未动**但语义升级（5 假阳已 unmask 成真 drift；γ-1 commit `5c81cec6` Leaf 5 cell 方向部分错；EXTRACT-008 是 systemic helper，未来 hover/pressed/disabled overlay cell 全受益）。Self-Audit 7 类跑：D/F/G pre-existing findings 全已 backlog（CANONICAL-012-017）。

---

**2026-05-28 INFRA-F37 立项 + 4 个 CANONICAL 类 drift backlog + SliderPage 双 fix + dev-site 视觉自查** — 跑了 docs site 视觉自查后 user 截图发现 4 类明显 drift 全部躲过 P15.x/P16/P17 narrow alignment sprint：(1) SliderPage Theme×Size **双主题并排显示** 违反 [[feedback_no-side-by-side-theme]] 硬规则 + raw `--color-grey-12` token 违反 audit:no-hardcoded-design-tokens；(2) PopupBox 声称 `data-figma-component='Popup Box'` 但 render-verification report **0 entries** + figma-to-code-mapping 未注册 → 整个组件躲过 alignment audit；(3) DropDownListSelect Multi check 手撸 `<span class="dropdown-item__check">` 不用 Checkbox canonical；(4) SelectBoxBase chip × + Alert close × + Notification action button 都用 native `<button>` / inline `<span @click>` 不用 Button canonical。**根因**：sprint scope 太窄（只盯 alignment audit A field FAIL） + self-audit 协议只 3 类 (spec/impl/doc) 漏 canonical compliance + audit infra coverage gap + hard-rule violation。**INFRA-F37 立项 (High)**：Sprint Self-Audit 协议 Phase 2 — 4 个 audit script (`canonical-compliance` / `hard-rule-compliance` / `render-verification-coverage` / `figma-library-vs-canonical`) + AGENTS.md 协议补 4 类，估 ~150-200 行 / 1.5-2h，下 session 立即做。本 session SliderPage 双 fix 已落（inject docsTheme + filter visibleSliderMembers + 删 `slider-member-card--dark` raw token override）。CANONICAL-012/013/014/015 4 entry 立 backlog 等 INFRA-F37 后扫到的同类 batch 处理。**下 session pickup**：[`next-session-pickup-2026-05-29-infra-f37-self-audit-phase-2.md`](./internal/_plans/archived/next-session-pickup-2026-05-29-infra-f37-self-audit-phase-2.md)（6 phase 拆分，含 ROI 预期）。

---

**P17d Apply ✅ commit `5c81cec6` + EXTRACT-008 立项 + tracker ledger 子段 `5cbe9c66`** — P17d Design (3 sub-cluster code-vs-divergence 决策) → Apply 闭环：**α-1** Multi+active 排除 brand bg path（Figma 1563:84939/84847 `fills:[]` 实证；net **-6 A** 含 -4 hover/textFillHex Multi side-effect）· **β-1** Operation List checked 加 scoped brand-match bg（Figma 2678:48909/48923 真源；runtime UX 对齐，verifier 仍报 `actual=null` 待 EXTRACT-008 复查）· **γ-1** Radio+checked+disabled text 切 `--brand-disable`（方向真对：6/6 cell Figma 视觉 ~#8fcc9d，5 个 2-layer composite `brand+#fff@70%` + 1 个 baked semantic token；verifier 报 5 "regression" 实为 `fills[0]`-only extract bug 假阳 unmask）。**EXTRACT-008 立项 (Medium-High)**：text.fills/fills multi-layer composite 修法 spec — extract pipeline 不准只取 `fills[0]`，必须从底到顶 `compositeFills()` 合成 final hex；预期落地后 5 A 真清 + 防未来 hover/pressed/disabled overlay cell 同类假阳。**Memory 永久约束** [[feedback_figma-fills-must-composite]] 落地（今后看 fills/strokes 数组默认假设 multi-layer，先合成再判断）+ [[name-search-absent-fallacy]] 反面案例。**alignment-tracker ledger 子段** commit `5cbe9c66` ship — render-verification A 余量走势 (398→241→116→113→89→92) 从 STATUS narrative 滚动模式独立成 §轨道 A 表格。**verifier 现状**：A 89 → 92（字面 +3 = -2 真清 + 5 假阳 unmask）；EXTRACT-008 落地后预期 92 → ≤84。**下 session pickup**：EXTRACT-008 Design/Apply（治本 5 A + 防类似 cell 假阳传染） + P17d β verifier topology 深挖（确认是否 EXTRACT-008 同源）。

---

**BRIDGE-MOCKUP-008 Phase B-v2 batch-promote 进行中 — Bundle 1 9/10 dispatched + multi-batch pay/Time/Feature in-flight (~114 entries promoted to drafts, ~19% of 605 todo)** — 本 session 主线 BRIDGE-MOCKUP-008 Phase A (650-icon worklist) + Phase B-v2 multi-batch range introduced；3 SoT 草案落地 (icon-naming-convention/icon-cleanup-candidates/icon-svg-color-decisions)；15 category enum finalized；5 plan owner cross-category overrides accumulated；下 session pickup [`next-session-pickup-2026-05-28-bridge-mockup-008-bundle-continue.md`](./internal/_plans/archived/next-session-pickup-2026-05-28-bridge-mockup-008-bundle-continue.md)。 + **2026-05-27 P17 fire + Figma library hygiene + P17c partial apply ✅ commit chain `9b6ea135` → `2d7f1a59`** — P17 DropDownListSelect discovery (Codex grep 实证 42 field / 9 cluster / (a) 0 (b) 34 (c) 8 (d) 0) → Figma library hygiene (user 在 Figma "Combine as variants" 把 12 Operation orphan COMPONENT 合进 Drop down List/Item set，6 light + 6 dark, axis 改 Theme=Light/Dark) → `pnpm sync:figma-library --with-extract` 同步 + 手动 dedup 12 standalone duplicate files + 立 INFRA-F36 backlog (extract / orphan-purge 识别 set-variant nodeId dedup 治本) → P17c Apply 5 sub-cluster spec partial: **B2 Operation List width 12→0 ✅** / **B1 hover state leak 15→4** (placeholder 8→0 / filled 7→4) / **C1 disabled-checked text 6→1** / **C2 active-hover regression 2→4** (selector 太宽) / **B3 disabled-hover 没归 B** (runtime UX regex 没匹配 warning)。**Net A**: P17 baseline 113 → **89** (-24，~71% A cleared vs c7aaa8a5 baseline 398)。**Followup prompt 已写** [`_prompts/archived/p17c-followup-residual.prompt.md`](./internal/_prompts/archived/p17c-followup-residual.prompt.md) 覆盖 R1 mouse repaint / R2 warning scope / R3a Multi exclusion / R3b narrow Operation scope；预期 89 → 74。**Memory 补强**：[[feedback_owner-direct-master-ok]] 二次实证 (2026-05-28 P17c apply 我又默认写 feature branch 到 prompt + 又"补救"成 PR；user 二次纠正) → 加 "Apply prompt §1 不写新建 feature branch" + "Codex 落 master 不强行补救 PR"。

---

+ (**P16b deferred → P17 DropDownListSelect discovery 路径切换 commit `9b6ea135`**) — P16b Design report ([Codex 输出](./internal/_prompts/archived/p16b-verifier-topology-design.report.md)) 4 option (A manifest overlay-aware / B selector swap / C topology-aware text-inset / D extract-schema first) 全部今天净 -A=0；plan owner 独立 verify tokenized + raw extract 均无 child `w/h`/order → Codex 的 child geometry blocker claim 真实，B selector-only 自报"likely 0 或负"。**P16b apply defer**：72 A field 留作 known verifier topology gap，新立 [backlog EXTRACT-007](./internal/backlog.md) (figma-extract pipeline 扩 variant child geometry，~80-140 行独立 sprint) 解锁 P16b Option C 实施路径。**Pivot 到 P17 DropDownListSelect discovery** ([prompt 已写](./internal/_prompts/archived/p17-dropdown-list-select-discovery.prompt.md))：116 A 中 ~31 在 dropdown cluster，P15.1 §4 实证 dark-side `figmaNodeId` lookup 不全；P17 trace (a) extract source 缺 / (b) verifier limit / (c) code drift 分类，executor 自 grep 实证 31。预期完成后 116 → ~85 A (≥78% cleared vs c7aaa8a5 baseline 398)。**新 meta-rule 落地**：Design 任务 plan owner 必独立 verify Codex blocker claim（[[feedback_review-result-vs-rationale]] 第 N 次实证）。

---

**2026-05-27 INFRA-F35 audit followup Phase 1-4 ✅ shipped** — Phase 1 (`5380f2fa`) pipeline 加 `_`/`.` 前缀 filter (extract + cleanup) + AGENTS.md / mockup-conventions 命名约定 doc · Phase 2 (`318b50ce`) use_figma 一次性 rename 52 Research/UX Inventory components 加 `_` 前缀（user-authorized "last automated Figma library write"）· Phase 3.a published/icons/manifest.json 补 3 缺失 icons (642→643) · Phase 4 `audit:figma-naming-hygiene` script + sync-figma-library Step 12 wiring (0 violations 实测) · 额外 extract.mjs raw orphan-purge with safeguard。Pipeline 现 13-step。复盘 [`retrospection/2026-05-27-figma-naming-convention-and-rename.md`](./internal/retrospection/2026-05-27-figma-naming-convention-and-rename.md)。

---

**2026-05-27 INFRA-F35 Figma sync pipeline sprint ✅ shipped + 元规则 §触发器 O 立项 + AGENTS.md §Sprint 收尾 Self-Audit 协议落地** — sync 入口收敛到 `pnpm sync:figma-library --with-extract`（11-step + fail-fast + count/set verify + diff-report + exact/fuzzy dup detection + pre-commit hook auto-bypass + cleanup conditional default with extract → apply / without → dry safe）；12 个 commit chain `e959be8d` → `548f9250`；元规则 [`meta-rules.md` §触发器 O](./meta-rules.md) "Onboarding 知识 ≠ 实际产品状态（实测优先 / 产品真值优先）" 把"按 spec ship 完即 done"心智模型机制化拒绝（M21.2 颜色专项 + Sprint Self-Audit 协议为子条）；完整复盘 [`retrospection/2026-05-27-figma-sync-sprint-and-trigger-O.md`](./internal/retrospection/2026-05-27-figma-sync-sprint-and-trigger-O.md)。

---

+ 2026-05-27 ad-hoc Figma library sync commit `31911264`: 4773 file diff，其中 ~99.9% 是 extract.mjs `1232b10d` layoutSizing schema backfill；真 Figma 内容 drift 仅 81 行：2 个 description 补充 (`icon/edit/delete` + `Notification` 根) · Badge `type=circle|rectangle color=neutral tag=filled` bg 从 `--bg-layer3` 改绑 `--bg-layer4`（Figma 端 catch up 2026-05-08 code 抢先迁移，drift 关闭，新 entry `badge-neutral-filled-bg-layer3-to-layer4` 登 resolved）· Input `feature=no` border token semantic 升级 `--color-grey-5` → `--line-light`（视觉零变，hex 一致）· 9 file 拓扑变化（3 typo rename + 6 research draft purge）。同步不动 icons SVG（避开 BRIDGE-MOCKUP-008 并行轨道）。pre-commit hook 走自身文档 `--no-verify` 合法路径。)

---

**P16a + P16a-fix ✅ ship commit `eb0df4bb` + AGENTS.md task-type 矩阵 codify** — P16 padding cluster 一轮收口：discovery (Codex grep 实证 196 field FAIL / 48 cluster / 三类形态 a/b/c) → P16a apply (multi-select padding-block --sp-xxs 84 fields + text-count XL padding-bottom --sp-l 40 fields) → P16a-fix narrow exclusion (filled.multiple.l[data-figma-dark-theme='on'] 12 fields Figma asymmetric variant 1:1 还原)。**总 cleanup** vs P15.2 baseline: Entry PASS 232→**251** (+19) / SKIP 207→**270** (+63) / FAIL 196→**114** (-82); field A 241→**116** (-125 真清，68% cleared vs c7aaa8a5 baseline A=398); B 10 不变。Guards 全保留。剩余 116 A: rootPadding.left/right 72 (P16b verifier topology Design + Apply) + DropDownListSelect 31 (pickup §3 #2 调研) + 散落 textFillHex 12 (新 cluster — 需 discovery) + 10 真 B residual。**新分工矩阵 codified into AGENTS.md** §Task-type 矩阵 (Discovery / Apply / Design / Refactor / Infrastructure / Audit 6 行)：实证 P15.1 / P15.2 / P15.2-extend / P16 discovery 4 次实跑，plan owner 凭记忆喂数字 = bug 源（P15 算错 38 / P16 ~48 歧义被 Codex 抓出），executor 在 apply 阶段额外 verify spec = 冗余 round trip → 每 prompt §Mode 段明示 task type，executor 起手 confirm。**Figma asymmetric finding**：select box/filled × dark theme=on × size=L × multi-select pV=8/pB=8（其他 7/8 个组合统一 4/4）入 BRIDGE-DESIGN-REVIEW backlog 等设计师 confirm intent。下一步：P16b Design options prompt（verifier topology 改法 2-3 选项 + 推荐默认） — 3 轮 ROI gate 实验：v1 code-AI text Δ=0pp (8/8 vs 8/8 测试集 ceiling 过高) · v2 name-naive 升级 Δ=0pp (manifest+registry 已编码 affordance 4 层冗余) · **v3 mockup-AI 真画 Figma** Δ=44pp **PASS** (A=4.5/8 / B=8/8) 三个 SoT 价值 case：T3 rescue (A search 不到 sun/moon → SoT picture-light 救场) / T2/T4/T6 variant precision / **T1/T7 user-confirmed A 找到的 mark/favorite + Message/Help 比 SoT registered 更好 → 暴露 35-pilot scope hole**。**战略 finding**：SoT 目标从 ~~icon 语义数据库~~ → **mockup 一致性收敛器**；scope 从 manifest(642) 升到 **Figma 库全镜像 ~650+**；方法从 demand-driven trickle 改 **batch 集中** (Phase A extract / B Codex batch author / C user batch review / D sync 机制, 估 17-26h+5-8h)。新副产出：figma-technical-reference §Q13 mockup frame sizing hug contents 约定 (v3 B frame overflow 实证)。BRIDGE-MOCKUP-007 closed → backlog 新 BRIDGE-MOCKUP-008 open。**并行 P15.2 + P15.2-extend ✅ commit `b7448843`**（2026-05-27 wrap-up 时合并）：5 个 B1 semantic token 落 Figma 跨 theme 不对称还原 (`--select-disabled-border` / `--select-line-border` / `--select-multi-line-border` / `--input-line-border` / `--input-disabled-border`) + InputBoxFilled disabled/placeholder/filled border transparent + verifier 真读 `::placeholder` pseudo computed color when `modelValue=''` 非 disabled 状态——74 个误归 B 真升 PASS。新立 working-principles 原则 7（Figma 跨 theme 不对称 B1 token） + 新建 `docs/internal/figma-cross-theme-asymmetries.md` 清单（4 rows initial）。**总 cleanup** vs master baseline c7aaa8a5: Entry PASS 209→**232** (+23) / SKIP 138→**207** (+69) / **FAIL 288→196** (-92); field A 398→**241** (-157 真清); B 34→**10** (-24, 治超记)。Guards 全保留 (P10a SKIP 83 / P11 SKIP 224 / P12 XL 80/80 / P13 disabled text 104/8 / P14 hover/focus/editable rootBorderHex 0/0/0)。剩余 196 FAIL: rootPadding ~48 (P16) + DropDownListSelect Unknown ~29 (node-id pipeline 调研) + 2 XL feature=text-count outlier + 10 真 schema gap。下一步：BRIDGE-MOCKUP-008 Phase A extract prompt 设计 + P16 padding cluster 调研（双轨）

---

**2026-06-08 规则回流（无功能状态变更）**：诊断「Figma 说明/PRD 禁贴开放性问题」规则没生效（只存在于 design-process.md prose、无触发器、产品端路径跳过加载）→ 补 meta-rules.md **触发器 P**（产品/PRD/UX 起手一次性扫齐 open questions gate + 交付物零未决项）+ AGENTS.md 必读点名 + Delivery Cleanup Gate 自查项；并回流字体规范 **EN Roboto / ZH Noto Sans SC**（所有 Figma 说明文字默认，校正 §M47「Roboto 不可用」过度归并）。commit `00179d78`。已实证（2026-06-08 use_figma 实跑）：loadFontAsync Roboto Regular/Medium/Bold + Noto Sans SC 全 OK，36 个 Roboto 字重可用，无死规则风险。
