# V4-2333 走查轮七 · AI-用户协作过程复盘（内部分享）

> 日期：2026-07-30（傍晚）· Owner：Nancy · 受众：UX 团队 / PM
> 任务：V4-2333 衍生轮 **Config-T 侧收敛**（LCD 侧轮六已收尾，本轮不动）
> 真源：`docs/handoffs/2026-07-28-v4-2333-test-signal-parameters-handoff.md` §1k-G · `docs/specs/2026-07-28-v4-2333-test-signal-parameters-design.md` D1 / D10 补记

---

## 1. TL;DR

| 项 | 值 |
|---|---|
| 本轮轮次 | 走查轮七（同一 feature 第 7 轮） |
| 派单 | 3 项：① 补 D10 口径 ② 走轮六同样的收敛 ③ 跑 §2a 三轮 |
| 实际交付 | 派单 3 项全做 + **1 项派单外的 🔴**（D1 修订 17 处未落地）+ **1 项当轮自造互斥的自纠** |
| 核心 process gap | **2 个 🔴**（均为「互斥而非错误」形态，与轮六 G1/G2 同族） |
| 改动量 | 8 个文本节点（全走 M47.2）+ 4 处几何修复 + 3 份文档回写 · DS repo **零写入** |
| 关键 insight | **owner 的一句问话被 AI 执行成「查那一条」，而它的对象全集是「全部同类决策」** —— 轮六 owner 问「另一个 surface 调整了吗」，AI 只核了 D10，漏了同样被修订过的 D1，代价是 17 处互斥又活了一轮 |

---

## 2. Session 概览

**起点**：轮六收尾时自查发现 Config-T 侧缺 D10 口径（轮六 G5，第 4 次 SCOPE 实证），写成两条 action item 交给下轮。本轮按 owner 派单接手。

**最终落地**：

| Surface | 动作 |
|---|---|
| Config-T `rJJjWWs51n2iFOlCIC7aYG` page `8075:2` | PRD `8084:517`（§4 req 1–9 连续重编号、§5 7 条）· UX 卡 `8085:517`（Data Contract 新增 D10 bullet）· Journey 卡 `8086:517`（5 stage 收敛，1306→956）· 3 caption（1956→1176）· 几何修复 4 处 |
| LCD `0054ib0nLmt27bC3QlGDl7` page `9343:2` | **只读对照，零改动**（owner 指示；对照结果证明 D1/D10 在 LCD 侧均已落地） |

**process artifacts**：handoff §1k-G（含全部机检原文 + 误报判定）· design-spec D1 / D10 各补一段落地口径 · 轮六复盘 §8 两条 action item 销项 · 本复盘。

---

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

| # | 阶段 | 触发 | 动作 / 改动量 |
|---|---|---|---|
| 1 | 起手 gate | @TVU mockup 起手协议 | TodoWrite 物化 → cwd/env（TVU repo 与 origin 同步、REST token 缺）→ scoped 读真源 → classify（US-3+US-6）→ M48 清单 12 条 → figma-use |
| 2 | **先量化** | 轮六「先量化再动手」经验 | 16 个事实维度 × 180 个 TEXT 的 pattern 计数（机器输出）+ 跨 surface 同扫 LCD |
| 3 | 🔴 发现派单外项 | 量化结果里 A/B/C 三组同时高命中 | D1 修订 17 处未落地，且与同卡 `Update` 描述互斥 |
| 4 | 改 PRD | 任务① + D1 落地 | §4 req 3 改 / 新 req 7（D10）/ 拆 req 8 / 原 8→9，1–9 连续；§5 acc 4 改 + 新 acc 5 |
| 5 | 改 UX 卡 | 同上 | Data Contract 新增 D10 bullet + Persistence 改 Update；Interaction b1；Acceptance acc3 |
| 5b | **自纠样式回归** | M47.2 逐段复核输出 | UX 卡三段的单行双语标题被我按 PRD 的双档模板拆成两段 → 当场修回单段 |
| 6 | **自纠内容互斥** | probe C3 帧实测 | 我把 LCD 的合并预设（`720p50`）写进了 Config-T，与三独立下拉界面互斥 → 改为三下拉口径 |
| 7 | 收敛 Journey + caption | 任务② | 先 probe LCD 收敛后范式（`9598:216–220`）再照做，不自创 |
| 8 | 🔴 几何回归 | I7 复测 | UX 卡增高 130 后压住 Journey 卡 70px；caption 瘦身后紧邻间距 20→82px → 两处都修 |
| 9 | §2a 三轮 + 机检 | 任务③ | ① 13 模式（1 命中判误报）② 11 条新事实全在位 ③ 3 处 scope 声明句逐条判过 + 6 类 in-file 机检 + 4 张截图亲验 |
| 10 | 收尾 | — | handoff §1k-G · design-spec D1/D10 补记 · 轮六 §8 销项 · 本复盘 |

---

## 4. Top process gap（按返工成本排序）

### G1 🔴 owner 的问话被执行成「查那一条」，而它的对象全集是「全部同类决策」（第 5 次 SCOPE 实证）

- **实证**：轮六收尾 owner 问「另一个 surface 调整了吗」。AI 把它执行成「查 **D10** 在 Config-T 有没有」→ 查出 D10 缺口（正确），但**没有枚举全部已被修订过的决策**。`D1` 同样带 2026-07-29 修订（提交方式改为 `OK` / `Update`），Config-T 侧 **17 处**旧表述从未改过。
- **为什么难发现**：这 17 处**单独读都通顺**。`a change applies instantly, is saved automatically` 是一句正常的产品描述；`Update stays disabled until an edit is pending` 也是一句正常的产品描述。只有把它们**放在一起**才看出反向 —— 与轮六两个 🔴 完全同一形态（互斥而非错误）。最刺的是 Journey `stage 3` 把「多一步保存」写成**痛点**，而 Config-T 的交付形态正是 Update 提交一步。
- **返工成本**：本轮 6 个节点重写。若继续漏，dev 会拿到「改完即时生效」的需求去实现，而效果图上有个 Update 按钮 —— 要么按图实现、需求条作废，要么按需求实现、Update 按钮变装饰。
- **自查结论（回流判断）**：§M-DISCIPLINE.SCOPE 硬约束表第一行「不由『用户指摘了哪几个』推导」**已经完整覆盖此形态** → 属「规则没触发」，不属「规则粒度缺口」→ 按 §Trigger-Drift **禁止加新编号**。仅候选补一行实证。本轮 DS repo 零写入（遵 design-spec §7.4），等 owner 拍板。
- **同族第 5 次**：轮二（对象集被指摘句框定）→ 轮四（清单只统本轮触碰帧）→ 轮五（枚举维度只扫 Roboto）→ 轮六（surface 不全）→ **轮七（决策集不全）**。

### G2 🔴 把另一个 surface 的口径直接搬过来 = 与本 surface 的界面互斥（AI 当轮自造）

- **实证**：补 D10 档位清单时，AI 第一版直接把 LCD 的合并预设写法 `720p50 / 720p60 / 1080i60 / 1080p30 / 1080p50 / 1080p60 / 2160p30` 写进 Config-T 的 PRD req 7 与 UX Data Contract。**probe C3 帧实测后才发现**：Config-T 是 Resolution / Scan Type / Frame Rate **三个独立下拉**，Resolution 展开实画 `1280 x 720` / `1920 x 1080` / `3840 x 2160`，根本不存在 `720p50` 这种合并档位。
- **教训**：「同一条决策要写进两个 surface」≠「同一段文字复制两遍」。**决策是同源的，表述形态必须各自贴合该 surface 的界面**。正确写法 = 三下拉各自取值 + 「只提供彼此的**合法组合**」+ 一句「LCD 侧把同一集合以合并 Format 预设暴露」把两端显式接起来。
- **值得记的副产品**：这一处**反过来坐实了轮六的判断**「Config-T 比 LCD 更需要这句 D10 口径」—— 三个独立下拉的笛卡尔积远大于合法组合数，不写这句，dev 无从判断哪些组合合法。轮六那句判断当时只是推理，本轮拿到了界面级证据。
- **抓到它的机制**：写完之后 probe 了一次 C3 帧的实际文本（本来只是想决定 caption 要不要带 D10 一句）。**如果不 probe，这处互斥会以「已补齐 D10」的名义收尾。**

### G3 🟡 文本瘦身 / 增长都会改高度，几何回归必须当同一步做

- **实证**：UX 卡补 D10 后增高 130 → bottom 1588 **压住 Journey 卡 y 1518，重叠 70px**；caption 删两段后高 110→48 → 与帧顶的 20px 紧邻间距被拉到 82px。
- **教训**：这已是本 feature 第三次同族（轮一 PRD 追加两段压 Journey 卡 · 轮三 Format 面板加行压底栏 · 本轮）。**「改文本」和「改布局」在 Figma 里是同一个动作**，`I7` 复测不能等机检报错才做。
- **本轮做法**：改完立刻算 bottom 并求交，两处一起修，复测 `childOverlap []` + 三处 caption gap 全 20px。

### G4 🟡 跨卡族套模板会带来样式回归

- **实证**：UX 卡三段的**单行双语标题**（`Data Contract · 数据契约` 整行 Roboto/Medium 15 cyan 一段）被我按 PRD 的「EN 行 + ZH 行」双档模板写成了两段，ZH 变成 Noto 13 / 0.45 —— 视觉档位错了。
- **抓到它的机制**：M47.2 要求的 `getStyledTextSegments` 逐段复核输出里 shape 与原始不符，当场修回。**这正是 M47.2「只认机器输出、不认目测」的价值** —— 这种改动截图上很难看出来。
- **教训**：M47.2 已写明「追加内容时样式模板取自同节点内最后一个同类 seg，而不是硬编码档位」。我取了**同类卡另一节点**的模板（PRD 段），仍然踩了。**模板要取自「同一个节点」，不是「同一类卡」。**

---

## 4b. 本轮验证有效的做法（与教训同等重要，建议直接复用）

| 做法 | 实证 |
|---|---|
| **先量化再动手（轮六经验的二次验证）** | owner 派单说「补 D10 + 走同样的收敛」。没有直接照轮六步骤删，先跑 16 维度 × 180 TEXT 的机器计数 → **在派单之外抓到 D1 的 17 处互斥**（派单里完全没提这件事）。若直接执行派单，这 17 处会再活一轮 |
| **量化时把另一个 surface 一起扫** | 同一轮同时扫 Config-T 和 LCD，`即时生效` 在 LCD = 0 / Config-T = 9 的**对比**才是判定依据 —— 单看 Config-T 的 9 处，很容易当成「原本就这么写的」而不是「该改没改」 |
| **收敛前先 probe 参照物的实际结构** | Journey 收敛没有自己设计字段结构，先 probe LCD 轮六收敛后的 `9598:216–220` 拿到 canonical 5 段形态（标题 / EN+`Screens:` / ZH+`经过：` / `Pain → Fix` / `痛点 → 解法`）再照做。这是 §M23.16「规则优先于范本」的正向用法：**范本是 owner 已认可的同轮产物，不是 pre-规则旧物** |
| **写完还要 probe 一次界面本体** | G2 那处互斥是靠 probe C3 帧实际文本抓到的，而 probe 的初衷只是「决定 caption 要不要带 D10 一句」。**顺手的实测比计划中的实测更常抓到东西** |
| **① 轮命中先判误报再改** | `no separate Save` ×2 命中了「无保存动作」正则，但它说的是「没有额外 Save/Cancel 按钮对」，与被 D1 推翻的「不需要提交动作」不同义。**判定为误报并写进 handoff，而不是为了让扫查归零而改掉正确的文字** |
| **③ 轮的自我应用** | 跑完 ③ 轮后，回头把 handoff §1k-F ④「未验、留下轮」这条**已被本轮完成的声明**划线标注 —— 否则下轮 AI 读 handoff 会以为 Journey / caption 还没收敛。同理销掉轮六复盘 §8 的两条 action item |
| **自查「是否需要回流」而不是直接加规则（轮六经验二次验证）** | G1 自查结论 = SCOPE 条已完整覆盖 → 「没触发」不是「粒度缺口」→ 零新增编号、DS repo 零写入。本轮因此没有让规则库再膨胀一条 |

---

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

### 给 UX / PM 提需求方

1. **交办时说「这条决策」，AI 会只查这条；说「所有被改过的决策」，AI 才会枚举全集** —— 轮六「另一个 surface 调整了吗」这一问价值极高（抓到 D10），但它的措辞让 AI 把 scope 收窄到那一条决策。更高 ROI 的问法是「**有哪些决策后来被修订过？每一条在两个 surface 都落地了吗？**」
2. **决策修订时顺手说一句「这改动影响哪几个交付物」** —— D1 的 2026-07-29 修订当时只在 LCD 侧场景下讨论，没人说过它同样约束 Config-T 的文字。一句「两端都要改口径」可以省掉本轮 6 个节点的重写。
3. **「走同样的收敛」这种指令很好用，但要允许 AI 报告『同样』之外的东西** —— 本轮派单是「照轮六做」，而实际最严重的问题不在轮六的清单里。

### 给 AI 协作流程

4. **量化必须跨 surface 同时跑，不能只跑「本轮要改的那个文件」** —— 对比值（LCD 0 / Config-T 9）才是判据；单侧数值无法区分「本来如此」与「该改没改」。
5. **「补齐某条口径」类任务，补完要 probe 界面本体核对一遍** —— 口径是文字，界面是形态；同一决策在不同 surface 的形态不同（合并预设 vs 三下拉），文字照抄就会与界面互斥。
6. **改文本后的几何复检写进同一步，不要等机检** —— 本 feature 已三次同族。

### 给 review 方

7. **看「两处在说同一件事时，有没有说反」** —— 本轮两个 🔴 都是每处单独读都通顺、放一起才反向。轮六也是两个同形态。这已经是这个 feature 的主要缺陷类型，值得作为固定 review 视角。
8. **PRD 里出现「即时生效 / 无需保存」这类字眼时，对照一下界面上有没有提交按钮** —— 这一对是最容易并存且互斥的组合。

---

## 6. 规则回流清单（本轮 DS commit 0 · 新增编号 0）

| 候选 | 自查结论 | 去向 |
|---|---|---|
| 「决策修订的落地面 = 该决策涉及的全部 surface × 全部交付层」需要专门核查 | 扫 DS 真源：§M-DISCIPLINE.SCOPE 硬约束表第一行「不由『用户指摘了哪几个』推导」+ 硬约束 1「枚举对象全集，不枚举触碰集」**已完整覆盖** → 属**没触发**，非粒度缺口 | ✅ **owner 轮八拍板「补实证、条文不动」，已落地**（DS commit `bc242a68`）。实测更正：该表原只有 **3 行**，轮六第 4 次实证也从未回流 → **补的是两行**（第 4 行 surface 维度 / 第 5 行决策集维度），硬约束与 Acceptance 一字未改、新增编号 0 |
| 「跨 surface 复用口径时须核对该 surface 的界面形态」 | §M-DISCIPLINE.SYNC §2a ③ 轮「互斥对照」的**同文件形态**已覆盖（新写的陈述 ↔ 既有陈述要显式对照，此处「既有陈述」= 界面本体）。判为**措辞未涵盖「界面本体也算对照对象」** —— 可能是真缺口 | ✅ **owner 轮八拍板「是真缺口，并入 ③ 轮作第三形态」，已落地**（同 commit）。除措辞外还补了原条文**完全缺失的触发条件**（跨 surface 复用口径）+ 判据 **d** + 可执行扫法 + 实证 C + Why + Acceptance 同步；仍**零新增编号**。同轮自跑 ③ 轮抓到 `AGENTS.md:441`「两种形态」与新条文反向、已修 |
| M47.2「样式模板取自同节点同类 seg」 | 条文**已写明**「同节点内最后一个同类 seg」，我取了同类卡的另一节点 → 纯执行偏差 | 不回流。G4 仅作实证记录 |

**校验（机器输出）**：`git -C tvu-design-system diff --stat -- docs/internal/ AGENTS.md` → **空** → **本轮（轮七）DS repo 零写入已机验**（未新增规则编号、未改任何规则真源、未 append phase0-ledger —— ledger 末行仍为 `2026-07-29`）。

> ℹ️ **轮八已在 owner 拍板后写入 DS**（commit `bc242a68`，两条候选均回流、新增编号仍为 0、ledger 仍未 append）。本节「零写入」描述的是**轮七**，与轮八不互斥。

> ⚠️ **DS 工作树在本 session 期间一直被并行工作线改动，勿把 dirty 状态误读成本轮遗留**：17:0x 一度为空（INFRA-F68/F73/F79/F80 已提交，HEAD `bb79bdba`），随后 design-sync 线又产生 3 项（`docs/internal/retrospection/design-spec-canonical-alignment-tracker.md` · `src/components/UserMenu/UserMenu.vue` · 未跟踪的 `docs/internal/retrospection/2026-07-30-sync-b-retirement-parallel-index-and-self-gate-blindspots.md`）。**这三项与 V4-2333 零因果，本轮一个 DS 文件都没碰。** 下轮若要写 DS，先 `git fetch` 核 HEAD 并避开这些文件。
>
> ✅ 轮八已照此执行：`git fetch` 实测 HEAD 已一路推进到 `c2f0f6cd`（并行线又提交了 UserMenu 修复 + STATUS 收尾），dirty 项已被并行线自行提交；轮八只 `git add` 了自己改的 `mockup-conventions.md` + `AGENTS.md` 两个文件，未触碰并行线文件。

TVU Pack 目录非 git 仓库（`rev-parse --is-inside-work-tree` → `fatal: not a git repository`），故项目侧文档无 commit / push 动作。

---

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

| 环节 | 建议 | 依据 |
|---|---|---|
| 跨 surface × 跨决策的互斥诊断 | **Opus**（本 session 用 Opus 5 1M） | G1 要同时握住 design-spec 13 条决策（含哪几条带「修订」）× 2 个 surface × 4 层交付物，并判断「哪些是同一决策的不同表述」。不是关键词匹配能得出的 |
| 「是否需要回流」自查 | **Opus** | 要读懂 SCOPE 条的适用边界（它管的是「scope 由什么推导」，而决策集是 scope 的一个维度）才能判「没触发」vs「缺口」 |
| 事实级 pattern 计数 | Sonnet 够 | 写正则 + 统计分布，机械执行 |
| 多段样式文本批量重写 | Sonnet 够，**但必须带 M47.2 + 「模板取自同节点」约束** | 本轮 8 节点重写，风险全在跳步（G4 的样式回归就是模板取错来源） |

---

## 8. 给团队的 action items

| # | 事项 | Owner | 说明 |
|---|---|---|---|
| 1 | ✅ ~~🟡 **LCD Journey stage 5 一条过时 deferred**~~ | AI（轮八已完成 2026-07-30） | 已改为事实陈述：`Config-T carries the same hint text — both surfaces read alike. 🟡 Next round: raise it to a toast layer on the LCD.` / `Config-T 已是同一句提示，两端一致。🟡 下一期：LCD 侧升为 toast 层。` **顺带更正本条的证据**：轮七写的「同句文案」引的是**图层名**，轮八 probe 界面本体实测两端**文案**才落实为逐字一致（都是 `Stop the test to change parameters`）—— 这正是当轮新立的判据 d 的第一次自我应用。Config-T `8086:523` 那条要求 LCD **toast 层**，仍有效、未动 |
| 2 | ✅ ~~🟡 **两条候选规则待拍板**~~ | Nancy（轮八已拍板） | 两条均回流、均零新增编号，见 §6 更新后的去向列 + handoff §1k-H ①②。DS commit `bc242a68` |
| 3 | ⏸ **发 Jira** | Nancy | 等 owner 说定稿。精简格式 + @Trevor `5e59a401a17f930c9b9627c2` + cc Edward/Dave，ADF 真 mention + 短锚文本 Section 链接，发前先贴给 owner 确认 |
| 4 | 💡 **决策修订要留「落地面清单」** | 全员 | D1 修订当时只在 LCD 场景下讨论，没记它同样约束 Config-T 的文字 → 漏了一整轮。建议 design-spec 的每条「修订」后面直接跟一行「落地面：<surface> × <交付物>」，让下轮 AI 有可核对的对象全集 |
| 5 | 🚫 ~~88 处非 Verdana 字体债~~ | — | owner 2026-07-30 已裁定不改、条目关闭 |

---

### 附录：本 session 改动统计

| 类别 | 数量 |
|---|---|
| `use_figma` 调用 | 9（只读 probe 4：结构盘点 / 全文读取 ×2 / 样式模板 / C3 帧实测 · 写 5）· 0 次报错 |
| `get_screenshot` + 亲验 | 4（PRD 卡 · UX 卡 · Journey 卡 · Section 全景），全部 `curl` 下载后逐项核 |
| Figma 文本节点重写（M47.2 + 逐段复核） | 8（PRD 2 · UX 卡 3 · Journey 5 stage · caption 3 —— 其中 PRD §4/§5 各写两次：第二次改档位表述形态）· shapeMatch 全 pass · 1 处样式回归当场自纠 |
| Figma 几何改动 | 4（Journey 卡下移 · C1/C2 caption 下移 · C3 caption y 复位） |
| Figma 删除节点 | 0（本轮全是段内内容删减，无节点删除） |
| 机检轮次 | 6（事实级计数 ×2 含跨 surface · 样式模板 probe · 几何复检 · §2a 三轮 · in-file 六类机检）+ REST 总闸实跑 1（9/9 could-not-run） |
| DS commit | **0** · 新增规则编号 **0** |
| 项目文档回写 | handoff §1k-G（新增）+ §1k-F ④ 销项 · design-spec D1 / D10 各补一段 · 轮六复盘 §8 两条销项 · 本复盘 |
| 交付层字符净变 | 15,007 → 16,169（**+8%**）：PRD +26% / UX +25%（D10 口径与 D1 落地是净增，规则显式要求）· Journey −9% · caption **−40%** |
