---
id: v4-1864-roaming-access
title: Per-SIM Roaming + Access-Tech Lock State
doc_type: design-record
status: QA
target_release: "8.4"
last_updated: 2026-08-20
sources:
  - { type: jira, ref: "V4-1864", url: "https://tvunetworks.atlassian.net/browse/V4-1864" }
  - { type: jira, ref: "V4-1360", url: "https://tvunetworks.atlassian.net/browse/V4-1360" }
  - { type: jira, ref: "FB-8727", url: "https://tvunetworks.atlassian.net/browse/FB-8727" }
figma:
  file: rJJjWWs51n2iFOlCIC7aYG
  nodes:
    - { id: "6908:2", label: "Config-T Network AFTER (Roaming + Access-Tech lock)", url: "https://www.figma.com/design/rJJjWWs51n2iFOlCIC7aYG/Config-T---Local-UI---v7.7---8.0--20240220?node-id=6908-2" }
    - { id: "8585:1377", label: "Config-T Modem settings AFTER (Current Roaming Status, feature ON)", url: "https://www.figma.com/design/rJJjWWs51n2iFOlCIC7aYG/Config-T---Local-UI---v7.7---8.0--20240220?node-id=8585-1377" }
    - { id: "8589:1377", label: "Config-T Modem settings BEFORE (switches only)", url: "https://www.figma.com/design/rJJjWWs51n2iFOlCIC7aYG/Config-T---Local-UI---v7.7---8.0--20240220?node-id=8589-1377" }
---

# Feature Design Record — Per-SIM Roaming + Access-Tech Lock State

> 模板：tvu-design-system `templates/consumer-product/docs/specs/_feature-design-record.template.md`（9 段）
> **状态：交付完成待 review（Config-T + LCD 全模块 + F1 + 三 audit 完成；feature gate FB-8727 已拍板，无 open question）** — 2026-06-09 续跑完成

> **⚠️ 范围更新 2026-06-18**：**V4-2326（Roaming · Touch Screen / LCD）已删票，LCD 侧不做**（用户决定 LCD 不显示）。本需求收窄为 **Config-T only = V4-1864 + V4-1360**（均已转单 → Bonnie，见 §9）。下文 LCD 相关段（§2 / §8 LCD / §9）仅留作历史。

- **JIRA**：[V4-1864](https://tvunetworks.atlassian.net/browse/V4-1864) Roaming On Config-T + [V4-1360](https://tvunetworks.atlassian.net/browse/V4-1360) Modem locked to 5G-NSA shows LTE（结合优化）。~~V4-2326 Roaming On Touch Screen~~ **已删票（2026-06-18，LCD 不做）**
- **Source**：[FB-8727](https://tvunetworks.atlassian.net/browse/FB-8727)　**Scope**：**Config-T（Local UI）only**（LCD Touch Screen 已撤）　**仅 TM1100 / RPS ONE**
- **Owner(dev)**：Bonnie（Config-T）　**PM**：Trevor Yao　**Designer**：Nancy
- **日期**：2026-06-09（设计进行中）　**Epic**：[V4-1676](https://tvunetworks.atlassian.net/browse/V4-1676) RPS One 8.4

## 1. 问题与根因
1. **V4-1864（roaming 显示）**：用户（Reuters，常进边境、用自带 SIM）需要知道某 SIM 当前**是否在用 roaming data**，以决定是否关闭——目前 UI 未暴露。两处展示：Config-T Network overview + LCD Slot 页。
2. **V4-1360（制式显示，结合优化）**：modem 锁定 5G-NSA 但 Config-T 显示 LTE → 用户以为故障。kangkang 2025-01-13 拍板：**属正常表现（锁定是偏好/上限，实际驻网取决于覆盖，驻 LTE 是正常降级），可后续优化交互**。本质是"配置 vs 实际"关系没表达。
3. **统一诊断**：modem 状态展示模块只显"当前实际值"，缺"配置/预期 ↔ 实际"的关系表达。两票同一模块病根，合并优化。

## 2. Scope & Non-goals
- **做**：Config-T Network 表格 + LCD Slot 页加 Roaming 状态列/标 + Access-Tech 锁定/实际区分。
- **不做**：不改 roaming 的**配置开关**（per-modem roaming 设置页 `4020:7545`，本需求只做**只读显示**）；不做 LCD Standby 底部 strip（空间紧，仅 Slot 页 + Config-T）；不涉及 receiver 侧。

## 3. Baseline 参考
- Config-T Network overview 现状帧 `6074:20265`（"Home (SIM Locked)"，8 列表格 `Slot|Type|Status|Carrier|Speed|Access Tec.|IP|RTT`）。
- LCD Settings/Slot 页 `8610:193`（每 slot：编号圈+信号格+制式 badge+运营商，含现成 `Icon/lock`）。
- **FB-8727 评论链关键约束**：roaming 显示受 **feature-control "show roaming status"** 控制——TVU 租赁设备（Geniox/Webbing SIM 天然 roaming）默认 **OFF**，客户自带 SIM 的购买设备 **ON**（无法靠 ICCID 区分自家/客户卡，故用 feature flag）。dialing 永远算 roaming，UI 显隐由 flag 决定。
- Johannes dreamland 推荐：Roaming 作**独立列**（IP/RTT 间）。

## 4. 设计 — 状态与指示模型【已定稿】
**Roaming 列**（独立列，IP Address 与 RTT 之间）：
- `Yes`（在漫游）/ `No`（未漫游）/ `---`（无 cellular 数据：dialing/无卡/WiFi/Hotspot）
- **中性白/灰**（只读状态事实，非开关 → 不用 ON/OFF，不用警示色）

**Access Tec. 列三态**（"先锁定才有一致性"逻辑）：
| 态 | 显示 | 含义 |
|---|---|---|
| Auto/未锁定 | `5G-NSA` | 无锁定，无一致性概念 |
| 锁定+一致 | `5G-NSA 🔒` | 已锁定（灰 lock），实际==锁定 |
| 锁定+不一致 | `LTE 🔒 ⓘ` | 已锁定(🔒) + 不一致(ⓘ橙)；橙文字+灰锁+橙 warning；点 ⓘ 看锁定模式 |
- 顺序固定 `文字 🔒 ⓘ`（文字左对齐保列整齐；lock 基础态→warning 叠加）。

**边界态**：feature OFF→roaming 整列隐藏；无连接→Roaming `---`、Access Tec `---`。

**两种 "lock" 区分（2026-06-10 新增，颜色区分）**：同一张 Config-T 表里存在两个 lock 概念，**用颜色区分**避免混淆：
- **制式锁**（access-tech locked-to）= Access Tec. 值后的 **灰 🔒**（`UX/Grey/grey-4`），被动状态指示（Slot 1/3/4）。
- **卡槽锁 / SIM 锁**（baseline 已有状态）= dialing/locked 行的 **橙 🔒 + "Slot 2 is locked." + "Unlock it now"**（icon `6908:182` 绑 `UX/Orange/Default`，与同组橙文字一致），可操作的阻断态（Slot 2）。LCD 侧无此态（无卡槽锁行）→ 仅 Config-T 改。
- 该 slot 整行 Carrier/Speed/IP/RTT/**Roaming 全 `---`**（未驻网无漫游事实，Roaming 不给默认 Yes/No）。

## 5. UX 交付【关键参数】
- **图标（库组件 M32，禁手搓）**：warning = `icon/Message/warning 1`（橙 #f68512，key `cefe48b9e79a32f8386939be5febb9c2c983e91d`）；lock = `icon/file/lock`（key `19bde70be8a10c4aaf009c1571affb0319d7f159`），灰 #999。
- **字体**：产品 cell baseline = **Helvetica**（figma 环境**加载不了**）→ **Roboto stand-in**（production 仍 Helvetica；此 stand-in caveat **记于本交付记录、不占交付卡**——2026-06-18 按 M23.11 从 UX 卡移除）；注释层 EN=Roboto / ZH=Noto Sans SC。
- **颜色**：warning 橙 #f68512 / lock 灰 #999 / roaming 中性白 / 列标题灰。Roaming 早期误用橙（与 warning 撞色 + roaming 是中性事实）已改白。
- **布局**：表格容器 `6908:41` 左右 padding 16、Slot 列 36、列间距 20、IP 列吸收宽度 → 行宽填满 918（容器内容区），不溢出。
- **交互**：**hover / tap 锁图标 `🔒`** → 库 `Tooltips`「Locked to {标准}」（桌面 hover + 触屏 tap；锁定**一致/不一致两态均触发**，挂锁图标而非 ⓘ）。**校正 2026-06-18**（原"点击 ⓘ / tap-only / 不用 hover"按用户更正反转）。

## 6. 决策记录
| # | 决策 | 理由 |
|---|---|---|
| 1 | V4-1864 拆 Config-T(V4-1864)/LCD(V4-2326) 两票 | 两 owner（Bonnie/Edward）分别 track；对称命名 On Config-T / On Touch Screen |
| 2 | 结合 V4-1360 做模块级优化 | 同一 modem 状态展示模块、同病根（实际 vs 配置） |
| 3 | Roaming 独立列 + Yes/No/--- | 采 Johannes 推荐位置；Yes/No=状态查询（非 ON/OFF 开关，避免误解为可点击开关）|
| 4 | Roaming 中性白（非橙）| roaming 是中性事实，橙会与 warning 撞色 + 误导成"坏" |
| 5 | Access Tec：一致用 lock、不一致用 warning，二者叠加 | "先锁定才有一致性"；lock=已锁定、warning=不一致，意义不同 |
| 6 | warning 用 `warning 1`(橙) 非 `Error 4`(红) | error 红是严重错误语义，制式降级是 warning |
| 7 | **恢复 per-modem 齿轮入口**：OK modem 行末尾 ⚙（`icon/settings/1`）→ per-modem 设置（含锁 Access Tec） | baseline（参考文件 `5VVlCTtQ0WRcJdvwUA6bJ5` node `2171:19438`）每个 OK modem 行末本就有齿轮,redesign 误删。**校正 2026-06-18**：原"不加齿轮设置列"**反转**——齿轮是 baseline 必备的锁定/配置入口,只在**正常态（OK modem）**显示;dialing/锁态/非 modem（hotspot/wifi/ethernet/USB）不加。roaming 稿 `6908:2`（slot 1/3/4）+ CP 页 `7098:546`（slot 1/3）均已恢复,itemSpacing 缩小腾位、分隔线重对齐 |
| 8 | 锁定到的制式 = **hover/tap 锁图标 🔒** 出 Tooltip「Locked to {标准}」 | 锁图标在锁定一致/不一致**两态都在**，挂锁比挂 warning 更一致；**hover(桌面)+tap(触屏)** 同一 tooltip，兼顾手机。**校正 2026-06-18**：原"点击 popover 非 hover、挂 warning"按用户更正反转 |
| 9 | 卡槽锁(SIM locked) vs 制式锁用**颜色**区分（橙 vs 灰），不换图标 | 同表两个 padlock 撞语义（用户 2026-06-10 抓）；卡槽锁是 baseline + padlock 语义本就贴 → 不动它的图标，新加的制式锁保持中性灰，卡槽锁整组橙（图标随其本已橙的文字）。低 ripple、不重开定稿 legend。LCD 无卡槽锁态故不涉及 |

## 7. 依赖 / 待办
- ~~**feature-control flag 载体**：向 Danner 确认"show roaming status" flag 在哪配置（本设计假设后台/license 层，不在终端 UI 画开关）。~~ **✅ 已闭合 2026-08-18**（见 §11 Revision Log）：落地为 `all_slots_info` 响应里的 `show_roaming_status` 字符串字段，后台标志文件 `/data/tvu/config/dial/roaming/show_roaming_status`，support team 用脚本按设备开关。**不在终端 UI 画开关**这一假设成立。
- **roaming 数据形态**：API 返回单状态（在/否）——已确认（用户："一个状态，设置时是个开关"）。
- 环境约束：use_figma 无法加载 Helvetica → Roboto stand-in。

## 8. 交付链接
### Config-T（文件 `rJJjWWs51n2iFOlCIC7aYG`，page `6907:2` / Section `6907:3`）
- **Jira requirement 组件 ×2**（一票一组件，M23.8；clone 自 V4-1865 page `6646:1324`，rescale 0.42 → 1008px，竖向叠在 Section 左上、mockup 上方）：
  - `7212:1140` **V4-1864**（Task, Priority=Medium）：标题 "TM1100: Expose per SIM information if a Modem is using Roaming On Config-T"；y=-150。
  - `7272:369` **V4-1360**（Bug, Priority=Medium）：标题 "Modem is locked to 5G-NSA, ConfigT shows LTE."；y=200。
  - 各 issue-key 带 hyperlink。（原记录的 `6966:195` widget 已 missing；本两组件替代。两票 fixVersion 均空，Epic V4-1676 RPS One 8.4。）
- AFTER 帧 `6908:2`（Network 表，Roaming 列在 IP↔RTT 间 + Access Tec 三态 + Priority 列 + Connection Priority 按钮 + **per-modem 齿轮入口**（OK modem 行末 ⚙ → 锁 Access Tec / per-modem 设置；slot 1/3/4；见决策 #7），见 §10）。
- **状态行 live 三组合**：slot1 = CUCC·LTE🔒ⓘ(橙·不一致)·Roaming **Yes**（漫游+不一致）；slot3 = CMCC·5G-NSA🔒(灰·一致)·**No**（未漫游+一致）；**slot4(本次激活)** = CTCC·5G-NSA🔒·**Yes**（漫游+一致）。第四种（未漫游+不一致）以矩阵 note 记于 UX 卡。
- PRD 卡 `6976:333`（navy；**2026-06-18 改为设计系统 canonical PRD 6 段**：需求来源 Source / 需求背景 Background / 现状 Current State / 功能需求 Requirements / 验收 Acceptance / 优先级&排期 Priority & Timeline；双 ticket **V4-1864 + V4-1360** hyperlink）。**设计内容（原 Solution summary：Roaming 三值/三态视觉/矩阵）已按"设计内容不进 PRD"移除**，留在 UX 卡。canonical 格式真源见 `design-process.md § Step B`。
- UX 卡 `6979:333`：Changes/**状态语言 legend `6981:333`（真库 lock+warning instance 渲染三态 + Roaming 三值 + 四组合矩阵 + lock-disambiguation 双语行 `7022:2`）**/Data Contract（白话）/Interaction/Acceptance。**2026-06-18 去重瘦身**：删 Why（≈PRD Background）+ Feature-control gate FB-8727 段（留 PRD Acceptance）+ 字体 stand-in 注（移本记录）；Data Contract 布尔伪代码→白话（M23.10）；LCD 条目早先已剥成 Config-T scope。审完整性：全 children 在 Section 内、零重叠。
- **卡槽锁橙化（2026-06-10）**：SIM-lock padlock icon `6908:182` 全 path 绑 `UX/Orange/Default`（原灰）→ 与橙文字 `6908:183` 同组；制式锁灰 🔒（`6994:360`/`6957:2`/`6959:9`）不动。
- lock 展开 Tooltip `6989:411`（库 Tooltips "Locked to 5G-NSA"）+ 触发标签 `6990:356`。
- **BEFORE `6974:719` 放 Section 左外（x=-1120）** + 标签 `6975:333`。

### LCD（文件 `0054ib0nLmt27bC3QlGDl7`，**新建** page `8895:2` / Section `8895:3`）
- AFTER `8895:4`（slot4 详情卡改 locked-inconsistent：actual 4G 橙 + 灰锁 + 库橙 warning + 橙 "R" roaming 标记，locked-to 5G-SA badge）；slot3 = 锁定一致。
- BEFORE `8895:171` + 标签；UX 卡 `8899:30`（同款状态语言，引 Config-T 真源 + tap 替代 hover）；Tooltip `8898:82`（"Locked to 5G-SA"）+ 连线 `8901:28`；三票 hyperlink。
- **Standby `8610:362` 未动**（按定稿）。

### M42 Clone Gate — clone source probe
| Clone | 源 | brand-color 裸 hex | 处置 |
|---|---|---|---|
| CT BEFORE `6974:719` | `6074:20265` | 17×`#56af31` 全在库 instance 内部 | mockup 侧不可变 + 冻结对照不 mutate → 不补绑 |
| LCD `8895:4`/`8895:171` | `8610:193` | 绿=slot 选中高亮(装饰) | 仅改 slot4 特定 cell → 无 propagate |

### Audit（2026-06-09）
- `audit-mockup-typography-icon.mjs` — Config-T `6907:3` + LCD `8895:3` **✅ 0 glyph / 0 font 违例**。
- `audit-mockup-integrity.mjs` — Config-T `6907:3` **✅ pass**（无 overlap/wrap）。
- `audit-mockup-colors.mjs` — Config-T C1 报 93 处 icon 裸 hex = 67 legacy baseline clone + 11 上 session 图标 + 15 我的 legend 库图标（`icon/file/lock` C4 legacy 灰 `#999999` + warning 库组件**内部** `#D9D9D9`）。**零新增手绘 brand 违例** → C4 file-level 优先（同文件 embedded-audio 已立先例）+ M32 库内部不可改，非阻断。（audit 同报 `/variables/local 403` 非企业版，C2/C3 under-report。）

### 协作复盘
- `docs/2026-06-09-v4-1864-roaming-mockup-retrospect-internal-share.md`（状态语言 ~13 轮精修；本续跑追加交付层）。

## 9. 路由与评审
- **Config-T → Bonnie Zhou**（V4-1864 + V4-1360 Config-T 侧）；**LCD → Edward Wu**（V4-2326 + V4-1360 LCD 侧）。**Reviewer(PM)**：Trevor Yao。
- JIRA 回复：✅ **已发（2026-06-18，Config-T 侧两票）**。ADF + 真 accountId mention，请 PM review **效果图（非 PRD）**，FYI 带模块负责人（拨号=Danner）+ reporter。
  - **V4-1864**（Roaming · Config-T）→ 评论 `248655`：`@Trevor Yao @Johannes Heckmann` review · FYI `@Bonnie Zhou @Danner Dai`；**assign Bonnie**。
  - **V4-1360**（Access-Tech 锁定 vs 实际）→ 评论 `248659`：`@Trevor Yao` review · FYI `@Bonnie Zhou @Danner Dai @winni(QA)`；**assign Bonnie**。
  - **V4-2326**（Roaming · Touch Screen / LCD）→ **已删票（2026-06-18）**：用户决定 LCD 不显示，该票删除、LCD 侧不做。LCD mockup 帧（`0054ib0nLmt27bC3QlGDl7` 8895:x）成无票孤儿，待用户定是否清理。
- **校正**：转单只 2 票（1864+1360，Config-T），原 3 票框架含 2326 是 LCD；模块 FYI 路由见 `docs/decisions/2026-06-03-jira-scope-routing.md`（拨号=Danner / Router=Edward）。

## 10. F1 走查修复 + Connection Priority rebase（2026-06-16）

### F1 走查修复
- 🔴 **行分隔线断裂**：加 Roaming 列后 RTT 右移出 baseline 分隔线（814 宽），RTT 列无行分隔线。已加宽 6 条分隔线到对齐 RTT 右边缘（后随 Priority 列 relayout 再调到 903）。

### Connection Priority rebase（基于新版本 `7098:546`）
- **背景**：Config-T v7.7/8.0 新增 **Connection Priority** feature（Priority 列 + "Connection Priority" 配置按钮），见 `7098:546`。本需求 mockup 需与之共存。
- **依赖 / 构建顺序**：Connection Priority 在**独立票 FB-10014** 做，**先做优先级设置 → 再做本需求**（V4-1864/2326/1360）。dev 已知。故 PRD/UX 交付卡按 **M23.11**（他 feature context 不入卡）**不写** Priority 列 / Connection Priority 按钮，仅本记录留共存 + 依赖说明。
- **方式（决策）**：**改既有 `6908:2` in place**（非 clone 新帧）——保住已审工作（Roaming/三态/卡槽锁/legend/分隔线），单一 source of truth。只加新版本的**增量**。
- **增量**：① Priority 列（第 3 列，Type 后；header Roboto Bold 14 灰 / 值 Roboto Regular 14 白，FIXED 宽 47；值 modem 1-4=2 / hotspot=— / wifi=1）② Connection Priority 按钮（克隆 `7111:343` 入 Network 头 `6908:38`，x=744，含 `icon/settings/1`）。
- **未做（YAGNI）**：① **不加 Ethernet/USB 行**——那些是 Connection Priority（要在所有连接类型间排序）才需要的全量行；对 roaming/access-tech（cellular 特性）零增量，现有 6 行已覆盖所有状态。② 不设计 Connection Priority 配置面（别人的 feature，仅共存）。③ Priority 列/按钮不改。
- **布局**：10 列流式 auto-layout，itemSpacing 20→12 适配（数据行 hug 903 ≤ 表内容区 918），**未压缩任何现有列宽**（避免文字截断）。Roaming 仍 IP↔RTT 间。分隔线对齐 903。
- **字体**：Priority cell 用 Roboto stand-in（Helvetica 在 Figma 加载不了，沿用 §5 stand-in 约定，production 仍 Helvetica）。
- **LCD 不涉及**（无 Priority 列变化）。

### 标记校正（2026-06-18）
- **病灶**：Config-T 文件的 page/Section/PRD/UX 卡早先误挂 **V4-2326**（Roaming·Touch Screen）。但 V4-2326 是 **LCD 面**，其 mockup 在 LCD 文件 `0054ib0nLmt27bC3QlGDl7` Section 8895:3，**不在 Config-T 文件**。
- **正解**：Config-T 页只做 **V4-1864（Roaming·Config-T）+ V4-1360（Access-Tech 锁定vs实际·Config-T）**；LCD 页做 V4-2326 + V4-1360（LCD 侧）。
- **已改**：page `6907:2` 名 / Section `6907:3` 名 / PRD 卡 `6976:333` 名 + 票号行 `6976:335`（删 V4-2326 段，保留 V4-1864/V4-1360 超链接）/ UX 卡 `6979:333` 名 —— 全部 V4-2326 → V4-1360，scope 标为 Config-T。Jira banner `7212:1140` 本就是 V4-1864 + V4-1360，无需改。
- 本交付记录（doc）是跨两文件的总记录，§8 已分列 Config-T 侧 / LCD 侧，故 doc 框架不变。

## 11. Revision Log — 2026-08-18 漫游可见性门控定稿 + Modem 页扩面

> Figma 侧**不再有**独立的变更块 —— 本 Revision Log 是变更历史的唯一落点。交付 Section 内一度建过 M23.17 橙框更新块（`8598:764` / `8611:764`），经 owner 两次收敛后已全部删除，变更信息内联进 UX 卡（meta 行日期 + 橙色标记 + legend `· new` 后缀）。详见 §「2026-08-20 可发现性轮」③。

**触发**：taoyang 报「TM1000 V4 4K 84043，modem enable Roaming，Config-T home 显示 disable」（Slack 2026-08-14）→ 定性为**语义混淆而非 bug**：首页 Roaming 列是模组**实时工作状态**（`roaming_state`），不是漫游开关（`get_roaming_disable_value`）的回显，两者是独立字段。**V4-2385 据此不是 bug。**

**决策（Slack thread 2026-08-18，PM Trevor + 拨号 Danner + Config-T Bonnie）**：

| # | 决策 | 理由 / 出处 |
|---|---|---|
| R1 | 门控落地为**字段**，不是设备类别判断：`show_roaming_status` 随既有 `all_slots_info` 返回，**字符串**类型。`"1"` 显示；`"0"` 或字段不存在 = 不显示，**缺失为默认** | Danner 定接口形态；Bonnie 确认「1 是字符串」。后台标志文件 `/data/tvu/config/dial/roaming/show_roaming_status`，youngzhang 出脚本供 support 按客户开关 |
| R2 | **门控理由是商业敏感、不是安全性** | Trevor：TVU 租赁的 Webbing / Geniox SIM 本质一直跑漫游网，默认显示会让客户误以为在产生额外费用；「only one customer cares」，不值得影响所有用户 |
| R3 | **Scope 扩大到 Modem 设置页** —— 新增只读行 `Current Roaming Status:`，值 `Yes / No / ---` | FB-8727 原始要求含该页但一直没画。**该页现状只有开关（全局 + 单模块），无实时状态 ⇒ 这是新增开发，不是纯门控**（owner 2026-08-18 确认现状） |
| R4 | 新行位置 = **配置区内、`Roaming for this modem:` 开关正下方**，纯文本值无控件 | 需求方参考图指定。防语义混淆改由 label 承担（`Current` + `Status` 双重限定）+ 纯文本形态（夹在输入框中间即表示不可编辑）。**注**：设计侧曾建议放虚线下方 IMEI/ICCID 只读区（靠版面结构表达只读），未采纳——需求方认为「开关 ↔ 现状」紧邻对照更重要 |
| R5 | ~~值在两个 surface 同名同值 `Yes / No / ---`；参考图红字读作语义说明、非显示文案~~ ⛔ **已推翻 2026-08-20**。值**按 surface 两种呈现**：网络表列 `Yes / No / ---`（列窄）· **Modem 设置页行 `Yes - Using Roaming` / `No - Not using Roaming` / `---`**（有空间，把语义写全，用户一眼看懂） | 初版误把需求方参考图上的红字当成给设计看的语义说明，**owner 2026-08-20 纠正：那就是给用户看的显示文案**。判据随之改为「同一字段、措辞可按 surface 不同，但同一张 SIM 的状态不得分歧」；UX 卡 Acceptance 里原「两端同名同值 / 任一端不得自造措辞」那条已删除。教训：**参考图上的标注要先分清是「标给设计看的注解」还是「要照着做的文案」，不确定就问，别按自己的一致性偏好裁决** |
| R6 | **首页不加漫游开关显示**；未授权时整列不显示（同 8.3） | 回应 taoyang 追问「首页要不要改成显示漫游开关」——总览表只报状态，不放控件 |

**本轮 Figma 落地**（文件 `rJJjWWs51n2iFOlCIC7aYG` / page `6907:2` / Section `6907:3`）：
- **新建** Modem AFTER `8585:1377`（clone 自 `3966:48160` page 的 baseline `3966:48166`，未 rescale 保真）+ 只读行 `8588:591`（label `8588:592` / 值 `8588:593`）。行插在 `Roaming for this modem:` (`8585:1644`) 与 `Network registration mode:` (`8585:1645`) 之间，label 对齐 292 列、值对齐 501 值列，行高 30、容器 itemSpacing 20。**产品层字体沿用 §5 的 Roboto stand-in**（baseline 为 Helvetica，Figma 不可写）。
- **新建** Modem BEFORE `8589:1377` + label chip `8590:764`（Section 外，右缘 -103 与首页 BEFORE 齐平）。
- ~~**新建** M23.17 逻辑更新块 `8598:764`~~ **已于 2026-08-20 删除**（owner 收敛为「一个需求只留一份终态规格」，见本节 ③）。
- **更新** PRD `6976:333`（meta 补创建/更新日期 + 精确化票号链接、Source 补 FB-8727 与本轮出处、Current State 补 Modem 页现状、Requirements 补门控与新 surface、Acceptance 改为功能级 + 指路句、Priority 补实现启动）。
- **更新** UX 卡 `6979:333`（Changes / Data Contract 补 `show_roaming_status` 契约 / Interaction 明确「不是开关回显」/ Acceptance 改为界面级 + 指路句）+ **新增 meta 日期行** `8597:764`（原缺，M23.14 (B)）。
- **布局重排**：Modem 帧宽 1280 > 首页帧 1017，会侵入文档列 ⇒ Section 加宽 2245→2460、文档列右移至 x 1400。**重排后全量两两求交 overlapCount = 0**（连既有 PRD↔UX 卡 5px 存量重叠一并消除）。
- **2026-08-20 文案纠正轮**（R5 推翻）：值节点 `8588:593` 改 `Yes` → `Yes - Using Roaming`（宽 128，值列可用 480，不溢出）；UX 卡 Changes / Data contract / Acceptance 三段同步按 surface 分列口径。按 §M-DISCIPLINE.SCOPE 硬约束 7 先扫对象全集（命中 3 个节点）再改，改后机器复验：**旧措辞残留 0**（`same three values` / `neither invents` / `同一套三值` / `任一端不得自造措辞`）· **新文案落在应有的 4 个节点** · overlap 复测 0 / 越界 0。

- **2026-08-20 可发现性轮**（owner 两条走查，同日稍后）：
  - ① 「Figma 只有 Yes 态、没有 No 态，UX 说明也没有 No，开发不容易理解」⇒ legend 新增第三段 **`Modem settings row — 3 states`**（段名 `8610:764` + 三行 `8610:765/769/773`，clone 既有 roaming 行范式，值宽 119/138/11 均在 190 容器内）。**根因**：单 modem 详情页一次只能显示一态，而网络表靠不同 slot 行天然并列三态 —— 详情页的多态只能由 legend 承载，这是两类页面的结构差异，不是漏画。
  - ② 「第二版改动没用橙色标出来，开发不容易找到改了哪些」⇒ 按 §M23.17 在 UX 卡被改处标橙**被改术语** 12 处（Changes 1 / Data contract 3 / Acceptance 2，各含 EN+ZH）+ legend 新段名加橙色 `· new 2026-08-20` 后缀（段名本身保持 cyan，不破坏 legend 段名体系）。两张卡 meta 行 Updated → 2026-08-20 并重建票号超链接。**判断修正**：此前认为「第二版还没交付、属同轮迭代，不需 M23.17 留痕」——错，dev 08-18 已打开看过该稿，**对已经在看稿的人来说第二版就是变更**，必须可定位。
  - ③ **更新块 2 块 → 1 块 → 0 块**（owner 连续两条收敛）：
    - 先合并（「UX 不要留 3 块，容易误导；对开发和测试来说它们就是一个需求，不要前后不一致；只说明什么时候更新了哪里就行，旧的可以去掉」）⇒ 就地改造 `8598:764` 为单一 Change log，删 `8611:764`。
    - 再删除（「Change log 这个有保留的必要吗？UX 交付说明里面已经有了什么时候加的什么逻辑」）⇒ **核实属实**：UX 卡已自带 meta 行 `Created 2026-06-08 · Updated 2026-08-20` + legend 段名 `· new 2026-08-20` + 14 处橙色变更标记，Change log 唯一独有的信息（08-18 改了什么）早已完全融进卡正文、对 dev 就是需求本身 ⇒ 整块删除，橙色图例**并进 meta 行**（`… · orange = changed on 2026-08-20`，零新增节点）。
    - ⇒ 文档列定型为 **PRD（需求）+ UX Delivery（唯一终态规格）两块**，变更信息全部内联在卡里。**原则**：按轮次并列更新块 = 让 dev 自己拼版本，违 §M23.11 (B) 终态优先；「何时改了哪里」能内联就内联，不值得单独占一块。⚠️ 反过来说，**M23.17 的独立更新块适用于「已交付很久、旧逻辑要划线保留」的场景，不适用于同一交付周期内的连续迭代** —— 本轮连着建了两块又全删，根因是把「同周期迭代」当成了「交付后变更」。
  - 布局连锁：UX 卡 1565→1741→1888；Section 高 3737→4463→3949→**3593**（bottom 3249）；每步后复测 overlap = 0 / 越界 = 0。
  - ⚠️ **已知偏差（owner 2026-08-20 拍板保留）**：UX 卡内橙色 `#f68512` 承担**两种**含义 —— 产品语义（legend Access-Tech 段的「锁定不一致」警示，如 `LTE`）+ 注释语义（本次变更标记），属 §C4「品牌色与 M23 annotation accent 不得混用」的偏差。已向 owner 提示撞色风险并给出三个方案（撤标记 / 保留 / 换色），owner 选**保留现状**；meta 行的 `orange = changed on 2026-08-20` 图例即为缓解措施。后续若该卡再迭代，优先考虑撤标记。
  - ⚠️ **本轮引入过一次回归并已修**：ZH 橙标初版用 opacity **0.6**，触发 `bilingual-spacing` 的 `zh-style-tier` 4 条违例（§M23.14 (B)：ZH run 一律 **0.45**，「中文永远是附注不抢权重」）。改回 0.45 后该闸回落至 1 条既有存量（`6982:366`），本批次零命中；自验探针复核 4 节点含汉字 segment 全部 0.45。**教训：给注释卡加任何强调色时，色相可以变、ZH 的 opacity 档位不能动。**

**机检**（`audit-mockup-conformance --node 6907:3 --non-blocking`）：`integrity` **exit 0** · `overlap` **exit 0** · `colors` / `typography-icon` / `bilingual-spacing` **本轮触碰节点零命中** · `binding-fidelity` 本轮命中 23 节点，**全为 `fontSize=NN（应 setTextStyleIdAsync）`** —— 与既有 PRD/UX 卡段落同范式（改动前 `textStyleId` 本就为空），属 §M49.1 owner-deferred 存量类别 · `library-origin` 385 scanned / 372 foreign-library = 本文件 file-wide 存量（旧库 `TVU UX Library`），clone baseline 继承而来 · `connector` 报「0 条可验证连线」= 该 Section 本无流程连线 · `library-binding` exit 2 = 缺预取缓存 `figma-data/mockup/<fileKey>.json`（环境性）。

**仍悬空（本轮未做）**：
1. **回 taoyang** V4-2385 定性（不是 bug）+ 首页不加开关显示 —— 草稿已备，未发。
2. **英文版回 FB-8727** 给 Johannes（7-10 / 7-17 追过两次版本）。
3. **Jira 回复 V4-1864**（UX Design updated + Figma 链接，@PM review、cc Bonnie/Danner）。
4. PRD Source 段的 **Slack thread 超链接**未加（workspace permalink 未取，避免编造 URL），当前只写文字出处。
5. 该 Section 仍**缺 User Journey Map 卡**（M23 卡族要求 Jira mockup 必配）——既有 gap，非本轮引入。

---
> 流程：⓪Stage0-lite → ①Page/Section ②Jira ③Mockup(状态语言定稿) → ④UX卡(待) → ⑤F1(走查+修复完成) → ⑥Connection Priority rebase(完成) → ⑦门控定稿 + Modem 页扩面(2026-08-18，见 §11)。核心状态语言经 ~13 轮 AI-用户协作精修定稿，详见协作复盘 `docs/2026-06-09-v4-1864-roaming-mockup-retrospect-internal-share.md`。
