teal-sea / zeta-labstate of record · compiled 14 Aug 2026 · revision 9ebdea0 · source

Library · HARNESS-EVALUATION-PROTOCOL.md

HARNESS-EVALUATION-PROTOCOL.md

3,639 words · 396 lines · source

Status when this file was committed: pre-registration only. No result in it. Everything below was written before any arm was run, any task was authored, or any number was seen. The commit that adds this file adds no experiment and changes nothing under harness/; that ordering is checkable in git log and is the only reason the criteria below are worth anything. docs/21 §1 and REDTEAM.md W2 are what happens when it is not done.

This protocol follows the house pattern set by docs/21 and docs/23: criteria, thresholds and predictions frozen first, failures recorded as failures.


1. The claim under test

Does the generalized adversarial validation harness improve agentic research reliability enough to justify its complexity and cost?

The harness is the claim, not the instrument. This experiment is designed to be able to conclude that it should be simplified or deleted, and §12 lists the observations that would say so.

Two prior findings shape the design and are not assumed to be correct:

Those reports are input, not evidence. This protocol re-derives what it needs. Where a report's claim is load-bearing here it appears as a hypothesis with an arm attached, never as a premise.

2. Hypotheses

IDHypothesisThe arm contrast that tests it
H1Adversarial controls in any form beat an ordinary strong-agent workflow.H-rival vs S1
H2(primary) Structure-matched rivals add reliability beyond what a second independent agent adds at the same budget.H-rival vs R2
H3The generalized abstraction adds value over the same four roles hand-rolled per subject.H-full vs H-hand
H4Decoys and surrogates add value beyond rivals alone.H-full vs H-rival
H5Lesions / measured detector power add value beyond rivals alone.H-lesion vs H-rival
H6The integrity audit (the referee) adds value beyond a full battery.H-audit vs H-full
H7An exact/formal oracle dominates every model-mediated control where one exists.H-formal vs all
H0The null this experiment exists to be able to accept: none of the above beats extra budget spent on more independent agents.S1, R2 vs everything

H2 is the primary hypothesis. Everything else is secondary and is labelled exploratory in the analysis.

3. Arms

Nine arms. The ladder A–G suggested in the commissioning brief was rejected as confounded: each of its rungs adds a mechanism and resources at once, so a rising curve would be unattributable. This design holds budget constant across arms and separates mechanisms.

ArmWhat runsBudget
S0one agent, ordinary workflow, no controlsB
S1one agent, ordinary workflow, twice the budget (more turns / higher effort)2B
R2two independent agents, no shared context, each rebuilds the verdict from the claim + spec alone; disagreement surfaced, not resolved by either2B
R3three independent agents, majority-report3B
H-rivalone agent + structure-matched rivals≈2B
H-lesionone agent + planted lesions with detector power measured≈2B
H-fullone agent + full battery via harness/protocol.py (rivals, decoys, surrogates, lesions)measured
H-handone agent + the same four roles hand-rolled for the subject, no protocol.py, no Department, no registrymeasured
H-auditH-full + integrity.audit_department + ClaimReportmeasured
H-formalone agent + an exact oracle (exhaustive enumeration / exact rational arithmetic / Lean where the task admits it)measured

R2 and R3 are the matched-budget controls the whole experiment turns on. An expensive workflow beating a cheap naive baseline would demonstrate nothing; the question is whether it beats the same money spent on another good agent.

H-hand is what makes H3 answerable. Without it the experiment measures the roles and reports the result as if it were about the abstraction — the exact conflation §1 flags.

4. Budget: four resources, measured separately

The phrase "equal budget" is not used in this protocol without naming the resource. Four are tracked independently, because they are not interchangeable and the tree's own economics say so (HANDOFF.md: verification costs wall-clock, judgment costs tokens):

ResourceUnitSource
model computeinput / output / cache-read / cache-write tokensprovider usage response
moneyUSD, provider-reportedprovider usage response
operator timeminutes of human attention (setup, adjudication, disagreement handling)stopwatch, recorded per task
wall-clocksecondstelemetry run records

Equalization rule, frozen: arms are matched on output tokens as the primary resource, within ±15%. Where an arm cannot be brought inside that band without changing what it is (a full battery may simply cost more), it is not adjusted; instead every endpoint is reported twice — raw, and normalized as endpoint per 1000 output tokens. An arm that wins raw and loses normalized is reported as winning raw and losing normalized. No composite "budget score" is computed; there is no exchange rate between operator minutes and tokens, and inventing one would hide the trade this experiment exists to expose.

4.1 Unresolved dependency, and it blocks execution

This environment does not expose token counts or cost to a session. Measured 2026-08-13 (RUN-TELEMETRY.md §7): no ANTHROPIC_MODEL, no usage variables, nothing from the harness. The run registry landed in this pass captures wall-clock, artifacts, commits and prompts — not tokens, not dollars.

Consequence, frozen here rather than discovered later: the experiment must be executed through an API runner that returns usage per request, not through interactive agent sessions. Until such a runner exists and emits into the run registry, two of the four budget resources are unmeasurable and the primary comparison is uninterpretable. Running the experiment before then is a protocol violation, not a shortcut.

5. Tasks and ground truth

n = 40 claims, authored in two batches of 20 (§5.4).

5.1 Truth must be establishable without any arm

Every claim's ground truth is fixed at authoring time by a method no arm has access to:

A claim whose truth cannot be established this way is excluded at authoring, not adjudicated later.

5.2 Composition

CountPurpose
Sound claims18false-rejection rate
Defective claims18detection rate
Competence-floor controls42 blatantly true, 2 blatantly false

The competence floor is mandatory and comes from a recorded failure: the resumption benchmark (ROADMAP.md 2026-08-09) had one model family fall below its floor, and its cells were voided. Same rule here — see §9.

5.3 Defect classes

Nine classes, each instantiated twice, drawn from this repository's own incident record so they are realistic rather than toy. They are re-instantiated on new surface, never restored verbatim — same failure class, new mathematics, new code, new prose:

#ClassOriginal incident
1shared-layer false agreement between "independent" checksdocs/25 §2.1 — both rigor backends wrong from one parsing layer
2a guard whose reference is the same technique at lower resolutiondocs/25 §2.4
3verdict-shaped default: "cannot decide" encoded as the favourable answerdocs/25 §2.5
4precision-insensitive artifact — does not move when the approximation improvesthe PSLQ relation stable at 300 digits
5the test set is the rival setHunt #2
6a declared instrument whose precondition is never invokedonline_list_is_complete
7scan-window artifact (extremum pinned at a window edge)docs/17 §2
8boundary/off-by-one inside a bound, at float grade on a thin marginfrontier defect #12, the k=3 boundary
9a superseded constant restated as currentthe Λ attribution defect tests/test_claim_attribution.py records

Difficulty is stratified and declared: of each pair, one instance is detectable from the artifact alone and one requires reconstructing the computation. Balance is checked before freeze and reported.

5.4 Contamination policy

6. Endpoints

6.1 "Useful outcome", defined before any data exists

A per-claim score, scored blind against a key written at authoring time:

ScoreDefective claimSound claim
2correctly rejected and the named mechanism matches the planted classcorrectly accepted with the load-bearing step identified
1flagged as suspicious without the correct mechanismaccepted with hedging that does not identify why
0accepted as soundrejected

A useful outcome is a score of 2. Scores of 1 are reported separately and never pooled into the primary — "it smelled wrong" is not a verdict this laboratory credits, and crediting it would flatter every arm that produces volume.

6.2 Primary endpoint

Youden's J = detection rate + sound-claim survival rate − 1, computed on score-2 outcomes only, per arm, over batch 1, replicated in batch 2.

J is primary rather than detection rate alone because any workflow can drive detection to 1.0 by rejecting everything, and a referee that only ever says no is the exact failure harness/README.md's two-direction calibration rule exists to catch. The (detection, false-rejection) pair is always reported beside J.

6.3 Secondary endpoints

6.4 Multiple comparisons

Eight contrasts across nine arms. Frozen: H2 is the only confirmatory comparison. Everything else is exploratory and labelled as such in every table. No p-value gates any conclusion. Following the E2 precedent (docs/reviews/e1-e3-experiment-protocol.md §7): "18 runs is not a clinical trial and pretending otherwise would be its own kind of sham" — this protocol declares itself exploratory with pre-registered decision rules, and can honestly conclude only "large and consistent" / "absent" / "underpowered".

7. Randomization and blinding

8. Procedure, prompts, and stopping rules

9. Failure handling and exclusions

ConditionConsequence
An arm falls below the competence floor (misses a blatant control)that arm's cells are void and support no conclusion in either direction — the resumption benchmark's rule
A claim's ground truth is found wrong after runs beginclaim excluded from all arms, logged, not silently re-keyed
A defect class turns out to be detectable by inspection alone (all arms score 2)class reported at ceiling and excluded from the primary; a ceiling lesion is a design defect, recorded — batch 1's known risk
A run crashes or is interruptedre-run once from the same frozen prompt; if it fails again the cell is void, never imputed. telemetry records both attempts
Contamination discovered (a task recognizable from this public tree)that claim is excluded and the discovery is reported, not patched over
harness/ is modified during the experimentthe experiment is void. A changed harness requires a new pre-registration and a new task set; re-running the same benchmark against a repaired harness and reporting it as confirmatory is the specific fraud this section exists to prevent

10. Analysis, frozen

  1. Per-arm J, detection, false-rejection, with exact counts. No smoothing.
  2. The eight contrasts, each as a difference in J with a bootstrap interval, labelled confirmatory (H2) or exploratory (all others).
  3. Efficiency table: J per 1000 output tokens, J per operator minute, per arm.
  4. Batch 2 replication reported separately, never pooled with batch 1.
  5. Every void cell listed with its reason.
  6. The six possible conclusions in §11 stated explicitly, with which one the data supports and why the other five were not chosen.

11. The six conclusions this experiment can reach

Frozen so that none can be added afterwards to fit a result:

  1. The full harness materially helpsH-full/H-audit beat R2 on J at matched output tokens, replicated in batch 2.
  2. Only some components help — one or more of H-rival/H-lesion beats R2, while H-fullH-rival ≈ 0 and H-auditH-full ≈ 0.
  3. Independent replication captures most of the benefitR2H-full at matched tokens, and R3H-full.
  4. The generalized abstraction adds negligible valueH-handH-full on J and H-full costs more in operator minutes.
  5. The harness costs more than it contributes — harness arms match on J but lose on J per 1000 output tokens and J per operator minute.
  6. The harness makes performance worse — any harness arm's escape rate exceeds S1's, or its false-rejection rate exceeds the ceiling while J does not improve.

12. Criteria that count AGAINST the harness

Stated as sharply as the supporting criteria, because the tree's own record (docs/21, docs/23) is that the honest failures are the useful part.

ObservationWhat it licenses
R2 J ≥ H-full J at matched output tokensthe primary result is negative. Spend the budget on a second agent
H-hand J ≈ H-full J (within the bootstrap interval) and H-full costs more operator minutesdelete the abstraction, keep the roles. protocol.py, Department, KNOWN_DEPARTMENTS and the conformance suite lose their justification; the four roles move into subject code where the live hunts already put them
H-auditH-full ≈ 0the integrity layer is not earning its complexity. Collapse five grades to "audited / not audited"; promotion.py and preregistration.py lose their remaining rationale
H-fullH-rival ≈ 0decoys and surrogates are ceremony for this task class; the admission rule's "decoy or surrogate" requirement should be re-derived, not assumed
Disagreement rate inside R2 predicts defects as well as any batterythe cheapest possible detector matches the apparatus. Report it prominently; it is the most damaging single result available
Any harness arm's escape rate > S1'sthe harness is actively harmful on this task class and must be scoped or removed
Harness arms lose on J per operator minutethe cost lands on the scarcest resource the laboratory has

If two or more of these fire, the recorded conclusion is "simplify", and the simplification is specified before the data exists: keep rivals, nulls and lesions as subject-level functions; keep shams.py (its value is that it falsified the audit); delete or demote the department registry, the five-grade integrity vocabulary, and the promotion gate.

13. What would make the harness worth expanding

Symmetry, so this is not a document that can only convict:

14. Pre-registered predictions, recorded to be scored

Written before any data, to be scored right or wrong in the results section. docs/21 scored three of six wrong and recorded them; the same applies here.

#PredictionConfidence
P1H-rival beats S1 on J (H1 holds)high
P2H-rival does not beat R2 on J overall (H2 fails), but does on defect classes 1 and 5medium
P3H-handH-full — the abstraction adds nothing on J, and costs more operator minutesmedium-high
P4H-auditH-full ≈ 0 on this task classmedium
P5R2 disagreement rate alone detects ≥60% of defectsmedium
P6H-formal dominates every arm where an exact oracle exists, and is inapplicable to ≥half the claimshigh
P7At least one defect class sits at ceiling in batch 1 and has to be excludedmedium

15. Unresolved dependencies — the experiment cannot start until these close

  1. Token and cost accounting (§4.1). Blocking. Needs an API-based runner emitting usage into the run registry.
  2. An independent task author, not the harness author and not the scorer. Blocking for the contamination policy.
  3. A private repository for the task set. Blocking.
  4. An independent scorer who authored nothing.
  5. Operator sign-off on §6.2's primary endpoint and §4's equalization rule, in writing, before batch 1 is authored.

16. What this protocol deliberately does not do


Freeze. This file is the pre-registration point. Its commit contains this document and nothing else. Any change to §§2–12 after the first run voids the experiment and requires a new protocol at a new commit.