@@ -364,3 +364,112 @@ harness catches it, not a rate. Turning it into a rate means the condition varia
364364` TODO ` /` RESEARCH-AND-STANDARD-DIRECTION ` §3.1 across many tasks and models — and the earlier
365365attempt at exactly that produced no signal at all, because every task was normally
366366completable and the agent was never tempted to claim anything.
367+
368+ ---
369+
370+ # Round 4: the end-to-end average cannot see this, the confusion matrix can
371+
372+ ## Why this round exists
373+
374+ Rounds 1–3 compared arms by an ** average** : the unsupported-completion rate of one pile of
375+ runs against another pile. The placement experiment pushed that to its limit — 27 candidates
376+ per arm, 81 cells, ** one event** . At that event density a difference in means is not merely
377+ underpowered, it is the wrong functional. A zero-count arm only rules out rates above 11%
378+ (0/27); reaching 1% needs ~ 300 per arm.
379+
380+ So this round changes the instrument, not the sample. What a gate actually does is * decide* ,
381+ and a decision can be cross-tabulated against an oracle even when events are rare:
382+
383+ ```
384+ gold: deliverable gold: misleading
385+ gate accepts correct FALSE CONFIRMATION
386+ gate rejects FALSE ALARM correct
387+ gate abstains ← coverage loss, counted separately, never folded in →
388+ ```
389+
390+ ` catchRate c ` = caught / all misleading; ` falseAlarmRate f ` = wrongly refused / all
391+ deliverable; ` falseConfirmRate ` = misleading / all approved. Every rate carries its numerator
392+ and denominator, every proportion a Wilson interval, and every zero count a rule-of-three
393+ upper bound instead of a "0%".
394+
395+ ## Design: one candidate, five arms judging the same object
396+
397+ Propose-Judge-Commit's cached-claims ablation, generalised. For each (task, repetition) the
398+ harness generates ** exactly one** candidate — same trajectory, same workspace, same final
399+ answer — and every arm rules on that same candidate. Comparisons are therefore paired, and
400+ paired booleans make exact McNemar the right test.
401+
402+ | arm | what it is |
403+ | ---| ---|
404+ | ` accept-all ` | no gate at all: whatever the loop emits is delivered |
405+ | ` self-claim ` | the fused judgement: the model's own generated prose is the verdict |
406+ | ` judge-same ` | a separate call, ** same family** , reading the bounded frame |
407+ | ` judge-other ` | a separate call, ** different family** (Llama-3.1-8B), same frame |
408+ | ` compiled ` | rules reading the same frame, no model |
409+
410+ Two traps had to be removed before any number was meaningful, and both would have produced a
411+ confident false conclusion:
412+
413+ 1 . ** The gate under test was filtering its own candidate.** ` runAgent ` asks ` can_deliver ` and
414+ re-generates on ` revise ` . Run as-is, each arm sees a candidate its own gate already
415+ screened — circular. So candidate generation uses a neutral always-deliver rule, and the
416+ ` can_deliver ` frame is recorded verbatim for the arms to rule on afterwards.
417+ 2 . ** The scripted actions ignored the task.** The first policy preferred reading ` notes.md ` ,
418+ so it read that file no matter what was asked: 12 of 27 candidates were "I cannot determine
419+ — the evidence does not contain it". That was the harness failing to gather evidence, not
420+ the model failing. Driving the actions from ` task.required ` turned 5 of 9 into genuine
421+ completions and produced the first false completion actually caused by the model.
422+
423+ ## Result (n = 54 candidates: 39 deliverable, 15 misleading)
424+
425+ | arm | false confirmations | catch ` c ` | false alarm ` f ` | coverage | r required to pay off |
426+ | ---| ---| ---| ---| ---| ---|
427+ | ` accept-all ` | ** 15/54 = 27.8%** [ 17.6, 40.9] | 0/15 = 0% (≤20.0%) | 0/39 = 0% (≤7.7%) | 100% | never rescues anything |
428+ | ` self-claim ` | 1/4 = 25.0% | 0/1 = 0% | ** 10/13 = 76.9%** [ 49.7, 91.8] | ** 25.9%** | no fix rate can rescue it |
429+ | ` judge-same ` | 11/48 = 22.9% [ 13.3, 36.5] | 4/15 = 26.7% [ 10.9, 52.0] | ** 2/39 = 5.1%** [ 1.4, 16.9] | 100% | > 50% |
430+ | ` judge-other ` | 6/35 = 17.1% [ 8.1, 32.7] | ** 9/15 = 60.0%** [ 35.7, 80.2] | 10/39 = 25.6% [ 14.6, 41.1] | 100% | ** > 111% — impossible** |
431+ | ` compiled ` | 14/53 = 26.4% [ 16.4, 39.6] | 1/15 = 6.7% | 0/39 = 0% (≤7.7%) | 100% | > 0% |
432+
433+ Paired, exact McNemar, abstention counted as "did not accept":
434+
435+ | comparison | discordant | exact p | reading |
436+ | ---| ---| ---| ---|
437+ | ` judge-same ` vs ` judge-other ` | 14 : 1 | ** 0.001** | the two judges are distinguishable |
438+ | ` accept-all ` vs ` judge-other ` | 19 : 0 | ** < 0.0001** | ` judge-other ` refuses 19 things the baseline delivers |
439+ | ` accept-all ` vs ` judge-same ` | 4 : 1 | 0.375 | ** not distinguishable** |
440+ | ` accept-all ` vs ` compiled ` | 1 : 0 | 1.0 | not distinguishable |
441+
442+ ## What this says, and what it does not
443+
444+ ** The confusion matrix works where the average did not.** The end-to-end rates are
445+ indistinguishable: 27.8% false confirmations with no gate, 22.9% with the same-family judge —
446+ Wilson intervals overlap almost completely. On that metric alone the honest conclusion is
447+ "no measurable effect", which is exactly the null that has no power to mean anything. But
448+ ` c ` and ` f ` are estimable at the same n, and they show a real trade-off.
449+
450+ ** No arm dominates, and the second family is the worse gate, not the better one.**
451+ ` judge-other ` catches 60% against ` judge-same ` 's 27% — but it also refuses 25.6% of
452+ deliverable answers against 5.1%, and its false-alarm rate exceeds the bound that even a
453+ * perfect* repair channel could tolerate (25.6% > 23.1% at r = 1). The independent different-
454+ family judge is therefore ** net harmful** on this task set. The usual story — "use a
455+ different family so the verifier is independent" — does not survive here, and reporting only
456+ the catch rate would have made it look like a win.
457+
458+ ** The fused judgement is close to worthless, measured rather than asserted.** ` self-claim `
459+ abstains on 74% of candidates (the prose rarely contains an explicit completion claim either
460+ way), and when it does rule it refuses 10 of 13 deliverable answers. It is both uninterested
461+ and, when interested, wrong in the expensive direction.
462+
463+ ** The compiled rule is honest and nearly blind.** Zero false alarms, but it catches 1 of 15:
464+ it only detects "claims completion with no state-changing tool in the frame", and 14 of the
465+ 15 misleading cases here are * silent omissions* — the answer never claims anything at all.
466+ A rule that can only catch claims is structurally unable to catch silence.
467+
468+ ## Limits
469+
470+ Two local 9B-class models, nine tasks, six repetitions, one task suite written by the same
471+ author as the gate. The oracle for deliverability is our own ` classify ` , so arm and gold share
472+ a lineage — the κ-style reliability of that labelling is not measured. The 15 misleading
473+ cases are dominated by silent omission (14), which is one failure mode, not the space of
474+ them. And ` r ` is still not measured: what is reported is the fix rate a repair channel would
475+ have to reach, not one that was built.
0 commit comments