# 协作复盘 — V4-1646 LCD WiFi `Other`（隐藏 SSID）

> 面向 UX 团队 / PM 内部分享。记的是**人与 AI 协作过程**里哪里顺、哪里绕了弯，不是设计结论（结论在
> [design-record](specs/2026-09-10-v4-1646-lcd-wifi-other-design-record.md) 与 [handoff](handoffs/2026-09-10-v4-1646-lcd-wifi-other-handoff.md)）。
> 日期：2026-09-10 · Session：单次 · 交付：W3 七件套全产

---

## 1. TL;DR

- **交付**：Figma page `10340:2` —— 9 个状态帧 + 8 条流程连线 + PRD/UX/Journey/Change Log 四卡 + Jira 组件；文档 design-record + handoff + 执行计划；文案两边同源入库。
- **核心 process gap 数**：9 条（3 条是判断问题、6 条是工具/几何问题）。
- **最关键 insight**：**owner 的两次否决都是对的，而且事后都能在既有资料里找到支持证据 —— 说明我给推荐时没先查既有设计稿。** 这是本轮 ROI 最高的一条教训。
- **返工最大的一处**：连线。因为两个 Figma API 行为（箭头 path 被合并、坐标被 normalize）连错两次，整条线错位过 384px 和 1912px。

## 2. Session 概览

| 项 | 内容 |
|---|---|
| 起点 | owner 一句话：「WiFi 支持 Others 这个类型，这个需求你给我设计一下」 |
| 上游 | 仓里已有 2026-09-09 写的 upstream-gate artifact ⇒ **不重开、只续做**（它卡在 §6 那 12 条 owner 确认上）|
| 档位 | US-2 / W3（三问全中）⇒ 七件套全产 |
| 关键外部取证 | 2 个 subagent：① Slack 取「不持久化」原话与 scope ② Slack permalink + Jira 实况 + 三个背景单；1 个 subagent 找 Change Log 组件（67 个 page 里定位）|
| 硬 gate 过了几道 | upstream-gate 续做 · M0 mapping（owner 校验）· PRD Gate A（文本确认）· 机检总闸 · 几何自检 · 连线审计 |

## 3. 主要迭代

| # | owner 的输入 | 触发的改动量 |
|---|---|---|
| 1 | 反问「这个是只针对 Other 类型吗？来源自哪儿？」 | 派 subagent 翻 Slack 拿逐字原话 + 确认 scope 只限隐藏 SSID；补出「普通 WiFi 靠 Remember 勾选」这一层 |
| 2 | 「点 X 按钮就能断开连接和 Forget 啊」 | **撤销**一条 artifact 结论；重新界定真问题（隐藏网络扫不到 ⇒ 没有行承载 ✕）；找到 Config-T 8.4 的现成解法 |
| 3 | Security 选「只读标签」、`Other` 选「参与翻页」 | 按 owner 定；**后来发现既有设计稿本来就是参与翻页** ⇒ owner 的选择有先例背书，我的推荐才是偏离 |
| 4 | 「效果还可以」 | 从 3 核心帧铺到 8 帧 + 交付层 |
| 5 | **「功能只有一个，其他几个是 UX 交付说明」** | PRD 功能需求 7 条 → **1 条**；六条搬进 UX 卡的 Data Contract / Interaction；验收也从 6 条收敛到 5 条功能级 |
| 6 | 收尾时追加三条（支持无密码 / 提示距顶 24px / 标题改 `WiFi/Other`）| 推翻 D2/D3/D10；下一轮首要任务 |

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

### 判断类（3 条，成本最高）

**① 提推荐前没查既有设计稿有没有做过这件事** —— 返工：一次错误推荐 + 一次认知返工
我推荐「`Other` 固定在列表底部不翻页」，owner 否掉选了「参与翻页」。之后我为做 connecting 态去看 V4-1535 的参照帧，才发现**那一轮（2025-07-21）就已经画过 `Other` 行，而且就是参与翻页的普通一行**。
⇒ 教训：给方案推荐前，先在同主题的既有 page 里搜一遍「这件事以前画过吗」。既有设计稿是比我的推理更强的证据。

**② 把设计/交互细节写进了 PRD 的功能需求** —— 返工：PRD 重写一次
我在 PRD «功能需求» 段写了 7 条，其中 6 条（表单三字段、虚拟键盘、OK 置灰、自动重扫、成功提示、失败保留）其实都是「界面怎么呈现 + 开发底层怎么走」。owner 一句「功能只有一个」点出来。
⇒ 规则里有「判据单一归属」（PRD 验收=功能级 / UX 卡 Acceptance=界面级），但那条只管**验收段**，没管 **Requirements 段本身该多细**。这是规则的一个缺口。

**③ 先转述 artifact 结论、被指出后才去核** —— 返工：一条结论撤销
artifact 写「LCD 无 forget/disconnect 入口」，我在答 owner 时按它转述。owner 说「点 X 就能断开」，我才去 Figma 看，发现已连接行**本来就有 ✕**；再回 Slack 核，发现后端那句话带 `for this case` 限定、且讲 ✕ 最细的记录说的是 Config-T 不是 LCD。
⇒ 教训：artifact 里标【查证】的条目也可能是**对原话的过度概括**。凡结论会用来决定「要不要做一个功能」，先自己看一眼界面。

### 工具 / 几何类（6 条）

**④ 连线箭头与主线放同一个 VECTOR** —— Figma 会把第二条 `vectorPaths` **合并进 `[0]`**，于是箭头斜边进入正交检查面（假违例 3 条/条），bbox 被撑高导致端点读数偏 5–10px。修法：箭头拆成独立节点。

**⑤ 多段/含负方向的线，节点 `x/y` 设成了起点** —— Figma 把 `vectorPaths` 坐标 normalize 成非负，于是整条线平移。实测 `failed-to-retry` 下移 **384px**、`password-to-connecting` 右移 **1912px**（线与箭头分离）。修法：`x/y` 设 **path bbox 原点（各轴最小值）**。

**⑥ Figma text 在 auto-layout 里零宽塌陷，踩了两次** —— 第一次只设 `FILL` 没给显式宽度 ⇒ 节点宽 0、文字一字一行、卡高 1035；第二次补了 `resize` 但漏了 `layoutSizingVertical='HUG'` ⇒ `autoResize` 被重置成 `NONE`、451 字符压在 20px 高框里内容全被裁。修法：**HEIGHT + resize + FILL + HUG 四件套，且 sizing 放在赋值之后**。

**⑦「装得下」判据漏了「单行」条件** —— 我用 `width ≤ 480` 判失败文案能否装下，选中的候选实测 **480×66**（撑满且折两行）却仍满足条件。修法：判据必须同时含「高度 = 单行」。已回流 `lcd-message-strings.md` §4.1。

**⑧ ZH opacity 用相对比例乘** —— 规则要求 ZH run 的 fill opacity 是 **0.45（绝对值）**，我给指路句设 EN 0.7 后又乘 0.45 ⇒ 0.315，被机检抓出。

**⑨ 自己写的审计脚本算错端点，误报 2 条锚定 FAIL** —— 用 `v.x + pts[0].x` 推算起点，对含负坐标的多段线不成立。逐条核后才分清「哪些是脚本错、哪些是连线真错」——**结果两者都有**（脚本算法错 + 连线确实错位）。
⇒ 教训：机检报红时先核归属，但**不能因为"可能是假阳"就跳过**；这次假阳背后真的藏着一个真错。

## 5. 高效对话建议

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

1. **「功能只有一个」这类一句话归类，ROI 极高**。它不只收敛了 PRD，还顺带确立了 PRD 与 UX 卡的分工边界，后面所有卡都受益。
2. **直接说「我看到的是 X」比问「是不是 Y」更有效**。owner 那句「点 X 按钮就能断开」直接推翻了一条错结论；如果只是问「有断开入口吗」，我可能继续转述 artifact。
3. **否决时不必给理由也没关系** —— 两次否决事后都被证明有既有先例支持。倒是 AI 该主动去找那个先例。

**给 AI 协作流程**

4. **动手前先问「这件事以前画过吗」**，在同主题 page 里搜一遍。比推理便宜得多。
5. **视觉判断一律起服务给链接**（本轮全程遵守）。但要注意：评审页目前是每轮手工搭，没有脚本 —— 这件事本身值得固化（已登记待决）。
6. **机检报红先核归属、再判真假，两者都要做完**。见 gap ⑨。

## 6. 待回流规则清单

| 规则 | 建议落点 | 三问判档 |
|---|---|---|
| PRD «功能需求» 段只写功能本身，实现/交互/底层逻辑归 UX 卡 | **DS** `mockup-conventions.md` §M23.0（作为「判据单一归属」的补充 —— 现有条文只管验收段粒度）| 换产品成立 · 是做法 · 别的 consumer 读到不会被误导 ⇒ DS |
| 提方案推荐前先在同主题既有 page 搜「以前画过吗」 | **DS**（§M37 / §M46 邻域，但两条都没覆盖这个触发点）| 同上 ⇒ DS |
| 连线箭头必须独立节点；多段线 `x/y` 设 bbox 原点 | **DS** `figma-technical-reference.md` Q 系列 | Figma API quirk，跨产品 ⇒ DS |
| auto-layout 内 text 四件套（HEIGHT + resize + FILL + HUG，sizing 放最后）| **DS** 同上 | 同上 ⇒ DS |
| 「装得下」判据必须含单行条件 | ✅ 已落 **项目** `lcd-message-strings.md` §4.1；做法层可考虑上 DS | 取值面在项目、判据面可 DS |
| ZH opacity 0.45 是绝对值、不是相对 EN 的比例 | **DS** §M23.14 (B) 澄清一句 | 已有条文但易误读 ⇒ DS 澄清 |
| 只读值行 = 白字右对齐无三角；表单字段行行高 46 | ✅ 已落 **项目** design-record §5（视觉结构契约新立两条）| 取值 ⇒ 项目 |

⚠️ **以上均未提交 DS**（DS repo 有并行 session 的未提交改动，本轮一个字未碰）。回流需 owner 拍板「这是规则级问题」后另起一轮。

## 7. Model 选型

本轮 Opus 5（1M context）。适配点：规则真源读取量大（mockup-conventions 3871 行 + design-process + domain-tvu，全程 scoped 读）、几何计算与多轮自检交织、需要在 40+ 次 `use_figma` 之间保持坐标与 node id 的一致性。
**subagent 用得值**：3 个 general-purpose / Explore 分别做 Slack 取证、Jira 直读、67 个 page 里定位组件 —— 这些是大输出任务，外包后主线只拿结论。⚠️ 但按纪律，subagent 报的「找到了/完成了」都自己复核过（Slack permalink 区分了「工具原返回」与「按规则构造」两档可靠性）。

## 8. Action items

| # | 事项 | 归属 |
|---|---|---|
| 1 | 落地 D17–D19（支持无密码 ⇒ Security 二选一 + §M17.1 面板 / 提示距顶 24px 并实测重叠 / 标题改 `WiFi/Other`）| 下一轮 |
| 2 | 走查 F1 + F2（Journey 卡要补第 2 个 persona）| 下一轮 |
| 3 | 评审页是否固化成脚本 / 回流成规则 / 保持手工 | owner 决定 |
| 4 | §6 那 7 条待回流规则，逐条拍板是否进 DS | owner |
| 5 | Jira 回复 + assignee 转 Edward Wu（等定稿）| 交付收尾 |

### 附录 · Figma 写操作概况

约 40 次 `use_figma` 调用，主要类别：page/Section 建与重组 · 跨 page clone（帧 / Jira 组件 / Change Log instance / 键盘 instance）· variant 切换（`WiFi_item` Status、`LCD Button` Status、`Keyboard` Type、`Message` status）· 双语文本建卡（PRD 六段 + UX 六 chip + Journey 30 格 + 常驻页场景卡）· 连线几何（8 条，含两轮修正）· 几何自检与机检复验。
**整脚本回滚踩到 2 次**（字体未加载、Q22 引用失效）—— 每次都靠「先读画布确认真实状态、不猜」恢复。
