# V4-2376 / V4-2333 轮三十二 — 激进档精简（两端 Acceptance 各 14 条）+ LCD 改名 Test Signal 落到交付层 + 六条机检盲区回流 DS

> 日期：2026-08-06 · Owner：Nancy · 状态：**已执行完毕** · 一项待 owner（定稿 → 完整 F1 → 发 Jira）+ 两类待 owner 手改

## 执行结果

| # | 任务 | 状态 | 说明 |
|---|---|---|---|
| T0 | **DS 回流 6 条 + 38 个新单测** | ✅ | commit `1ae713f9`（已在远端）。拍板 5 条 + **新抓出 1 条更严重的**。pre-commit 的 vue-tsc + 全量 vitest 均绿（**1350 passed / 11 skipped**）|
| T1 | **激进档精简（两端 Acceptance）** | ✅ | LCD `9597:220` **25→14 条**，卡高 1204→**960**（-20.3%）· Config-T `8085:523` **23→14 条**，卡高 914→**714**（-21.9%）。仅删 1 条元检查，**其余 47 条判据全保留在合并条内** |
| T2 | **LCD 改名 Test Signal 落到交付层** | ✅ | 语义二分：**23 处改 / 10 处保留 / 12 节点** + 2 个 Section 改名。dry-run **23/23** offset 全验证通过后才写；seg 数全部稳定未分裂 |
| T3 | 修新闸抓出的 2 处真缺陷 | ✅ | Config-T `8084:518` / `8085:518` meta 行首 `V4-2376` 残留 ZH 档 ⇒ 闸从 **2 条 → 0 条** 闭环 |
| T4 | §I7 改后必量 | ✅ | **第 7 次实证，第 2 次由「变短」触发**。LCD 无需调整（gap 60 保持）· Config-T gap **260 → 61** 已复原 |
| T5 | 机检 + 渲染图 + 归属核验 | ✅ | 两端新闸双 PASS · report **491 字节 → 107 732 字节 / 826 节点** · **本轮零新增 findings** |
| T6 | 文档回填 | ✅ | handoff **§1k-AG** · spec 顶部条目 + **D43** · 本文件 · ledger |
| — | 完整 F1 走查 | ⏸ **待 owner 定稿后** | 承接 §1k-AF ⑨.2；本轮同样只做聚焦自查 |

---

## ⛔ 一处必须坐实的更正（上一轮的度量口径选错了）

**§1k-AF / D42 用「字符数 -10.7%」衡量精简效果 —— 指标与 owner 的抱怨不是同一个对象。**

激进档的机制是**减行不减字**：合并使行数 LCD 50→30 / Config-T 46→30，事实一条没删，所以字符数几乎不动，而卡高降两成。

| 端 | 条数 | 行数 | 卡高 | 字符 |
|---|---|---|---|---|
| LCD | 25 → 14 | 50 → 30 | 1204 → **960**（-20.3%）| 3737 → 3595（-3.8%）|
| Config-T | 23 → 14 | 46 → 30 | 914 → **714**（-21.9%）| 3839 → 3828（**-0.3%**）|

⇒ **owner 感知的「卡太长 / 内容太多」对应的是卡高与条数，不是字符数。** 已回流 DS §M-DISCIPLINE.SYNC 第 6 条（两个量都记，但判膨胀看卡高）。

**教训一般化**：衡量一个主观抱怨之前，先确认指标与抱怨的对象是不是同一个东西。上一轮我按「字符数」给出 -40~50% 的预算、实测 -10.7%、于是判定「中等档结构上限死了」—— 结论没错，但**如果当时量的是卡高，会立刻发现真正的杠杆是合并条数而不是删字**。

---

## 激进档合并判据（可复核，不是凭手感）

**同一对象 / 同一状态机的连续判据合并，跨对象的不合。**

| 合 | 例 |
|---|---|
| ✅ 合 | 「Settings 行位置」+「该行行值预览」（同一行的两个属性）· 「测试中呈现」+「Stop Test 回空闲」（同一生命周期两端）· 「C0 无绿值」+「C1/C2 恰一处绿值」（同一不变量的两面）|
| ❌ 不合 | 「提交成功」与「提交失败」—— QA 要分别构造两个场景 · 「Live 接管」与「Apply dirty」—— 跨对象 |

**唯一删除项**：LCD 原第 23 条 `☐ EN / ZH copy correct. / 中英文案正确。` —— 不是界面级判据而是元检查，且已被 `bilingual-zh-style-tier` 机检覆盖。

**归属不动（显式声明）**：原打算把功能级条按 M23.0 移交 PRD 验收段，**放弃了** —— §1k-AB 的 D36 已做过「验收唯一归属收口」，再搬迁等于推翻上一轮决策。

**代价（项目级例外，owner 已拍板接受）**：合并条内含多个子判据，与 M23.0「一条 Acceptance 一个判据」有张力；QA 需按条内分号逐项验，不能靠勾选框计数当进度。

---

## Test Signal 改名：关键是两种 `Start Test` 必须分开

owner 只说了「页面名称和选项」。**同一个词在这份交付物里有两种语义**：

| 语义 | 处置 | 依据 |
|---|---|---|
| 页面 / Settings 行 / 参数集 / 测试信号本身 | → `Test Signal` | owner 已改界面本体（产品层 11 处已是 Test Signal）|
| **按钮动作** | **保留 `Start Test`** | 按钮 label 本体仍是 Start Test，owner 未改；Verdana 墙下也只能 owner 改 |

**跨 surface 决定性证据（§M-DISCIPLINE.SYNC ③ 判据 d）**：Config-T 端**早已是这个范式** —— Section 名即 `< V4-2376 > Test Signal Parameters · Config-T`，产品层 18 处 / 注释层 18 处 `Test Signal`，而其 **34 处 `Start Test` 全为按钮语义、零处需改**；`8400:1177` 一句内同时出现「切走 **Test Signal** tab」与「**Start Test** / Stop Test 不触发」。

⇒ LCD 只是追平 Config-T 既有口径；**同卡内两词并存本就是既定范式，不需要补「对应关系交代句」**。

**顺带修好两处 EN/ZH 不对齐**：`9345:2` req15 与两处卡标题的 EN 侧原仍写 `Start Test`，而中文早已是「测试信号」。

---

## 六条机检盲区（拍板 5 条 + 新抓出 1 条）

详表见 handoff §1k-AG ③。最值得记的两条：

**新抓出的第 ③ 条比拍板那 5 条都严重**：`ANNOTATION_RE` 写的是 `annotation`，匹配不到 `annot · …` ⇒ **整个 `annot · <id> state+Δ` state-label 小卡族被判成产品 UI 而跳过**。LCD 单页实测：修前扫 **70** 个注释 TEXT、修后 **87**（含汉字 20→37，汉字 2799→4233），**28 个含汉字节点 / 1800 汉字**长期在 scope 外。⇒ **§1k-AF 里 typography-icon 报的「本轮触碰的 7 个 annot 零命中」是假阴性，不是真干净。** 两份副本已同步修，误伤面实测 **0**。

**②的 bug 已用探针坐实、不是推断**：Figma REST 的 `characterStyleOverrides` 按**码点**索引 —— LCD `9598:221` 实测 `codeUnits 929 / codePoints 927 / cso.length 927`，两个 `🟡` 正好差 2。首个 emoji 之后每个字符都读到邻居的样式。

---

## 纪律实证（本轮新增）

1. **闸报 pass 不等于闸在查。** 第一次验证 ② 的修复时拿到 `scanned=0` 的 "pass"（`--node` 指到 TEXT 自身时它没有 `UX/PRD` 祖先），是输出里那行 `0 annotation TEXT node(s) scanned` 让我没把空扫当通过。⇒ **自验探针要验的不是「报没报」，而是「扫没扫到已知该命中的目标」** —— 顺这条线才挖出第 ③ 条盲区。
2. **dry-run 打印样例文本，再次拦下量级失真。** `en-in-zh-font` 首次报 `1 latin char`，逐字符一看实际是 `V4-2376` 里 6 个字符（数字不属 Latin script）⇒ 判定对、量级失真，当场改判据。
3. **改名类需求先分辨「名字指的是哪个对象」，再看另一个 surface 已经怎么做。**
4. **长度变化的文本替换必须走 M47.2 + 两条前置断言**：每处 offset 实测文本必须匹配；每处必须完整落在**单个样式段内**（跨段拒绝写入）。结果 seg 数全部稳定。

---

## 不做（显式声明）

- **Jira 仍不发** —— owner 未定稿（memory `no-nagging-before-final`）。定稿范围 = 轮二十七～**三十二**。
- **完整 F1 design-walkthrough 仍待定稿后跑**。
- **REFERENCE 区内容不动**（只改了 Section 名以跟随 feature 命名）；该区 9 个含汉字节点仍在 zh-style probe 的 scope 外 —— **有意如此**，若哪天落进 scope 用 `--allow-node` 豁免而不是收窄正则。
- **DS `STATUS.md` 本轮未更新** —— 并行 INFRA session 正在改该文件，避冲突。
- **`8400:1177 annot · CT5` node 级 fontSize=12** 与**九处 `row · actions` itemSpacing token 化** 仍未做（承接既有登记）。

---

## 待 owner 手改（Verdana 本环境不可写，见 D40 ⑥）

1. **toast 文案** `Video input lost — Start Test resumed.`（`I9901:778;…`）—— 新命名下建议改 `— test signal resumed.`。**改完须同步 `9597:217` 的两处引用**（@1985 / @2085，本轮刻意保留以与产品层一致）。
2. **4 处 `LCD Button` label `Start Test`**（`I9742:350` / `I9742:399` / `I9866:386` + `9359:642`）—— 按动作语义保留即可，除非要统一。
