# AI 协作复盘 · V4-2333 / V4-2376 走查轮三十三（定稿轮）

> 日期：2026-08-07 · Owner：Nancy · 用途：UX 团队 / PM 内部分享
> 实现层交付见 handoff `§1k-AH`、决策见 design-spec `D44`、走查结论见 `docs/plans/2026-08-07-v4-2376-round33-f1-walkthrough-report.md`。本文只复盘**人与 AI 的协作过程**。

---

## 1. TL;DR

- **总轮次**：本 session 1 轮（feature 累计第 33 轮），owner 三次拍板（3 组 AskUserQuestion，共 9 个选项位）
- **最终交付**：LCD 新增「发起失败」帧 + annot + 分支标签；Acceptance 拆条 14→15；UX 卡补第 ⑥ 段；两端参数对照表 `Update→Apply`；DS 两个 commit 已推 origin/master；首次完整 F1 双端走查报告
- **核心 process gap 数**：**4**（其中 2 个是 AI 把「没验证的推断」写成了「已登记的事实」）
- **关键 insight**：本轮价值最高的两件事，都是**推翻 AI 自己此前写下的结论**——一次由 owner 一句质疑触发，一次由 AI 在执行前自查触发。**沉淀下来的「结论」比新做的设计更容易出错，因为它不再被任何人验证。**

---

## 2. Session 概览

| 项 | 内容 |
|---|---|
| 起点 | 续跑 prompt：先问 owner 三件事（Acceptance 卡是否定稿 / report 体积策略 / 两处 Verdana 墙手改） |
| 落地 | owner 定稿 ⇒ 跑完整 F1 ⇒ 修完 findings ⇒ 交付物齐备，唯一剩余 = 发 Jira |
| Process artifacts | F1 走查报告（新建）· handoff §1k-AH · spec D44 · 本复盘 · DS commit `056ca562` / `c23e7f57` |
| 环境事件 | 并行 INFRA session 在同一 DS 工作树 `git add -A` + commit，卷走了 AI 改到一半的文件 |

---

## 3. 时间线 / 主要迭代

| # | 阶段 | 触发 | 改动量 |
|---|---|---|---|
| 1 | 起手协议 | skill load + 真源 scoped 读 + M48 自检清单 | 0 写 |
| 2 | Verdana 墙实测 | **owner：「这两处你不可以帮我改吗？加也是你加的啊」** | 2 只读 probe → 推翻上一轮登记 |
| 3 | toast 改写 + 引用同步 | 上一步结论 | 1 写（2 节点）+ §I7 量 |
| 4 | 字体债全域普查 | §M-DISCIPLINE.SCOPE「对象全集」 | 1 只读（22 帧 / 643 节点）|
| 5 | DS report 体积策略 | **owner 选「只入库 findingNodeIds」** | 脚本 + 22 单测；中途撞并行 session 冲突 → 改走 worktree |
| 6 | 完整 F1 双端走查 | 定稿后的既定顺序 | 2 次机检（首次 scope 选错，重跑）+ 8 只读 probe |
| 7 | F1 findings 修复 | owner 三选 | 6 写（新建 4 节点 / 改 5 节点）|
| 8 | **撤回 F33-3** | AI 执行前自查 | 0 写（owner 已批准但未执行）|

---

## 4. Top 4 Process Gap（按返工成本排序）

### G1 — 把「未验证的推断」写成「已登记的事实」，且连写两轮（最高成本）

**实证**：上一轮 handoff §1k-AG ⑦.3 登记「只有 owner 能改的 2 类（Verdana 墙）：toast 文案 + 4 处 `LCD Button` label」。本轮实测：**这 5 处字体全是 Roboto，AI 一直就能改**。病根是把**组件默认字体**（`LCD Button` 内部确是 Verdana）与**该 instance 当前字体**（早被 override 成 Roboto，正是 AI 自己写进去的）混为一谈，再按「节点在 LCD 产品帧内」这个**归类**去推断可写性。

**返工成本**：该错误登记存活了整整一轮，并被写进 handoff、spec、memory、续跑 prompt 四处；owner 每轮都要被提醒「有两处只能你手改」。若非 owner 直接质疑，还会继续传递。

**回流落点**：判据「判 AI 能否改某文字必须 probe 该节点当前的 `getStyledTextSegments`，不能按所属 surface 归类推断」→ 已写入 spec D44 ①、memory description。

### G2 — 拿闸的**包围盒数字**当**形状事实**，据此给出 finding 并让 owner 拍了板

**实证**：overlap 闸报 `_connector · ①→B1 ⨯ C0  overlap 480.0x3.0`，AI 直接写成「连线横穿 C0 帧 480×3，违反 M23.6」的 Medium finding，并做成 AskUserQuestion 选项让 owner 选修法。owner 选了「只修主犯」。**执行前 probe 才发现**：横线在 y23–25、所有帧自 y40 起，横线根本没进任何帧；包围盒到 y43 是因为两端锚点圆点/箭头**故意**探进帧内 3px（M23.6「两端锚定」的要求）。逐叶子核验 10 对 = 6 对设计正确的锚点 + 4 对纯 bbox 假阳性 ⇒ **0 条真缺陷**。

**返工成本**：本次为 0（拦在执行前），但**差一步就会为迎合工具而破坏画对了的东西**——这是最坏的一类返工，因为改完机检会变绿、看起来更"对"。

**回流落点**：① 判据「闸报的数字是包围盒不是形状，判几何缺陷前必须下钻叶子级」→ spec D44 ⑤ ② `audit-mockup-overlap` 对连线锚定无豁免 → **DS 档待回流**。

### G3 — 机检 scope 选错 + 把 `exit 0` 当通过

**实证**：两处同时踩。(a) 首次跑总闸没带 `--node`，LCD 全文件扫出 **41 279 节点 / 54 324 条 finding**——那是 `0054ib` 大文件的全域存量债，与本 feature 无关。(b) 更早一次，worktree 里没有 `.env`，**9 个子闸全部 ERROR，而 `--non-blocking` 让它照样 `exit 0`**。

**返工成本**：两次白跑（各约 2.5 分钟）+ 一次差点把「exit 0」写成通过证据。

**回流落点**：spec D44 ⑦ 两条硬记；handoff §1k-AH ⑤。

### G4 — 前后对比用了不同的度量口径，自己制造假信号

**实证**：改文本前用 `getStyledTextSegments(['fontName','fontSize','fills','lineHeight','letterSpacing'])` 量得 4 段，改后只用 `['fontName','fontSize']` 量得 2 段，于是以为「段数掉了、丢样式了」。用同一字段集重量确认 4 段、结构完全一致。

**返工成本**：一次多余的核查往返。但同一病灶的**镜像形态**在上一轮造成过真损失（用字符数衡量「卡太长」，指标与抱怨对象不是同一个东西）。

**回流落点**：spec D44、memory description。

---

## 5. 高效对话建议（按 ROI 排序）

### 给提需求方（UX / PM）

1. **「这个你不能帮我做吗」这类质疑，价值极高，请多问。** 本轮最大的一次纠错就来自 owner 一句反问。AI 写下的「做不了」往往是**某次具体失败的过度泛化**，它自己不会主动回头验证。
2. **不必先想清楚「怎么改」再提。** owner 只说了「加也是你加的啊」，没有指定方案，AI 据此自己去 probe 出了真实边界。**描述你观察到的矛盾，比指定解法更有效。**

### 给 AI 协作流程

3. **凡是「登记为做不了 / 不适用 / 已排除」的条目，下一轮开工前必须重验一次。** 这类条目不再被任何人检查，是错误结论的温床。本轮 G1 就活了整整一轮。
4. **工具报的数字要先问「它量的是什么」再当结论用。** 包围盒不是形状、字符数不是卡高、exit code 不是通过——本 session 三条都踩过。
5. **owner 已批准的改动，执行前发现前提错了要立刻停下并说明**，不要因为「已经批准了」就照做。本轮 F33-3 就是这么拦住的。

### 给 review 方（PM / Stakeholder）

6. **AI 给的选项里若有「主犯 / 最严重 / 唯一」这类定性词，值得追问一句证据。** 本轮那个「主犯」实际是假阳性。
7. **交付物的完整性缺口，常常藏在验收条的「合并写法」里。** 本轮 PRD req 14 覆盖不全，正是因为 Acceptance 把「发起失败」和「提交失败」合并成一句，读起来完整、实际少一半。

---

## 6. 规则回流清单

| 规则 / 判据 | 真源文件 | 状态 | 简述 |
|---|---|---|---|
| conformance report 只入库 `findingNodeIds` | `mockup-conventions.md` §M-DISCIPLINE.SYNC 第 1 条 | ✅ 已回流（`056ca562`）| 诊断文本落 gitignored 边车；`--report-lines` 可恢复内联 |
| 判 AI 能否改某文字 → probe 该节点当前 segments | spec D44 ① · memory | ✅ 项目档 | 组件默认字体 ≠ instance 当前字体 |
| 闸报数字是包围盒不是形状 | spec D44 ⑤ | ✅ 项目档 | 判几何缺陷前下钻叶子级 |
| `audit-mockup-overlap` 连线锚定豁免 | DS `audit-mockup-overlap.mjs` + M-INTEGRITY §I2 | ⏸ **待回流（DS 档）** | 对 `_connector · *` GROUP 走叶子级相交，或端点 ≤8px 探入豁免 |
| `--non-blocking` 掩盖全 ERROR / 机检必须 `--node` 限定 | spec D44 ⑦ | ✅ 项目档 | 看 summary 逐条，不看退出码 |
| 并行任务起手就开 worktree | 全局 CLAUDE.md（已有规则）| ✅ 本轮再实证 | 本轮被并行 session 的 `git add -A` 卷走半成品 |

---

## 7. Model 选型推荐（基于本 session 实证）

| 任务类型 | 推荐 | 依据 |
|---|---|---|
| 走查 / 边界推翻 / 因果切割 | **Opus** | 本轮两次关键纠错（G1、G2）都依赖「对已有结论保持怀疑 + 主动设计验证探针」，不是照单执行 |
| 批量 probe / 机检跑数 | Sonnet 或后台脚本 | 纯取数，无判断 |
| 文档回填（handoff / spec） | Opus | 需要判断哪些是「推翻」哪些是「追加」，写错会污染下一轮的前提 |
| 文案精简 / 翻译 | Haiku（role-translator）| 无跨轮状态依赖 |

**一条实证**：本轮 F33-3 的撤回发生在「已获批准、只差执行」的节点上。这个自查不是流程强制的，是模型在写代码前又 probe 了一次。**流程能保证「改前 probe」，但保证不了「对自己刚说过的话保持怀疑」——后者对模型能力敏感。**

---

## 8. 给团队的 action items

1. **（AI）** 下一轮开工前，把 handoff 里所有「登记为不做 / 做不了」的条目重验一遍——本轮证明这类条目会带错一整轮。
2. **（AI / DS maintainer）** 回流 `audit-mockup-overlap` 的连线锚定豁免。当前状态下，**任何含长跨度连线的流程图都不可能通过 overlap 闸**，这会训练所有人忽略该闸的输出。
3. **（owner）** 发 Jira 时顺带问 dev：提交失败**与发起失败**的真实原因枚举与各自文案（Dave 说过「有控制 TestPattern 的接口 晚点提供」，正好并进去）。
4. **（owner）** LCD 产品帧 **152 个 Roboto 节点**需在本地 Figma 换回 Verdana（另有 9 段 PingFang SC）。这是既有债、非本轮引入，但清单数字此前记的是 88。
5. **（团队）** DS repo 并行工作线已造成一次「commit 内部自相矛盾」（`a5bdafb7`）。建议：**任何 session 起手即开 worktree**，主工作树只用于读。

---

## 附录 · use_figma 改动统计

| 项 | 数 |
|---|---|
| 写操作调用 | **10** |
| 只读 probe 调用 | **12** |
| 新建节点 | **4**（帧 `10052:459` · toast `10052:645` · annot `10053:492` · label `10054:492`）|
| 改动节点 | **5**（`I9901:778;…` toast 文本 · `9597:217` Changes · `9597:220` Acceptance · `9627:272` · `8094:521`）|
| 跨文件 | 2 个产品文件（LCD `0054ib…` / Config-T `rJJj…`）|
| §I7 几何复量 | **4 次**（每次编辑批次后，全部碰撞 0）|
| 机检总闸 | **5 次**（2 次因 scope / 凭据问题作废，3 次有效）|
| 撤回未执行的改动 | **1**（F33-3，owner 已批准）|
