# 复盘 2026-08-28-d（第六十七轮）—— **整条链上没有一个人问过「这个问题真的存在吗」**

> 🔴 **2026-08-28 晚订正（`f715903a`，第六十八轮）—— 本文 §一 的结论数字有一半是错的，⛔ 别照抄。**
> 本文断言「10 条 FAIL 全是假阳」并外推「同型 77 处 100% `boundVariables=null`」。实测：
> **`boundVariables` 这个字段在 685 份 raw 里出现 0 次**（它是 Figma API 的字段名，extract 写进 raw 时
> 叫 **`v`**）⇒ 读它对任何集合恒得 null ⇒ 那句「100%」恒真、零信息量。用真字段 `v` 重测：
> 两主题 expected 分叉共 **97** 处，其中 **93 处 Figma 真有绑定（两 expected 合法）· 只有 2 处无绑定**；
> Message 那 10 条 FAIL = **2 条假阳（bg）+ 8 条真 code 债（text，绑 `UX/Brand/Brand` 等）**。
> ⇒ **§一 的 pattern 本身成立且更强了**（本文自己成了它的第二个实例），但**它的具体读数不可引用**。
> 逐条实证与新判据见 [[INFRA-F107]] `#### 二次订正` + [复盘 2026-08-28-f](./2026-08-28-f-the-correction-needs-a-criterion-too.md)。
>
> **范围**：只记可复用 pattern。逐段实录（八步过程 / Figma 活源三项证据 / 回滚清单）
> 已在 [STATUS-CHANGELOG](../STATUS-CHANGELOG.md) 第六十七轮与 [[INFRA-F107]] entry 里，**本文刻意不复述**。
> 同线前作：[2026-08-28-c](./2026-08-28-c-a-label-no-gate-checks.md)（「等 owner」标签没有闸在核）。

---

## 一 · 新 pattern：**判据齐全、路线明确、闸全绿 —— 而问题本身是假的**

[[INFRA-F107]] 从 2026-08-07 立项到本轮，具备了一条待办能有的**全部**凭据：

⚠️ **读下表前先看顶部订正**：右列那格后来是做了的，而**做完之后没有人复核那次复核** ——
于是同一个 pattern 在同一天里发作了第二次，只是方向反了（把真债误判成假阳）。⇒ 见
[复盘 2026-08-28-f](./2026-08-28-f-the-correction-needs-a-criterion-too.md)。

| 有的 | 没有的 |
|---|---|
| 10 条 render-verification 数值 FAIL（exp≠act，逐条可复现）| **一次 Figma 活源复核** |
| entry 里三条候选路线 + 逐条否决理由 | |
| 豁免表 2 行 + `reviewBy` 90 天闹钟 + `ceReviewedAt` CE 复核 | |
| 落地后：两条渲染链各跑两遍、跨版本比失败集合（消失正好 10 条、新增 0 条）、两条 gate `EXIT=0`、全量 2913 passed | |

**右列那一格，是唯一重要的那一格。** 实测 Figma 该节点 `boundVariables: null`、单值、与主题无关
⇒ code 一直是对的，10 条 FAIL 全是假阳。

🔑 **结构**：整条链上每个环节都在验证「**做得对不对**」，没有一个环节验证「**该不该做**」的上一层——
「这个问题真的存在吗」。而闸越多、判据越细，越像已经查透了。

⇒ **接手任何「已登记的缺陷」时，第一个动作是复核缺陷本身，不是复核修法。**
判别问句：**「这条 FAIL / 这个 diff，我核过它的两端了吗？还是只核过 code 那一端？」**

---

## 二 · 触发器 S 的第三行也接不住这个（连加两轮 = 不加）

同一天上半场刚给[触发器 S](../../meta-rules.md) 加了第三行「**等谁做什么**」，治的是「这件事还该做吗」。
本轮它照样接不住：F107 的答案是「不等谁，我可以直接做」—— 完全成立，而问题是假的。

| 行 | 问的是 | 本轮抓到了吗 |
|---|---|---|
| 第二行（现取判据命令） | 数还对吗 | ❌ 数完全对得上 |
| 第三行（等谁做什么） | 这件事还该做吗 | ❌ 答得出，且答案正确 |
| **缺的那一问** | **这个问题真的存在吗** | —— |

⛔ **本轮刻意没加第四行。** 理由不是「不值得」，是**同一条规则连加两轮 = 没量过就扩规则**
（触发器 J 查重 + memory `reactive-correction-over-preemptive-rules`：prevention rule 只为
「重复 + silent」失败而设，本条目前 n=1）。**登记在此，攒到第二例再谈。**

> 🔴 **2026-08-28 晚：第二例当天就到了，而它把这张表的结论改了 —— 仍然不该加第四行，理由变了。**
> 第六十八轮复核本轮结论时，**抓到它的是第二行，不是缺的那一问**：本 entry 的「现取判据命令」是
> 一句**散文**（「用 `node -e` 扫报告求 … ∩ raw `boundVariables` 为空」），把它真写成可跑命令的
> 那一刻就撞见 `boundVariables` 在 raw 里不存在 ⇒ 整条断言恒真。
> ⇒ 上表「第二行：数还对吗 → ❌ 数完全对得上」**当时就不成立** —— 那条命令从来没被跑过，
> 因为它跑不了。**第二行不是失灵，是被一句不可执行的字段绕过了。**
> ⇒ 正确的加固方向不是加第四行，而是 [盘点报告 §三 1](../_reports/2026-08-28-active-backlog-inventory.md)
> 已经指出的那条：**「现取判据命令」必须是能粘进终端跑的东西**（全仓只有 7/32 条带这个字段）。
> 详见 [复盘 2026-08-28-f](./2026-08-28-f-the-correction-needs-a-criterion-too.md) §二。

---

## 三 · 验证过的好方法：**两句互相矛盾的话，是最快的突破口**

owner 先说「效果不 OK，维持修复前的」，随后重申「Figma 是真源……以 Figma 为真源，修改 Code」。

- 单看第一句 ⇒ 审美裁定，照办即可。
- 单看第二句 ⇒ 让我继续按 Figma 改。
- **两句同时成立，只剩一个解释**：我手里那个 expected 不是 Figma 的样子。

⇒ 顺着这个唯一解释去读活源，三步就落地了（变量表 → 渲染图采样 → raw `boundVariables`）。

🔑 **要记的**：收到看似矛盾的两句指示时，⛔ **别挑一句执行、也别问「您是指哪个」**——
先假设两句都对，反推「什么前提下它们同时成立」。那个前提往往就是自己没验证过的那一个。

---

## 四 · 一条被实证的机制：**视觉门是本轮唯一拦住错误的东西**

`VISUAL_COMMIT_APPROVED` 拦下的那一刻，改动已经通过了：两条渲染链、两条 drift gate、
2913 个测试、changeset 检查。**所有机械判据都放行了，只有「让 owner 看一眼」拦住了。**

⇒ 两条推论：
1. **「验收标准是视觉判断」的改动，永远是 owner 拍** —— 它不该被归进「不需要决策」那一类。
   本轮把它归错，理由恰恰是「它是用户能看见的」（把该拦它的性质当成了做它的优点）。
2. ⛔ **别把视觉门当流程摩擦去优化掉。** 它是唯一一层不依赖判据正确性的防线 ——
   当判据本身错了的时候，只有人眼还在。

---

## 五 · 顺带（第三次兑现，不再单列）

[复盘 a §四](./2026-08-28-a-two-criteria-leave-a-seam-between-them.md) 那条 10 秒动作
（理由段里点名的每个标识符 `grep -c` 一遍、并列清单逐个核）本轮又跑了一遍，
核了 §M32 那 3 条核查项与三个 `*-bg` token，全部命中。⚠️ 它没抓到本轮的错——
**本轮的错不在「编造标识符」这个形态上**，见 §一。这不构成它该退档的证据
（同 [复盘 c §三](./2026-08-28-c-a-label-no-gate-checks.md)：计数只覆盖一种形态时，零命中说明不了什么）。
