# Design Walkthrough Report — V4-1646 LCD WiFi `Other`（隐藏 SSID）· 第二轮

**Date**: 2026-09-10
**Deliverable**: Figma `0054ib0nLmt27bC3QlGDl7` · page `10340:2` · feature Section `10343:4`（10 产品帧 + PRD 卡 + UX 交付卡 + Journey 卡 + Change Log 注释 + 11 条连线）
**Page type**: **Settings / Form**（含输入字段、枚举选择面板、config 提交）⇒ Data Audit 跳过
**PRD reference**: Figma PRD 卡 `10365:838` · [design-record](../specs/2026-09-10-v4-1646-lcd-wifi-other-design-record.md) · [plan](../plans/2026-09-09-v4-1646-lcd-wifi-other-plan.md)
**Rules applied**: `design-process.md` + `domain-tvu.md` §M17/§M17.1 + `mockup-conventions.md` + 项目取值真源 `lcd-canonical-spec.md`
**Path**: A（纯 Figma 交付物）⇒ §5.9 SKIPPED

---

> 🔴🔴 **更大的推翻在后面（2026-09-11 · D23）—— 先读这段再读全文**（见 [plan §1b-4](../plans/2026-09-09-v4-1646-lcd-wifi-other-plan.md)）：
> **`Security` 字段整个不存在了**，C2（选项面板）与 C3（Security=None）两帧**已删除**。⇒ 本报告中所有关于**选项面板**的内容（§1 全页唯一值扫查里的「面板行 16px / 面板 fill / 面板圆角行高 / 连体绿框」四行 · §5.6 「C2 的绿框+绿字判为同一语义」· §5.7 与 §5.10 里涉及 C2/C3 的部分 · §6 待决项②「面板行 35/36 < 44px」）**都已失去判定对象**，⛔ 别再据此下结论或返工。
> 仍然成立的部分：§2 PRD 覆盖率方法 · §4 两条 anti-pattern · §5.8 B1 字号档位（宿主存量）· §5.7 D9 运行态缺失（P20）· §5.10 的连线审计方法。
> **本报告不重跑** —— D23 的交付物复核走 [handoff §4.9 / §4.10](../handoffs/2026-09-10-v4-1646-lcd-wifi-other-handoff.md) 的机器输出，不再产一份新走查报告（W3 档已有的判据面没变，变的是判定对象）。
>
> 🔴 **走查后 owner 拍定三条，本报告部分内容已被推翻**（2026-09-10，见 [plan §1b-3](../plans/2026-09-09-v4-1646-lcd-wifi-other-plan.md) D20–D22）：
> - **D20 整个 Change Log 模块已删除** ⇒ 本报告 §5.10 的 E1/E2 把 `Description_text` 算作第 4 张文档卡、E9 提到 `Mark area — Security row`，这些**对象已不存在**。⚠️ **附带结果：`overlap` 闸从 FINDINGS(2) 转 PASS**，那 2 条「设计意图」findings 结构上消失 ⇒ 机检 **11/16 PASS**（本报告写的 10/16 已过时）。
> - **D21 提示落位定稿 `y=54`**（= 导航条 46 + 8，通则见 `lcd-message-strings.md` §2.5）⇒ 本报告 §6 把 D18 列为 🔴 待决，**已解**；§5.8 的 B6「扫描起点被遮挡」随之消解。
> - **D22 不再搭本地评审证据页** ⇒ 本报告 §0/§5.9 未涉及，但后续走查别再默认产证据页。

---

## 0. Axis Execution Ledger

| 轴 | 覆盖 section | FIRED / SKIPPED | 理由 / 触发依据 |
|---|---|---|---|
| **轴① 系统一致性** | §3 D1/D2 + §5.7 D6/D9/D13 + D16 绑定保真 | ✅ FIRED | 10 帧多态交付物；D16 走 conformance gate（`binding-fidelity` findings 2593，逐条归属见 §3） |
| **§1 宿主页取值一致性（M37.3）** | §1 属性表 | ✅ FIRED | 本轮在既有页面新增了两个帧 + 一个选项面板模块 ⇒ 必 FIRED |
| **轴② 既有 6-section** | §1–§6 | ✅ FIRED | 主循环无条件；§5 Data Audit 按 page type 跳过 |
| **轴③ 视觉质量** | §5.5 + §5.6 + §5.8 | ✅ FIRED | 交付集含 3 个反馈元素（≥2）⇒ §5.5 触发 |
| **§5.9 生成代码遵守** | G1–G4 | ⏭️ SKIPPED | **交付物不是代码**，是 Figma mockup。⛔ 不是「拿不到渲染」 |
| **§5.10 交付层几何 + 视觉信号** | E1–E9 | ✅ FIRED | 含 M23 交付卡 + 11 条流程连线 |

### Report Completeness Gate

| 判断轴 | 有实质 finding？ | 证据指针 |
|---|---|---|
| **§1 宿主页取值一致性（M37.3）** | **YES** | 5 属性逐条给出宿主先例 node id；选项面板 5/5 命中 canonical `5314:9564` 族，唯一例外 = 连体绿框的**实现手法**（描边 vs outline 填充），已显式立项 |
| §2 PRD/User Story 覆盖率 | **YES** | 🔴 **A3「为空不可提交」原本被交付物自己推翻** —— C/C2/C3 的 `OK` 是 `Status=Normal`。已 auto-fix 为真禁用变体 |
| §4 Anti-pattern Scan | **YES** | 命中 2 条：「只查组件名不查渲染实况」（error 提示绑错色）· meta-rules §3 第 7 条「声明了 ≠ 被消费」（只读值行契约失去实例） |
| §5.6 强调预算 + 视觉权重 | **YES** | 逐帧计数，全部在预算内；C2 的绿框+绿字判为**同一语义**（被编辑/选中）不计两处 |
| §5.7 a11y / 运行态 / 主题对等 | **YES** | D9 ❌ partial（4 类态缺失，逐条列出）· D6 ⚠️（占位符 20% 白字，实测 **node opacity 0.2 / fill opacity 1**）· D13 N/A（设备固定暗色屏） |
| §5.8 视觉质量（B1/B2/B5/B6/B7）| **YES** | 🔴 **B1 ❌**：产品层字号 6 档（12/14/15/16/17/20），14→15→16→17 相邻比 1.07/1.07/1.06 远低于 1.25×。属**宿主存量** |
| §5.9 G3/G4 | ⏭️ SKIPPED | 交付物不是代码（见 ledger） |
| **§5.10 E3 / E8（判断题）** | **YES** | E3 给判断依据（PRD/UX 卡文字占宽 93%/95%；Journey 真网格单元填充充分）· E8 给**信号 × 语义**对照表，`#7ed321` 一号多用判 ⚠️ 存量 |

**D16 专项**：`pnpm audit:mockup-conformance --file 0054ib0nLmt27bC3QlGDl7 --node 10343:4` → `binding-fidelity` FINDINGS 2593（B-TYPO 裸 fontSize，§M49.1 file-wide owner-deferred；增量归属见 handoff §4.5，其中 +256 未完成逐条归属，登记为 P14）。**非 deferred-to-conformance-gate，已实跑并贴读数。**

---

## 1. Sibling Visual Contract 一致性（M21 / M37.3）

- **Sibling probed**：`8606:58`（WiFi 列表页宿主，V4-2318）· `8878:2`（LCD 设置页 canonical）· `5314:9520`（LCD 选项列表 canonical）· `5324:2618`（凭据录入范式）
- **每条 probe 值的取自节点 + `effectivelyVisible`**：
  - `8878:21` 下向三角 ✅ 可见（父级 `8878:2` 帧内可见行）
  - `5314:9564` 面板 ✅ 可见 · `5314:9565` 当前值行 ✅ · `5314:9574` 普通行 ✅ · `5314:9566` 矢量三角 ✅
  - ⚠️ `5314:9552` / `5314:9559` / `5314:9554` **`visible=false`** —— 正是靠这条才判出「canonical 面板展开时被编辑行的值是隐藏的」
- **否定式结论专项**：本报告写「本产品**没有**只读值行先例」，已排除它存在于被停用父级下 —— 两级先例搜索（本页 → 本产品同类页）均空，且 `5314:9520` 的隐藏子层逐个查过，无只读值行形态。
- **参照系三选一逐条标注（M37.2）**：`参考物`（无 —— 本轮无用户外部参考图）· `本页`（C 帧既有三行字段）· `兄弟页`（三个 canonical 帧）⇒ 三种中出现两种；**「参考物」一档本轮天然不存在**（需求来自 Jira/Slack 文字，非图）。
- **M37.1 宿主 probe 落在 Figma REFERENCE Section？** ⚠️ **❌ 不在** —— 本单没有 REFERENCE Section；宿主 probe 表落在 design-record §3 与本报告。**判定**：M37 的立条动因是「用户给了跨产品参考图」的场景；本单无参考物 ⇒ 该条的两半只剩宿主那一半，判 **N/A + 写明**，⛔ 不为凑表硬建一个只有一半的 REFERENCE Section。

### 全页唯一值扫查（本轮新增模块 = 选项面板 + 下向三角 + Security=None 态）

| 属性 | 新模块取值 | 同类模块的取值分布（实测 node id）| 先例来源 | 有先例？ |
|---|---|---|---|---|
| 字号 / textStyle | 面板行 **16px** | canonical 面板 `5314:9575` 16 · `5314:9567` 16；设置页行内左 label 16 | **本产品 canonical 页** | ✅ |
| 容器 fill（含「有没有底色块」）| 面板 `#313131` 可见 · 当前值行 `#252525` 可见 · 普通行 fill **不可见** | `5314:9564` `#313131` 可见 · `5314:9565` `#252525` 可见 · `5314:9574` `#252525` **不可见** —— **三者逐一对上** | **本产品 canonical 页** | ✅ |
| 文字 / 图标色绑定 | 当前值 `#7ed321` · 普通行 `#ffffff` · 三角 `#f1f1f1` | `5314:9567` `#7ed321` · `5314:9575` `#ffffff` · `8878:21` `#f1f1f1` | **本产品 canonical 页** | ✅ |
| 圆角 / 间距 / 行高 | 面板 radius 0 · 当前值行 36 · 普通行 35 · pad 8/6/8/6 与 8/6/8/26 · gap 0 | 与 `5314:9564` 子层逐项相同（clone 未改）| **本产品 canonical 页** | ✅ |
| 控件形态（库组件 vs 自画）| 面板 = **clone** canonical FRAME · 三角 = **clone** `8878:21` · 连体绿框 = 手画阶梯 VECTOR | canonical 的连体绿框 `5314:9562` 也是手画 VECTOR | **本产品 canonical 页**（手法同族）| ✅ 形态有先例 / ⚠️ **实现细节唯一**（见下）|

**唯一值 1 处，已显式立项**：连体绿框本轮用「闭合路径 + 3px INSIDE 描边」，canonical 用「描边被 outline 成填充」的环形路径。**视觉等价**（都是 3px `#7ed321` 阶梯轮廓），差别在维护成本与 probe 安全性 —— 理由与后续改几何的注意事项已写入 handoff §5.8，并进 design-record §5 契约第 3/4 条。

**M21.4 ② 验收面核查**：UX 交付卡 Acceptance 段含「视觉取值全部命中产品视觉契约；例外已列在 handoff」✅ 在（`10372:847`）。

**Findings**：
- ✅ 选项面板：5/5 属性命中同产品 canonical，零跨产品搬运。
- ✅ 下向三角：clone 自设置页 canonical，14×7.909 `#f1f1f1` 与源一致。
- ✅ 表单字段行 46 在 C2/C3 沿用（`46/46/46` 与 `46/46`），未因新增态漂移。
- ⚠️ 连体绿框实现手法唯一，已立项 + 已登记维护约束。

---

## 2. PRD + User Story 覆盖率

| PRD 需求 / 验收 | Deliverable 对应 | 覆盖状态 |
|---|---|---|
| **Req 1** LCD WiFi 页支持 `Other`，手输网络名连隐藏 SSID | B（列表末页含 Other）→ C → D → E → F → G | ✅ covered |
| **A1** 仅用机身触摸屏即可连上隐藏 SSID | 全链路 6 帧闭环，无需网页端 | ✅ covered |
| **A2** Security 只有 `WPA2` / `None`，不出现 WPA3 | C `WPA2 ▼` · C2 面板**恰好 2 行** · C3 `None ▼`；全集无 WPA3 | ✅ covered |
| **A3** `Password` 仅 `WPA2` 时出现且必填；`None` 时隐藏、提交无需密码 | 条件显示 ✅（C 有 / C3 无）· **必填「为空不可提交」原本 ❌** | ⚠️→✅ **走查中修复**（见下） |
| **A4** 连接成功后 SSID 以已连接态进列表 | G（Message + 已连接行）· I（稳定态带 ✕）| ✅ covered |
| **A5** 重启后不自动恢复（当前后端逻辑，非缺陷）| 成功文案 `— reconnect after reboot.` | ✅ covered |

**Coverage: 6 / 6 (100%)**，其中 1 条经走查修复后才成立。

### 🔴 A3 的原始缺陷（本轮最重要的走查产出）

- **实测**：C（空表单）· C2（面板展开）· C3（选 None）三帧的 `OK` 都是 `Type=Primary, Status=**Normal**` —— 即**可点**，而三帧的 `Network name` 全为空、C/C2 的 `Password` 也为空。
- **为什么是缺陷**：与同一套交付物里 PRD 验收第 3 条「为空时不可提交」**直接矛盾**。dev 照 mockup 实现会做成「空表单也能按 OK」，QA 照 PRD 验收会判不通过 —— 两份 owner 已过目的文档互相打架。
- **为什么机检抓不到**：`variant-axis` 闸判的是变体轴用法合法性，不判「这个态该用哪个变体」；语义正确性不在任何闸的判断对象内。
- **修法（auto-fix，已执行）**：三帧 `OK` 切 `Status=Disabled` **真变体**（⛔ 不用 opacity 凑 —— `lcd-canonical-spec.md` §1 硬规则）。复验：三帧均 `Status=Disabled` · `opacity=1` · 尺寸仍 82×36 · `Home` 保持 `Normal`（符合「不可改态下 OK 与参数同步置灰、Home 保持可用」）· 渲染亲验灰底暗字无绿描边。
- **F 帧先例支撑**：`Connecting (OK disabled)` 本来就是 `Status=Disabled`，本轮只是把同一机制补到该补的另外三帧。

---

## 3. Rule Compliance

| Rule | Check | Status | Evidence |
|---|---|---|---|
| **M17** 照 surface canonical 范式 | 开建前打开 canonical 帧实测再建 | ✅ | 三个 canonical 帧逐层 probe（§1）；⛔ 未照最近做过的页仿写 |
| **M17.1** 枚举值选择用选项列表 canonical | 面板/行/选中标记/被编辑行框/连体绿框/翻页/无 Unicode 标记 | ✅ | 面板 240×**71**（按行数算，⛔ 未照抄 canonical 的 176）· 右缘齐被编辑行 456 · 连体 ✅ · 矢量三角 marker ✅ · 底栏 `▼▲` 保留 ✅ |
| **M17.1 展开方向** | 面板边缘不得横切其它行文字 | ✅ | 向下：底 223 落在行区（止 198）下方空白；左缘 216 竖穿 `Password` label（≤111）与值（≥279）之间。向上会切 `Network name` 值（73.5..92.5）⇒ 排除 |
| **M21 / M21.4** sibling contract + 视觉契约 | probe 数值已做 + 两级先例搜索 + 验收面 | ✅ | §1 属性表；契约条目 4 条（1 条撤回、1 条沿用、2 条新立） |
| **M22** design intent | owner ask 被 acknowledged | ✅ | D17/D18/D19 逐条落地；D18 实测不达预期后**回报而非替 owner 定** |
| **M11** self-audit | probe 数值 vs reference | ✅ | §5.10 全部给实测数字 |
| **M-LIFECYCLE-CRUD** | 隐藏网络这个实体的 C/R/U/D | ⚠️ | **C** = Other 表单 ✅ · **R** = 列表已连接行 ✅ · **U** = ❌ 无「改已存隐藏网络凭据」入口（重连即重新走 Create，因凭据本就不持久化 ⇒ 有 rationale）· **D** = 已连接行的 ✕（D6 免费继承）✅ |
| **M6** reusable pattern | 是否发现新 reusable pattern | 🟡 **found ×2** | ①「中间行枚举面板向下展开 + 边缘不切文字」判据 ②「instance 语义色须与主组件 `boundVariables` 逐条比对」—— 均已进 plan §9 回流候选 |
| **M-VARIANT-CONSISTENCY** | （Component Spec 页专属，本页非）| N/A | 本交付非组件规格页；跨态一致性走 §5.7 D1 |
| **M-IA-ONE-HOME** | 同上 | N/A | 同上 |
| **Section 结构** | 收进具名 Section + BEFORE/AFTER 分属不同 Section | ✅ | AFTER = `10343:4` · BEFORE = `10343:3`（Section 外），两者分离；page 顶层无游离产品帧（实测 `pageTopLevel` 仅 2 Section + 1 Jira instance）|
| **M23.12** 卡贴帧 + 文档卡统一宽 | 见 §5.10 E1/E2 | ✅ | PRD/UX 均 680；最大卡帧间距 200（阈值 ≤200）|
| **M47.2** 文本改动 | 整段 `setRangeFontName` 覆盖 → 赋 characters → 逐段重设 + 复核 | ✅ | 五个导航标题 + 面板两行 + 卡内 13 条，每条改后 `getStyledTextSegments` 复核 |
| **M53** 提示文案触发族 | 三条同族 | ✅ | 均 `user-initiated`；`None` 路径提交同样汇入这三条，未新增触发族 |
| **M-TXT-ICON-AUDIT** | EN 段避开 Roboto 无字形符号 | ✅ | `typography-icon` 闸 345 单元 0 findings；新增文本无 `▶ →`；曲引号全 Section 扫描 `[]` |
| **Q22** instance 结构改动后重新 findOne | 切 variant 后不复用旧引用 | ✅ | 三个 `OK` 切完**分开重新 findOne 复验**，未读旧引用 |
| **Q15** SECTION 子节点坐标 | section-relative | ⚠️→✅ | **原本违反**：clone 落到 PAGE 上（见 §4）。修后全部 section-relative 且自检统一从 `sec.children` 取数 |
| **M3 / M4 / M7**（Monitoring only）| — | N/A | page type = Settings/Form |

---

## 4. Anti-pattern Scan（本表 + `meta-rules.md` §3 全表，两套各自出行）

### 4a. 走查专属表

| Anti-pattern | Found? | Location |
|---|---|---|
| 规则正文枚举特例 | ❌ | — |
| 参考输入当 spec | ❌ | **反向做对了**：canonical `5314:9520` 的「面板向上展开」被识别为「它恰好是最后一行」的结果而非范式，未外推 |
| 未评估 default 直接交付 | ❌ | clone 来的面板自带 5 行 + 不可见 stroke，两者都显式评估过（裁到 2 行 / 保留不可见照 canonical）|
| 只查语义不查像素 | ❌ | §5.10 全给实测数字 |
| **只查组件名不查渲染实况** | ✅ **found（已修）** | 失败提示 instance 的 variant 名、组件来源、变体属性**全对**（`status=error`），但渲染出来文字是 info 蓝 `#3892f3`。五闸全绿，只有渲染图看得出来 |
| 同一角色拆多组件集却无统一分类 | ❌ | 三条 Message 同一库组件集，`size=L` 统一 |
| BEFORE 与 AFTER 塞进同一 Section | ❌ | BEFORE 在 `10343:3`，AFTER 在 `10343:4` |

### 4b. `meta-rules.md` §3 全表逐条

| §3 条目 | Found? | Location |
|---|---|---|
| 1 规则副本会漂 | ❌ | 本报告与 handoff 只留指针，未复述 DS 规则正文 |
| 2 枚举回潮 | ❌ | — |
| 3 判据挂在错的层 | ⚠️ **found** | §M37.1「宿主 probe 须落 REFERENCE Section」在**无参考物**的单里只剩一半 ⇒ 本轮判 N/A 并写明。**这条判据本身可能需要 DS 侧补「无参考物场景」的出口**，已进 §6 建议 |
| 4 取值写进真源 | ❌ | 取值全落项目 repo（`lcd-canonical-spec.md` / design-record / handoff）|
| 5 免检理由挂在别的轴上 | ❌ | §5.10 未以「机检全绿」免检；`checkedUnits=0` 的 5 条均判**未验**不判过 |
| 6 usage-scoped 枚举当全集 | ❌ | canonical 面板按**发布目录 / 帧全集**取，未凭「当前在用集」 |
| **7 声明了 ≠ 被消费** | ✅ **found（已修）** | design-record §5 契约第 1 条「只读值行」在 D17 之后**失去唯一支撑实例**，成了无人使用的空条目 ⇒ 已撤回。**同源第二处**：handoff §1(C) 那条「M17.1 本轮未触发」在 D17 后失效 ⇒ 已订正 |
| **8 只查组件名不查渲染实况** | ✅ **found（已修）** | 同 4a（error 提示绑错色）|

---

## 5. 数据可行性 Audit

⏭️ **跳过** —— page type = Settings / Form（Step 0 表）。字段与后端契约的对应关系已在 UX 卡 Data Contract 段逐条列出（`ssid` / `security_type` / `passphrase` / `wifi_connection_state` / `connected_ssid` + 「连上后自动重扫」依赖），非派生值、无公式，不构成 derived-metric audit 面。

---

## 5.5 Feedback UI Inventory（M52.3）

| 类 | 成员 | component 源 | 宽/padding | close | action | icon/title 规则 | 判定 |
|---|---|---|---|---|---|---|---|
| toast（顶部浮层）| `Message/info/L` `10360:831` · `Message/success/L` `10353:4826` · `Message/error/L` `10361:735` | ✅ 库 set `e9574b39…` + variant（`remote=true`，三条同源）| HUG · 269 / 415 / 479 | ✅ 三条均 `Show close icon=true` | 无（点关闭）| 图标随 `status` 变体自带；无 title 行 | ✅ **同源** |

- 落位统一：三条均 `layoutPositioning=ABSOLUTE` · `y=24` · 水平居中 ✅
- 语义色三条各自唯一：info `#3892f3` / success `#2fb54e` / error `#ea4233`，**且逐条与各自主组件 `boundVariables.color` 比对 match=true**（error 那条是本轮修复的）✅
- ⚠️ **无 4 类之外的自画反馈**：`feedback-not-selfdrawn` 闸报「无可判对象」（对 instance 名识别在 REST 口径下没生效）⇒ 该闸记**未验**，本节以 use_figma 实测替代。

---

## 5.6 强调预算 + 视觉权重横向对比（M52.4 = B3/B4）

| 帧 | 信息行 | 语义色行 | 灰 hint | 彩色元素合计 | vs lane 中位数 | 判定 |
|---|---|---|---|---|---|---|
| C 空表单 | 3 | 0 | 2（两个占位符）| 1（`OK` 绿描边 → 修后 0）| 中位 | ✅ |
| C2 面板展开 | 3 | **1**（绿框 + 绿字 = 同一语义「被编辑/当前选中」）| 1 | 1 | 中位 | ✅ |
| C3 None | 2 | 0 | 1 | 0 | 低 | ✅ |
| D / E 录入 | 1 | **1**（被编辑字段绿框）| 0 | 1 | 中位 | ✅ |
| F 连接中 | 3 | **1**（info 提示）| 0 | 1 | 中位 | ✅ |
| G 成功 | 4（列表）| **1**（success 提示）| 0 | 2（✓ + 提示）| 中位 | ✅ |
| H 失败 | 3 | **1**（error 提示）| 0 | 1 | 中位 | ✅ |

- 全帧 **≤1 语义色行 · ≤2 灰 hint · ≤1 主 CTA**，无超预算。
- **判断依据（C2 那格）**：绿描边（被编辑行 + 面板轮廓）与绿字（当前值）判为**同一语义**「这是你正在改的东西 / 它现在的值」⇒ 计 1 不计 2。若判为两个语义则 C2 超预算 —— 判据来自 canonical `5314:9520` 本身就是这两者同时出现。

---

## 5.7 系统一致性补充轴（D1 / D2 / D6 / D9 / D13）

| 维度 | check | 判定 |
|---|---|---|
| **D1** 跨变体 | 10 帧逐帧实测：导航条高 **46 ×10 一致** · 底栏 `y=282 h=36` ×8 一致（D/E 两帧无底栏，键盘 176 替代 —— 照 D8 与 `5324:2618` 先例）· 字段行高 **46** 全一致（C/F/H/C2 = 46/46/46；C3 = 46/46）· 内容区 220（表单/列表）与 90（键盘态）两档，档内一致 | ✅ |
| **D2** 跨组件同语义布局 | 新增的选项面板 vs 本页既有字段行：都走「右控件容器 primaryAxis MAX 右对齐」；`Security` 行加三角后仍与 `Network name` / `Password` 行同结构（label + 右容器）✅。面板内部两种行（当前值 / 普通）内边距不同（8/6/8/**6** vs 8/6/8/**26**）—— **这是 canonical 自带的差异**（普通行左缩进 26 给 marker 让位），非本轮引入 | ✅ |
| **D6** a11y 范式 | ⚠️ 占位符 = 白字 `#ffffff` + **node opacity 0.2**（fill opacity 1）在 `#313131` 上，等效对比度极低。**沿用 `5324:2618` 既有取值，本轮未改**。⛔ 注意：文档此前只写「opacity 0.2」，实测澄清它在**节点级**不在 fill 级 —— dev 实现时是「20% 不透明度的白字」不是「某个灰色」。本轮新增的 `None` 行是 `#ffffff` opacity 1 ✅ 无新增问题 | ⚠️ 存量 |
| **D9** 运行态 | ✅ empty（C）· loading（F connecting）· error（H）· 稳定（I）· 边界（B 末页满载，刻意画成 7 网络两页让 D4 代价可见）<br>❌ **缺 4 类**：① WiFi 无扫描结果的空列表态 ② SSID 超长文本（后端上限 32 字符，480 宽列表行能否装下未验）③ `wifi_module_mode` = Disable/Hotspot 时 `Other` 的形态（**P5，owner + 后端未答**）④ **M12 外部硬件/异步事件**：WiFi 模块拔出、连接中途掉网 —— Journey 卡把「重启后静默掉线」列为痛点，但**无状态帧** | ❌ partial |
| **D13** 主题对等 | LCD 是设备固定屏，只有暗色一档（`lcd-canonical-spec.md` §1 双背景色 `#252525`/`#313131`）；无 light 主题存在 | N/A（写明）|

---

## 5.8 视觉设计质量轴（B1/B2/B5/B6/B7）

| 维度 | check（可测） | 判定 |
|---|---|---|
| **B1** 视觉层级 | 🔴 **产品层字号 6 档**：12(×9) / 14(×32) / 15(×16) / 16(×75) / 17(×59) / 20(×10)。相邻比 14→15 = **1.07** · 15→16 = **1.07** · 16→17 = **1.06**，远低于 ≥1.25×。语义分工其实清楚（20 导航标题 / 17 键盘键 / 16 行 label / 15 底栏按钮 / 14 字段值 / 12 模块副标），但**尺度上四档几乎同大**。**归属 = 宿主存量**：六档全部继承自宿主帧与 canonical，本轮零新增字号（面板 16 命中既有档）。⛔ 不自行改 canonical | ❌（存量，非本轮引入）|
| **B2** 信息密度 | 无 chartjunk；单屏密度统一（表单 3 行 × 46；列表 4 行 × 36，各自档内一致）| ✅ |
| **B5** 留白节奏 | 注释层三档递增 `4 < 8 < 16` 单调 ✅（`bilingual-spacing` 95 单元 0 findings）；产品层内容区 gap 0 + 1px 分隔线（照 canonical 设置页）✅；Section padding 四边**均 40**（实测 left/top/right/bottom = 40/40/40/40）✅ | ✅ |
| **B6** 可扫描性 | 主 CTA `OK` 在底栏右侧固定位（LCD 肌肉记忆位），提示条落顶部 —— F/Z 扫描起点。⚠️ **但顶部提示压住导航标题 22px**，扫描起点被遮挡是 D18 那条待决项的实质代价 | ⚠️（等 D18 定夺）|
| **B7** 渐进披露 | 枚举值收进面板、不平铺（M17.1）✅；`Other` 作普通一行不占固定位（D4 owner 拍定，代价刻意可见）✅；无破坏性操作裸露（断开 ✕ 只在已连接行）✅ | ✅ |

---

## 5.10 交付层几何 + 视觉信号一致性

| 维度 | check（实测数字）| 判定 |
|---|---|---|
| **E1** 卡贴帧 | PRD → `List with Other` **60px** · UX 卡 → `Security = None` **160px** · Journey → `Connected + success` **200px** · Change Log 描述 → `Connecting` **200px**。阈值 ≤200 ⇒ 全部达标，其中两张**正好压线** | ✅（Journey / Change Log 到线）|
| **E2** 文档列同宽同缘 | PRD **680** · UX **680**（同宽 ✅）· Journey 1574（真网格，宽度由 6 列 112+5×286 决定）· Change Log 480（库 instance 固定宽）。左缘 40 / 4220 / 1320 / 780 **不对齐** —— PRD 在帧网格左、UX 在右（§M23.12 的 PRD-左侧落位要求），⇒ 结构上不可能同左缘 | ✅（同宽达标；左缘 N/A + 写明）|
| **E3** 卡宽贴合内容 | **判断依据**：PRD 卡文字宽 632/680 = **93%** · UX 卡 648/680 = **95%** ⇒ 未过宽。Journey 单元实测填充充分（Pairing 列等多格文字折 2 行，非「文字占比明显偏低」）。无数据型图形被拉平 | ✅ |
| **E4** 布局形态变更后交付层是否重推 | 本轮**改过帧网格**（行 1 从 4 列变 6 列）。UX 卡是**平移**（3100→4220）—— 但**内容是重新推导的**：数据契约 2 条 + 交互 1 条 + 界面级验收 4 条改写 + 1 条新增；Journey 卡 Pairing 列 3 格重推 + 2 行 persona 新增。⇒ 不是「只平移」 | ✅ |
| **E5** 连线条件标签附着 | 逐条量**标签最近边**到自身线段（不按中心、不按 TEXT 框中点）：4 / 8 / 8 / 8 / 8 / 10 / 17 / 17 / 22 / 33 / 44 —— 全部 ≤60 ✅。全套贴同一侧（水平段一律贴上或贴下、竖直段贴右）；`labelVsBlock` 重叠 **0**；标签不压线（最近 4px 无相交）| ✅ |
| **E6** 依附几何未脱钩 | 按节点类型全扫 C2：`ABSOLUTE` 浮层 2 个（面板 `10400:874` / 阶梯 VECTOR `10401:874`）· `layoutMode:NONE` 容器内子层 = 面板行内 marker（clone 自带，未改尺寸）· 手画装饰 = 阶梯 VECTOR。**本轮放置后未再改 C2 容器尺寸 ⇒ 无需重算**；但**面板行数与 VECTOR 几何的依赖已显式登记**（handoff §5.8，后续改行数必须同步改 6 个坐标）| ✅ |
| **E7** Section bounds 贴合 | Section 4940×1686 vs 子节点 bbox 并集 (40,40)–(4900,1646) ⇒ padding **40/40/40/40 四边均等**，无大片死空间 | ✅ |
| **E8** 视觉信号语义唯一 | 见下方对照表 | ⚠️ 存量一号多用 |
| **E9** 克隆残留图层名 | ⚠️ C2/C3 内部沿用 clone 来的通用名（`Frame 1982` / `Frame 1984` / `编组`）+ 导航标题 TEXT 全帧名为 **`Matt`**（人名，源自宿主帧血缘，**非本轮引入、全文件存在**）。本轮新建物已具名：`Options panel / Security` · `Option row / current (WPA2)` · `Option row / None` · `Options outline / Security (stepped)` · `chevron/down (enum)` · `Mark area — Security row (WPA2 / None)`。⛔ **不逐节点改宿主残留名** —— memory `lcd-file-conformance-deferred`：会破坏 sibling 一致 | ⚠️ 存量 |

### E8 信号 × 语义对照表（实测填色枚举，产品帧内）

| 信号 | 出现处 | 表达的语义 |
|---|---|---|
| `#7ed321` LCD 绿 | 导航标题 · 导航下分隔线 · 返回箭头 · `OK` 主按钮描边 · **选项面板轮廓** · **被编辑行轮廓** · **当前值文字** | 「强调 / 活跃 / 你正在动的东西」—— **一号多用** |
| `#2fb54e` | 仅 G 帧（success 图标 + 文字）| 成功 ✅ 唯一 |
| `#3892f3` | 仅 F 帧（info 图标 + 文字）| 进行中 ✅ 唯一 |
| `#ea4233` | 仅 H 帧（error 图标 + 文字）| 失败 ✅ 唯一 |

**判定 ⚠️ 而非 ✅**：`#7ed321` 客观上一号多义。但 ① 这是**宿主产品既有的单一品牌强调色语言**，六处用法里四处是本轮未动的宿主元素；② 本轮新增的两处（面板轮廓 / 当前值绿字）取自 canonical `5314:9520` 的**同一语义族**（「被编辑 / 当前选中」），未引入新歧义。⛔ 判 ⚠️ 存量、**不判 ✅** —— 一号多义是事实，只是不归本轮。
**另一条低风险**：注释层连线蓝 `#33a4fd` 与产品层 info 蓝 `#3892f3` 肉眼接近但分层不同（连线在帧外、info 在帧内），永不相邻 ⇒ 记 🟢 低。

---

## 6. Recommended Next Actions

| Priority | Action | Owner |
|---|---|---|
| ~~🔴 High~~ | ~~D18 提示落位二选一~~ → ✅ **已解（D21）**：owner 拍定改通则驱动，本单落 `y=54`，导航重叠 0。⛔ `24px` 作废 | ✅ 已做 |
| 🔴 High | ~~C/C2/C3 的 `OK` 空表单仍可点，与 PRD 验收 A3 矛盾~~ → **已 auto-fix**（切 `Status=Disabled` 真变体 + 渲染亲验）| ✅ AI 已做 |
| 🟡 Medium | **D9 缺 4 类运行态**：① 无扫描结果空列表 ② SSID 超长（后端上限 32 字符 vs 480 宽行）③ `wifi_module_mode`=Disable/Hotspot 时 `Other` 形态（= P5，需后端）④ M12 外部事件（模块拔出 / 中途掉网）。**建议**：③ 等 P5 答复；①②④ 判是否本单 scope | User → AI |
| 🟡 Medium | **M-LIFECYCLE-CRUD 的 U 缺口**：无「改已存隐藏网络凭据」入口。当前 rationale = 凭据本就不持久化 ⇒ 重连即 Create。**请追认这个 rationale 足够** | User |
| 🟡 Medium | plan §9 的 **5 条 DS 回流候选**待拍板（已过 §M-DISCIPLINE.SOURCE 三问）| User |
| 🟢 Low | **B1 产品层字号 6 档、相邻比 1.06–1.07**（宿主存量）。⛔ 不自行改 canonical；建议 owner 独立立项一次 LCD 字号收敛 | User |
| 🟢 Low | **§M37.1 在「无用户参考物」的单里只剩一半判据**，本轮判 N/A。建议 DS 侧补该场景的显式出口（否则每单都要临场解释）| User → DS |
| 🟢 Low | 占位符对比度（白字 node opacity 0.2 on `#313131`）—— 存量，沿用 `5324:2618`；**文档措辞已澄清是节点级不透明度，不是灰色** | User |
| 🟢 Low | E9 宿主残留图层名（导航标题 TEXT 名为 `Matt`）—— 全文件存在，⛔ 勿逐节点修 | User |

---

**Walkthrough complete.** Issues found: **2 high**（1 已 auto-fix / 1 等 owner 拍）· **3 medium** · **4 low**。
两条 anti-pattern 命中（「只查组件名不查渲染实况」+ meta-rules §3 第 7 条「声明了 ≠ 被消费」），均已修。
