# 判据设计约定

这一页是闸口，不是案例记录。规则通用于任何为「合格与否」写机器可执行判据的场景，与具体产品、具体判据实现无关。**不讲案例，只讲通则**；对应的实证登记见 `round2-status.md`（条目编号见各条尾注），实证正文见 `reports/`，本页不重复。

判据设计里反复出现同一族坑：**一条控制/断言绿了，但它的绿零信息量**——它并没有在测它声称在测的东西。以下前四条是这条纪律在四个不同位置上的出现，按位置顺序排列；后两条是横向约束。

---

## 一、同族四条

### 1. 每个绿都要回答「它和谁比，那个『谁』是不是同源」

任何比较型判据（含 must-hit）绿灯时，先确认比较两侧的数据来源是否独立。

- **为什么**：如果两侧本质上是同一来源的两次求值，判据永远不会红，绿灯不携带任何信息。
- **怎么自查**：这条判据的两侧输入，能否分别指向两条完全独立的数据管道？如果答案是「不能，它们最终都算的是同一份东西」，这条判据就是恒真的。

（实证登记见 `round2-status.md` N81.1）

### 2. 扰动/合成样本照真实病灶造，⛔ 不照判据造

构造用于验证判据的扰动样本或合成样本时，样本必须基于真实存在的病灶形态，不得基于判据本身的定义反推构造。

- **为什么**：照判据的形状造出来的样本必然命中判据，它证明的只是「判据能抓住自己定义的形态」，不能证明判据能抓住真实世界里的病灶。
- **怎么自查**：这份扰动样本的形态，是先有一个独立观察到的真实病灶案例才有的，还是直接把判据的条件反过来写就得到的？如果是后者，它不能作为验证样本。

（实证登记见 `round2-status.md` N82.1）

### 3. 搜寻器/扰动算子和判据一样要配 must-hit，且 fail-closed

任何用于生成样本、筛选候选、执行扰动的前置算子，本身也要有已知阳性样本作为 must-hit 控制；控制缺失或不满足时该流程必须直接失败退出，不得继续汇报计数。

- **为什么**：算子的 recall 未知时，「命中 0 条」和「口径本身瞎了」在读数上长得一模一样，无法区分；不加 fail-closed 就会把「口径瞎了」误读成「确实没有」。
- **怎么自查**：如果这个算子的召回逻辑整个失效（比如条件写反、数据源接错），当前的运行方式会不会照样报出一个看似正常的数字，而不是直接报错退出？

（实证登记见 `round2-status.md` N83.1）

### 4. 判据文本交给判读器时，⛔ 不许把它自己的实证案例一起喂进去

用 LLM 或其他判读器对判据文本做校准、验证或执行判断时，输入只能是判据规则本身，不能连带喂入该判据过往命中/未命中的具体案例。

- **为什么**：判读器可能转为在照案例做模式匹配，而不是照规则本身做判断，而这两种行为产生的判读结果在读数上长得一模一样，无法从结果反推判读器到底在依据什么。
- **怎么自查**：把喂给判读器的输入原文里所有具体案例都删掉，只留规则条款本身，判读器还能不能做出同样的判断？如果不能，说明它依赖的是案例而不是规则。

（实证登记见 `round2-status.md` N84.1）

---

## 二、两条横向约束

### 5. 凡数一个 count 当判据，先问这个 count 里有几格是任何样本都会有的

任何以计数（而非比例、而非归一化后的值）作为判据阈值时，先拆解这个计数由哪些子项相加而成，逐项检查是否与被测性质无关、且对任意样本恒为正。

- **为什么**：与被测性质无关但恒为正的子项，其数量往往随样本规模（而非被测性质）变化，会把真正携带信号的子项稀释、甚至把判据的方向整体反转。
- **怎么自查**：把这个计数拆成加项之后，哪一项就算样本完全不含被测病灶，数值也不会是零？那一项就是稀释源，需要单独剔除或改用比例/归一化处理。

（实证登记见 `round2-status.md` N82.2）

### 6. 判据库每条必须显式标注「可机检 / 需 LLM 判读 / 需人判」，⛔ 不默认判据都能落成闸

每写入判据库一条规则，必须同时标注它的可执行方式属于以下哪一类：可由确定性代码机检、需要 LLM 判读、或只能由人工判断；未标注的规则不得进入自动化闸口。

- **为什么**：不是所有能用一句话表述清楚的规则都能被稳定地转成自动化闸；把「表述清楚」和「能自动判定」混为一谈，会让闸口悄悄挂上一条实际上测不准的规则。
- **怎么自查**：这条规则如果现在就要接进自动化流水线，谁来判定它过不过——一段确定性代码、一次 LLM 调用、还是必须有人看一眼？三者选不出恰好一个，就说明这条规则还没到能落闸的阶段。

（实证登记见 `round2-status.md` N84.3）
