# 量：backlog entry「现取判据命令」字段的格式一致性
> **扫描面**：全量 backlog entry 的「**现取判据命令**」字段（只读测量，⛔ 不改任何 entry）—— ⛔ 本文数字别抄，跑 `pnpm report:entry-precheck-field` 现算

> **2026-09-02（落地线第八十九轮）· 只读测量，不改任何 entry。**
> **结论先行：不够齐 —— 现在写 `entry-precheck` 会是一个 fail-open 的壳。**
> ⛔ **本文所有数字都别抄** —— 跑 `pnpm report:entry-precheck-field`，它每次现算。
> 本文写下的读数是 2026-09-02 那一次的快照，源文件 sha256 `12c3fe88ab0b…`（脚本每次自印）。

---

## 0. 这件事为什么被做（它是一条逐字写下来的前置，不是新提的活）

[`meta-rules.md` §触发器 S](../../meta-rules.md) 的 **enforcement 段**逐字写着它从 L2 升 L3 的前置：

> **为什么现在不是 L3**：判断「还值不值得做」是语义的、不可机械化。而**可机械化的那一半**
> （把 entry 里那条命令抽出来跑）取决于该字段的格式一致性——**尚未量过**。
> ⇒ 前置 = 先量一遍全量 entry 里「现取判据命令」的格式一致性；
> 够齐才写 `entry-precheck` 脚本，否则写出来是个 fail-open 的壳。

本文就是那句「先量一遍」。**它只回答「够不够齐」，不回答「该怎么写那个脚本」。**

### 接手本项时跑的触发器 S 四行块

```
entry 记的 : 「该字段的格式一致性尚未量过；够齐才写 entry-precheck」
             + 「本仓每条 backlog entry 结构性地带该字段（backlog.md 顶部压缩规则 ② 逐字要求）」
现取的     : pnpm report:entry-precheck-field → 有字段 11/25（Active 5/5 · Triggered 6/20）
             git grep '压缩规则' → 5 份文件全是引用，零定义处；
             backlog.md 顶部维护规则第 3 条实际要求的是「发现时间 + 触发查看条件 + 阻塞关系」
等谁做什么 : 不等任何人 —— 「量一遍」是纯只读、AI 可自跑，无外部依赖
⇒ 前提     : 「尚未量过」成立（本轮量了）；但**它引的那个依据是假的**——
             「结构性地带」实测是 11/25，而它据以成立的那个锚（压缩规则 ②）不存在。
```

⚠️ **第四行翻案了，且翻的是这条待做项自己的依据。** 这是本轮第二次撞上同一形态
（上一轮是「docs 站浅色 blue」）：**记的数没错，但它援引的前提是假的。**

---

## 1. 量具本身出过三次假象 —— 三次都是「整齐得可疑」而不是报错

⛔ **这一节比读数重要**：三次里有一次是**自证全绿而量具已经在撒谎**。

| # | 假象 | 真值 | 怎么发现的 |
|---|---|---|---|
| 1 | 反引号命令 **451** 条，其中 392 条判「不是命令」 | 56 条 | 「392/451 判非命令」这个比例过于整齐 ⇒ 先证量具。字段块边界把 entry 正文的子 bullet 整段吃了进来 |
| 2 | 字段出现 **21** 处，`INFRA-F142` 独占 8 处 | 12 处 · F142 **1** 处 | 逐处 dump 原文人核。判定用了 `line.includes('现取判据命令')` ⇒ 把正文里「⛔ 数别抄，跑现取判据命令」这类**散文提及**算成了字段；同一个判定还对 `**现取判据命令（⛔ 别抄下面任何数）**` 这种**粗体内带括号**的形态假阴 |
| 3 | 🔴 **自证全绿（EXIT=0）而读数从 56 变 75** | — | **第三向故障注入**（把块边界放宽回首版形态）。fixture FX-5 不红，因为它后面那个 bullet 是**同级**；真正会被吃进来的是**更深**的子 bullet ⇒ 当场补 `FX-7` 覆盖这一向，重放注入后 `EXIT=3`（`实得 4 条`） |

**第 3 条是本轮最值得留下的**：前两次靠「数字过于整齐」抓到，第三次**数字不整齐、自证也全绿**——
只有故障注入能抓。⇒ 量具的自证覆盖面本身也要被注入检验，
这是 [[feedback_new-gate-acceptance-three-questions]]「把自己刚建的机制放进终审范围」的又一实例。

**三向注入的完整读数**（脚本 sha256 `66261de6…`，三次注入前后逐次比对不变）：

| 注入 | 动作 | 结果 |
|---|---|---|
| ① | 已知向量 `sha256("abc")` 改一位 | `EXIT=3`，自证 1 精确命中 |
| ② | 摘掉字段形态判定 `FIELD_RE` | `EXIT=3`，`FX-3` 精确命中（散文提及被算成字段） |
| ③ | 块边界放宽回首版 | 补 `FX-7` **前** `EXIT=0` + 读数 56 → 75（**盲区**）；补 `FX-7` **后** `EXIT=3` |

---

## 2. 读数（2026-09-02 快照 · ⛔ 别抄）

```
entry 总数: 25   （Active 5 · Triggered 20）
有字段    : 11/25   Active 5/5 · Triggered 6/20
字段处数  : 12（顶层 bullet 11 · 嵌套 bullet 1）
反引号串  : 56
  判得出是命令 : 17
  含占位符     : 4
  不是命令     : 35
```

缺字段的 14 条全在 Triggered：`INFRA-F123 · F105 · F66 · F91 · F133 · F134 · F137 · F61 · F63 · F68 · F69 · META-DSYNC-01 · F143 · F144`。

---

## 3. 结论：不够齐。三条判据，每条都可独立核

### 判据 1 — 分母不齐：14/25 entry 根本没有这个字段（Triggered 侧 70% 缺）

`entry-precheck` 对无字段的 entry 只能**跳过**，而「跳过」= fail-open：
它会对 14 条 entry 一律报绿，而那 14 条恰恰是最没人核过前提的那批。
⚠️ 这不是「补 14 个字段就好」—— 补字段是一次性全量扫，且**该不该补由判据 3 决定**。

### 判据 2 — 命令与期望值在词法上不可分（56 条反引号里 35 条不是命令）

字段的现行写法把**命令**和**期望值**用同一种反引号包着，同一行内：

```
- **现取判据命令**：① `grep -c 'opacity' src/canonical/Form.vue` → `1` = 维持 owner 拍定的 (a)、
  `0` = 有人把它当遗留清掉了 ② `jq -r '…' figma-data/normalized/components.manifest.json` →
  四个的 axes 里出现 `enable` = designer 已动手 ③ `npx vitest run tests/…` → 9 passed
```

`` `1` `` / `` `0` `` / `` `enable` `` 是**期望值**，`grep -c …` 是**命令**，两者形态完全相同。
⇒ 脚本无法判「该跑哪一条」，更无法判「跑出来算不算过」。
**这不是写法不规范** —— 期望值本来就该写在字段里（触发器 S 的第二行要的正是「跑出来对不对」），
问题是**它们没有结构化分隔**。要机械化，字段得先有形态（例如 `cmd:` / `expect:` 两段），
而那是**改变所有未来 entry 写法**的规则变更。

### 判据 3 — 4 条命令含占位符，结构上无法无参跑

`node scripts/audit-mockup-geometry-consistency.mjs --file <key> --node <id> --family rows --stats` ·
`git -C "<consumer>" rev-parse --show-toplevel` 这类。
占位符不是疏忽：那几条 entry 的判据**本来就依赖当轮的上下文**（哪个文件、哪个消费仓）。
⇒ 「全量自动跑一遍」对它们没有定义。

**三条合起来 ⇒ 现在写出来的 `entry-precheck` 只能做到「有字段的就跑第一条能跑的命令，印出来」，
判不了绿红。** 那正是触发器 S 自己说的**壳**。

---

## 4. 顺带查出的两条独立事实（都已就地订正）

### (a) 触发器 S 引的那个锚不存在 —— 「backlog.md 顶部压缩规则 ②」

`meta-rules.md:900` 逐字写：

> 第二行的命令**不用现编**：本仓每条 backlog entry 结构性地带「**现取判据命令**」字段
> （`backlog.md` 顶部压缩规则 ② 逐字要求）。entry 没有那个字段 = 它本身不合规，先补再动手。

**两半都不成立**：

1. **「结构性地带」实测 11/25**（Active 100%，Triggered 30%）。
2. **「backlog.md 顶部压缩规则 ②」不存在。** `git grep '压缩规则'` 全仓 5 份文件**全是引用**
   （backlog 3 处 / tracker 2 处 / STATUS-CHANGELOG / 本 meta-rules 1 处），**零定义处**；
   `git log -S'压缩规则' -- docs/internal/backlog.md` 只有三个 commit，全是**引用被加进去**的那几次，
   没有任何一次是定义被加进去。backlog 顶部维护规则第 3 条实际写的是
   **「每条 entry 必须含：发现时间 + 触发查看条件 + 阻塞关系」——不含本字段**。

⇒ 那条要求的**真源就是触发器 S 自己**。已就地订正 `meta-rules.md`（不新增副本，只把假引用改成实测事实）。

⚠️ **这条比它看起来更重要**：`backlog.md:607/608` 与 `tracker.md:453/454` 都在按
「压缩规则 ②/③ 逐字要求 / 逐字禁止」行事（增量压缩核销层 · 禁一次性全量扫），
即**已经有四处在依据一份不存在的条文做决定**。本轮只订正 meta-rules 那一处（它是唯一一处
用它推出「entry 不合规」结论的），另外三处的处置见 §5。

### (b) STATUS 的 Triggered 计数 stale：写 18，活源 20

`docs/STATUS.md` §Active 后续工作写 `Triggered (18)` 并逐个列了 ID；
活源 `awk '/^## Triggered/,0' docs/internal/backlog.md | grep -c '^### '` = **20**。
差的两条 = `INFRA-F143` / `INFRA-F144`，由**并行线** `7e46598b`（同日 15:05）加入，STATUS 里零提及。

> **这两条的迁入依据不在本文**：2026-08-28 分两批迁入 Triggered（owner 拍板第 ① 问 11 条 +
> 触发器 S 逐条核后 5 条），逐条四行块见
> [送审单](./2026-08-28-trigger-s-active-14-audit.md)。该指针原在 STATUS 那一行上，
> 本轮因 `audit:doc-shape` 的 S2 600 B 上限搬到这里。

⚠️ **为什么它没被闸抓到**：`audit:status-consistency` 的 C4 只核 **Active** 计数
（自印逐字「backlog active count matches」），C6 核 design-review-queue 的三个镜像面，
**没有任何判据核 Triggered**。⇒ 这个镜像面自 2026-08-28 建立以来一直无闸。
本轮只修数（18 → 20）+ 在 STATUS 就地标注「本行无闸」，**⛔ 没给它加闸**（见 §5）。

---

## 5. 交 owner 的两问（⛔ 本轮均未动手）

### 问 1 —— 「每条 entry 必须带现取判据命令」这条要求，落在哪？

三个选项，**推荐 (b)**：

| | 方案 | 代价 / 后果 |
|---|---|---|
| (a) | 补进 `backlog.md` 顶部维护规则第 3 条 | 写 entry 的人在 backlog 顶部就能读到；但会形成**第二份**与触发器 S 并存的表述，正是本仓反复付过代价的形态 |
| **(b)** ⭐ | **backlog 顶部只加一行指针**（「另需含现取判据命令，语义真源 = meta-rules 触发器 S，⛔ 此处不复述」） | 零复述、且写 entry 的人读得到。**代价 = 它仍是 L1**，没有任何机制发现有人没写 |
| (c) | 维持现状（只在触发器 S 里） | 最省；但 Triggered 侧 70% 缺字段说明「只写在 meta-rules 里」的到达率就是这个数 |

⛔ **三个选项都不含「上闸」** —— 上闸的前置是判据 2（字段得先有结构化形态），
而那是改所有未来 entry 的写法，属另一件事。

### 问 2 —— 那三处仍在依据「压缩规则 ②/③」行事的地方怎么办？

`backlog.md:607/608` · `tracker.md:453/454` 三处依据的是**同一份不存在的条文**，
但它们各自描述的**做法**（核销层增量压缩 · 禁一次性全量扫）在实践中一直被遵守、也确实有道理。
⇒ 这不是「删掉引用」那么简单，得先定「那两条做法要不要成为真规则、写在哪」。
⛔ 本轮未动它们（触发器 S 边界第三条：核出前提变了 ⇒ 报 owner 并停，不自行改范围）。

---

## 6. 复现

```bash
pnpm report:entry-precheck-field                                   # 全量表 + 汇总
node scripts/report-entry-precheck-field.mjs --dump INFRA-F120     # 看某 entry 的字段块原文
git grep -n '压缩规则' -- '*.md'                                    # 5 处引用、零定义
git log -S'压缩规则' -- docs/internal/backlog.md                    # 三次都是引用被加入
awk '/^## Triggered/,0' docs/internal/backlog.md | grep -c '^### '  # Triggered 活源条数
```
