# RPSV3-134 Power Control · AI × UX 协作复盘

> **任务**：给 RPS Link (New) 本地 Web UI 加重启 / 关机入口（Jira [RPSV3-134](https://tvunetworks.atlassian.net/browse/RPSV3-134)）
> **日期**：2026-08-31（单 session）　**UX**：Nancy Zeng　**AI**：Claude Opus 5 (1M context)
> 受众：UX team 内部精读 / 下轮 handoff reference

## TL;DR

- **总轮次**：**6 轮**用户输入 · **约 39 次** `use_figma` 调用（含 1 次原子失败）· **14 张**渲染核图 · **4 轮**机械总闸
- **最终交付**：新 page `6553:108` — 5 张 1920×900 WYSIWYG 全景态 + BEFORE 对照 + 5 状态标签 + PRD / UX / Journey 三卡 + Jira 组件 + REFERENCE Section
- **核心 process gap**：**6 个**，其中 1 个由用户纠正、5 个由机检或自查抓出
- **规则回流**：DS catalog **2 处**（commit `db7a5cee`）+ 项目 design-record 1 份

> **关键 insight：我两次把「我的检查通过了」当成「规则满足了」——而两次的判据都不是同一个东西。** 一次是拿关键词搜索的 miss 当「库里没有」，一次是拿 `fontName.family` 的全绿当「字体合规」。前者被 owner 一句话推翻，后者被闸报了 89 条。**探针要对着判据设计，不是对着自己的实现设计。**

---

## 1 · Session 概览

**起点**：用户给三样东西——一条 Slack thread、一张 Config T 效果图、一个要改的 Figma 帧，加一句「重启和关机都需要」。

**最终落地**：走完 8 步 Jira gate（含 M50 kickoff packet `--check` exit 0），产出完整交付集并通过机检归属核验。

**Process artifacts**：

| 产物 | 位置 |
|---|---|
| M50 kickoff packet（M48 自检 + M49 质量合同 + M0 映射表） | `tvu-design-system/docs/internal/_design-kickoffs/rpsv3-134.md` |
| 设计记录（9 段 + 本文件专属取值） | `RPS/docs/specs/2026-08-31-rpsv3-134-design-record.md` |
| Phase 0 ledger 一行 | `tvu-design-system/docs/internal/_metrics/phase0-ledger.md` |
| catalog 回流 | commit `db7a5cee`（双 remote 已 push） |

---

## 2 · 时间线 / 主要迭代

| # | 触发 | 发生了什么 | 改动量 |
|---|---|---|---|
| 1 | 初始需求 | 解码 Slack + Jira，发现单已建（RPSV3-134）；**同时发现项目 handoff 里有一条相反警示**「别在 20220302 老稿上加」——判定那条针对通道编码页、与本机电源控制不冲突，向用户明说后按用户指定基线走 | 0 节点 |
| 2 | **MCP 全断**（Figma / Slack / Atlassian） | 工具全掉，我停在半空。**用户先问「出问题了？怎么没继续」我才说明** | 0 节点 |
| 3 | AskUserQuestion ×2（入口形态 / 状态深度） | 定：页内 Power 分区 + 入口/确认/执行中三档 → 5 帧范围 | 0 节点 |
| 4 | AskUserQuestion ×4（落位 / 作用域 / 范围 / 图标） | 前三问顺利；**图标那问用户答「从 DS 库中选取对应的图标」= 推翻我「库里没有」的结论** | 0 节点 |
| 5 | 枚举 644 icon 全集 + 渲染核实 | 找到 `load/refresh` 形状确为循环箭头可代 reboot；`Setting/standby` 渲染出来是**月亮+Z**。回报后用户改选 Config T 库双图标 | 0 节点 |
| 6 | Gate A（M0 表 + 6 条设计判断 + PRD 全文）→ 用户「可以」 | 开建 | — |
| 7 | 主建 | page + Section + 5 帧 + Power 分区 + 4 浮层 + 5 标签 + 4 卡 + Jira 组件 + REFERENCE | 约 200+ 节点 |
| 8 | 机检第 1 轮（1451 findings） | 逐条核归属：绝大多数落在 clone 的 Top bar 库组件内部（×6 放大） | — |
| 9 | 机检抓 **89 条 `fonts=Inter`** | 第一次修（range 级）**无效**，第二次修（节点级）才对，91 → 2 | 121 节点 |
| 10 | 用户「不回复 JIRA / 提交 DS / 收尾」 | commit `db7a5cee` + push + 本复盘 | 3 文件 |

---

## 3 · Top 6 Process Gap（按返工成本排序）

### ① 拿「关键词搜索 miss」当「库里没有」——唯一由用户纠正的一条

- **实证**：`search_design_system` 查 `power off icon` / `reboot icon` / `restart refresh circular arrow icon` / `shutdown device` 四个同义词全 miss，我据此在回复里写下「TVU UX Design System 新库里没有 power / reboot / shutdown 图标」并给了三个替代方案。用户答「**从 DS 库中选取对应的图标**」。
- **真相**：库里 reboot 语义**是有的**，只是命名为 `icon/load/refresh`（归在 `load` 命名空间）。关键词搜不到是因为库不用 power/reboot 这些词命名。
- **返工成本**：1 轮用户纠正 + 一次结论推翻 + 3 次额外 probe（枚举 manifest 644 icon → 取 nodeId → 渲染 4 个候选）。
- **反向同源**：`icon/Setting/standby` 名字最像电源，**渲染出来是月亮+Z（睡眠）**。所以「名字像」和「搜不到」是同一个坑的两个方向，只有**枚举发布目录全集 + 渲染核形状**能同时挡住。
- **回流落点**：DS `figma-component-catalog.md` §已确认缺失的 icon 语义（已 ship）。

### ② 自验探针对着自己的实现设计，而不是闸的判据

- **实证**：修完注释层字体后我用 `getStyledTextSegments(['fontName'])` 全量扫，得到 `remainingNonCompliant: 0`，据此认为字体合规。重跑闸仍报 **89 条 `fonts=Inter`**。
- **根因**：`createText()` 把 Inter 记在**节点基础 style** 上；`setRangeFontName` 只添加分段 override。我查的是分段属性，闸查的是基础属性——**两个不同的东西**。
- **修法**：改设节点级 `t.fontName = Roboto` 再重设 ZH range，闸从 91 → 2。
- **返工成本**：1 次无效修复（含 1 次因未 load 字体导致的原子失败）+ 1 次重跑闸。

### ③ MCP 断连时我没有主动声明

- **实证**：Figma / Slack / Atlassian 三个 connector 全断，我停止推进，**直到用户问「出问题了？怎么没继续啊」**才说明情况。
- **成本**：用户空等一轮，且要主动来问。
- **应做**：工具失效属于「阻塞事实」，应立即声明并给出「重连方式 + 断连前已拿到什么 + 期间可推进什么」，而不是让用户从沉默里推断。

### ④ 顺序有依赖的修复互相打回

- **实证**：为修 Inter 基础样式，我设了节点级 `fontName` —— 这个操作**清掉了该节点所有分段 override**，包括上一步刚给 `①-⑤` 绑好的 Noto Sans SC（M-TXT-ICON-AUDIT 缺 glyph 项）。
- **发现方式**：只因为我在改完后重新抽样 `getStyledTextSegments` 才看到。若只信「上一步已修好」就会漏。
- **教训**：**修复有先后依赖时，每一步之后要重验前面那步**，不能假设已完成的修复是稳定的。

### ⑤ 从参考图取的数值没吸附 spacing scale

- **实证**：按参考图实测把按钮条 padding 设成 `[24,0,24,20]`，`20` 不在 `{4,8,12,16,24,32,40,56}` 上；状态标签我也随手用了 20。机检 `B-SCALE` 报 16 条。
- **修法**：按钮条 → 24，标签 → 16。M23.14 早写明「按比例算是第一步，吸附 scale 是第二步，两步都要走」，我只走了第一步。

### ⑥ 弹窗文案 wrap 改变卡高后未重算居中

- **实证**：`pop confirm` 基准 480×145，写入真实文案后 wrap 成 166 / 187 / 174，而我的居中 y 仍是按 145 算的 378 —— **四个弹窗都不再垂直居中**。
- **发现方式**：改完文案后顺手读了一次实际高度才发现（属 I7「依附几何的定位要在尺寸变化后复测」类）。
- **回流**：已写进 DS catalog 的 Notification 条目，下次用这个组件会先看到。

---

## 4 · 高效对话建议（按 ROI 排序）

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

1. **给参考图时，说明图里是什么状态**。本轮参考图那两个按钮是**禁用态**（图层名 `Button/Disable`、虚线边框 + 灰字）。我靠 M37 probe 才发现，若照抄就会把 disabled 当默认态交付。owner 一句「这图是禁用态」能省一轮 probe，也消除照抄风险。
2. **领域事实越早给越好**。「关机需现场开机、重启不需要」这条直接决定两个弹窗的文案**不能共用**。它是本轮最关键的设计输入，而它来自 owner 一句话，不是我能从代码或规则推出来的。
3. **纠正 AI 的结论时，可以直接指方向而不必给答案**。用户那句「从 DS 库中选取对应的图标」没有告诉我图标叫什么，但足以让我去枚举全集——这比替我找到答案更省你的时间，且暴露了我判据的缺陷。

### 给 AI 协作流程

4. **让 AI 交「结论 + 判据形态」，不只交结论**。我说「库里没有电源图标」时，若同时被要求说明「你是怎么判定的」，关键词搜索这个薄弱判据当场就会暴露。
5. **工具/环境失效要即时播报**，不要让用户从沉默里推断（gap ③）。

### 给 review 方（PM / Stakeholder）

6. **先看 REFERENCE Section 的「去向对照卡」**（`6573:717`）。它逐条写了参考图的 8 个特征哪些采纳、哪些改写、哪些拒绝**及理由**——比逐帧比对效率高，也最容易发现「AI 擅自偏离」或「AI 照抄了不该抄的」。
7. **PRD 卡与 UX 卡的验收段刻意不重复**：PRD = 功能级（能不能达成），UX 卡 = 界面级（长什么样、组件来源）。两边各留一行指路句，别当成漏写。

---

## 5 · 规则回流清单

| 规则 / 事实 | 真源落点 | 简述 | 状态 |
|---|---|---|---|
| Notification 变体事实订正 | DS `figma-component-catalog.md` | 32 → **36** variants；type 改名（`secondary warning`→`danger` / `none`→`default`）**已落地**；`pop confirm` 只有 danger/default 且**无标题层**；改文案会改卡高 | ✅ ship `db7a5cee` |
| 已确认缺失的 icon 语义 | 同上 | 库无电源符号 ⏻；**关键词 miss 不是判据**，须枚举发布目录全集 + 渲染核形状；逐条排除记录 | ✅ ship `db7a5cee` |
| 本文件 token 映射与帧 id | `RPS/docs/specs/2026-08-31-rpsv3-134-design-record.md` | `Layer_3` = #262626；**分区标题应绑 `Text/Text_1` 而非 `Heading & Button`**（后者 dark 值是 #ffffff，与页面实际 #f8f8f8 不符） | ✅ 已落项目侧 |
| Jira 组件归属订正 | 同上 | FB-10040 记录写「file-local」不准确，实测 `remote: true` | ✅ 已落项目侧 |
| **候选：探针要对着判据设计** | 待定（跨域元规则候选） | gap ② 的抽象。已有 ledger 先例（「自验探针要验的不是报没报，而是扫没扫到已知该命中的目标」），本轮是第 N 次同型 —— **建议 owner 拍板是否升 `meta-rules.md`** | ⏳ 待拍板 |
| **候选：顺序依赖修复要重验前序** | 待定 | gap ④ 的抽象 | ⏳ 待拍板 |

> ⚠️ 两条候选**没有**自行写进 DS 真源 —— 按 §M-DISCIPLINE.SOURCE 三问，规则级抽象需 owner 先认定「这是规则级问题、不是一次性失误」。

---

## 6 · Model 选型（基于本 session 实证）

| 维度 | 观察 |
|---|---|
| **本轮用**：Claude Opus 5 (1M context) | 单 session 读了 3000+ 行规则真源（mockup-conventions 271 行起手段 + design-process 多段 + M23 卡族 + M41/M45），并在 1451 条机检 finding 里逐类核归属。**长链路规则遵守 + 大量证据核对是这轮的主要负载**，没有触发上下文压缩 |
| 建议 | **同类 Jira-gate mockup 任务继续用 Opus 5**：规则真源体量大、机检归属判断需要跨多轮保持一致判据，小模型容易在「哪条 finding 属于谁」上失准 |
| 可下放 | 纯执行段（批量建 text 节点、批量改 padding）本身不需要强模型，但**拆出来外包的协调成本高于收益**，本轮未拆 |

---

## 7 · 给团队的 Action Items

| # | 事项 | 归属 | 备注 |
|---|---|---|---|
| 1 | ~~**Jira / Slack 回复待发**~~ → ✅ **2026-09-01 已发** | Nancy | accountId 已补齐（Kalpesh `5e99ec4b…` / Trevor `5e59a401…`）。Jira 评论 `268958` 走 ADF mention + 短锚文本；Slack thread 回复多一句 scope note。详见设计记录 §9 |
| 2 | ~~**提 DS backlog：电源图标入库**~~ → ✅ **2026-09-01 已提**，待 owner/designer 裁 | Nancy → DS owner | 落点 = DS `design-review-queue.md` **#13**（`designer-action: yes`），**不是 backlog** —— 照 DS 自己的 `2026-08-28-active-backlog-inventory.md`，落点在 Figma 侧的归 queue。commit `790fffa9` |
| 3 | ~~**`library-binding` 闸对无离线缓存的产品文件 exit=2**~~ → ✅ **2026-09-01 已登记**，待 owner 二选一 | DS 侧 | 落点 = DS `backlog.md` **INFRA-F62 就地登记**（不新立号）。顺带实跑推翻了 F62 自己那句「`exitCode=2` 只来自两条路径」——第三条是规则的 `!existsSync` 分支，绕过引擎时效闸；且引擎对 `extractedAt=n/a` fail-open、规则 fail-closed，方向相反。成本已量：4 份缓存共 1.1 GB 且 gitignored |
| 4 | ~~**重启失败反馈未覆盖**~~ → ✅ **已建单 [RPSV3-139](https://tvunetworks.atlassian.net/browse/RPSV3-139)** | PM 决策中 | Task · Medium · assignee Lotus Chen（⚠️ 项目默认分派，非指定）。三问留给 PM：超时阈值 / 失败态给什么 / Power Off 要不要同等处理 |
| 5 | ~~`docs/retrospects/README.md` 指向缺失文件~~ → ✅ **2026-09-01 已修** | Nancy | 两处断链都改为指 DS 真源 `tvu-design-system/templates/consumer-product/docs/retrospects/RETROSPECT_FORMAT.md`（已 `ls` 核实存在），并就地写明 ⛔ 别在本仓 fork 一份副本 |
| 6 | ~~**本仓不是 git 仓库** + 缺 `docs/PRODUCT_INTRODUCTION.md`~~ → ✅ **2026-09-01 已建**，**但 roster / 页表仍是半空** | Nancy → 待 owner 补 | ① `git init -b main` + 新建 gitea `ux-team/rps`（private，对齐其它交付类 consumer 仓）+ 首 commit `c407127`（20 文件）已 push，本地 HEAD 与 `refs/heads/main` 实测一致。② `docs/PRODUCT_INTRODUCTION.md` 已建，**只写有据的**：4 人 accountId（现查同站核对）+ Figma 页面归位 + 主题 / 文案 / 跨库图标 / 机检口径。**⏳ 三处真空白已显式标注**：RPS 产品线 scope 边界 · 按模块/界面拆单找谁（dev lead 是谁未知）· 29 个 page 的完整分组集合（`get_metadata` 不带 nodeId 只回了 `To be confirmed` 一页）。⛔ 别拿 TVU Pack 的对应段落顶替，两边实测不同 |

---

## 附录 · 改动统计

| 项 | 数量 |
|---|---|
| `use_figma` 调用 | 约 39 次（含 1 次原子失败：未 load `Noto Sans SC Medium`） |
| 渲染核图 | 14 张（图标候选 4 · 组件变体 2 · 状态帧 5 · Section 全貌 1 · 标签 1 · 参考图 1） |
| 机械总闸 | 4 轮（主 Section ×3 + REFERENCE Section ×1） |
| 新建 Figma 节点 | 5 全景帧 + 1 BEFORE + 5 标签卡 + 4 文档卡 + 4 scrim + 4 弹窗 + Power 分区 ×5 + Jira 组件 + REFERENCE Section 3 件 |
| 修复的真缺陷 | 7 类（Inter 基础样式 · 换行符字体 · padding off-scale ×2 · scrim effect style · 弹窗居中 · 标题对齐 · 圈号 glyph） |
| Git | `db7a5cee`（3 文件 / +244），双 remote 已 push |
