# RPS — Product Introduction

> **项目介绍 / 起手必读**。RPS 的产品设计 / mockup / code 任务，起手先读本文件（见 `consumer-product-conventions` skill Rule 8）。
> **归属**：当前项目资料，留消费产品侧——**不进 `tvu-design-system` 真源**（那里只放跨项目复用的设计系统规范）。
> Jira @mention 必须用 **ADF + accountId**（markdown / 纯文本 `@Name` **不触发通知**）。
>
> ⚠️ **本文件 2026-09-01 首建，是「补建」不是「沉淀完成」**。此前 RPS 一直缺这份，导致每轮交付都要现查 accountId、现问页面归位规则。**下面凡标 `⏳ 待 owner 确认` 的段落都是真空白，不是省略** —— ⛔ 别把空白当成「已确认无此项」，也别拿别的 consumer（TVU Pack）的对应段落顶替，两个产品的 roster 与分组结构**实测不同**。

---

## 1. 项目简介 Overview

**RPS**（Remote Production Solution）是 TVU **接收端 / 远程制作设备**产品线的设计项目，本仓库承载其 **UX 设计交付物与过程文档**（不含产品代码）。

- **主要 surface**：**RPS Link (New)** 的**设备本地 Web GUI**（装机现场 / 机房 / 转播车里直接连设备打开的那套界面），以及历史的 RPS 本地 GUI 各页。
- **Jira 项目**：**`ENG-RPSV3`（project key `RPSV3`）**。⚠️ 历史需求还散在 `RPS-*` / `RPS64-*` / `FB-*` 几个旧 key 下（Figma 页名里能看到），**新需求一律走 `RPSV3`**。
- **默认主题**：产品 UI **Dark**（基线帧 fill `#1f1f1f`，luma 0.122）。
- **⏳ 待 owner 确认**：RPS 产品线除 RPS Link (New) 外还含哪些形态（Decoder / CC Control / VoIP 模块等在 Figma 里都有页，但**是不是本仓 scope 未定**）；以及 Receiver / SaaS 侧的边界在哪。

---

## 2. 团队 Roster + 选人规律 Team & Assignment

> ⚠️ **本表 2026-09-01 由 RPSV3-134 一次交付的实际参与者反推，不是 owner 给的权威名单。** accountId 全部经 `lookupJiraAccountId` 现查同站核对，可直接用；**角色标签**则只反映「这三人在 RPSV3-134 里扮演了什么」，⛔ 别外推成他们在整个 RPS 产品线的固定职责。

| 角色 / 依据 Role | 姓名 Name | Jira accountId | Slack ID |
|---|---|---|---|
| **需求发起（PM 侧）** —— RPSV3-134 由他在 Slack 提出 | **Kalpesh Dave** | `5e99ec4b3a8b910c0868471b` | `USJDRJDJS` |
| **UI ENG / 确认可做** —— 他回「We can」并点名 UX | **Trevor Yao** | `5e59a401a17f930c9b9627c2` | `U6DK2FACD` |
| **Jira assignee（产品侧）** —— RPSV3 项目**默认分派**到他 | **Lotus Chen** | `5e58a8d02a59dc0c8fe66118` | `USST27WP8` |
| **领域事实源（传输行为）** —— RPSV3-134 中确认「重启后直播传输自动恢复」 | **Dave Hu** | `5e61b34ecf54800ce3a05065` | `USC5M69QS` |
| **RPS 相关开发** —— owner 2026-09-02 确认；RPSV3-134 交付评论 `268958` 实际被 cc 的第三人 | **Bonnie Zhou** | `622808804160640069c9fe1a` | ⏳ 未取 |
| UX Designer | Nancy Zeng | `5e7aefff2466490c496f7aa7` | `USM8Q8BPH` |

**已知的选人规律**（只有一条，其余是空白）：

- **交付收尾 @mention**（照全局 JIRA 回复格式）：`@` 需求发起的 PM 请其 review，`cc` 相关模块开发 + 此前在该单回复过的人。RPSV3-134 实际取 `@Kalpesh Dave` + cc **`Trevor Yao` / `Bonnie Zhou`**。
  - ⚠️ **本行 2026-09-02 订正**：原写「cc `Trevor Yao` / `Lotus Chen`」是错的。`getJiraIssue` 实测评论 `268958` 的 ADF，三个 mention 的 accountId 是 Kalpesh / Trevor / **Bonnie Zhou**，**Lotus Chen 根本没被 @**（他只是 RPSV3 的默认 assignee，见下条 —— 两件事被混成了一件）。⇒ 本表原是「由实际参与者反推」，**反推错过一个人**；⛔ 别把反推来的 roster 当权威名单。
  - ✅ **Bonnie Zhou = RPS 相关开发者**（owner 2026-09-02 确认）。⇒ 那条评论的 cc 其实**完全合规**（「cc 相关模块开发」），错的只是本文件把她记成了 Lotus Chen。
- ⚠️ **`RPSV3` 项目有默认 assignee = Lotus Chen** —— 实证 2026-09-01 建 RPSV3-139 时**未传 assignee**，落地后仍显示 Lotus Chen。⇒ 建单时若想留空由 PM 分派，**必须显式处理**，别以为不传就是未分派。
- **⏳ 待 owner 确认**：按模块 / 按界面拆单该找谁（RPS 的 dev lead 是谁？本地 GUI / Decoder / 网络模块各归口谁？）。**当前空白 ⇒ 每次交付仍要现问。**

---

## 3. 产品设计规则 Product-Design Conventions

### 3.1 Figma 页面组织 — 新需求页归位

主文件是「**扁平页列表 + 破折号分隔页当分组标题**」的结构（与 TVU Pack 同族做法，但**分组集合不同**，⛔ 别照搬那边的 V3/V4 两层结构）。

**规则**：新需求的 mockup 页建好后，**插到 `To be confirmed` 分隔页的正下方**。
**页面命名**：`< {JIRA-KEY} > {Title} YYYYMMDD`，例：`< RPSV3-134 > Power Control on RPS Link 20260831`。历史页有 `<RPS-55> …` 这类不带空格的老写法，**新页按上面带空格的格式**。

#### ✅ 全量页表（2026-09-02 `figma.root.children` 实测，29 页，按文件内真实顺序）

分隔页共 **3 档**，与 TVU Pack 同名 —— ⚠️ 原文写「⛔ 别按 TVU Pack 的三档想当然填」，实测**恰好就是那三档**；但这是**实测结果**，不是照搬，两者区别要保住。

| # | page id | 页名 | 归档 |
|---|---|---|---|
| 1 | `3877:255` | `-------------- To be confirmed  ----------------` | ← 分隔页 |
| 2 | `6553:108` | `< RPSV3-134 > Power Control on RPS Link 20260831` | To be confirmed |
| 3 | `5487:2` | `<FB-6661> New CC Control Page for RPS 20250226` | To be confirmed |
| 4 | `3877:2249` | `-------------- To be developed --------------` | ← 分隔页 |
| 5 | `5466:4490` | `<RPS-55> Support Change Password 20250214` | To be developed |
| 6 | `3877:2250` | `--------------  Release to QA  -------------- ` | ← 分隔页 |
| 7 | `6259:4097` | `New RPS Link (New) 20260312` ← RPSV3-134 基线帧所在页（Section `6260:4099`） | Release to QA |
| 8 | `6345:1794` | `< FB-10040 > Disable Return Video on Boot 20260615` | Release to QA |
| 9 | `5813:34235` | `New local GUI for RPS (New) 1.0 20251014` | Release to QA |
| 10 | `4721:2` | `Optimization of Setting page for RPS Link 20241014` | Release to QA |
| 11 | `4295:3685` | `< RPS-53 > Preview for  Return Video signals on RPS Decoder side / Audio Meter. 20240826` | Release to QA |
| 12 | `3877:2287` | `<FB-4856>Add the Priority assignment control currently in RackRouter to RPS Link  20240627` | Release to QA |
| 13 | `3877:2251` | `<FB-5151> Add Disable/Enable All Cell Function to RPS Link 20240627` | Release to QA |
| 14 | `3871:2008` | `< RPS64-343 > reference clock change handle 20240521` | Release to QA |
| 15 | `3641:716` | `added CPU usage, Memory status at web ui 20240326` | Release to QA |
| 16 | `3203:2947` | `Conflict tips 20230921` | Release to QA |
| 17 | `3102:231` | `optimization of VoIP module 20230724` | Release to QA |
| 18 | `2697:17167` | `optimization Monitor module of Settings page` | Release to QA |
| 19 | `2675:16807` | `Change the location between Version and PID 20230324` | Release to QA |
| 20 | `2398:16489` | `Support VLAN Switch in RPS Link (v6.5) 20230228` | Release to QA |
| 21 | `2256:16274` | `Optimization of Settings page for rps6.4 20230206` | Release to QA |
| 22 | `2101:16205` | `DHCP 20221220` | Release to QA |
| 23 | `1141:14503` | `Modems module optimization 20220509` | Release to QA |
| 24 | `1271:15349` | `Optimization of the Upgrade page 20220602` | Release to QA |
| 25 | `1109:12905` | `Update WiFi module 20220506` | Release to QA |
| 26 | `619:12546` | `Update Network Settings 20220419` | Release to QA |
| 27 | `203:1111` | `Home 20220322` | Release to QA |
| 28 | `0:1` | `Settings 20220302` | Release to QA |
| 29 | `234:3132` | `组件` | Release to QA（实为组件页，非需求页） |

⚠️ 「归档」列是**按分隔页位置推的**，不是页上有标记 —— 23-29 那些 2022 年的老页排在 `Release to QA` 之后，未必真经过该流程。⛔ 别当权威状态用。

### 3.1b 交付层 Section 的 paint 惯例（2026-09-02 实测 9 个 Section）

| fill | 出现 | stroke |
|---|---|---|
| **`#444444`** ← 惯用值 | 5/9（`6554:1028` · `6573:715` · `6260:4099` · `5819:2723` · `5886:5052` · `5839:2909`）| 白 10% |
| `#303030` | 2（`6260:5929` · `6461:908`）| 白 10% |
| `#484848` | 1（`5929:6289`）| 白 10% |
| `#2f2f2f` | 1（`6348:2`）| **黑** 10% |

**改动前 9/9 全不绑 token。** ⇒ Section 自身 paint 未绑是**文件级结构状态**，不是某个 Section 的个别债。

- ✅ **`6554:1028` 已于 2026-09-02 绑定**（owner 拍板）：fill → `UX/Grey/grey-9 #434343`（差 1/255，不可辨）、stroke → `UX/Grey/grey-1 #FFFFFF` + paint 级 opacity 0.1（视觉零差异）。详见 [design-record §18.5](./specs/2026-08-31-rpsv3-134-design-record.md)。
- ⛔ **另外 8 个仍未绑，本轮刻意没动** —— 它们在 5 个历史交付页上，超出 RPSV3-134 范围。
- ⚠️ 新建交付 Section 时：**直接绑 `UX/Grey/grey-9 #434343` + `grey-1 #FFFFFF` @10%**，⛔ 别再留 `#444444` 裸值（差 1/255，与既有页视觉等同）。

### 3.2 新建 page 画布底色取深灰

产品 UI 默认 Dark ⇒ 新建 page **画布背景取 `0.418`**（≈ `#6A6A6A`），不要留 Figma 默认浅灰 —— 深色 mockup 放浅底刺眼、且与其它页不一致。做法：读一个现有页的 `page.backgrounds` 套到新页。

> 判据来源：`tvu-design-mockup` §M23.18 主题探测（基线帧 fill luma < 0.25 ⇒ dark），RPSV3-134 实测命中。

### 3.3 产品 UI 文案单语 EN

设备本地 GUI 的**产品文案只写英文**（M33）。双语只用于**注释 / 交付说明层**（M23 卡族）。措辞优先沿用上一代 Config T 本地 UI 的现成词，⛔ 别自造同义词（实证：用 `Power Off` 而非自造的 `Shutdown`）。

**⛔ 不要用 `reconnect` 描述重启后的恢复**（RPSV3-134 实证，Trevor Yao 评审时提出）。这个词在 RPS 语境下有歧义 —— 读者分不清是「**直播传输**自动恢复」还是「**机器**重新连上控制页」。**领域事实**（Dave Hu 确认）：RPS 重启后**直播传输会自动恢复**，与 TVU packs 的行为一致。团队认可的措辞：

| 场景 | 用 | ⛔ 别用 |
|---|---|---|
| 重启会中断传输 | `all live transmissions will be temporarily disrupted` | `active transmissions will be interrupted` |
| 重启后恢复 | `Transmissions will be automatically restored after reboot` | `The device will reconnect automatically` |
| 关机（不会恢复） | `all live transmissions will be disrupted` + 明写需现场开机 | ⛔ 别套用 `temporarily` / `restored` |

术语取 **`live transmission`**（非 `active transmission`）、**`disrupted`**（非 `interrupted`）。

### 3.4 电源类图标 — 取 DS 库（2026-09-02 起，跨库依赖已清零）

设备本地 UI 需要 Reboot / Power Off 图标时，**从 `TVU UX Design System` 库取**：

| 用途 | 组件 | key | 入库时间 |
|---|---|---|---|
| Reboot | `icon/Setting/Reboot` | `6493b7d0c6cd0df37ab9f4036e9ad01c1b83a9bc` | **2026-09-02**（owner 手动加） |
| Power Off | `icon/Setting/Switch` | `9a6fdd6764d62d08a7a542e0bc3a229de8742503` | **2025-07-28**（一直就在） |

**dev 侧对应写法**（交接时给开发的）：电源开关用 `<Icon name="setting/power-off" />`（等价 `setting/toggle`，两者解析到同一份）；重启用 `<Icon name="setting/reboot" />`，其图形已于 2026-09-02 对齐上表的 Figma 组件（DS `098a2d2f`）。⛔ **别让 dev 再去订阅 `Config T ( Local UI )`**。

🔴 **本节 2026-09-02 整节重写，原文两条结论都已作废，⛔ 别再引用**：

1. ~~「TVU UX Design System **没有电源开关符号**（644 icon 全量枚举实证）」~~ —— **假**。`icon/Setting/Switch` 是标准 ⏻（IEC 60417-5009），**2025-07-28 就在库里**，比 RPSV3-134 首交付早一年多。⇒ 当初那次「全量枚举 + 5 个关键词候选渲染排除」**漏了它**，而跨库 import Config T 的整个决定就建立在这条假结论上。**教训不是「关键词搜索会漏」（那条早知道），是「枚举了 644 个也照样漏」** —— 枚举给出的是名字列表，判语义仍要渲染核形状，而 `Switch` 这个名字不会让人联想到电源。
2. ~~「promote 进 DS 库的提案挂在 DS design-review-queue #13」~~ —— 该条 **2026-09-02 已 ship 并删档**（DS `805b116b`），且落点是 **code 侧 icon registry**（`setting/power-off` + `setting/reboot`），不是 Figma 库。⛔ 别再去 queue 找它。

**跨库依赖现状：已清零。** RPSV3-134 Section `6554:1028` 全量 285 个 INSTANCE 扫描，Config T 两个 key 残留 **0**；按钮级 `library-origin` findings=0（分母 2）。

⚠️ **形状实证（SVG path 亲验，⛔ 别靠截图或名字判）**：

| 组件 | 形状 |
|---|---|
| `icon/Setting/Reboot`（DS） | 竖线 + 断口圆环 **+ 右上一个 r≈0.6 小圆点** = ⏻ 系 |
| `icon/Setting/Switch`（DS） | 竖线 + 断口圆环 = 标准 ⏻ |
| `Icon/Reboot`（Config T，已弃用） | 圆环 + 缺口 + **三角箭头** = 循环箭头 |

⇒ **DS 这两个图标只差一个小圆点，16px 下同一行并排几乎无法区分。** owner 2026-09-02 在知情（AI 已摆出 SVG 证据 + 指出与 §14.2「同一信号须单义」同型）后**仍拍板照 ① 帧统一用这两个**，⇒ 这是**已知代价的设计决定**，⛔ 别当成疏漏去「修」。备选 `icon/load/refresh`（DS 库内，循环箭头，已导 SVG 核形状）当时被否。

⚠️ **两个 DS 图标自带的机检债**（**库自带值**，改动即 override，按 §3.6 既有惯例不改）：

| 闸 | 每个图标报 | 内容 |
|---|---|---|
| `colors` C1 | 1 条 | 内部 `Ellipse 502` `fill=#000000` 且未绑变量 |
| `binding-fidelity` B-SCALE | 1 条 | 内部 `Rectangle 1367` `radius=1.2` off-scale |

⚠️ **C1 那条的补充实测（本行 2026-09-02 补）**：`icon/Setting/Reboot` 里的 `Ellipse 502` 其实是 **`visible=false`**（`Setting/Switch` 里的是 `visible=true`）。⇒ 闸报的是一个**不渲染**的节点 —— 与 §3.6「判定一个范式是否生效必须逐级走父链验 visible」是同一件事的反面：**闸不看 visible，所以它的 finding 数不能直接读成「画面上有问题」**。这条不改变结论（仍是库自带值、仍不改），但下次拿 C1 计数说事之前先验 visible。

**判据**：owner 手动定稿的 ① 帧按钮（`6585:12` / `6585:18`）与 AI 改的 ⑥ 帧按钮（`6656:779` / `6656:780`）四条规则读数**逐项一致**（library-origin 0 / colors 1·2 / binding-fidelity 10 / typography-icon 0）⇒ 这些数是库自带，不是谁引入的。

### 3.5 ⛔ 机检口径 — `library-binding` 在本文件恒 could-not-run

跑 `pnpm audit:mockup-conformance --file pUE6UakxCpU6Dw9vUCtBBe` 时，`library-binding` 规则恒 `exit=2`（离线缓存 `figma-data/mockup/pUE6UakxCpU6Dw9vUCtBBe.json` 不存在）。

**这条既不是 pass 也不是 fail，分母是 0** —— 写交付自检时必须如实标注，⛔ 别写成「全部通过」。**也别顺手 `pnpm sync:mockup` 去补缓存**：那等于替 DS owner 做了一个还没裁的决定（成本 ≈ 400 MB / 文件、gitignored、且每次 Figma 编辑后时效闸复发）。登记在 DS `backlog.md` INFRA-F62。

### 3.6 RPS Link (New) Home 页的**可见**视觉契约

> 全部取自 `effectivelyVisible=true` 的节点（2026-09-01 实测，基线帧 `6260:4239`）。
> ⚠️ 立此节的直接原因：RPSV3-134 首交付把契约取自一个隐藏节点，导致返工。详见 [design-record §10](./specs/2026-08-31-rpsv3-134-design-record.md)。

**⛔ 本页渲染中零个可见分区标题。** 文件里那两个 Roboto SemiBold 24 的标题都**不渲染**：

| 节点 | 文本 | 为什么不可见 |
|---|---|---|
| `6260:4261` | `System Info` | 父 `Frame 2005` `visible=false` |
| `6260:4289` | `Ethernet Settings` | 所在 Content 卡整个 `visible=false`（备用卡） |

⇒ **判定一个范式是否生效，必须逐级走父链验 visible**，⛔ 节点属性读得到 ≠ 契约生效。给这一页新增内容时**不要加 24px 标题**，那会是全页唯一。

**内容行范式**（新增任何一行都照这个来）：

| 项 | 实测值 |
|---|---|
| 行容器 | 1120×32，HORIZONTAL，gap 8，`counterAxisAlignItems=CENTER` |
| label 列 | 200 宽；TEXT 14px Roboto Regular 绑 **`UX/Grey/grey-6 #9E9E9E`** |
| 值列起点 | **label 起点 +220**（= 200 + gap 8 + 值列 pad-left 12） |
| 行容器的容器 | `Frame 2007`，VERTICAL gap **16** —— 新行 append 到这里，⛔ 别挂到 Content 直接子层（那里 gap 是 20，节奏会断） |
| 卡内填充 | Content 卡（`Layer_1` #141414）内**所有子容器 fill 均为 `null`** ⇒ ⛔ 别加底色块，会读成嵌入式面板 |
| 现成范式节点 | `Form Item` INSTANCE（`Type=Label & Input, Label Width=200 px`）；需要「label + 自定义右列」时照 PID 行 `6554:1055` 的 FRAME 结构 clone |

**按钮**：用 DS 库 `Button/dark M`，⛔ 别手搓。

| 项 | 值 |
|---|---|
| SET | `6520:4115`，setKey `12b38c8b68cd67dd3978e0d68712bc646f1e97c1`（remote） |
| 变体轴 | `icon`: right/left/loading/no · `style`: filling/ghost/rimless · `color`: gray 1/green/orange/red · `status`: default/loading/hover/disable · `radius`: round/square · `fixed width`: no/yes |
| 页面在用 | `icon=no, style=filling, color=green`（Ethernet 卡的主按钮，74×32） |
| RPSV3-134 在用 | `icon=left, style=ghost, color=gray 1`，variantKey `57a27949fb0e9c057a94d8d6f374f34e9f67e1d9`（基准 94×32） |
| ⚠️ 已知 | 组件自带 `paddingTop/Bottom=10` 为 off-scale ⇒ `binding-fidelity` B-SCALE 每个按钮报 2 条。**库自带值，改动即 override**，按既有残留定性处理 |

### 3.7 ⛔ 两个「probe 和截图都看不出来」的 use_figma 坑

两条都在 RPSV3-134 实际踩到，共同点：**节点属性正常、局部截图正常，错的是别的东西**。

| 坑 | 症状 | 怎么防 |
|---|---|---|
| `figma.createAutoLayout()` **默认带白色 fill** | 深色页面上新建容器渲染成白条 | 建完立刻 `fills = []`。probe 数值看不出来，**只有整帧截图能发现** |
| **新建节点默认挂到 `figma.currentPage`，而 `currentPage` 每次 `use_figma` 调用都重置为文件第一页** | 节点建成了、坐标也对、单独截图完全正常 —— 但它在**别的 page** 上，交付页里根本找不到 | 建顶层节点后**必须显式 `<section>.appendChild(node)`**；跨 page 作业先 `await figma.setCurrentPageAsync(page)`（一次调用最多切一次） |
| **`setBoundVariableForPaint` 返回的新 paint 会把 paint 级 `opacity` 重置为 1** | 给一个「白 10%」的 stroke 绑 `grey-1 #FFFFFF` 后，颜色确实对了、`boundVariables.color` 也对了 —— 但 opacity 从 0.1 变成 1，8900×3095 的 Section 外圈变成**一整圈 100% 纯白描边**。`bvId` 回读一切正常 | 绑完**回读整个 paint 的全字段**（hex / opacity / blendMode / boundVariables）与绑前 snapshot 逐项比；丢了就 `{ ...paint, opacity: <原值> }` 还原（spread 保住 binding）。⛔ **截图判别不了**：0.157 缩放下 1px stroke 的 opacity 根本看不出。实证 RPSV3-134（2026-09-02，[design-record §18.5.4](./specs/2026-08-31-rpsv3-134-design-record.md)）。🔴 **DS 早有此规则** —— `figma-technical-reference.md` **Q2（原 M18）** 已写明「返回的新 paint opacity 默认 1，单步合并必失败」并给了两步法。⇒ 本行只是**本产品侧的实证指针**，⛔ 别再当新发现回流。**教训是没读 Q 系列**：凡涉及 `use_figma` 的 paint / variable / instance 写操作，M48 起手清单必须显式过 Q2 · Q7 · Q28 |
| **`setProperties` 切 variant 不会覆盖子层的 instance-swap override** | `type=info` → `type=error` 切完，底色/按钮都变红了，**图标还是那个蓝色的 `Info 2`** —— 属性读出来一切正常（`type` 确实是 `error`），局部截图也「看着像对的」，因为红底红字很抢眼 | 切完 variant 后，拿**库里那个 canonical 变体**的同位子节点比一遍 `getMainComponentAsync().name`；不一致就显式 `swapComponent`。实证 RPSV3-134 ⑥ 帧（2026-09-01） |

> ⚠️ 第 4 条的**通用形态**（「变体切换后必须按 canonical 变体逐子层比对，不只比文本」）属 DS 真源 —— 它是既有 `M-DISCIPLINE.VARIANT` 的自然延伸（该条目前只管 **text** 的 compare-and-fix，不管 **instance-swap**）。✅ **2026-09-01 已回流**：做法进 `mockup-conventions.md §M-DISCIPLINE.VARIANT`（该条 scope 由「文本」扩到「子层全体」，并加了「子实例须比 `getMainComponentAsync().name`」的硬约束）+ jump 表触发行同步更新。分支 `rules/rpsv3-134-backflow`（commit `be96b9e7` + `80c7f0f6`，已 push，**未合 master**）。上面那两个 component key 仍留本文件（取值归项目 repo）。

⚠️ **第二条的教训不止是 API 用法，是验证方法**：我每一步都截图看「卡长什么样」，却一次都没验「它挂在谁下面」。**截图能证明节点建成了，证不了它在哪** —— 建完顶层节点要顺手回 `node.parent.id` / 父链，把归属也当成必验项。实证：v2 Journey 卡整张建在了 `To be confirmed` 分隔页（`3877:255`）上，连跑了 6 轮 use_figma 和多次截图都没发现，直到 owner 说「我没看到有改动」。

---

## 4. Figma 文件索引 Figma Files

| 用途 | 文件名 | fileKey |
|---|---|---|
| **主文件**（RPS 本地 GUI 全系，含 RPS Link (New)） | `TVU-RPS-20220302` | `pUE6UakxCpU6Dw9vUCtBBe` |

**订阅的库**（`teamLibrary.getAvailableLibraryVariableCollectionsAsync` 实测，Q29 唯一合法判据）：`TVU UX Design System` + `Nancy's Design Assets`（个人库）+ 按需 import 的 `Config T ( Local UI )`。⛔ **不是 legacy 无库文件**，新建元素必须绑 token。

**常用 token 取值**（实测解 alias 到底值，省下轮重查）：

| token | 值 |
|---|---|
| `Color Type/Background/Layer_1` | `#141414` |
| `Color Type/Background/Layer_2` | `#1f1f1f` |
| `Color Type/Background/Layer_3` | `#262626` |
| `Color Type/Background/Layer_4` | `#353535` |
| `Color Type/Text/Text_1` | `#f8f8f8` |
| `Color Type/Text/Tips` | `#9e9e9e` |
| `Color Type/Line/Light Divider` | `#434343` |
| `Color Type/Text/Heading & Button` | `#ffffff` ⚠️ 与页面标题实际用的 `#f8f8f8` 不同 —— 若确需标题，绑 `Text_1` 而非 `Heading & Button`（但见 §3.6：本页不该有标题） |
| `UX/Grey/grey-6 #9E9E9E` | `#9e9e9e` —— **内容行 label 列**用它（§3.6） |
| `UX/Grey/grey-5 #CCCCCC` | `#cccccc` —— `Button/dark M` ghost 变体的 label 色 |
| `UX/Grey/grey-4 #DBDBDB` | `#dbdbdb` —— **DS 图标组件内部 `Union` 路径自带的绑定**（`icon/Setting/Reboot` / `icon/Setting/Switch` 都是）。⚠️ 与同一按钮 label 的 grey-5 **不同色**，但它是库自带值 ⇒ ⛔ 别为「对齐 label 色」去 override。**本行原写「swap 进按钮的图标应绑同一个 grey-5」，2026-09-02 实测作废** |

- ⏳ **待补**：RPS 若还有别的 Figma 文件（Decoder / SaaS 侧 / 旧版），本表未覆盖。

---

## 5. 交付历史 Delivery Index

| 日期 | Jira | 交付 | 设计记录 |
|---|---|---|---|
| 2026-08-31 | [RPSV3-134](https://tvunetworks.atlassian.net/browse/RPSV3-134) | RPS Link (New) 电源控制（page `6553:108` / Section `6554:1028`）—— 2026-09-01 两行分支布局 + 第 6 态「Reboot failed」，**同日再做交付层重排**（左侧 680 文档列 + Journey 卡由 owner 手动定稿于 (800,2301) 1894×734；Section 现 **8900×3095**） | [design-record](./specs/2026-08-31-rpsv3-134-design-record.md)（§14 / **§15** / **§16 规则回流**）· 复盘 [首日](./retrospects/2026-08-31-rpsv3-134-mockup-retrospect-internal-share.md) · [**第二日**](./retrospects/2026-09-01-rpsv3-134-layout-and-backflow-retrospect-internal-share.md) |
| 2026-08-14 | RPS-422 | 10bit GUI | [handoff](./handoffs/2026-08-14-rps-422-10bit-gui-handoff.md) |
| 2026-06-15 | FB-10040 | 开机禁用 Return Video | [design-record](./specs/2026-06-15-fb-10040-design-record.md) |

**⛔ 已作废单**：~~RPSV3-139~~ —— **owner 2026-09-01 判定「不应该被创建」，当日已在 Jira UI 手动删除。议题关闭。**

- **删除状态的证据层级**：**owner 口头报告已删（2026-09-01 17:36）。AI 未做程序化核验** —— 因为处置纪律就是「AI 一概不碰这张单」，为了验证去 `getJiraIssue` 反而破纪律。⇒ ⛔ 别把本行读成「已实测确认不存在」；下轮若因别的事碰到 RPSV3 项目并顺带看到它还在，那才是需要重新告知 owner 的信号，**仍然不由 AI 动手**。
- **它是 AI 用 Nancy 账号建的**（`creator` / `reporter` 实测均为 Nancy Zeng，2026-08-31 18:14），0 评论、0 issuelink，assignee 是 RPSV3 项目默认分派的 Lotus Chen。
- ⚠️ **Atlassian MCP 没有 delete issue 工具**（只有 create / edit / comment / transition / worklog / link）⇒ **AI 删不掉，只能人工在 Jira UI 删**（需 `Delete Issues` 权限）。这条留作**下次的前提事实**：AI 建的单，AI 收不回来。
- 它的描述里还指向**已删除的** Journey 节点 `6570-715`。
- ⇒ **⛔ 别再把它当成 RPS 的未决需求引用**；重启失败态的口径已在 design-record §13 / §14，设计也已落地为第 6 态。

> 教训（2026-09-01）：**「设计里发现一个 PM 待决问题」不等于「该开一张 Jira 单」。** 建单是对外动作，会分派给人、进别人的 backlog；本例是 AI 自行决定建的，owner 事后判为不该存在。⇒ **开单前先问 owner**，⛔ 别把它当成交付收尾的常规动作。
>
> 另一条：当日 owner 口头答过「JIRA 已经回复过」，实测 RPSV3-139 `comments.total = 0` —— 有评论的是 **RPSV3-134**（评论 `268958`）。**两个单别混，转述与实测冲突时以 `getJiraIssue` 为准。**
