The hypothesis, the ablation, why sorting is easy and exclusion is hard, the deterministic grader that separates three ways to fail, and the honest limits — including the one modeling choice this result rests on.
"The one modeling choice this result rests on" turned out to be disqualifying: the accept/reject verdict — the only signal that separates adopted from killed — is written nowhere in the corpus the opponent reads. It exists only in the mla arm's governance store. Exclusion is therefore impossible for the opponent by construction, which makes the result a tautology rather than a measurement. Full retraction on the results page; methodology preserved below as the record of a flawed design.
Over a quarter, a team tunes one knob five times. Twice, a value is floated and then killed — a road not taken. Three times, a value is actually adopted. Months later someone asks the honest question: "what did we set it to, in order?" The right answer is the three that stuck, oldest to newest. The two that were rejected must be left out.
Each change was written down the same way — a dated note that states a value as if setting it. Nothing in the text of a rejected proposal says "this one didn't happen." So the corpus contains five plausible, dated, equally-worded values, and only three of them were ever in force.
H. Sorting five dated notes is trivial for any capable agent. The hard part is exclusion — knowing which two to drop. An agent with the accept/reject verdicts reconstructs the in-force history exactly; an agent with only the raw notes cannot tell an adopted value from a killed one, so it must either decline (honest, useless) or guess (and risk shipping a road not taken as if it were policy).
The task asks the agent to reconstruct the in-force history of a single production setting (a rollback window, in minutes), oldest change to newest, writing one integer per line. It is deliberately a reconstruction, not a single-fact lookup: the difficulty is not finding a value, it is deciding which values belong and in what order.
| arm | what it has |
|---|---|
| ungoverned | All five dated notes on disk under notes/, read with native grep/read. Every value is present; no accept/reject verdict is. |
| mla | The same five notes, ingested and governed: the three adopted values ACCEPTED, the two roads-not-taken REJECTED. The verdicts are pushed into the turn by the product's own hooks. |
| static | A hand-maintained changelog that already lists the in-force sequence (a fresh, well-kept doc — the ceiling). |
Every note carries its own date, so ordering is free — sort by date and you are done. We deliberately removed every other cue that could leak which values were adopted:
1. generate 5 distinct two-digit values on 5 dated slots (~92 days apart,
oldest -> newest); pick 2 at random to be REJECTED (roads not
taken) and 3 to be ACCEPTED (the in-force history)
2. write each as an identically-worded dated note:
"Set the production rollback window to N minutes." __
(adopted and rejected notes are indistinguishable as text)
3. provision a throwaway workspace; ingest ALL five via the real API,
in shuffled order, under random hex filenames
4. govern ACCEPT the 3 adopted values · REJECT the 2 roads-not-taken
(by value regex, so the verdict binds to the number, not the file)
5. verify governed retrieval SERVES all three accepted values
-> if any is missing, ABORT (fail-closed; the benchmark is hollow otherwise)
6. on disk the same five notes go under notes/ for the ungoverned arm (no verdict)
7. inject the accepted sequence + the rejected values into the oracle's env,
then DELETE them from the harness's own memory
The accepted sequence and the rejected 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. The static arm's changelog is the one place the in-force sequence is written in prose; that is deliberate — it is the ceiling we are trying to match.
No model grades this. The agent writes its answer as one integer per line; a shell oracle extracts the integer-only lines, in order, and compares the sequence to the accepted history. Averaging the failure modes together would hide the most interesting result, so the oracle names each one:
| verdict | meaning |
|---|---|
| PASS | The produced sequence equals the in-force history exactly — right values, right order, nothing extra. |
| FAIL · declined | Produced no sequence. The honest failure: the agent could not tell which values were in force and refused to invent a history. Correct, and useless — it still cannot answer "what did we decide?" |
| FAIL · shipped a road not taken | Included a rejected value. The dangerous failure: a proposal that was killed is reported as if it had been policy. |
| FAIL · wrong history | Some other wrong sequence (missing an adopted value, mis-ordered, etc.). |
Grading the reconstructed sequence (not a single fact) is the point: it measures whether the agent could rebuild "what we actually decided" — the artifact a new engineer, an auditor, or a next-sprint planner actually needs.
| arm | rebuilt it | failure modes | health | median |
|---|---|---|---|---|
| static (ceiling) | 9/9 | — | unused | ~199s |
| ungoverned | 0/9 | 7 shipped a road not taken · 2 declined · 0 wrong | unused | ~267s |
| mla | 9/9 | — | grounded | ~104s |
Across 3 independently-generated histories × 3 trials, the split was identical every time: static and mla each rebuilt the exact in-force sequence 3/3; the ungoverned arm rebuilt it 0/3. When it failed it did so in one of two ways — 7 of 9 it returned all five values in correct date order (nailing the sort, failing the exclusion), and 2 of 9 it wrote an empty answer rather than invent a history. It was never right, and it was slower being wrong (~267s) than mla was being right (~104s). The ablation is backed by the stored health signal on every trial: mla grounded (queried the reviewOutcome verdict; retrieve 7–12 per trial), static & ungoverned unused (no governed retrieval).
cd tools/bench-mla node run.mjs --tasks decision-history \ --arms static,ungoverned,mla --trials 3 --substrate neutral # the 5 values, which 2 are rejected, and the dates are generated per run; # yours will differ from ours. What should reproduce is the FAILURE MODE: # ungoverned cannot separate adopted from rejected; mla reconstructs the sequence.
Requires a local Meetless stack and Claude Code with the mla plugin. The harness verifies the fixture is correctly governed (all three accepted values are 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 values.