---
id: v4-2312-channel-status-indicator
title: "V4-2312 Channel 4K/Live Conflict：定稿告警文案打通（banner + UX 卡 + PRD）"
doc_type: handoff
status: QA
last_updated: 2026-06-23
sources:
  - { type: jira, ref: "V4-2312", url: "https://tvunetworks.atlassian.net/browse/V4-2312" }
figma:
  file: 0054ib0nLmt27bC3QlGDl7
  nodes:
    - { id: "8603:281", label: "Channel 4K-Live Conflict Indicator section", url: "https://www.figma.com/design/0054ib0nLmt27bC3QlGDl7/Touch-Screen-v7.7---8.0--20240220?node-id=8603-281" }
    - { id: "9070:20526", label: "PRD frame (finalized banner copy)", url: "https://www.figma.com/design/0054ib0nLmt27bC3QlGDl7/Touch-Screen-v7.7---8.0--20240220?node-id=9070-20526" }
---

<!-- mockup-handoff -->
# Handoff — V4-2312 Channel 4K/Live Conflict：定稿告警文案打通（banner + UX 卡 + PRD）

> **Jira**: V4-2312 — RPSOne · Add status indicator/message for channel lock/live state · https://tvunetworks.atlassian.net/browse/V4-2312
> **Figma**: `0054ib0nLmt27bC3QlGDl7`（LCD Touch Screen v7.7/8.0）· page `8475:2` · section `8603:281`（`< V4-2312 > Channel 4K-Live Conflict Indicator`）
> **日期**: 2026-06-23 · consumer 无 git repo，落 `TVU Pack/docs/`
> **触发**: PM 给定稿告警文案 → 更新页面所有相关内容（mockup banner + UX 交付说明 + PRD）

---

## 1. 背景 / 上下文

页面此前 banner 仅泛化规则句（`Only one 4K stream OR multiple HD streams allowed on this pack at any given moment.`）；UX 卡 Data dependency / Acceptance 已写明"应命名 live channel + receiver"，但 mockup 未落地。PM 给出**定稿两句式**，新增动态失败首句 `Failed as {CH#} is live with {R_name}.`。本次把定稿打通到 mockup banner + UX 卡 + 新建 PRD。

- **US 分类**：US-3 增量（既有页面）+ Jira 关联。
- **用户决策（Gate A 已确认）**：① banner 用**具体示例值**（非占位符）；② **新建 PRD frame**。

## 2. Canonical copy（dev 取词唯一真源）

```
Failed as {CH#} is live with {R_name}. Note that only one 4K stream OR multiple HD streams allowed on this pack at any given moment.
```

- `{CH#}` = 当前在播（占用 pack）的通道；`{R_name}` = 其接收端名；接收端不可得时降级为 `a receiver`。
- mockup 具体值：**S1 → CH2 / PM_X7L**（4K 被挡，CH2 HD 在播）；**S2 → CH1 / PM_X7L**（CH1 正以 4K 直播）。

## 3. 改动清单（use_figma，全经 get_metadata / 截图验证）

| # | 节点 | 改动 | 验证 |
|---|---|---|---|
| 1 | banner `8535:34`（S1）/ `8723:900`（S2） | 文案 → 定稿两句式（CH2/CH1 + PM_X7L）。banner 为 HORIZONTAL auto-layout、counterAxis=AUTO，自动撑高 54→75px（3 行），textStyleId 保留 | 截图确认换行/橙底/图标齐全；I2/I6 probe 确认撑高不压相邻行（S1 底 1420<journey；S2 底 1921<2264） |
| 2 | UX Delivery 卡 `8568:215` — What changes `8568:220` / Data dependency `8569:7` / Acceptance `8569:9` / Interaction `8569:5` | 重写为定稿：What changes 列两句式 + 模板 + 样例；Data dependency 映射 {CH#}/{R_name} + 降级；Acceptance 校验精确串；Interaction 去掉 stale `(TBD)` 指向已建 S1-collapsed 帧 | 截图确认；M23.10 白话/M23.11 只本期 |
| 3 | UX Delivery 卡全 13 文本节点 | EN `Inter`→`Roboto`、CJK→`Noto Sans SC`（按 CJK/拉丁分 run，保字重）；双语正文补 M23.14 块制行距 EN 22/ZH 14 | plugin-API live: families=[Roboto, Noto Sans SC]，零 Inter |
| 4 | Journey `8573:215` — 第 4 步 `8573:220` + 全卡 | 第 4 步措辞对齐定稿（引用精确串）；全卡 Inter→Roboto/Noto；步骤补 M23.14 行距 | live 零 Inter |
| 5 | Journey 卡 `8573:215` 重定位 | UX 卡内容增长后底部 750→1835，journey 下移 y1524→**1859**（gap 24，无叠压） | get_metadata: journeyBottom 2379 < section 2710 |
| 6 | **新建 PRD frame `9070:20526`**（x1840, y620, 560 宽，右区空列 I6 已 probe） | navy `#2B2D42` + 4px cyan 左 stroke + cornerRadius 6 + 竖向 Auto-Layout hug；Step B 6 段双语（需求来源/背景/现状/功能需求/验收/优先级排期），需求侧内容（无组件映射/视觉规格）；EN Roboto/ZH Noto Sans SC + M23.14 行距 | 截图确认；typography audit ✅ |
| 7 | PRD 需求来源 `V4-2312`（两处） | `setRangeHyperlink` → 真实 Jira URL + cyan 标色（M23.8） | `getRangeHyperlink` 返回 URL 非 null |

## 4. Rule checklist（机器输出，禁目测）

```
# pnpm audit:mockup-conformance --file 0054ib0nLmt27bC3QlGDl7 --node 8603:281 --non-blocking  → exit 0
  ✅ PASS  integrity   — I1=pass / I2=overlap-gap ok / I3=overflow-count 0 / I4=orphan-count 0
  ✅ PASS  overlap     — sibling-block-overlap: 0 overlaps
  ✅ PASS  connector   — 颜色/正交/锚定 可验证项全合规（flow 箭头仍锚 banner）
  ✅ PASS  bilingual-spacing — 修 8569:3 后 re-run --node 8568:215：0 violations（ratio floor 1.3）
  ❌ FINDINGS colors           — 见 §5
  ❌ FINDINGS typography-icon  — PRD ✅；card/journey REST-stale（见 §5 / §6）
  ❌ FINDINGS library-origin   — 见 §5（全 pre-existing）
  ❌ FINDINGS binding-fidelity — 见 §5（pre-existing 约定 / owner deferred）
  ⚠️  library-binding 未跑（需 pnpm sync:mockup 预取缓存）

# typography-icon live 佐证（plugin API getStyledTextSegments —— 权威源，非目测）
  UX card 8568:215   families=[Roboto, Noto Sans SC]  ZERO Inter
  journey 8573:215   families=[Roboto, Noto Sans SC]  ZERO Inter
  PRD     9070:20526 families=[Roboto, Noto Sans SC]  ZERO Inter  + audit FONT 0 / GLYPH 0 violations ✅
```

## 5. findings 归属（subagent 解析 conformance.txt + plugin-API 复核）

| audit | 我的节点 findings | 判定 |
|---|---|---|
| **typography-icon** | card/journey 报 `fonts=Inter`（12+5 条） | **REST 缓存滞后伪报**：plugin-API live 读取三卡全 Roboto/Noto 零 Inter；PRD（新节点无旧缓存）audit ✅。REST 对"既有但被 refont 的节点"返回旧字体，4 次重跑不变（TTL 较长）。live 文档无 Inter，非真违例。 |
| **colors (C1)** | 8 条 = banner 内部 warning ⚠ / close ✕ 图标 vector 裸 hex | **库组件内部**（Notification banner instance 自带 vector），非本次手写；按 M32.1 仅 override 文本、保留组件 fill。 |
| **binding-fidelity (B-TYPO)** | card/journey/PRD 文本裸 fontSize 未套 Text Style | **预存全局约定**：既有 sibling 卡（含本页 delivery/journey）均未绑 Text Style；PRD 刻意 match M23.13 集合一致。与 2026-06-22 V4-2285/2286 handoff 同结论——属 §M49.1 binding 完整度 scope，**owner deferred**。 |
| **binding-fidelity (B-SCALE)** | card/PRD 容器 padding 20/18 · itemSpacing 14 · radius 6；banner padding 6 / 内部 radius 1.2 | 同上：复用既有卡数值（M23.13 一致），off-scale 未绑属预存约定 + 库组件内部，**owner deferred**。 |
| **library-origin** | 0（67 条全是设备 UI 截图帧图标） | 与本次零关，pre-existing legacy。 |

## 6. Open / Next

- **Gate B**：待 owner 确认 PRD frame 落位（右区 x1840）+ banner 定稿文案。若希望 PRD 改为顶部跨栏（需下移整组内容）可调。
- **§交付收尾**（如需）：@PM `UX design (mockup) updated — please review` + Figma Section smart link + FYI 待开发负责人（ADF + accountId 真 mention）。
- **typography 机器记录转绿**：等 Figma REST 缓存刷新（数分钟）后重跑 `audit-mockup-typography-icon --node 8568:215 / 8573:215` 即应 0 violations；live 已验证。
- **B-TYPO / B-SCALE binding**：file-wide §M49.1 完整度任务，owner 拍是否另开。
