# 实测结论（findings）

> **边界声明**：本页所有数字都是关于**一对特定模型**（宿主环境里的 `default` 与 `smol`）和
> **几族特定任务**（结构化输出、忠实性摘要、跨条目推算）的测量。它们是**工具的使用示例**，
> 不是可继承的普适结论。拿本仓库去评你自己的系统时，该复跑的是工具，不是抄这些数。
> 每条结论都标了它能被哪个可执行检查复现（见 [`reproduce_findings.py`](../paired_eval/reproduce_findings.py)）。

统计口径统一为：逐题交错、逐轮 McNemar 精确检验（主检验）+ 逐题置换检验（辅）、
Holm 校正多重比较、bootstrap 95% CI、有效样本（饱和诊断）、null 结论附可排除范围。
名词见 [lessons.md](lessons.md)。

---

<a name="harness"></a>
## 1. harness 维度：严格脚手架对结构化输出是必需的

**设计**：固定模型，只换脚手架（严格前缀 vs 裸指令），在对输出格式敏感的题上交错重复。

**机理（单题观察）**：`if-json` 严格 6/6（pass^3=1.00）vs 裸 2/6（pass^3=0.00），复核一致。
裸指令下模型输出 markdown 围栏 ` ```json ... ``` `，JSON 本身正确但 `json.loads` 失败——
**脚手架缺失导致的输出污染，不是能力问题**。这是 harness 差异最典型的形态。

**终报（4 题敏感子集，n=6，交错+轮转）**：

| 量 | 值 |
|---|---|
不一致对 | **0:13**，全部偏向严格脚手架 |
McNemar p | **0.000244**（Holm 后不变） |
Δ | −0.542，CI95 [−0.833, −0.250] |
有效样本 | 4/4 题 |
集中度 | 0.46——13 个不一致对分布在全部 4 题（2/6/1/4），无单题贡献过半 |

**结论**："严格脚手架对结构化输出是必需的"——效应在 JSON 对象 / JSON 数组 / key=value / YAML
四种独立格式上一致复现，故不是单题异常；但 5 道单值输出题两侧恒过，故**结论不外推到"脚手架普遍更好"**。
拓宽前（仅 `if-json`）集中度 1.00，只能支撑"某一题上有差异"。

**2×2 因子设计（4 题 × 4 轮，把 harness 与 model 放到同一把尺子上）**：

| | strict | bare |
|---|---|---|
default | 14/16 (.875) | 4/16 (.250) |
smol | 14/16 (.875) | 4/16 (.250) |

脚手架主效应 **+0.625**，Holm 后 p=**0.0117**（4 对全显著，不一致对 0:10）；
模型主效应 +0.000，p=1.000；交互项 0——**"小模型更依赖脚手架"这一常见直觉在此不成立**。

**复现**：`check_scaffold_effect`——首次复跑 Δ=0.688（记录 0.625），Holm 后 p=0.00098（更强），
方向一致，有效样本 3/4，集中度 0.36。

---

<a name="model"></a>
## 2. model 维度：两模型在此类任务上不可区分（效应 < 10%）

**四次独立筛选共 36 道候选题，全部两侧恒过**（saturation 报有信息题为 0）：

| 筛选 | 候选 | 结果 |
|---|---|---|
单步硬题（10 字符倒序、1234×5678、第 20 个素数） | 12 | 12/12 恒过 |
多约束组合（首字母递增、7 字含约束、回文、矩阵） | 10 | 9/10 恒过，1 道复核后为噪声 |
格式脆弱题 | 8 | 3 道对**脚手架**敏感，交叉验证对模型不敏感 |
多步计算（多步算术、排序取位、链式串操作、日期改写） | 8 | 8/8 恒过 |

**这条 null 的强度可以直接算**：72 个配对单元零不一致对，若真实单方面胜率为 10%，出现全零的概率仅
**5.1×10⁻⁴**（20% 时 1.1×10⁻⁷）——它不靠 MDE 也很硬。

**有界的 null**：4 题 × 20 轮 = 80 单元，MDE=0.10：Δ=+0.025，CI95 [0.000, +0.075]，不一致对 5:3，
p=0.727，差异全集中在 `fmt-yaml` 一题（15/20 vs 13/20）。**可报告结论：模型效应 < 10%（点估计 2.5%）**。

**交叉验证**：为脚手架维度筛出的 4 题改比模型（脚手架固定=严格）：有效样本仅 1/4，3:1，p=0.625，
24 单元 MDE=0.32——**任务的敏感轴是特异的**，为一个维度筛出的题不能自动用于另一个维度。

**结论**：在单轮、程序可判定的任务上这两个模型确实等价——不是造题能力不足（四种难度轴都试过），
而是**差异不在此类任务上**。要区分它们需换任务族：长程多轮、工具使用、需外部知识的推理。

**复现**：`check_model_null`——区分"差异变得可检出"（真漂移，FAIL）与"null 仍成立但界更松"
（WARN，不构成复现）。

---

<a name="prompt-constraint"></a>
## 3. 忠实性由提示约束决定，而非模型选择

同观察、同 judge（`must_ground` 政策），比两模型的无据 claim 比例：

| 提示条件 | 无据 claim 比例 |
|---|---|
"仅依据资料" | **0%**（两模型 8/8 claim 全 grounded） |
"补充你了解的相关背景" | **default 86% (84/98) / smol 89% (97/109)** |

模型间 Δ=+0.009，p=0.500（2:2）——仍不可区分。**一句提示措辞把无据内容比例从 0% 推到 87%**
（206 条 claim），与样本量无关地成立。

界的说明：模型间那两条 null 只有 4 个配对提示，MDE 不可达——**是无信息的 null，不能当证据用**。
但提示条件效应这一侧是决定性的。

**结论**：与第 1 节同源的第二次独立确认——**在这两个模型之间，harness 效应量远大于 model 效应量**。
副产品：验证了 `must_ground` 政策的判别力（score 1.00 → 0.07~0.11）与 `fabricated` 计数的敏感性。

---

<a name="agent"></a>
## 4. agent 维度：自检策略与脚手架同量级

同模型、同裸指令，只换策略——单遍 vs "出草稿后按指令自检修正"（多一次调用，不加任何工具或提示约束）：

> Δ=**+0.750**，CI95 [+0.250, +1.000]，逐轮 McNemar p=**0.00049**，不一致对 **12:0**，集中度 0.33

策略效应与脚手架效应同量级（+0.750 vs +0.625~0.688），方向一致、跨题复现。

---

<a name="interaction"></a>
## 5. harness × agent：收益递减但可叠加（不是替代）

这是本仓库**耗时最长、被自己推翻过一次**的结论。三个任务族上的 2×2：

**格式轴**（4 题 × 3 轮）：

| | single | check |
|---|---|---|
bare | 0.333 | 1.000 |
strict | 1.000 | 1.000 |

交互项 −0.667。但 strict 侧两格都在 **1.000——天花板**，"strict-check 是否优于 strict-single"
这半个问题**在此设计下不可测**（该格差异恒为 0 是设计所致，不是发现）。见
[corrections.md#substitution-refuted](corrections.md#substitution-refuted)。

**忠实性轴**（3 案例）：

| | loose | tight |
|---|---|---|
single | 0.089 | 1.000 |
check | 1.000 | 1.000 |

动态范围 11.2x（格式轴只有 3.0x），但三格仍触顶。**机制证据比分数更硬**：claim 数从 138 条
（115 无据）压缩到 12 条（0 无据），与严格提示下每案 2 条 = 资料事实条数完全一致——自检确实是在
删掉无据内容，不是改写措辞骗过 judge。

**跨条目推算轴**（六轮筛选后唯一不触顶的题族；资料只给终值与比率，问初值/毛利/年均增速，
模型会把自己算出的数当成资料所载，严格提示下也只有 0.64~0.89）：

| | single | check |
|---|---|---|
loose | 0.396 | 0.807 |
tight | **0.794** | **0.917** |

**关键读数——严格提示已到位时自检的增量：Δ=+0.183，CI95 [+0.086, +0.285]，p=0.0046（18 单元）。**
若两因子是纯替代，这个数应为 0；实测显著为正。

**独立复现**（`check_derivation_increment`，全新 18 单元）：参照格 0.719（未触顶），
增量 **+0.281**，CI95 [+0.195, +0.367]，p=0.0002——比记录值更强。

**实践含义**：脚手架更便宜（多一段前缀 vs 多一次模型调用），应先做；**但"做完脚手架就不必加自检"
是错的**——有余量的题型上自检仍有可测的额外收益。宽松提示下自检加 +0.411，严格提示下仍加 +0.183，
后者小得多（故交互项为负），但不是零。

---

<a name="power-ceiling"></a>
## 6. 功效上限（诚实披露）

`ALL_TASKS` 共 31 题，`claim_eval.detectable_effect(31) ≈ 0.24`——即"较优系统需在 ≥24% 的题上
单方面胜出且几乎无反向失误"才可能显著。**这是冒烟集，不是能定论的评测集**；要检出 10% 量级的差异
需上百道配对任务（见 `required_tasks`）。

---

<a name="release-smoke"></a>
## 附：最近一次发布态真机验证（全路由）

| 路由 | 观察 |
|---|---|
exact | `reason=no_slot` 正确归因，批次 `non_attempt_reasons` 汇总正常 |
retrieval | 观点句进 `unverifiable_claims`，queries 逐条留痕且中性（无声称值） |
trajectory | `must_ground` 0.67 vs `allow_parametric` 1.00（parametric=1），加权 > 未加权——那条无据补充是 detail 而非 core，重大幻觉不被无害细节稀释 |
bench | orders 逐轮交替，refusals/attempts 齐备；`RUBRIC_GATE` 分离度 1.00 |
