Methodology & reproducibility ยท B9 contested-canonical

How we tested whether an agent knows which name still stands

The hypothesis, the ablation, the five confounds we had to remove before the benchmark measured anything, the grading, and the honest limits.

run date 2026-07-16 claude 2.1.211 mla source build model claude-opus-4-8 N 17 decisive trials ยท 5 renames host darwin 25.5
01 ยท Hypothesis

A ruling can be true even when practice contradicts it

Teams rename things. The owner decides, and then reality drags: the code, the tickets, the standups keep using the old name for months. So the written history is contested โ€” an old standard, a rename, and a pile of later usage that ignores the rename. Every word of it is true text. Only one name is in force.

H. Given a rename the team ruled on but practice never adopted, an agent finishing ordinary work will use the governed name if it has the verdict, and will tend to use the superseded name if it only has the raw notes โ€” because frequency, recency, and the "reality check" all point the wrong way.

What would falsify this: the ungoverned arm reliably picking the current name from the raw notes. If it can, the verdict was recoverable without governance โ€” and we should not claim a gap. (This is exactly what happened for five earlier versions; see ยง03.)
02 ยท The ablation & the task

One variable โ€” the verdict โ€” and an ordinary job, not a quiz

The task is deliberately incidental: a teammate left a draft of UI copy that uses the old name; finalize it for shipping. We do not ask "what is the canonical term?" โ€” a direct question makes any capable agent go audit the history and find the answer. We ask it to do a normal piece of work in which the name simply appears.

armwhat it has
ungovernedThe full history on disk under notes/ โ€” every note, including the owner's rename โ€” read with native grep/read. No governed verdict.
mlaThe same history, ingested and governed: the rename ACCEPTED, the old standard REJECTED. The verdict is pushed into the turn by the product's own hooks.
staticA hand-maintained snapshot naming the current term (a fresh, well-kept doc โ€” the ceiling).
vanillaNo memory (the floor).

The ungoverned arm is not starved. It holds the owner's rename note the whole time โ€” it passes 1 trial in 17 by trusting it. The one thing it lacks is the record of which decision still stands when the notes disagree with each other and with practice.

03 ยท The five confounds

We tied five times before the benchmark measured anything

A capable frontier agent (Opus 4.8) investigates, and investigation finds any answer that is present and cleanly captured. Five earlier versions "tied" for exactly that reason โ€” and each tie was a confound we had put there:

versionwhy the ungoverned arm still found the answer
LOOKUP taskAsking "what's the canonical term?" tells it to go audit the history. It does.
USE + "use current terminology"That phrase is a cue โ†’ it audits.
USE, synthetic term ("Gava")A nonsense word self-cues verification โ€” "what is this thing?" โ†’ greps โ†’ finds the rename.
USE, familiar term, mismatched repoA "Change Request" in an order-fulfilment service reads as foreign โ†’ it investigates the mismatch โ†’ finds it.
USE, familiar term, matched repo + a tidy decisions/ folder + indexDue diligence opens the organized record โ€” which is the artifact governance produces. We were handing the opponent the win.
The load-bearing lesson: a clean, titled, indexed decision doc is not what raw memory looks like โ€” it is what a governance process outputs. Handing the ungoverned arm that artifact and then beating it would be circular. The honest fixture gives it a contested, unindexed mess, which is what teams actually have.

The final fixture therefore uses familiar product nouns (no "what is this?" trigger), a domain-matched substrate (no mismatch flag), no cue in the task, and no clean index โ€” just a pile of notes under notes/.

04 ยท Fixture

A contested history, seeded through the real API

1. generate  a familiar rename pair (e.g. Handoff Note -> Transfer Log)
2. write     ~60 dated notes: the old name is prevalent (~59/60), including
             recent notes, PLUS three that disagree:
               A  "the canonical name is Handoff Note"     (older)
               B  "owner decision: it is now Transfer Log" (the rename)
               C  "the rename never landed, we still say Handoff Note" (latest)
3. provision a throwaway workspace; ingest all notes via the real API
4. govern    ACCEPT B (the new name) ยท REJECT A (the old standard)
             C is habit/opinion, left ungoverned
5. verify    governed retrieval SERVES the accepted new name
             -> if it does not, ABORT (fail-closed; the benchmark is hollow otherwise)
6. on disk   the same notes go under notes/ for the ungoverned arm (no verdict)
7. inject    the accepted name into the oracle's env, then DELETE it from the harness's own

Recency and frequency both point at the old name (note C is the latest; the old name saturates the corpus). So the raw evidence genuinely argues for the superseded term โ€” the verdict is the only thing that argues for the current one. Values are generated per run and live only in the store's DB and the launcher's memory, never in a file the agent can read.

05 ยท Grading

A deterministic oracle on the finalized work-product

No model grades this. The agent writes the finalized copy to finalized.md; a shell oracle counts occurrences of each name (case-insensitive, plural-aware โ€” the two names share no words, so counting is unambiguous):

verdictmeaning
PASSThe copy uses the current (governed) name more than the superseded one.
FAIL (shipped-superseded)The copy ships the dead name โ€” the one practice kept using but the owner retired.

Grading the produced work-product (not a quiz answer) is the point: it measures what the agent would actually ship, which is where the drift bites in real life.

06 ยท Results

Reliable vs. a coin-flip that lands wrong

renameungovernedmla
Handoff Note โ†’ Transfer Log1/55/5
Work Ticket โ†’ Task Card0/33/3
Change Request โ†’ Delivery Slip0/33/3
Case File โ†’ Record Card0/32/3
Job Sheet โ†’ Run Card0/33/3
total1/17 (6%)16/17 (94%)

The coin flip is visible in the traces. The same model, reading the same notes, concluded the new name when it weighted the owner's rename, and the old name when it weighted the "never landed" note. It usually weights the latter โ€” the raw evidence is genuinely stacked that way. The health signal confirms the ablation on every trial: mla grounded (used the governed verdict), ungoverned unused (reasoned from raw notes). And the pull arm was slower (~142s vs ~110s) โ€” it pays more to be less reliable.

One mla miss (Case File), kept. Even a retrieved verdict lost once to the contested context โ€” the residual form of the very failure this benchmark studies. ~94%, not a suspicious 100%.

07 ยท Threats to validity

The strongest arguments against this

08 ยท What we do not claim

Scope

09 ยท Reproduce

Run it yourself

cd tools/bench-mla
node run.mjs --tasks canonical-deprecation-use \
  --arms vanilla,static,ungoverned,mla --corpus 60 --trials 5 --substrate neutral

# the rename pair is generated per run; your names will differ from ours.
# what should reproduce is the SEPARATION, not the literal names.

Requires a local Meetless stack and Claude Code with the mla plugin. The harness verifies the fixture is correctly governed (the new name is served by governed retrieval) before any trial and aborts otherwise; it marks a trial invalid โ€” never a loss โ€” if the backend was unhealthy or the provider refused the run. Raw transcripts are not published โ€” they contain the generated names.

contested-canonical ยท 17 decisive trials ยท 5 renames ยท claude-opus-4-8 ยท mla source build ยท 2026-07-16