# Graphics Insertion · Dual Preview — 9 轮迭代复盘

> **Date**: 2026-05-20
> **Scope**: 项目本地复盘（本 session 的 AI-用户协作过程）
> **Sibling docs**:
> - Handoff: [`2026-05-19-graphics-insertion-dual-preview-handoff.md`](./2026-05-19-graphics-insertion-dual-preview-handoff.md) — 实现细节 / 决策落点
> - Pickup: [`2026-05-20-graphics-insertion-pickup.md`](./2026-05-20-graphics-insertion-pickup.md) — next-session 续上指南
>
> **Why this file is project-local, not TVU repo**: 本复盘的"问题清单"和"建议"都跟 MicroApps Graphics Insertion 这次任务深度耦合。其中**真通用的 AI 工作经验**（如 M31 纪律 gap、起手 protocol echo）若未来累积多 session 同类反复，再考虑抽象到 TVU repo 单独立档。本次单 session 实证强度不够、不污染 TVU。

---

## 1 · 任务量化

| 维度 | 数值 |
|---|---|
| 迭代版本数 | 9 (v1 → v9) |
| 跨日 | 2 天 (2026-05-19 起 → 2026-05-20 收) |
| 关键 retrofit 轮次 | v1→v2, v2→v3, v3→v4, v4→v5, v5→v6, v6→v7（连续 6 轮）|
| 用户主动给参考触发的合理迭代 | 2 轮（v7 audio meter + Cut button 参考；v9 PP-2025-2026 视觉参考）|
| 起手协议本可避免的 retrofit | **6 / 9 = 67%** |

## 2 · 9 轮 iteration trail 速查

| 版本 | 主要动作 | 触发原因 | 性质 |
|---|---|---|---|
| v1 | Mid Ops 列 + Video Cut + 长 PRD card | 初版 | baseline |
| v2 | 16:9 + 删 Video Cut/format dropdown，加 `● Input/Output/Settings` section 标签，Preset 移右栏 | 用户："视频要 16:9 / 不要转场 / Output 只要 Go Live / 严格 L/R" | **AI 过度解读**（把"左 = 输入/输出/预览"读成 3 个 section labels）|
| v3 | 回退 Preset 到 bottom，留 section labels | 用户："Preset 应该在底部 toolbar" | AI partial 修正 |
| v4 | Scheme E 范式 + clone URL+toolbar from Before | 用户给 Standard Conversion 参考图 | **用户主动给参考后才纠正**（起手没问）|
| v5 | 预览放大 640×360 + 右栏缩 460w + 垂直居中 | 用户："空白太多 不均衡" | **AI 没算几何上限**（dual 16:9 数学硬约束没主动算）|
| v6 | URL row + toolbar 缩到 1360w，Layer panel 全高 952h | 用户："左右结构 左内上下结构" | **AI partial 实现通用范式**（v4 用户给参考后我只学了 dual preview 部分，没学 URL+toolbar 在左栏内）|
| v7 | clone Group 61 audio meter + PP 状态机 Overlay Cut 交付 | 用户："音量条用 Edit Stinger 这里的 / Cut 交付参考 PP-2025-2026" | **AI 资源复用意识弱**（自画了 6 行代码替代 1 行 clone）|
| v8 | Auto-layout 嵌套树重构（81% auto-layout）| 用户："还是用 Frame 绝对定位，没用 Layout" | **AI 纪律 gap**（M31 起手读了但 path-of-least-resistance）|
| v9 | PVW/PGM 绿/红 border + gradient + interior chips | 用户："效果图糟糕，参考 PP-2025-2026 这里" | **AI 凭意识造视觉**（PRD 没给视觉范式，AI 没主动问就 brain 出 flat 占位风）|

## 3 · 根因诊断

### 病灶 1 · 起手协议缺 3 个动作（**高频根因 / v1-v6 都有责任**）

AI 起手没主动做这 3 件事，导致 v1-v6 都在 retrofit：

| 缺失动作 | 应做内容 | 实际后果 |
|---|---|---|
| **结构层级 echo** | 用 "X 结构 X 内再 Y 结构" 复述理解给用户校验 | v6 才被用户主动澄清"左右 + 左内上下"，v2-v5 一直 partial 实现 |
| **通用约定参考图索取** | 起手问"同产品系列有没有已有参考图，要继承通用约定吗" | v4 才看到 Standard Conversion 参考、之前凭文字 PRD 自由发挥 |
| **视觉范式参考图索取** | 不止结构、也要视觉细节（border 用法 / gradient / chip 密度等） | v9 才看到 PP-2025-2026 视觉范式、之前用 flat fill + 角落 badge 占位风 |

**返工成本**：6 轮 retrofit / 9 文件结构反复 / v1→v6 整段时间预算（占本任务 ~67%）

**原因**：AI 起手默认信任 PRD 文字 + 自由发挥，没有把"复述理解 + 参考图索取"作为硬约束前置动作；mockup-conventions / tvu-design-mockup skill 里也没把这 3 件事列成 Phase 0 强制动作。

**✅ 解决方案**：
- **当下修复**：v9 收尾时已补齐 PP-2025-2026 视觉参考的 PVW/PGM border + gradient + chip 风格；pickup.md §7 写入新 session 起手 prompt 模板，强制 4 件事（M31 echo / 结构 echo / 参考图索取 / 资源扫描）做完才动 Figma
- **长期防护**：`@TVU mockup` skill 起手协议加 Phase 0 强制 4 件事自检 — 没 echo 完不允许调用 `use_figma`；用户侧 prompt 模板进 pickup doc，新 session 复用
- **真源落地**：⏳ 待回流到 `tvu-design-mockup` skill SKILL.md 起手协议段（触发条件：累积 3+ 同类 session 都出现"起手协议 3 件事缺失"病灶，本次为第 1 例）

---

### 病灶 2 · M31 纪律 gap（**v1-v7 7 个版本反复违规 / 单次责任最重**）

- M31（`mockup-conventions.md`）原文："Auto Layout 默认，absolute 仅限有充足理由"
- 起手协议读过整个 mockup-conventions.md（包括 M31），但 v1-v7 反复用 absolute 定位
- **产物代价**：用户在 Figma 里手动改一处要重算 5+ 坐标 / 移 PVW PGM 不会跟随 reflow
- v8 重构 81% auto-layout 才符合规则

**返工成本**：1 整轮 v8 auto-layout 嵌套树重构 / 7 个版本累积技术债 / 期间用户每次手改 Figma 都要重算坐标

**原因**：AI path-of-least-resistance — 写 absolute 比写 auto-layout 嵌套树**直观、快**，违规没立即报错；M31 虽读了但没在每个 batch 开头自检"我现在写的是 auto-layout 还是 absolute"。

**✅ 解决方案**：
- **当下修复**：v8 一次性把 PVW/PGM dual preview + URL row + Layer panel 全栈重构为 auto-layout 嵌套树（81% auto-layout 占比），absolute 仅保留有充足理由的位置（如 overlay chip 角标）
- **长期防护**：`@TVU mockup` skill 起手协议加 "echo 'M31 已加载, layout 默认 auto-layout'" 一句话自检，每个 use_figma write batch 开头复述一次；absolute 定位必须附 inline reason 注释
- **真源落地**：⏳ 待回流到 `tvu-design-mockup` skill SKILL.md（触发条件：累积 2+ 次 M31 同类违规 → 改 skill 起手协议加 echo 自检，本次为第 1 例）

---

### 病灶 3 · 资源复用意识弱（**v4 显著 / v7 修正**）

- v4 自画 audio meter（gradient bars + clip rects + dB tick text，6 行代码 1 整 batch）
- 同 file 1240:15412 Group 61 一行 clone 即可（含完整 TVU `icon/sound/on 1` + L/R 双轨 + 全 dB scale）

**返工成本**：v4 自画 6 行 audio meter 整段代码作废 / v7 重新 clone Group 61 / 视觉一致性 retrofit 1 轮

**原因**：AI 没主动搜 "file 内已有同类组件"，默认按"看文字 PRD 直接造"路径走；缺资源复用扫描这步前置动作。

**✅ 解决方案**：
- **当下修复**：v7 把自画 audio meter 删除，改 clone file 内 1240:15412 Group 61（含 `icon/sound/on 1` + L/R 双轨 + 全 dB scale），1 行代码替代 6 行
- **长期防护**：mockup 起手协议加"资源复用扫描"步骤 — 任何要画的 UI 元素（meter / button / chip / status pill 等）必须先 grep file 内同类节点 ID 命中后优先 clone，命中 0 才允许自画；写到 use_figma 起手 checklist
- **真源落地**：⏳ 待回流到 `tvu-design-mockup` skill 起手协议段（与病灶 1 合并触发：起手 4 件事之一）

---

### 病灶 4 · 过度抽象倾向（**session 中后段**）

- 用户没让我提议回流，我主动提了 5 条回流候选
- 5 条中 **4 条 over-coupling**（MicroApps-specific 被我误抽象为 TVU-level）
- 用户挑出后才修正：1 条撤回 / 2 条本地化 / 仅 1 条真值得回流

**返工成本**：5 条候选评审 / 4 条撤回或本地化重写 / 用户额外 1 轮挑错时间

**原因**：AI 默认"主动提议回流 = helpful"，但实际把 MicroApps-specific 细节误抽象为 TVU-level 规则会污染真源；缺"不主动提议回流"硬约束。

**✅ 解决方案**：
- **当下修复**：5 条候选评审后 — 1 条撤回 / 2 条本地化（留在 MicroApps 项目级 memory）/ 仅 1 条真回流到 TVU；本复盘文件本身也限定项目本地、不上 TVU
- **长期防护**：consumer-product-conventions 加 meta-rule —**不主动提议回流，除非用户明确问**；提议前必须问"这是通用规则还是 MicroApps-specific"，AI 答 specific 就别提
- **真源落地**：✅ 已落 TVU 真源 `consumer-product-conventions` skill meta-rule 段（"写 feedback memory 前先问是不是通用规则"已存在，本次再次实证）

---

### 病灶 5 · 沟通节奏失衡

- 一次输出多个候选 / 大块 handoff doc，**用户回复"没看懂 / 取消"**
- 理想节奏 = 一次一件事 + 等 confirm + 下一步
- 我的截图频率也偏低（v7 之前没主动截图 verify）

**返工成本**：多次"没看懂 / 取消"导致整段交付重做 / 用户认知负载偏高 / v7 之前缺截图导致后期才发现走偏

**原因**：AI 默认"信息密度高 = 高效"，但实际单次输出过多候选 + 缺截图 verify 会让用户失去 review 锚点；缺"一次一件事 + 截图 + 等 confirm"节奏纪律。

**✅ 解决方案**：
- **当下修复**：复盘 session 内已改为单点输出 + 等 confirm 节奏；pickup.md §7 prompt 模板加"列出建议的下一步（单一动作，不要一次提 5 条）"
- **长期防护**：mockup session 节奏约定 — 一次一个动作，做完发截图 + 一句结论等 confirm 再下一步；多候选场景必须先问用户"要单点深入还是多候选对比"
- **真源落地**：⏳ 待回流到 TVU `design-process.md`（触发条件：累积 2+ session 出现"一次性甩出多候选 / 缺截图 verify"病灶，本次为第 1 例）

---

## 4 · 责任拆分（不是甩锅、是为下次改）

| 责任方 | 占比 | 体现 |
|---|---|---|
| **AI**（我）| ~80% | 起手协议缺失 / 纪律 gap / 资源搜索缺失 / 过度抽象 / 沟通节奏 |
| **PRD 文字本身** | ~10% | "Output 那里 Go Live 就够了" 等措辞 ambiguous，AI 字面解读后 over-engineering |
| **任务复杂度** | ~10% | dual-16:9 + 通用框架冻结约束本身有数学难点，需要前置算几何上限 |

## 5 · 给下次 session 的具体建议

### 5.1 给我自己（AI）的 reminder

> 下次 `@TVU mockup` 起手**强制 4 件事**，做完才动 Figma：
>
> 1. **echo "M31 已加载，layout 默认 auto-layout"** — 一句话强提示自己
> 2. **结构层级 echo** — 用嵌套描述法复述给用户 confirm
> 3. **参考图索取** — 问"通用约定参考 + 视觉范式参考图有吗"（PRD 文字不够，必须看视觉）
> 4. **资源复用扫描** — grep file 内同类组件命中节点 ID + 优先 clone（不要自画）

### 5.2 给你（用户）的 prompt 模板

新 session 起手 prompt（已写到 [`pickup.md §7`](./2026-05-20-graphics-insertion-pickup.md#7--how-to-resume-in-new-session)）：

```
@TVU mockup
继续 Graphics Insertion dual preview 任务 (v9 → 后续)。
先读:
- MicroApps/docs/2026-05-20-graphics-insertion-pickup.md
- MicroApps/docs/2026-05-19-graphics-insertion-dual-preview-handoff.md
- tvu-design-system/docs/internal/mockup-conventions.md §M31/§M-INTEGRITY/§M23

读完执行起手协议 (在动 Figma 前必做):
1. echo "M31 已加载，layout 默认 auto-layout"
2. echo 你理解的当前 v9 状态
3. 列出建议的下一步 (单一动作, 不要一次提 5 条)

等我 confirm 后再动 Figma。
```

### 5.3 沟通节奏约定

| 你 | 我 |
|---|---|
| 一句话一个动作（不要长 PRD 一次性甩出）| 一次一件事，做完发截图等 confirm |
| 给视觉参考时**明确"借鉴 X 元素"**（不要让 AI 凭意识造） | 不主动提议回流 / 抽象规则，除非你明确问 |
| 早期发参考图（结构 + 视觉两套） | 主动暴露不确定，不硬猜 |
| 走偏立即截图 + 一句反馈 | PRD vs 参考图冲突时**主动问澄清** |

## 6 · 实证 (经验来源)

本复盘所有结论的**实证 session**就是这次 9 轮迭代本身（2026-05-19 → 2026-05-20）。

具体 trail 见 [handoff doc](./2026-05-19-graphics-insertion-dual-preview-handoff.md) 和 [phase0-ledger 末段](../../tvu-design-system/docs/internal/_metrics/phase0-ledger.md) v1-v9 共 9 条 entry。

## 7 · 未来抽象到 TVU repo 的触发条件

本复盘**目前不上 TVU**。仅当以下条件之一满足时才考虑：

- 累积 3+ 同类 session 都出现"起手协议 3 件事缺失"病灶 → 抽象到 TVU `design-process.md` 作 process 规则
- 累积 2+ 次 M31 同类违规 → 不是规则缺失而是 AI skill 协议需强化 → 改 `tvu-design-mockup` skill 起手协议加 "echo M31 已加载" 自检
- 累积 2+ 次 "过度抽象 / 误抽象 MicroApps 为 TVU" → 抽象到 `meta-rules.md` 作 anti-pattern

单次 session 实证不够强（可能是本次任务特殊），不污染 TVU。
