<!-- mockup-handoff -->
# Handoff — V4-2402 Access-Tech Badge（交付闭环轮）

- **日期**：2026-09-08
- **Jira**：[V4-2402](https://tvunetworks.atlassian.net/browse/V4-2402)（Bug, Medium, To Do, reporter winni, parent [V4-1676](https://tvunetworks.atlassian.net/browse/V4-1676)）
- **需求链**：[V4-1543](https://tvunetworks.atlassian.net/browse/V4-1543)（原始需求, Resolved, Edward Wu）· [TM3-1871](https://tvunetworks.atlassian.net/browse/TM3-1871)（**V3 侧 clone 单, Done**, Asher Guo, 已在 83074 / tvuwebui-7.8.365 实现）· [TM3-1670](https://tvunetworks.atlassian.net/browse/TM3-1670)（TM1000V3 v8.3）· 两条 Slack 线见 design-record frontmatter
- **Figma**：`0054ib0nLmt27bC3QlGDl7` · wrapper `10247:420` · 交付 Section `10247:423` · BEFORE = owner 手建 `10271:745`
- **设计真源**：[`docs/specs/2026-09-08-v4-2402-access-tech-badge-design-record.md`](../specs/2026-09-08-v4-2402-access-tech-badge-design-record.md) —— **最终状态 = §12（视觉规格）+ §13（显示条件）**。⛔ §11 的锚点与交付层已被 §12 推翻；**§11 / §12 共同持有的「4G 也显示」已被 §13 推翻**
- **Task Entry Mode**：US-3（既有交付 Section 增改）+ Jira-linked

---

## 0. 本轮最终交付（owner 两次追加指令后）

| # | 交付物 | 状态 |
|---|---|---|
| 1 | 撤掉 §M23.17 橙色标记 4 处 | ✅ 完成（wrapper 内橙色残留 0，探针阴性对照通过）|
| 2 | BEFORE 对照物 | ✅ **owner 手建** `Plan C for UX Design` `10271:745`；我重建的 BEFORE Section 按其指令已删 |
| 3 | 徽标形态改为编号左上角 | ✅ 16 个徽标改 10px / 1px `#434343` / `cell.x−3, cell.y−3`；`clipsContent` 改 false 消除裁切 |
| 4 | Change Log 注释 | ✅ `Mark area` `10309:233` + `Description_text` `10309:235`（沿用 owner 范式）|
| 5 | ~~PRD 卡 / UX Delivery 卡 / Journey 卡~~ | ⛔ **建成后按 owner 指令全删**（D18）—— 内容去向见 design-record §12.1 |
| 6 | Jira 回复 | ✅ **已发** comment `271762`（`UX Design updated.` + Figma/Before 短锚链接 + scope 一句；@Trevor review，cc Edward / Asher / winni，四个 ADF mention 节点全部生效）|
| 6b | **Jira 转 assignee → dev owner** | ⛔ **本轮漏做（2026-09-09 发现）** —— `design-process.md:208`「交付后把 Jira assign 给 dev owner」是硬规则，交付评论发完就该转。实测 assignee 至今仍是 **Nancy Zeng**（设计侧）。应转 **Edward Wu**（V4 LCD 开发，`5e72ce9e3e46490c3801b891`）。⚠️ §206 的「FYI 一定要 @ dev owner」原文理由就是**便于后续转单衔接** —— 我 cc 了 Edward 却没走完后半步 |
| 7 | **语义收窄为「只显 5G」** | ✅ owner 同日第三次拍板（D22–D24）——删 2 个 4G 徽标 · 满载帧 4 个 4G 转 5G · 六条 state-label + Change Log 正文 + 两个帧名同步改写。见 design-record §13。**Jira 评论无需重发**（正文只指路、不含规格，Figma 链接未变）|

> **owner 对 6-JIRA gate ①⑤ 的显式豁免**（D18）：「对于这样的小需求，加上全套的 UX 交付说明有点过重了，只要说了修改了哪里就行」。⇒ 这不是漏做，是 owner 判定粒度过重后收敛。功能级需求与验收因此落在本文件 §2。

---

## 1. M48 起手 Rule-Coverage Self-Check（交付前回头打勾）

### (A) locked spec

| # | locked spec | 覆盖情况 |
|---|---|---|
| L1 | 徽标规格 | ⚠️ **本轮被 owner 改**：11px/1.5px `#252525`/`cell.x+15` → **10px/1px `#434343`/`cell.x−3,y−3`**（D19）|
| L2 | 徽标零布局宽度（ABSOLUTE）| ✅ 满载 10 徽标仍 2 行 / 48px / 栏下余 12px |
| L3 | Slot Info `354.89×48` · 垂直上限 60px · 必须 2 行 | ✅ 两帧实测 `rows=2 barH=48 pastFrameBottom=−12` |
| L4 | 单元宽 = `24 + 运营商码宽`；Verdana 14px 字宽表 | ✅ 未新建单元，未偏离 |
| L5 | ⛔ 橙色不可用于制式/降级 | ✅ 且按 owner 指令连 §M23.17 的注释橙一并撤掉（D18a）|
| L6 | ⛔ `5448:5082` / `5433:30631` 别删别移 | ✅ 两者未被本轮触碰（owner 另行改了 `5448:5121` 的规格，已登记 §12.4）|
| L7 | BEFORE 形态取值 | ⚠️ 用于我重建的 BEFORE 帧，该帧已按 owner 指令删除；BEFORE 改用 owner 的 Plan C |
| L8 | 字体债 + 措辞订正清单 | ✅ 见 §3；措辞订正 owner 已自行完成大部分 |

### (B) active M-rule

| 规则 | 覆盖情况 |
|---|---|
| M0 | ✅ 卡族用 M23 规定值；BEFORE 帧走 clone；Change Log 走 clone owner 的 file-local instance |
| M23 主表 / 双语 / 字体 | ✅ navy + cyan；EN Roboto / ZH Noto Sans SC 小 2px + opacity 0.45 |
| M23.0 / .10 / .11 / .12 / .14 / .19 | ⚠️ **已按 D18 作废**（三卡删除）。⚠️ 建卡过程中命中并修掉两类真违规，见 §4 |
| M23.8 / .8.1 | ✅ Jira 组件 `10248:420` issue-key hyperlink 实测非 null；变体实测 `Priority=Medium` 与 Jira 一致（**我曾据全景图颜色误判为 High，已更正**）|
| M23.17 | ✅ **判定不触发**（D18a）|
| M23.18 / .18.1 | ⚠️ 探测器对本帧给出 `light`（frame 自身 fill 是**未绑变量的默认纯白**），**不可信** —— 子层真实底色 `#1d1d1d` ⇒ dark ⇒ navy 卡。这正是 §M23.18.2 描述的歧义。产品帧 fill 属存量债（在 `default-white-bg` 冻结基线内），本轮未擅改 |
| M-COLOR §C4 / §C7 / §C8 | ✅ 注释层无 brand green；橙色未用于制式 |
| M-TXT-ICON-AUDIT | ✅ `typography-icon` exit=0 findingNodes=0（对照组 owner 的 Section 为 45）|
| M-INTEGRITY §I2 / §I3 / §I6 / §I7 | ✅ 两个数分报、扫 2 层嵌套；overflow 0/0；I7 每次改动后实测复测（未预判）|
| Q15 | ✅ Section 内定位全部 probe `absoluteBoundingBox` 复核；移 Section 时相对坐标零漂移、绝对整体平移 +560 |
| M42 / M42.2 / M42.3 | ✅ clone gate + 结构 audit（src 146 vs clone 144，差 TEXT −2 = 删 6 建 4，其余类型逐项一致）|
| M47 / M47.2 | ⚠️ **首次未遵守**（硬编码 range 长度 → 3 处静默失效），已修 + 逐段复核，见 §4 |
| §字体规范〈产品层字体〉 | ✅ Verdana 不可写 ⇒ Roboto 占位 + 清单（§3）|
| M-DISCIPLINE.SCOPE | ✅ 清单按对象全集；**scope 本身被订正**（补 V3，见 design-record §2）|
| M-DISCIPLINE.MEASURE | ✅ 量归属距离而非仅遮挡；量可见字形 |
| M-DISCIPLINE.SYNC | ✅ 每批编辑后机检 + `--report` 落盘；③ 轮跨 surface 互斥抓到一处（文案写「编号左上角」而帧实际是 `cell.x+15`），已同步 |
| M-GATE-FALSIFIABILITY | ✅ 每条 probe 配阴性对照；`library-binding` exit=2 登记为**未验**不计通过 |
| M21.4 | ✅ 两级先例搜索（本页 → 本产品同类页）；文档卡宽度先例取自 V4-2333 三卡（680）与 V4-1864（1000），**卡已删故不再适用** |
| M49（lite）| ✅ Baseline/Delta：`Remove` = owner 明确要求删的四项；`Keep` = 左列既有标签与两帧（因此文档列右移让位，未缩既有标签）|
| M55 | ⚠️ (4)(c) 常规交付闭环被 owner 收敛为轻量交付（D18）|

### (C) 未覆盖项 rationale

- **User Journey Map（6-JIRA gate ⑤）**：owner 判定粒度过重、显式豁免（D18）。⚠️ 若后续 F2-late 走查需要，需重建并补第 2 个 persona（本轮只做了 field operator 单 persona）。
- **PRD 卡（6-JIRA gate ①）**：同上豁免；需求侧内容落 design-record §2/§12.3 + 本文件 §2。
- ~~**`library-binding` 闸**：exit=2 ERROR（离线缓存过期），对照组同为 exit=2 ⇒ 未验。~~ ✅ **2026-09-09 已补跑并销账** —— 重抓缓存后 **exit=1**，V4-2402 范围内 **60 条 findings 全部是 file-local 组件传导债、新增 = 0**（componentId 集合与 owner 手建对照 Section **双向差集为空**）。见 design-record **§14**。

---

## 2. 功能级需求与验收（PRD 卡删除后的落点）

### 2.1 功能需求

1. 每个蜂窝 slot 在 LCD 首页显示当前接入制式；该值是**状态字段**（modem 驻网即显示），不是异常标记。
2. **只显示 5G**（owner 2026-09-08 第三次拍板，design-record §13 / D22）：slot 驻网 **5G** ⇒ 画 `5G` 徽标；驻网 **4G** ⇒ **什么都不画**。⚠️ 因此「没有徽标」同时表示 **4G** 与 **未驻网**，首页无法区分二者（已知代价，见 §2.3）。
   ⛔ 本条**推翻**了此前的「4G 与 5G 都显示 / 徽标缺席绝不能表示 4G」——那是过度外推；原始需求 V4-1543 的标题即 *Show "5G" label on the Homepage*，PM 2025-07-29 原话也是 "the number and the **5G mark**"。
3. 该值须在设备屏幕 1:1 下可读，在绿圆上与深色底上都要可读。
4. **slot 编号与运营商码都保留可见**，都不得被制式取代（PM Trevor Yao 2025-07-29 拍板，design-record §2.1）。
5. 非蜂窝 slot（Ethernet / Hotspot / WiFi）不承载该字段。
6. 所有蜂窝 slot 都驻网时，slot 行仍须排进 2 行：不侵占视频区、不在帧底被裁。
7. 实现与文档一律写 **`5G (NR)`**，不是 `5 GHz mode`（5 GHz 是 WiFi 频段）。V4-1543 / TM3-1871 的单标题措辞在这一点上是错的，⛔ 不要带进代码。
8. **机型范围 = TM1000v3 / TM1100 / TM1000v4**（V3 与 V4 共用同一份设计稿，design-record §2）。

### 2.2 验收标准（功能级；界面级判据见 Figma 上的 Change Log 注释）

1. 驻网 5G 的 slot 报 `5G`；**同一 slot 切到 4G 时徽标消失**（逐路切换制式验证，两个方向都要验）。
2. 驻网 4G / 未插卡 / 未驻网 / 正在连接 / 已断开 / 制式未知的 slot **一律不画任何东西**（无占位符、无短横、无 `4G` 字样）。
3. 该值实时跟随 modem，不离开首页即可看到变化。
4. **10 路蜂窝全部驻网 5G**（容量最坏态）时，slot 行仍在其栏内、仍是 2 行、视频区尺寸不变。
5. 某 slot 显示的值与 `Settings > Slot` 页对同一 slot 的报告一致（后者额外暴露 SA / NSA，首页只显示制式）。
6. 三个机型（TM1000v3 / TM1100 / TM1000v4）表现一致。

### 2.3 已知代价（须让 QA 知道，不是缺陷）

- **「没有徽标」有两个含义**：①该路在跑 4G ②未插卡 / 未驻网 / 正在连接 / 已断开 / 制式未知。**首页无法区分二者**，要区分须进 `Settings > Slot` 页。这是 D22「只显 5G」换来的代价，owner 已拍板接受（design-record §13.2）。
- 徽标压 slot 编号 **5px**，两位数编号（`12` / `13`）最多 **8px**。20px 圆内没有第二个空位，零遮挡要求加宽单元 ⇒ 满载态需 3 行、超帧底。⇒ **遮挡是换取容量的代价**，owner 在看过 8× 渲染后选定此形态。
- `Slot Info.clipsContent` 须为 **false**，否则每行第一个 slot 的徽标左边被裁 3px（D21）。

---

## 3. 交 owner 在本地 Figma 处理的债

**(A) 字体债 `Roboto Bold → Verdana Bold`，共 20 个**（⚠️ 映射 `Verdana Bold`，**不是** `Bold Italic`）—— 逐节点清单见 design-record §12.5 (A)。

> **2026-09-09 逐 id 核验**（新缓存）：20 个**全部确认存在**、全部 Roboto。清单表格此前多列了 2 行已删节点（`10256:673` `10256:674`，D22 删的 4G 徽标），已在 §12.5 订正 —— 数字「20」一直是对的。
> ⚠️ **顺带核出**：清单之外还有 **16 个 cell instance 自带的徽标**（`…;5448:5121`），**全部 `visible=false`**，其中 2 个内容是 `4G`/11px 的旧规格残留。不渲染 ⇒ 不进必改清单、稿面语义未受影响；但**改字体时建议顺手清掉那 2 个 `4G` override**（⛔ 别 `resetOverrides()` 整个 cell，会把运营商码打回 `CT`）。详见 design-record **§14.5**。

**(B) 措辞订正 —— 只剩 1 处**：page 级 Jira requirement 组件的需求标题 `I5392:17702;1140:57`（96px `Helvetica Neue`，本环境不可写）。**它是 V4-1543 的单标题本体，改它等于改需求记录措辞，先与 PM 确认。**

**(C) 注释层字体**：Change Log 正文 `10309:235 > text` 已由 `Helvetica Neue` 覆盖为 `Roboto`（本环境不可写 Helvetica Neue）；`Change Log:` 标题未碰、仍是 `Helvetica Neue/Bold 20`。若要与 owner 那张完全同字体，需在本地把正文改回。

---

## 4. 自检（机器输出，原文照贴）

> ⚠️ 下面是**交付闭环轮**的自检。之后的「只显 5G」轮（D22–D24）另有一份自检 + **逐闸差集对照**（证明每条闸 NEW=0），见 design-record **§13.4**，report = `docs/audits/2026-09-08-v4-2402-5g-only-conformance.json`。

`pnpm audit:mockup-conformance --file 0054ib0nLmt27bC3QlGDl7 --node 10247:420 --report docs/audits/2026-09-08-v4-2402-delivery-closure-conformance.json`

```
ok: False
integrity              exit=0   findingNodes=0
colors                 exit=1   findingNodes=22
typography-icon        exit=0   findingNodes=0
library-origin         exit=1   findingNodes=23
binding-fidelity       exit=1   findingNodes=205
bilingual-spacing      exit=0   findingNodes=0
overlap                exit=1   findingNodes=2
connector              exit=0   findingNodes=0
library-binding        exit=2   findingNodes=0
geometry-consistency   exit=0   findingNodes=0
variant-axis           exit=0   findingNodes=0
default-white-bg       exit=1   findingNodes=283
hash-n-semantic        exit=0   findingNodes=0
jira-hyperlink         exit=0   findingNodes=0
```

`Conformance report: docs/audits/2026-09-08-v4-2402-delivery-closure-conformance.json`

**归属核验（阴性对照 = owner 自己手建的 `Plan C for UX Design` `10271:745`）** —— 逐闸对照表见 design-record §12.6。要点：

- `overlap` 2 条与对照组**同构**（`Mark area` 覆盖被标注区域是该范式固有特征）⇒ 非缺陷
- `colors` / `library-origin` / `binding-fidelity` 与对照组**同密度** ⇒ clone 源传导，§M49.1 file-wide deferred
- `default-white-bg` 不随扫描面增长 ⇒ 文件级基线
- `typography-icon` 本轮 **0**，对照组 45 ⇒ 比源更干净
- ⇒ **本轮新增可修 findings = 0**
- ⚠️ `library-binding` **exit=2 是 ERROR**，⛔ 不计为通过

**几何自检**：`sectionInternalOverlap` = 1（= Mark area 有意叠加，已定性）· `sectionToSectionOverlap` = 0 · 嵌套 2 层 · `childrenOverflow` 0/0 · wrapper 与 page 碰撞 0 · 满载帧 `badgesOutsideFrame` 0 · 两帧 `354.89×48 / rows=2 / barH=48 / pastFrameBottom=−12`。

**本轮修掉的两条真 findings**（都曾红过总闸）：

1. `bilingual-spacing` **8 节点 / 14 条 → 0**。两类真因：① PRD 段名 EN 行里混了中文（`1. Source 需求来源` ⇒ 汉字挂 Roboto/15px/不透明，触发 Han-字符检查）；② Journey 两个多行节点 EN/ZH `lineHeight` 比值不足（1.27 / 1.15 < 1.3）。⚠️ 修 ② 时首次失败 —— 用 `indexOf('\n')` 定 EN 边界，而该格 EN 自身含换行；改按**字体 run 边界**才对。
2. **3 处标题尾字符掉回 Figma 默认**（12px 纯黑）。根因 = `setRange*` 里**硬编码字符长度且数少了** ⇒ **不报错、静默失效**。⇒ 一律用 `chars.length` 或字体 run 取边界。

**渲染亲验**：8× ×5 轮 · Journey 网格 1.5× ×1 · 状态图 2× ×1 · wrapper 全景 ×1。⚠️ **裁切**与**三处默认样式**只有渲染 / 逐段 probe 能发现，几何 probe 全绿。

---

## 5. Open scope items

- ⛔ **D22「只显 5G」重新变为未决（2026-09-09）** —— PM Trevor 在 comment `271865` 里写的是「the **4G/5G indicators**」（复数并列）⇒ 他默认 4G 也显示，与 D22 冲突；他显式问的「对调序号与徽标」建议不采纳。回复已定稿并由 Nancy 手工发出，**待 PM 回话**。⇒ **§2.1 第 2 条、§2.2 验收 1/2、§2.3 已知代价在 PM 确认前都可能翻**，⛔ 别基于现语义开新一轮 Figma 改动。详见 design-record **§13.5**。

- ~~Jira 回复未发~~ ✅ **已发** comment `271762`（2026-09-08）：正文 `UX Design updated.` + `Figma` / `Before` 短锚 link mark + `Applies to TM1000v3 / TM1100 / TM1000v4 (same design page).`；@Trevor Yao review，cc Edward Wu / Asher Guo / winni（accountId 真 mention，四个全部落成 ADF mention 节点）。**后续 D22 语义收窄未重发** —— 评论正文不含规格、Figma 链接未变，owner 判定无需重发。
- **`5 GHz mode` → `5G (NR)`**：V4-1543 与 TM3-1871 的**单标题本体**仍是旧措辞，改它须 PM 点头。
- ~~**`library-binding` 闸未跑起来**（离线缓存过期），下轮补跑。~~ ✅ **2026-09-09 已补跑**，V4-2402 新增 0（design-record §14）。📌 顺带首次量化该文件的 library-binding 全量债：**1750 条 / 101078 节点**，其中 **M1=110 · M30=67 全部在 V4-2402 范围外**（顶栏 / 图标类，属别的页面）—— 文件级新事实，要清需 owner 拍板。
- ~~⚠️ **总闸本轮未跑成**（fetch failed）~~ ✅ **收尾时第三次重试成功**（2026-09-09）：16 条闸中 `library-binding` **exit=2→1**（本轮成果），并行 session 新上的 `source-link-integrity` **exit=0** 零命中，其余每条与 9/8 基线**完全相同 ⇒ NEW=0**。`figmaLastModified` 与 9/8 一致 ⇒ 文件无人改动。见 design-record **§14.6**。
- **产品帧自身 fill 是未绑变量的默认纯白**（§M23.18.2 存量债，在 `default-white-bg` 冻结基线内）—— 本轮未擅改，若要清需 owner 拍板。
- **F2-late 走查若需要 Journey Map**：本轮建过（5 stage × 5 lens 真网格）但按 D18 删除，且只覆盖 1 个 persona，需重建并补第 2 个。
