# 预注册：独立证「真实交付面 = 6」这个分母（2026-09-10）

> **⛔ 取数前落盘，取数后一字不改**（`AGENTS §1.1` 订正段：承诺指标必须写在改动之前）。
> 被验对象 = **DS 侧** `docs/internal/ds-health-mockup-targets.json` 的 `targets` 数组（6 条）。
> 上游登记 = DS `docs/internal/backlog.md:105`（INFRA-F146 ③）逐字：
> 「**TPC 20220519 就是漏登的那一个** ⇒ 真实交付面 **≥ 7**，`6` 这个分母**未被独立证过**」。

## 0 承诺（这条改动承诺让哪个量动）

本格**只产读数、⛔ 不改 DS 判据**。承诺的量是：
**给出一个 ⛔ 不依赖 `targets` 枚举器的交付面计数 `n`，并逐条列出 `n` 与 `6` 的差额。**
⛔ 不承诺「该不该补登」——那是应然，见 §3 H4。

## 1 五行块（接手前，⛔ 别跳）

```
登记记的：  DS backlog:105 逐字「真实交付面 ≥ 7，`6` 这个分母未被独立证过」
            + lab §12.5 逐字「该清单自陈人工维护…⇒ `6` 这个分母本身没被独立证过」
现取的：    targets 数组 = 6 条（逐条 fileKey/label/sourceRef/addedAt 齐全）；
            🔴 **同一份文件里还有第二个枚举面 `sourceLabels` = 11 个 fileKey**，
            其中 owner 逐条标了 `kind`：`product-file` **9** 个 · `foreign-library` **2** 个。
            9 个 product-file 里只有 `HvU7TXV…`（Media Service UR）同时在 targets 里
            ⇒ **8 个 owner 已亲手标为「产品文件」却不在 targets 里**。
前提还成不成立：**成立，且比登记写的更强** —— 登记说「≥ 7」（只算上 TPC 一个），
            而同一份文件里已有 8 个 owner 标注过的 product-file 在 targets 之外。
它还该做吗：该做。DS 侧对这份清单的裁定只有一条，且是**要求登记**而非 hold ——
            该文件 `$warning` 逐字「⛔ 这份清单是**人工维护**的 —— 漏登记一个产品文件 =
            静默少测，读起来却像「全测了」」+「新增产品文件时：先在 docs/ 里 grep 该 fileKey
            确认它确实是消费产品文件，再登记 + 写 sourceRef」。
            ⚠️ 反向也有一条**刻意不登记**的裁定：「⛔ 别把指定库自己（figmaFileKey）加进来 ——
            它是判据的另一端，不是被测对象」⇒ 指定库 `YbsPRUVmNdsbN40NNwh1Gn` ⛔ 不进分母（MN2）。
lab 自己验过没：🔴 **验过上位面，⛔ 没验分类口径 —— 本族第 4 次命中（`lab:N56` 知情面分叉）**。
            `probes/detect-frame-theme/enumerate-figma-face.mjs`（2026-09-03）已用 team/project
            API 枚举出 **234 文件 / 51 project / 2 team**，MH1 过、`projectErrors` 0。
            ⚠️ 但那份读数的 `known=14` 是 **lab 自己的盲面登记**（W 面 6 + H 面 8），
            ⛔ **不是** DS 的 targets 6 —— 两个数长得像同一个量，⛔ 严禁并池。
            且该探针**边界 ② 逐字登记了它没做的正是本格这件事**：
            「它报的是**文件**数，⛔ 不是「产品 mockup 文件」数 —— 判哪些算产品面要另立口径」。
            ⇒ 诚实读法：**可行性已证（阻碍②已推翻）、分类口径未立** ⇒ 本格立那个口径。
```

## 2 口径与扫描面（⛔ 报告里必须原样带出）

| 口径名 | 定义 | 谁维护 |
|---|---|---|
| **`targets` 口径** | `ds-health-mockup-targets.json#targets` 的 `fileKey` 集 | 人工，被验方 |
| **`sourceLabels` 口径** | 同一文件 `sourceLabels` 的键集 + owner 标的 `kind` | 人工，被验方（但**独立于 targets**） |
| **`repo-ref` 口径** | DS 仓 **tracked** 文件里出现过的 Figma fileKey 集 | 机检，本格新立 |
| **`figma-face` 口径** | owner 两个 team 下 `/v1/projects/:id/files` 枚举出的 key 集 | 机检，Figma 侧真源 |

**扫描面（`repo-ref`）**：DS `git archive e7c1bd61 | tar -x` 导出树，**5137 个 tracked 文件 / 152,680,820 B**
（⛔ 不读工作区 —— 起手实测工作区有 4 个脏文件，2 个是并行 session 的产物）。
含二进制的文件按 `NUL` 字节跳过并计数。

**提取形态（⛔ 逐条枚举，`AGENTS §2.19` 推论九：形态空间是开放的，只有列出来的才算被覆盖）**：

| 形态 | 正则（JS，⛔ 不用 shell 正则） | 为什么单列 |
|---|---|---|
| **F1** URL | `figma\.com/(file\|design\|board\|proto\|slides)/([A-Za-z0-9]{22})` | 文档/散文里的主形态 |
| **F2** 字段 | `"(fileKey\|figmaFileKey\|file_key)"\s*:\s*"([A-Za-z0-9]{22})"` | 配置与产物 |
| **F3** 裸对象键 | `"([A-Za-z0-9]{22})"\s*:\s*\{` | 🔴 `sourceLabels` 那 11 个**只有这个形态** —— F1/F2 一个都抓不到 |
| **U** 上界 | `\b[A-Za-z0-9]{22}\b` | 只用于**证穷尽**，⛔ 不用作 fileKey 面 |

🔴 **`\b` 必须在 Node 的 JS 正则里跑** —— 本格侦查时 `git grep -oE '\b…'` 把 `\b` 当成**字面 `b`**，
238 个命中**全部以 `b` 开头且以 `b` 结尾** ⇒ 那是一次装置故障，⛔ 不是读数。

⚠️ **上界已实测含大量假阳**（pnpm-lock 的 22 字符哈希 · `IconActionAddWorkspace` 这类图标名 ·
`ArrayLiteralExpression` 这类 AST 常量 · 测试占位 `AbCdEf0123456789012345`）
⇒ **⛔ 上界不得直接用作候选面。**

## 3 逐值表（⛔ 一档只绑一个判定；取值域必须覆盖全）

### H1 三种精确形态穷尽了没有？

读数 `x = |(U − C) ∩ E|`，其中 `C = F1∪F2∪F3`、`E = figma-face` 枚举集。
**这个判据能失败** —— 若某个真 fileKey 只以第四种形态出现（如裸出现在散文里、或被反引号包住），
它会落进 `U` 而不落进 `C`，同时因为是真文件而落在 `E` 里。

| `x` | 判定 |
|---|---|
| `x = 0` | **在 `E` 这个面上**形态枚举穷尽 ⇒ ⛔ 不外推到 `E` 之外（team 外共享文件不在 `E` 里） |
| `x ≥ 1` | 🔴 形态漏 ⇒ 逐条列出、补第四种形态、**重跑全部读数**（⛔ 不许只加一句限定词了事） |

### H2 独立口径下的交付面计数 `n`

`n = |{k ∈ C : k 是真实存在的 Figma 文件 ∧ owner 已标 kind=product-file 或 k ∈ targets}|`
（⛔ 排除指定库、⛔ 排除测试 fixture、⛔ 排除 `kind=foreign-library`）

| `n` | 判定 |
|---|---|
| `n < 6` | 🔴 **装置故障** ⇒ 抛（MH1 已钉住 6 个 targets 必在 `C` 里，`n<6` 只能是我的分类器坏了） |
| `n = 6` | targets 分母**被独立坐实** ⇒ 登记的「≥ 7」不成立，回改登记 |
| `n ≥ 7` | targets 分母**偏小**，差额 `n − 6` **逐条列出**（key / 名字 / owner 标的 kind / lastModified / 被哪些文件引用） |

### H3 那 6 个 targets 现在还都是活文件吗

读数 `a = |{k ∈ targets : GET /v1/files/k?depth=1 → 200}|`。

| `a` | 判定 |
|---|---|
| `a = 6` | 清单无死条目（§12.1 已实测过一次 6/6 200，本格是**第二次观测**，⛔ 不是等价性证明） |
| `a < 6` | 🔴 清单含死条目 ⇒ 逐条列出 HTTP 状态码 |
| 取不到（网络/鉴权失败） | ⛔ **不许记 0** —— fail closed 抛（第四种 0：命令失败的 0） |

### H4 🔴 「哪些算交付面」这一问必须拆两档（`AGENTS §2.21`：可实测事实 ⛔ 不与应然共用一档）

| 半 | 内容 | 谁判 |
|---|---|---|
| **可实测那半** | 文件真实存在（HTTP 200）· owner 已标的 `kind` · 被 DS 仓哪些文件引用 · `lastModified` · 在哪个 project/team | ✅ **lab 判，本格产读数** |
| **应然那半** | 这 `n − 6` 个**该不该**进 `targets`（= 该不该被 DIM-U12 测量） | ⛔ **lab 不裁** —— 交 DS 侧 / owner。⛔ 报告里不许出现「应该补登 X 个」 |

⚠️ **本格 ⛔ 不改 `ds-health-mockup-targets.json` 一个字节。** 唯一允许的 DS 侧写入是
**回改 `backlog.md:105` 那条登记的读数部分**（把「≥ 7 / 未被独立证过」换成本格实测值 + 逐条清单），
因为 `AGENTS §25` 推论三/§26 要求「判出的结论必须回改到对方会读的那份文件」。

## 4 内建控制（⛔ 建进量具，签名一变当场抛）

| # | 类 | 断言 |
|---|---|---|
| **MH1** | must-hit | 6 个 `targets` fileKey **全部**出现在 `C` 里（漏 ⇒ 扫描面有洞 ⇒ 读数作废） |
| **MH2** | must-hit | 11 个 `sourceLabels` 键**全部**出现在 `C` 里 —— 🔴 专钉 **F3 这个形态真被调用了**（F3 塌了它们会静默消失，而那正是「装置没接上」的第五种形态） |
| **MH3** | must-hit | `xu7H3ppLyQfa3fOmU8M7iO`（TPC 20220519）∈ `C` 且**不在** `targets` |
| **MH4** | must-hit | 指定库 `YbsPRUVmNdsbN40NNwh1Gn` ∈ `C` |
| **MH5** | must-hit | fixture `jnlIId30lS3xjRmZnZTWQy` ∈ `C` |
| **MH6** | must-hit | `figma-face` 枚举的自检 `passed = true` ∧ `projectErrors = []` ∧ `fileCount ≥ 200` |
| **MN1** | must-not-hit | `ArrayLiteralExpression` ∈ `U` **且** ∉ `C` —— 钉住「上界有假阳 ∧ 精确形态挡住了它」 |
| **MN2** | must-not-hit | 指定库 ⛔ 不计入 `n`（该文件逐字裁定「它是判据的另一端，不是被测对象」） |
| **MN3** | must-not-hit | fixture ⛔ 不计入 `n` |
| **MN4** | must-not-hit | 输出的每个 key 长度**恰好 22** ⇒ 截断形态（`DtZcMkhNy6qh6jbQ` 等）⛔ 不得成为独立 key |

**fail-closed 起手**：pin 不存在 / targets 文件缺失 / token 取不到 / 任一控制未过 ⇒ `exit 1`，
⛔ 不静默降级成「0 个未登记」。

**口径进产物本身**（`AGENTS §2` 那条本轮验证有效的做法）：产物写死
`pin` · `surface` · `forms` · `enumerationPath` · `enumerationGeneratedAt`，
⛔ 不靠读者记得跑的时候带了什么参数。

## 5 ⛔ 本格不能说的话（先写下来，免得取完数忘了）

- ⛔ **不许说「真实交付面 = n」** —— `n` 是**四个口径求交**的结果，`repo-ref` 与 `figma-face`
  两个面都有各自的边界（前者只看 tracked、后者只看两个 team）。正确说法是
  「**在 `repo-ref ∩ figma-face` 这个面上，独立数出 n 个**」。
- ⛔ **不许把 `figma-face` 的 234 读成「DS 的交付面 234」** —— 该探针边界 ② 已逐字登记它混着
  FigJam / 设计评议 / 个人 sketch。
- ⛔ **不许说「应该补登 n − 6 个」** —— H4 应然那半 lab 不裁。
- ⛔ **不许拿 `sourceLabels` 的 `kind` 当 lab 的读数** —— 那是 **owner 2026-08-13/08-14 亲手标的**，
  lab 只是**转引**（`AGENTS §23` 推论五：转引必须写「转引自」，⛔ 不写「已实测」）。
  lab 能独立取的只有「该 key 现在还存在吗 + 它的真名字」。
- ⛔ **不许说「6 这个分母错了」** —— 它在**它自己声明的口径**（DIM-U12 的人工测量目标清单）内
  就是 6；错的是**没有第二个口径给它兜底**。⇒ 该报的是**差额与成分**，不是「错」。
- ⛔ **不许把本格的 `n` 直接塞回 §12.3 那个 94.4% 的分母** —— 那组读数的口径是
  「6 个登记交付面的 `topFrame`」，换分母要**重取一遍**，⛔ 不许算术外推。
