Skip to content

v0.29.0-beta — A mean that hid a destroyed shape, and silence that was still a verdict

Pre-release
Pre-release

Choose a tag to compare

@joslat joslat released this 28 Aug 15:26
· 43 commits to main since this release
623cb3b

Every headline number here is re-measured against gpt-5.5, not carried forward. All four items are instrument defects — the corpus designs were sound; the things measuring them were not.

A vertical mean is satisfiable by averaging

Arithmetic calibrated to 0.700 — dead on target, gate green, 985 tests passing — while its four shapes sat at:

shape before after echo n V9
count 0.857 0.827 0.1250 14 7/14
delta 0.947 0.777 0.3125 10 1/10
duration 0.083 0.653 0.1250 12 5/12
sum 0.894 0.818 0.1875 14 6/14

A convention clause collapsed duration's lexical retrievability and the single echo knob compensated, loosening the other three until the average returned. count at 0.857 was not improving — it was being paid for. Calibration is now per shape, and the gate holds the band within every shape.

The search was also stopping at the first in-band rung rather than converging on a target, so stamped difficulty was set by grid placement instead of intent. Running the new per-shape gate red-first found ten shapes across five verticals outside the band — none caused by this work, none previously visible, because nothing had ever looked below a vertical mean. Pinned as a ratchet.

Silence was still a verdict — in both directions at once

0.27's retry cut V3's empty rate 78.2% → 3.1%, but frequency is not accounting: the residue still scored, as a PASS on V2/V3/V6 and a FAILURE on V1/V8/V9. V3 passes when an ablated context fails to reproduce the answer, and an empty completion reproduces nothing — so the arm whose whole job is proving gold is load-bearing was certifying validity the evidence did not support.

The ceiling had been sized on censored data: every recorded empty carried reasoning_tokens exactly equal to the 8,000 cap. Replayed uncensored: 153 / 7,677 / 14,639 — the cap sat almost exactly on the median. And the retry ladder was the real constraint: at ×3 from 900, two retries topped out at 8,100, so raising the cap alone could never have reached 14,639.

Re-probed on the corrected instrument — 0.0% empty on all six arms, unmeasured_no_answer null:

V1 50/50   V2 50/50   V3 49/50   V6 49/50   V8 50/50   V9 19/50   headroom 0.62

Bitemporal had no judge template — and the first fix overfitted where nothing could see it

Bitemporal shipped in 0.26.0-beta falling through to StandardBody, which is the two words "Grade this answer." The shared preamble defines premature as asserting as already true something gold says has not happened yet, and bitemporal golds justify themselves with exactly that sentence — so the judge graded the justification clause rather than the value. Agreement 0.750 / 0.792 / 0.792, never measured before, because the published 0.983 covered 120 cases from the five verticals that existed on 2026-08-15.

The first fix said premature "will essentially never apply" here. It scored 24/24 — and was overfitted: the set contained zero Premature-labelled bitemporal cases, so a rule suppressing Premature could not be penalised by the only instrument watching. Four negative controls were added, graded blunt to subtle; the overfitted version scores 0 of 4 on them.

The shipped fix is a question-type discriminator — asks which valuewrong; asks whether a correction had been madepremature. Bitemporal 28/28 in all three runs, family 0.983 over 172 cases, shared preamble untouched, blast radius measured across all seven verticals.

Also

  • The judge-calibration record could describe a subset of the set it validates. It read cases: 120 while the set held 168 — Bitemporal and Temporal both route to StandardBody, already inside the fingerprint, so adding them changed nothing and fired nothing. The gate now requires the recorded count to equal the live set and every vertical to carry a per-vertical entry.
  • The BM25 calibration gate read its acceptance band out of the artifact it was grading.
  • The probe cache flushed every fifty calls, so an interrupted ten-minute window banked nothing. Now every ten.

Verifiable without spending anything

  • corpus_sha256 == 2feda94be7e8c026…, probed_corpus_sha256 equal to it
  • coverage.per_shape_realised — four keys, every value in [0.50, 0.90]
  • probes.status == "run", reference_deployment == "gpt-5.5"
  • every arm in empty_rate_by_arm at rate == 0.0
  • headroom_over_lexical_retrieval == 0.62

Arithmetic question text changed, so duration-bearing controls downstream reset. duration's V8/V9 are also structurally depressed independently — median 6 required sessions against 4 elsewhere, mean ceiling 0.917, 6 of 12 questions above K_ref=5 — so part of its V9 is unreachable by any ranker at k=5.

Full changelog: https://github.com/AgentEvalHQ/AgentEval/blob/v0.29.0-beta/CHANGELOG.md