<!-- mockup-handoff -->
---
id: v4-2392-tx-ip-platform-integration
title: Tx-IP Platform Integration — Config-T UI adjustment (PRD only)
doc_type: handoff
status: requirement   # 需求已定稿、PRD 已交付；mockup 未做，Jira 未发（owner 走 Slack）
target_release: "8.4"
last_updated: 2026-08-18
sources:
  - { type: jira, ref: "V4-2392", url: "https://tvunetworks.atlassian.net/browse/V4-2392" }
  - { type: jira, ref: "V4-1676", url: "https://tvunetworks.atlassian.net/browse/V4-1676" }
  - { type: slack, ref: "TM1000V4 IP Product Requirement Confirmation（需求确认线）", url: "https://tvunetworks.slack.com/archives/C021E1BNTPF/p1786947224776899" }
  - { type: slack, ref: "TM1000v4 IP 界面调整讨论（开发内部线）", url: "https://tvunetworks.slack.com/archives/C021E1BNTPF/p1786947752014739" }
figma:
  files:
    - { key: "jnlIId30lS3xjRmZnZTWQy", label: "TX-IP v8.4 20260818（owner 新建，含现状截图 + 红框标注）" }
  nodes:
    - { id: "2:8", label: "Section — Changes on Config-T 20260818", url: "https://www.figma.com/design/jnlIId30lS3xjRmZnZTWQy/TX-IP-v8.4--20260818?node-id=2-8" }
    - { id: "6:2", label: "PRD 卡 — Tx-IP Platform Integration (Config-T)", url: "https://www.figma.com/design/jnlIId30lS3xjRmZnZTWQy/TX-IP-v8.4--20260818?node-id=6-2" }
---

# Handoff — V4-2392 Tx-IP Platform Integration（Config-T，PRD-only 轮）

## 1. 做了什么

**唯一交付物 = Figma PRD 卡 `6:2`**（680×2039，navy 版 M23 卡族），落在 owner 自建 Section `2:8` 内左侧（rel 181,220；到最近截图 gap 154px）。设计定案与逐图归属见 design-record [`docs/specs/2026-08-18-v4-2392-design-record.md`](../specs/2026-08-18-v4-2392-design-record.md)（含 D1–D8 决策、红框标注语义表、10 张截图逐图对照）。

PRD 6 段固定结构（design-process Pre-Phase 0 Step B），**43 个 TEXT 节点**：

| 段 | 条数 | 要点 |
|---|---|---|
| §1 Source | 3 | V4-2392 + parent V4-1676 + 两条 Slack 线；**8 处 `setRangeHyperlink`**（每个 ID / Slack 标题的 EN 与 ZH 各一处），cyan 染色作可点提示（M23.8.1） |
| §2 Background | 3 | TX-IP 硬件形态 + Matt 确认 + `platform_id=10086` / `platform=TX-IP` / `cap_card=NoCard`（Bonnie 明确问过判定依据，故写入） |
| §3 Current State | 8 | 逐项现状基线（多路切换器出现处、Encoder 取值域、RVF 四组、录制两个入口、`Input Type of source` 三选一、套餐对比区）+ 指向红框 Section |
| §4 Requirements | **12** | 见下表 |
| §5 Acceptance | 6 | 功能级判据（TX-IP 上 req 2–12 不可见 / 非 TX-IP 无变化 / 编码恒 8-bit+4:2:0 / IP Source 仅 IP+NDI / 8.4 交付）+ 一行指路句「UI-level checks live in the UX delivery card.」 |
| §6 Priority & Timeline | 3 | Medium · 8.4 · owner 路由 |

### §4 功能需求 12 条（编号连续，程序化验过 `sequential: true`）

| # | 需求 | 红框依据 |
|---|---|---|
| 1 | 按 `platform_id=10086` / `platform=TX-IP`（`cap_card=NoCard`）识别 TX-IP 并隐藏下列条目 | `1:3` PID 区 |
| 2 | 仅单路 — 移除**全部出现处**的 1/2/3/4 通道切换器 + PID 列表按单路呈现 | `1:3` `1:9` `1:12` `2:10` `2:13` |
| 3 | HDR/HLG 与 Chroma Subsampling **限定 8-bit + 4:2:0 并设默认、移除其余选项；保留该两行不整行删除** | `1:9` 红字 |
| 4 | 移除 Audio channel `16-ch` | `1:9`（带划线） |
| 5 | 移除录制界面：Dashboard Config 段 Auto-Recording + Recording Bitrate，**以及 File > Recorder 整页含 tab** | `1:3` + `2:3` 红字 "Remove this page" |
| 6 | 移除 Advanced → `Progressive Download` | `2:6` |
| 7 | 移除 Advanced → `4K/FHD` | `2:6` |
| 8 | 移除 SDI / HDMI 设置（Dashboard Video 段 Max Format for HDMI / Input Port） | `1:3` |
| 9 | Return Video 页**只移除 Inner HDMI + V-box (HDMI2) 两组**；**保留 Pack LCD / Phone-Tablet 两组与 `Return Video` tab 本身** | `1:6`（框只覆盖前两组） |
| 10 | 移除 Live 页 `Source Switcher` tab | `1:6`（框+划线） |
| 11 | IP Source 页 `Input Type of source` 移除 `HDMI/SDI/USB` 选项；**保留 `IP Source` 与 `NDI`** | `3:16` |
| 12 | 移除 General → `Software Upgrade` tab 含套餐对比区 | `1:21` |

## 2. Rule checklist（机器输出，非目测）

**M-DISCIPLINE.SYNC 编辑后机检 — 最终态：**

```
── conformance 总闸（pnpm audit:mockup-conformance --file jnlIId30lS3xjRmZnZTWQy）──
  ✅ PASS  integrity          ✅ PASS  colors            ✅ PASS  typography-icon
  ✅ PASS  library-origin     ✅ PASS  bilingual-spacing  ✅ PASS  overlap
  ✅ PASS  library-binding  (0 findings — all INSTANCEs are remote library references)
  ❌ FINDINGS binding-fidelity   ❌ FINDINGS connector
  → 增量档（--non-blocking）exit 0

── bilingual-spacing 明细 ──
  bilingual-stacked-line-grouping   0 violations (ratio floor 1.3)
  bilingual-zh-style-tier           43 annotation TEXT scanned, 0 violations
  Note: 42 single-pair stacked node(s) 走 per-bullet + itemSpacing 机制，行距不机器扫 → 本 handoff §3 人工自查记录

── in-file 程序化自检 ──
  reqNumbering            [1..12] sequential true
  sectionSizes            §1:3 §2:3 §3:8 §4:12 §5:6 §6:3
  fontViolations          []        （白名单 Roboto / Noto Sans SC）
  glyphHits               []        （Unicode 装饰字符零命中）
  curlyQuoteInZH          []        （U+2019 在 Noto 全角渲染问题已清）
  hyperlink               8/8 非 null
  三档间距                headingToBody 4 < interPair 8 < interSection 16（monotonic）
  off-scale spacing       []        （全部吸附 DS scale {4,8,12,16,24,32,40,56}）
  childrenOverflow        []
  collisionsInsideSection []        （卡 vs Section 内 10 张截图逐个 bbox 比对）
  nearestGapToScreenshot  154px     （M23.12 要求 ≤200）
  childrenOutsideBounds   []
```

**渲染图亲验**（4 次，抓到 2 个机检不报的真缺陷，见 §3）：全卡 ×3 + §3/§4 段各 ×1 + Return Video 原图 `1:6` 放大核框。

## 3. 本轮的规则落地与两处返工

**M48 起手清单命中项**（全部已覆盖）：Step B PRD 6 段 · Step B Discovery-before-create 三问 · M23.8.1 · M23.12 · M23.14 (A)(B) · M23.18 · M23.18.1 · M33 · M47/M47.2 · M-COLOR C4/C7 · M-INTEGRITY I2/I6 · M-DISCIPLINE.SCOPE/SYNC · M-TXT-ICON-AUDIT。未触发并写 rationale：M45（未新建 page）· M0 / Canonical Terms（本轮无 mockup 元素）· M49（PRD 不含 UI 设计）· Q15（卡初建在 Section 外；被 owner 拖入后未再由脚本改坐标）。

**两处施工返工（都是我的错，机检不报、靠渲染图与 owner 指正才发现）：**

1. **双语行距机制选错** — 初版按 M23.14 (A) 的「EN 行 lineHeight = S×1.8 自带对间间隔」实现；渲染图显示 EN 长句 **wrap 后句内行距 23px == 对间行距 23px**，Gestalt 分组当场失效（正是该规则要治的病）。改用同规则给的等效替代 **per-bullet（一对 = 一个 TEXT + Auto Layout `itemSpacing`）**，EN 句内回正常 18，重建全部 6 段正文。⇒ **教训：M23.14 (A) 的 lineHeight 机制只在「EN 单行不 wrap」时成立；正文型长句一律走 per-bullet。**
2. **spacing 全部 off-scale** — 初版 6 / 10 / 20 / 28 四个值没有一个在 DS spacing scale 上，B-SCALE 报违例。改 4 / 8 / 16 / 32（三档递增仍成立）后 B-SCALE 归零。⇒ **教训：M23.14 (A) 给的是比例建议（S×0.6 / S×1.2–1.5），落值必须再吸附 `audit-mockup-binding-fidelity.mjs` 的 `spacing: {4,8,12,16,24,32,40,56}`。**

**一处 ZH 字形问题**：`Pack’s LCD` 的 U+2019 在 Noto Sans SC 按**全角**渲染成 `Pack ' s`，程序化闸不报。ZH 行改 `Pack LCD`、EN 行撇号换 ASCII。同 M-TXT-ICON-AUDIT「缺 glyph 只有渲染图能发现」一类，建议并入该规则的注释层清单。

## 4. Open scope items（dev / PM 待办追踪，不属 PRD 契约）

1. **B-COVERAGE 61 条要拆成两半看**（2026-08-18 owner 质疑后重核，原记「文件未订阅库 ⇒ 颜色间距都可补绑」是**错的因果**）：
   - **fill / stroke-unbound 44 条 —— 结构上无法绑，不是待办。** PRD 卡的 navy `#2B2D42` / cyan `#33A4FD` 是 M23 卡族规则自带的**注释色系**，实测 DS 库 98 个变量里**没有**任何注释色 token（`annotationColorCandidates: []`；颜色变量全是产品层语义 `UX/*` + `Color Type/*`），且 M-COLOR §C4 明确规定注释 accent 与品牌色不得混用 ⇒ 即便订阅了库也绑不上。归 §M49.1 owner-deferred，与下面第 2 条同性质。
   - **spacing-unbound 17 条 —— 订阅库后可绑。** 本卡用的 4 / 8 / 16 / 32 在 DS 里都有对应（`Basic Size/#4 #8 #16 #32`，或语义层 `Spacing/*`；V4-2376 轮三十已有绑 `Spacing/M` 的先例）。
   - **订阅状态的真判据是 `figma.teamLibrary.getAvailableLibraryVariableCollectionsAsync()`，不是 `getLocalVariableCollectionsAsync()`。** 实测：TX-IP 文件返回 `[]`（未订阅）· Config-T `rJJjWWs51n2iFOlCIC7aYG` 返回 `TVU Design System / TVU UX Design System` + Nancy's Design Assets ×2（已订阅）；而**两个文件的 local 集合都是空的** —— 产品文件是订阅方、从不本地拥有库，所以 local 集合为空与订阅状态无关。
   - **订阅库的真正必要性在下一轮**：画 AFTER 效果图时按 M32 library-first 要 import DS 组件 instance，未订阅则用不了库组件。纯 PRD 轮不依赖它。
2. **B-TYPO 40 条** = 注释卡字号 18/15/13/12/11 由 M23.14 (B) 规定、不在 M-FONT textStyle grid 上，DS 无对应注释层 textStyle ⇒ §M49.1 owner-deferred 既有类别（同 V4-2333 轮三十二）。
3. **connector 闸 N/A** — 本文件 0 连线（PRD 卡不需要），闸对纯文档文件必报「连线不可验证」。
4. **IP Source 页的 1/2/3/4 未单独圈红** — `3:16` 上通道切换器没有红框，但 req 2 口径是「wherever it appears」⇒ 该页同样要移。**dev 若严格按图逐项对照会漏这一处。**
5. **Receiver 端兼容仍 open** — Dave 2026-08-18 14:57 提的「LR 8.3 之前上报为 TM1000v4」尚无回复；Ari 建议先做测试。属 Receiver 侧，不在本单 scope。
6. **LCD 端未开工** — 另拆单（V4 LCD → Edward Wu）。

## 5. 下一步

- **PM / 需求方评审**：Trevor Yao（PM）· Matt McEwen（需求方）；Assignee Bonnie Zhou。
- **Jira 本轮未发** — owner 明确「Slack 不用补 PRD 链接，点击进去自然可以看到」；若后续要在 V4-2392 留痕，按 memory `jira-reply-format`（ADF + accountId 真 mention + 短锚文本链接）走，发前先给 owner 过草稿（memory `slack-jira-write-confirm`）。
- **要画 AFTER mockup 的那一轮**：须补齐 §6-JIRA 四件套里本轮未产出的三件 —— UX Delivery 卡（M23.0 canonical 6 段）+ User Journey Map 卡（5-stage）+ Jira requirement 组件 instance（届时若文件内已有可 clone 的 instance），并按 M23.12 把它们与 AFTER 一起收进具名 feature Section。
