Does a model expand an ontology hierarchy when nobody tells it to?

Three models — Opus 5, Sonnet 5, Haiku 4.5 — answering six ontology questions and their six controls over the Proto-OKN federation, one tool condition, three attempts each: 108 episodes.

The question this study asks is narrow and specific. A scientist naming a category — "for cardiovascular disease", "hormone secretion" — does not say "walk the subClassOf closure", because a scientist would not. But the data is annotated at specific terms, so the abstract parent is nearly empty by construction and the question is a subtree query whether or not anyone says so. Recognizing that, unprompted, is the task.

QUESTIONS.md reads the same episodes question by question.

1. Methods

Corpus. 12 .rq files (benchmarks-ontology/ in this repo) across six tiers. Each tier is a pair:

Neither prompt mentions subtypes, descendants, closures or ontologies. The pair differs by exactly that one sentence, so the arm measures obedience against the same question the other arm measures discovery against.

Three ontologies. Four records expand a MONDO disease category, one expands a GO biological process, one expands an HPO phenotype. Two knowledge graphs are joined per record, so the ontology work sits on top of a cross-graph join rather than replacing it.

One arm only. Full toolkit, graph named. Ablations are the cross-graph study's axis; adding them here would confound "did it expand" with "did it have the tools".

Agents. Three attempts per question, driven through claude -p 2.1.243, 900s per-episode deadline, high for Opus, medium for Sonnet, the CLI default for Haiku.

Ground truth. Answer keys executed against the Proto-OKN federation endpoint; scoring at 6 significant digits with a 0.0005 relative tolerance. Execution strictly serial.

How mean F1 is calculated. Partial credit, so a near-miss scores above zero. Per attempt, over the answer's rows as a multiset: precision = matching rows ÷ rows returned, recall = matching rows ÷ rows in the key, F1 = 2PR/(P+R). A row matches only if it agrees cell for cell, with IRIs compared by local name where unambiguous and decimals at 6 significant digits (0.0005 relative tolerance); column names are ignored unless both sides use the same set. Both sides empty scores 1.0. The reported figure averages across a question's attempts first and then across questions, so each question weighs the same.

2. What each attempt produced

Outcome per Attempt, by Model — Cross Graph Ontology Expansion 108 episodes: three models x 12 questions x three attempts. Outcome per Attempt, by Model — Cross Graph Ontology Expansion right rows and order right rows, wrong order wrong rows hit the 900s timeout, no answer exact Opus 5 effort high KG named 33/36 Opus 5 · KG named · nde-expand_autoimmune · right rows and order Opus 5 · KG named · nde-expand_autoimmune · right rows and order Opus 5 · KG named · nde-expand_autoimmune · right rows and order Opus 5 · KG named · nde-exact_autoimmune · right rows and order Opus 5 · KG named · nde-exact_autoimmune · right rows and order Opus 5 · KG named · nde-exact_autoimmune · right rows and order Opus 5 · KG named · nde-expand_cardiovascular · right rows and order Opus 5 · KG named · nde-expand_cardiovascular · right rows and order Opus 5 · KG named · nde-expand_cardiovascular · right rows and order Opus 5 · KG named · nde-exact_cardiovascular · right rows and order Opus 5 · KG named · nde-exact_cardiovascular · right rows and order Opus 5 · KG named · nde-exact_cardiovascular · right rows and order Opus 5 · KG named · pankgraph-expand_hormonesecretion · right rows and order Opus 5 · KG named · pankgraph-expand_hormonesecretion · right rows and order Opus 5 · KG named · pankgraph-expand_hormonesecretion · right rows and order Opus 5 · KG named · pankgraph-exact_hormonesecretion · right rows and order Opus 5 · KG named · pankgraph-exact_hormonesecretion · right rows and order Opus 5 · KG named · pankgraph-exact_hormonesecretion · right rows and order Opus 5 · KG named · oard-kg-expand_metabolic · right rows and order Opus 5 · KG named · oard-kg-expand_metabolic · right rows and order Opus 5 · KG named · oard-kg-expand_metabolic · wrong rows Opus 5 · KG named · oard-kg-exact_metabolic · right rows and order Opus 5 · KG named · oard-kg-exact_metabolic · right rows and order Opus 5 · KG named · oard-kg-exact_metabolic · right rows and order Opus 5 · KG named · rdkg-expand_musculoskeletal · right rows and order Opus 5 · KG named · rdkg-expand_musculoskeletal · right rows and order Opus 5 · KG named · rdkg-expand_musculoskeletal · right rows and order Opus 5 · KG named · rdkg-exact_musculoskeletal · right rows and order Opus 5 · KG named · rdkg-exact_musculoskeletal · right rows and order Opus 5 · KG named · rdkg-exact_musculoskeletal · right rows and order Opus 5 · KG named · rdkg-expand_neurological · right rows and order Opus 5 · KG named · rdkg-expand_neurological · wrong rows Opus 5 · KG named · rdkg-expand_neurological · hit the 900s timeout, no answer Opus 5 · KG named · rdkg-exact_neurological · right rows and order Opus 5 · KG named · rdkg-exact_neurological · right rows and order Opus 5 · KG named · rdkg-exact_neurological · right rows and order Sonnet 5 effort medium KG named 22/36 Sonnet 5 · KG named · nde-expand_autoimmune · hit the 900s timeout, no answer Sonnet 5 · KG named · nde-expand_autoimmune · right rows and order Sonnet 5 · KG named · nde-expand_autoimmune · right rows and order Sonnet 5 · KG named · nde-exact_autoimmune · right rows and order Sonnet 5 · KG named · nde-exact_autoimmune · wrong rows Sonnet 5 · KG named · nde-exact_autoimmune · wrong rows Sonnet 5 · KG named · nde-expand_cardiovascular · right rows and order Sonnet 5 · KG named · nde-expand_cardiovascular · right rows and order Sonnet 5 · KG named · nde-expand_cardiovascular · right rows and order Sonnet 5 · KG named · nde-exact_cardiovascular · right rows and order Sonnet 5 · KG named · nde-exact_cardiovascular · right rows and order Sonnet 5 · KG named · nde-exact_cardiovascular · right rows and order Sonnet 5 · KG named · pankgraph-expand_hormonesecretion · wrong rows Sonnet 5 · KG named · pankgraph-expand_hormonesecretion · wrong rows Sonnet 5 · KG named · pankgraph-expand_hormonesecretion · right rows and order Sonnet 5 · KG named · pankgraph-exact_hormonesecretion · right rows and order Sonnet 5 · KG named · pankgraph-exact_hormonesecretion · right rows and order Sonnet 5 · KG named · pankgraph-exact_hormonesecretion · right rows and order Sonnet 5 · KG named · oard-kg-expand_metabolic · right rows and order Sonnet 5 · KG named · oard-kg-expand_metabolic · right rows and order Sonnet 5 · KG named · oard-kg-expand_metabolic · right rows and order Sonnet 5 · KG named · oard-kg-exact_metabolic · wrong rows Sonnet 5 · KG named · oard-kg-exact_metabolic · right rows and order Sonnet 5 · KG named · oard-kg-exact_metabolic · wrong rows Sonnet 5 · KG named · rdkg-expand_musculoskeletal · right rows and order Sonnet 5 · KG named · rdkg-expand_musculoskeletal · wrong rows Sonnet 5 · KG named · rdkg-expand_musculoskeletal · wrong rows Sonnet 5 · KG named · rdkg-exact_musculoskeletal · wrong rows Sonnet 5 · KG named · rdkg-exact_musculoskeletal · wrong rows Sonnet 5 · KG named · rdkg-exact_musculoskeletal · right rows and order Sonnet 5 · KG named · rdkg-expand_neurological · wrong rows Sonnet 5 · KG named · rdkg-expand_neurological · wrong rows Sonnet 5 · KG named · rdkg-expand_neurological · wrong rows Sonnet 5 · KG named · rdkg-exact_neurological · right rows and order Sonnet 5 · KG named · rdkg-exact_neurological · right rows and order Sonnet 5 · KG named · rdkg-exact_neurological · right rows and order Haiku 4.5 effort default KG named 7/36 Haiku 4.5 · KG named · nde-expand_autoimmune · wrong rows Haiku 4.5 · KG named · nde-expand_autoimmune · wrong rows Haiku 4.5 · KG named · nde-expand_autoimmune · wrong rows Haiku 4.5 · KG named · nde-exact_autoimmune · wrong rows Haiku 4.5 · KG named · nde-exact_autoimmune · wrong rows Haiku 4.5 · KG named · nde-exact_autoimmune · wrong rows Haiku 4.5 · KG named · nde-expand_cardiovascular · wrong rows Haiku 4.5 · KG named · nde-expand_cardiovascular · wrong rows Haiku 4.5 · KG named · nde-expand_cardiovascular · wrong rows Haiku 4.5 · KG named · nde-exact_cardiovascular · wrong rows Haiku 4.5 · KG named · nde-exact_cardiovascular · right rows and order Haiku 4.5 · KG named · nde-exact_cardiovascular · wrong rows Haiku 4.5 · KG named · pankgraph-expand_hormonesecretion · wrong rows Haiku 4.5 · KG named · pankgraph-expand_hormonesecretion · wrong rows Haiku 4.5 · KG named · pankgraph-expand_hormonesecretion · wrong rows Haiku 4.5 · KG named · pankgraph-exact_hormonesecretion · wrong rows Haiku 4.5 · KG named · pankgraph-exact_hormonesecretion · wrong rows Haiku 4.5 · KG named · pankgraph-exact_hormonesecretion · right rows and order Haiku 4.5 · KG named · oard-kg-expand_metabolic · wrong rows Haiku 4.5 · KG named · oard-kg-expand_metabolic · wrong rows Haiku 4.5 · KG named · oard-kg-expand_metabolic · wrong rows Haiku 4.5 · KG named · oard-kg-exact_metabolic · wrong rows Haiku 4.5 · KG named · oard-kg-exact_metabolic · right rows and order Haiku 4.5 · KG named · oard-kg-exact_metabolic · right rows and order Haiku 4.5 · KG named · rdkg-expand_musculoskeletal · wrong rows Haiku 4.5 · KG named · rdkg-expand_musculoskeletal · wrong rows Haiku 4.5 · KG named · rdkg-expand_musculoskeletal · wrong rows Haiku 4.5 · KG named · rdkg-exact_musculoskeletal · wrong rows Haiku 4.5 · KG named · rdkg-exact_musculoskeletal · wrong rows Haiku 4.5 · KG named · rdkg-exact_musculoskeletal · wrong rows Haiku 4.5 · KG named · rdkg-expand_neurological · wrong rows Haiku 4.5 · KG named · rdkg-expand_neurological · wrong rows Haiku 4.5 · KG named · rdkg-expand_neurological · wrong rows Haiku 4.5 · KG named · rdkg-exact_neurological · right rows and order Haiku 4.5 · KG named · rdkg-exact_neurological · right rows and order Haiku 4.5 · KG named · rdkg-exact_neurological · right rows and order nde-expand_autoimmune nde-exact_autoimmune nde-expand_cardiovascular nde-exact_cardiovascular pankgraph-expand_hormonesecretion pankgraph-exact_hormonesecretion oard-kg-expand_metabolic oard-kg-exact_metabolic rdkg-expand_musculoskeletal rdkg-exact_musculoskeletal rdkg-expand_neurological rdkg-exact_neurological

The figure orders the columns in pairs — each -expand question immediately followed by its own -exact control — so the two arms of a category can be read together.

Opus 5 Sonnet 5 Haiku 4.5
-expand arms (the question)15/1810/180/18
-exact arms (the control)18/1812/187/18
all attempts33/3622/367/36
records always exact10/125/121/12
records ever exact12/1211/124/12
mean F10.96850.67780.2233
Outcome per Attempt, by Model — Cross Graph Ontology Expansion, Unprompted Questions 54 episodes: three models x 6 questions x three attempts. Outcome per Attempt, by Model — Cross Graph Ontology Expansion, Unprompted Questions right rows and order right rows, wrong order wrong rows hit the 900s timeout, no answer exact Opus 5 effort high KG named 15/18 Opus 5 · KG named · nde-expand_autoimmune · right rows and order Opus 5 · KG named · nde-expand_autoimmune · right rows and order Opus 5 · KG named · nde-expand_autoimmune · right rows and order Opus 5 · KG named · nde-expand_cardiovascular · right rows and order Opus 5 · KG named · nde-expand_cardiovascular · right rows and order Opus 5 · KG named · nde-expand_cardiovascular · right rows and order Opus 5 · KG named · pankgraph-expand_hormonesecretion · right rows and order Opus 5 · KG named · pankgraph-expand_hormonesecretion · right rows and order Opus 5 · KG named · pankgraph-expand_hormonesecretion · right rows and order Opus 5 · KG named · oard-kg-expand_metabolic · right rows and order Opus 5 · KG named · oard-kg-expand_metabolic · right rows and order Opus 5 · KG named · oard-kg-expand_metabolic · wrong rows Opus 5 · KG named · rdkg-expand_musculoskeletal · right rows and order Opus 5 · KG named · rdkg-expand_musculoskeletal · right rows and order Opus 5 · KG named · rdkg-expand_musculoskeletal · right rows and order Opus 5 · KG named · rdkg-expand_neurological · right rows and order Opus 5 · KG named · rdkg-expand_neurological · wrong rows Opus 5 · KG named · rdkg-expand_neurological · hit the 900s timeout, no answer Sonnet 5 effort medium KG named 10/18 Sonnet 5 · KG named · nde-expand_autoimmune · hit the 900s timeout, no answer Sonnet 5 · KG named · nde-expand_autoimmune · right rows and order Sonnet 5 · KG named · nde-expand_autoimmune · right rows and order Sonnet 5 · KG named · nde-expand_cardiovascular · right rows and order Sonnet 5 · KG named · nde-expand_cardiovascular · right rows and order Sonnet 5 · KG named · nde-expand_cardiovascular · right rows and order Sonnet 5 · KG named · pankgraph-expand_hormonesecretion · wrong rows Sonnet 5 · KG named · pankgraph-expand_hormonesecretion · wrong rows Sonnet 5 · KG named · pankgraph-expand_hormonesecretion · right rows and order Sonnet 5 · KG named · oard-kg-expand_metabolic · right rows and order Sonnet 5 · KG named · oard-kg-expand_metabolic · right rows and order Sonnet 5 · KG named · oard-kg-expand_metabolic · right rows and order Sonnet 5 · KG named · rdkg-expand_musculoskeletal · right rows and order Sonnet 5 · KG named · rdkg-expand_musculoskeletal · wrong rows Sonnet 5 · KG named · rdkg-expand_musculoskeletal · wrong rows Sonnet 5 · KG named · rdkg-expand_neurological · wrong rows Sonnet 5 · KG named · rdkg-expand_neurological · wrong rows Sonnet 5 · KG named · rdkg-expand_neurological · wrong rows Haiku 4.5 effort default KG named 0/18 Haiku 4.5 · KG named · nde-expand_autoimmune · wrong rows Haiku 4.5 · KG named · nde-expand_autoimmune · wrong rows Haiku 4.5 · KG named · nde-expand_autoimmune · wrong rows Haiku 4.5 · KG named · nde-expand_cardiovascular · wrong rows Haiku 4.5 · KG named · nde-expand_cardiovascular · wrong rows Haiku 4.5 · KG named · nde-expand_cardiovascular · wrong rows Haiku 4.5 · KG named · pankgraph-expand_hormonesecretion · wrong rows Haiku 4.5 · KG named · pankgraph-expand_hormonesecretion · wrong rows Haiku 4.5 · KG named · pankgraph-expand_hormonesecretion · wrong rows Haiku 4.5 · KG named · oard-kg-expand_metabolic · wrong rows Haiku 4.5 · KG named · oard-kg-expand_metabolic · wrong rows Haiku 4.5 · KG named · oard-kg-expand_metabolic · wrong rows Haiku 4.5 · KG named · rdkg-expand_musculoskeletal · wrong rows Haiku 4.5 · KG named · rdkg-expand_musculoskeletal · wrong rows Haiku 4.5 · KG named · rdkg-expand_musculoskeletal · wrong rows Haiku 4.5 · KG named · rdkg-expand_neurological · wrong rows Haiku 4.5 · KG named · rdkg-expand_neurological · wrong rows Haiku 4.5 · KG named · rdkg-expand_neurological · wrong rows nde-expand_autoimmune nde-expand_cardiovascular pankgraph-expand_hormonesecretion oard-kg-expand_metabolic rdkg-expand_musculoskeletal rdkg-expand_neurological

Splitting the arms is what makes the result legible. Haiku's combined 7/36 reads as "sometimes succeeds". Split, it is 0/18 on the questions and 7/18 on the controls — every success it has is an arm that told it what to do. That is a categorically different claim, and only the split supports it.

Opus's entire deficit is two records. 18/18 on every control, 15/18 on the questions, losing one attempt on oard-kg-expand_metabolic and two on rdkg-expand_neurological. Nine of twelve records are perfect.

Sonnet's controls are sometimes worse than its questions. It is 3/3 on oard-kg-expand_metabolic and 1/3 on the matching control; 2/3 and 1/3 on autoimmune. A control miss means it expanded when told not to — a compliance failure rather than a capability one, and the opposite failure from Haiku's.

3. Naming the failure, not just counting it

A score says an answer missed. It does not say which mistake produced it, and for a corpus built around specific traps that is the more useful fact. Each tier ships controls — the answer key with exactly one thing broken:

Scoring with --controls controls-ontology matches an answer against those tables by denotation, so an agent's own column names do not defeat it. Six recorded misses carry a named cause:

Model Record Reproduces
Sonnet 5nde-exact_autoimmune (×2)autoimmune/B-keyword-matching
Sonnet 5pankgraph-expand_hormonesecretionhormonesecretion/A-root-term-only
Haiku 4.5nde-exact_autoimmune (×2)autoimmune/B-keyword-matching
Haiku 4.5nde-expand_autoimmuneautoimmune/B-keyword-matching

Only A and B appear, and that is a result rather than a gap. An answer is compared against its own tier's controls — two for every tier, four for hormone secretion — so C and D were tested against the eighteen hormone-secretion answers and matched none of them, for two different reasons.

C — the symbol join — is a trap that was closed before this sweep. It reproduces what an agent gets by joining pankgraph to the expression atlas on the gene symbol instead of the Ensembl accession: the atlas is multi-species and symbols are not, so cow, pig and macaque orthologs pool into a human islet question. Opus produced exactly that table on every attempt of an earlier sweep, because the prompt then left the species to inference. The prompt now says published human expression experiments, and no attempt here reproduces C. A control that stops matching is how you tell a reworded prompt actually fixed something.

D cannot appear in this table at all. It is an equivalence control — a symbol join that also filters the study's organism, which reproduces the answer key exactly, row for row. Matching D means being right, so it can never name the cause of a miss. It is kept because it isolates what the reword bought: the identifier trap and the species trap are separable, and D shows the second one alone is enough. The corpus README calls this out as the only equivalence control in the set.

The -exact hits are the sharpest finding in the study. Both models were told to use the term literally and instead produced the keyword-matching table: they did not merely disobey, they faked the hierarchy with a substring test on the label. A column diagnostic reading "0/3 columns align" cannot express that; a control name can.

4. Where the time goes

Server Time per Attempt, by Model — Cross Graph Ontology Expansion Heatmap of seconds spent inside the server, three models x 12 questions x three attempts. Server Time per Attempt, by Model — Cross Graph Ontology Expansion 1s 1000s median 30.5s hit the 900s timeout total Opus 5 effort high KG named ≥3296s Opus 5 · KG named · nde-expand_autoimmune · 33.2s Opus 5 · KG named · nde-expand_autoimmune · 9.6s Opus 5 · KG named · nde-expand_autoimmune · 12.8s Opus 5 · KG named · nde-exact_autoimmune · 6.6s Opus 5 · KG named · nde-exact_autoimmune · 3.6s Opus 5 · KG named · nde-exact_autoimmune · 3.2s Opus 5 · KG named · nde-expand_cardiovascular · 177.5s Opus 5 · KG named · nde-expand_cardiovascular · 227.8s Opus 5 · KG named · nde-expand_cardiovascular · 149.7s Opus 5 · KG named · nde-exact_cardiovascular · 4.1s Opus 5 · KG named · nde-exact_cardiovascular · 5.7s Opus 5 · KG named · nde-exact_cardiovascular · 34.2s Opus 5 · KG named · pankgraph-expand_hormonesecretion · 21.2s Opus 5 · KG named · pankgraph-expand_hormonesecretion · 9.9s Opus 5 · KG named · pankgraph-expand_hormonesecretion · 163.6s Opus 5 · KG named · pankgraph-exact_hormonesecretion · 14.8s Opus 5 · KG named · pankgraph-exact_hormonesecretion · 7.4s Opus 5 · KG named · pankgraph-exact_hormonesecretion · 5.3s Opus 5 · KG named · oard-kg-expand_metabolic · 85.8s Opus 5 · KG named · oard-kg-expand_metabolic · 32.4s Opus 5 · KG named · oard-kg-expand_metabolic · 52.5s Opus 5 · KG named · oard-kg-exact_metabolic · 18.6s Opus 5 · KG named · oard-kg-exact_metabolic · 3.6s Opus 5 · KG named · oard-kg-exact_metabolic · 88.4s Opus 5 · KG named · rdkg-expand_musculoskeletal · 98.8s Opus 5 · KG named · rdkg-expand_musculoskeletal · 217.9s Opus 5 · KG named · rdkg-expand_musculoskeletal · 98.2s Opus 5 · KG named · rdkg-exact_musculoskeletal · 3.3s Opus 5 · KG named · rdkg-exact_musculoskeletal · 2.3s Opus 5 · KG named · rdkg-exact_musculoskeletal · 28.9s Opus 5 · KG named · rdkg-expand_neurological · 321.8s Opus 5 · KG named · rdkg-expand_neurological · 403.6s Opus 5 · KG named · rdkg-expand_neurological · 419.0s Opus 5 · KG named · rdkg-exact_neurological · 222.2s Opus 5 · KG named · rdkg-exact_neurological · 27.5s Opus 5 · KG named · rdkg-exact_neurological · 281.0s Sonnet 5 effort medium KG named ≥3681s Sonnet 5 · KG named · nde-expand_autoimmune · 674.9s Sonnet 5 · KG named · nde-expand_autoimmune · 8.7s Sonnet 5 · KG named · nde-expand_autoimmune · 19.7s Sonnet 5 · KG named · nde-exact_autoimmune · 18.6s Sonnet 5 · KG named · nde-exact_autoimmune · 3.8s Sonnet 5 · KG named · nde-exact_autoimmune · 6.8s Sonnet 5 · KG named · nde-expand_cardiovascular · 61.5s Sonnet 5 · KG named · nde-expand_cardiovascular · 86.4s Sonnet 5 · KG named · nde-expand_cardiovascular · 112.7s Sonnet 5 · KG named · nde-exact_cardiovascular · 64.5s Sonnet 5 · KG named · nde-exact_cardiovascular · 55.8s Sonnet 5 · KG named · nde-exact_cardiovascular · 91.6s Sonnet 5 · KG named · pankgraph-expand_hormonesecretion · 129.8s Sonnet 5 · KG named · pankgraph-expand_hormonesecretion · 27.1s Sonnet 5 · KG named · pankgraph-expand_hormonesecretion · 9.4s Sonnet 5 · KG named · pankgraph-exact_hormonesecretion · 5.4s Sonnet 5 · KG named · pankgraph-exact_hormonesecretion · 9.4s Sonnet 5 · KG named · pankgraph-exact_hormonesecretion · 7.8s Sonnet 5 · KG named · oard-kg-expand_metabolic · 110.6s Sonnet 5 · KG named · oard-kg-expand_metabolic · 73.2s Sonnet 5 · KG named · oard-kg-expand_metabolic · 51.9s Sonnet 5 · KG named · oard-kg-exact_metabolic · 7.2s Sonnet 5 · KG named · oard-kg-exact_metabolic · 5.1s Sonnet 5 · KG named · oard-kg-exact_metabolic · 16.5s Sonnet 5 · KG named · rdkg-expand_musculoskeletal · 278.1s Sonnet 5 · KG named · rdkg-expand_musculoskeletal · 113.0s Sonnet 5 · KG named · rdkg-expand_musculoskeletal · 11.8s Sonnet 5 · KG named · rdkg-exact_musculoskeletal · 16.8s Sonnet 5 · KG named · rdkg-exact_musculoskeletal · 19.2s Sonnet 5 · KG named · rdkg-exact_musculoskeletal · 77.4s Sonnet 5 · KG named · rdkg-expand_neurological · 498.3s Sonnet 5 · KG named · rdkg-expand_neurological · 399.8s Sonnet 5 · KG named · rdkg-expand_neurological · 465.4s Sonnet 5 · KG named · rdkg-exact_neurological · 20.1s Sonnet 5 · KG named · rdkg-exact_neurological · 2.4s Sonnet 5 · KG named · rdkg-exact_neurological · 120.5s Haiku 4.5 effort default KG named 4165s Haiku 4.5 · KG named · nde-expand_autoimmune · 3.1s Haiku 4.5 · KG named · nde-expand_autoimmune · 14.7s Haiku 4.5 · KG named · nde-expand_autoimmune · 361.8s Haiku 4.5 · KG named · nde-exact_autoimmune · 9.5s Haiku 4.5 · KG named · nde-exact_autoimmune · 1.6s Haiku 4.5 · KG named · nde-exact_autoimmune · 3.3s Haiku 4.5 · KG named · nde-expand_cardiovascular · 3.4s Haiku 4.5 · KG named · nde-expand_cardiovascular · 380.9s Haiku 4.5 · KG named · nde-expand_cardiovascular · 127.1s Haiku 4.5 · KG named · nde-exact_cardiovascular · 1.3s Haiku 4.5 · KG named · nde-exact_cardiovascular · 76.6s Haiku 4.5 · KG named · nde-exact_cardiovascular · 364.1s Haiku 4.5 · KG named · pankgraph-expand_hormonesecretion · 380.5s Haiku 4.5 · KG named · pankgraph-expand_hormonesecretion · 116.8s Haiku 4.5 · KG named · pankgraph-expand_hormonesecretion · 371.4s Haiku 4.5 · KG named · pankgraph-exact_hormonesecretion · 205.3s Haiku 4.5 · KG named · pankgraph-exact_hormonesecretion · 45.6s Haiku 4.5 · KG named · pankgraph-exact_hormonesecretion · 13.0s Haiku 4.5 · KG named · oard-kg-expand_metabolic · 13.0s Haiku 4.5 · KG named · oard-kg-expand_metabolic · 17.5s Haiku 4.5 · KG named · oard-kg-expand_metabolic · 20.0s Haiku 4.5 · KG named · oard-kg-exact_metabolic · 32.3s Haiku 4.5 · KG named · oard-kg-exact_metabolic · 369.2s Haiku 4.5 · KG named · oard-kg-exact_metabolic · 380.2s Haiku 4.5 · KG named · rdkg-expand_musculoskeletal · 35.5s Haiku 4.5 · KG named · rdkg-expand_musculoskeletal · 267.9s Haiku 4.5 · KG named · rdkg-expand_musculoskeletal · 20.5s Haiku 4.5 · KG named · rdkg-exact_musculoskeletal · 32.1s Haiku 4.5 · KG named · rdkg-exact_musculoskeletal · 11.9s Haiku 4.5 · KG named · rdkg-exact_musculoskeletal · 9.1s Haiku 4.5 · KG named · rdkg-expand_neurological · 36.4s Haiku 4.5 · KG named · rdkg-expand_neurological · 11.4s Haiku 4.5 · KG named · rdkg-expand_neurological · 415.0s Haiku 4.5 · KG named · rdkg-exact_neurological · 4.9s Haiku 4.5 · KG named · rdkg-exact_neurological · 4.6s Haiku 4.5 · KG named · rdkg-exact_neurological · 3.1s nde-expand_autoimmune nde-exact_autoimmune nde-expand_cardiovascular nde-exact_cardiovascular pankgraph-expand_hormonesecretion pankgraph-exact_hormonesecretion oard-kg-expand_metabolic oard-kg-exact_metabolic rdkg-expand_musculoskeletal rdkg-exact_musculoskeletal rdkg-expand_neurological rdkg-exact_neurological
Opus 5 Sonnet 5 Haiku 4.5
total server time≥3296s≥3681s4165s
queries run≥457≥595502

The ≥ marks a row containing an attempt killed at the 900s deadline: its server time stopped early and its cost was never reported, so those totals understate — and understate most for the models that struggled most.

This corpus is far more expensive than the single-graph floor: Opus spends 6× the server time here (≥3296s against 536s) for a corpus of the same size. Closure size is what strains the endpoint, and the ontology arm is where it shows.

Queries per Attempt, by Model — Cross Graph Ontology Expansion Heatmap of queries run per attempt, three models x 12 questions x three attempts. Queries per Attempt, by Model — Cross Graph Ontology Expansion 1 100 median 12.5 queries hit the 900s timeout total Opus 5 effort high KG named ≥457 Opus 5 · KG named · nde-expand_autoimmune · 10 queries Opus 5 · KG named · nde-expand_autoimmune · 9 queries Opus 5 · KG named · nde-expand_autoimmune · 10 queries Opus 5 · KG named · nde-exact_autoimmune · 6 queries Opus 5 · KG named · nde-exact_autoimmune · 5 queries Opus 5 · KG named · nde-exact_autoimmune · 6 queries Opus 5 · KG named · nde-expand_cardiovascular · 9 queries Opus 5 · KG named · nde-expand_cardiovascular · 10 queries Opus 5 · KG named · nde-expand_cardiovascular · 10 queries Opus 5 · KG named · nde-exact_cardiovascular · 8 queries Opus 5 · KG named · nde-exact_cardiovascular · 8 queries Opus 5 · KG named · nde-exact_cardiovascular · 9 queries Opus 5 · KG named · pankgraph-expand_hormonesecretion · 20 queries Opus 5 · KG named · pankgraph-expand_hormonesecretion · 12 queries Opus 5 · KG named · pankgraph-expand_hormonesecretion · 21 queries Opus 5 · KG named · pankgraph-exact_hormonesecretion · 9 queries Opus 5 · KG named · pankgraph-exact_hormonesecretion · 13 queries Opus 5 · KG named · pankgraph-exact_hormonesecretion · 8 queries Opus 5 · KG named · oard-kg-expand_metabolic · 15 queries Opus 5 · KG named · oard-kg-expand_metabolic · 19 queries Opus 5 · KG named · oard-kg-expand_metabolic · 15 queries Opus 5 · KG named · oard-kg-exact_metabolic · 9 queries Opus 5 · KG named · oard-kg-exact_metabolic · 10 queries Opus 5 · KG named · oard-kg-exact_metabolic · 7 queries Opus 5 · KG named · rdkg-expand_musculoskeletal · 8 queries Opus 5 · KG named · rdkg-expand_musculoskeletal · 9 queries Opus 5 · KG named · rdkg-expand_musculoskeletal · 7 queries Opus 5 · KG named · rdkg-exact_musculoskeletal · 6 queries Opus 5 · KG named · rdkg-exact_musculoskeletal · 5 queries Opus 5 · KG named · rdkg-exact_musculoskeletal · 7 queries Opus 5 · KG named · rdkg-expand_neurological · 20 queries Opus 5 · KG named · rdkg-expand_neurological · 22 queries Opus 5 · KG named · rdkg-expand_neurological · 23 queries Opus 5 · KG named · rdkg-exact_neurological · 30 queries Opus 5 · KG named · rdkg-exact_neurological · 26 queries Opus 5 · KG named · rdkg-exact_neurological · 36 queries Sonnet 5 effort medium KG named ≥595 Sonnet 5 · KG named · nde-expand_autoimmune · 65 queries Sonnet 5 · KG named · nde-expand_autoimmune · 14 queries Sonnet 5 · KG named · nde-expand_autoimmune · 15 queries Sonnet 5 · KG named · nde-exact_autoimmune · 9 queries Sonnet 5 · KG named · nde-exact_autoimmune · 7 queries Sonnet 5 · KG named · nde-exact_autoimmune · 5 queries Sonnet 5 · KG named · nde-expand_cardiovascular · 13 queries Sonnet 5 · KG named · nde-expand_cardiovascular · 5 queries Sonnet 5 · KG named · nde-expand_cardiovascular · 13 queries Sonnet 5 · KG named · nde-exact_cardiovascular · 14 queries Sonnet 5 · KG named · nde-exact_cardiovascular · 18 queries Sonnet 5 · KG named · nde-exact_cardiovascular · 15 queries Sonnet 5 · KG named · pankgraph-expand_hormonesecretion · 21 queries Sonnet 5 · KG named · pankgraph-expand_hormonesecretion · 9 queries Sonnet 5 · KG named · pankgraph-expand_hormonesecretion · 13 queries Sonnet 5 · KG named · pankgraph-exact_hormonesecretion · 5 queries Sonnet 5 · KG named · pankgraph-exact_hormonesecretion · 16 queries Sonnet 5 · KG named · pankgraph-exact_hormonesecretion · 15 queries Sonnet 5 · KG named · oard-kg-expand_metabolic · 10 queries Sonnet 5 · KG named · oard-kg-expand_metabolic · 9 queries Sonnet 5 · KG named · oard-kg-expand_metabolic · 5 queries Sonnet 5 · KG named · oard-kg-exact_metabolic · 16 queries Sonnet 5 · KG named · oard-kg-exact_metabolic · 5 queries Sonnet 5 · KG named · oard-kg-exact_metabolic · 17 queries Sonnet 5 · KG named · rdkg-expand_musculoskeletal · 23 queries Sonnet 5 · KG named · rdkg-expand_musculoskeletal · 10 queries Sonnet 5 · KG named · rdkg-expand_musculoskeletal · 13 queries Sonnet 5 · KG named · rdkg-exact_musculoskeletal · 22 queries Sonnet 5 · KG named · rdkg-exact_musculoskeletal · 20 queries Sonnet 5 · KG named · rdkg-exact_musculoskeletal · 8 queries Sonnet 5 · KG named · rdkg-expand_neurological · 15 queries Sonnet 5 · KG named · rdkg-expand_neurological · 21 queries Sonnet 5 · KG named · rdkg-expand_neurological · 32 queries Sonnet 5 · KG named · rdkg-exact_neurological · 42 queries Sonnet 5 · KG named · rdkg-exact_neurological · 3 queries Sonnet 5 · KG named · rdkg-exact_neurological · 52 queries Haiku 4.5 effort default KG named 502 Haiku 4.5 · KG named · nde-expand_autoimmune · 2 queries Haiku 4.5 · KG named · nde-expand_autoimmune · 24 queries Haiku 4.5 · KG named · nde-expand_autoimmune · 8 queries Haiku 4.5 · KG named · nde-exact_autoimmune · 9 queries Haiku 4.5 · KG named · nde-exact_autoimmune · 2 queries Haiku 4.5 · KG named · nde-exact_autoimmune · 5 queries Haiku 4.5 · KG named · nde-expand_cardiovascular · 2 queries Haiku 4.5 · KG named · nde-expand_cardiovascular · 8 queries Haiku 4.5 · KG named · nde-expand_cardiovascular · 4 queries Haiku 4.5 · KG named · nde-exact_cardiovascular · 1 query Haiku 4.5 · KG named · nde-exact_cardiovascular · 14 queries Haiku 4.5 · KG named · nde-exact_cardiovascular · 11 queries Haiku 4.5 · KG named · pankgraph-expand_hormonesecretion · 17 queries Haiku 4.5 · KG named · pankgraph-expand_hormonesecretion · 17 queries Haiku 4.5 · KG named · pankgraph-expand_hormonesecretion · 13 queries Haiku 4.5 · KG named · pankgraph-exact_hormonesecretion · 65 queries Haiku 4.5 · KG named · pankgraph-exact_hormonesecretion · 22 queries Haiku 4.5 · KG named · pankgraph-exact_hormonesecretion · 15 queries Haiku 4.5 · KG named · oard-kg-expand_metabolic · 10 queries Haiku 4.5 · KG named · oard-kg-expand_metabolic · 25 queries Haiku 4.5 · KG named · oard-kg-expand_metabolic · 15 queries Haiku 4.5 · KG named · oard-kg-exact_metabolic · 18 queries Haiku 4.5 · KG named · oard-kg-exact_metabolic · 12 queries Haiku 4.5 · KG named · oard-kg-exact_metabolic · 13 queries Haiku 4.5 · KG named · rdkg-expand_musculoskeletal · 10 queries Haiku 4.5 · KG named · rdkg-expand_musculoskeletal · 21 queries Haiku 4.5 · KG named · rdkg-expand_musculoskeletal · 18 queries Haiku 4.5 · KG named · rdkg-exact_musculoskeletal · 17 queries Haiku 4.5 · KG named · rdkg-exact_musculoskeletal · 15 queries Haiku 4.5 · KG named · rdkg-exact_musculoskeletal · 15 queries Haiku 4.5 · KG named · rdkg-expand_neurological · 15 queries Haiku 4.5 · KG named · rdkg-expand_neurological · 12 queries Haiku 4.5 · KG named · rdkg-expand_neurological · 21 queries Haiku 4.5 · KG named · rdkg-exact_neurological · 9 queries Haiku 4.5 · KG named · rdkg-exact_neurological · 7 queries Haiku 4.5 · KG named · rdkg-exact_neurological · 10 queries nde-expand_autoimmune nde-exact_autoimmune nde-expand_cardiovascular nde-exact_cardiovascular pankgraph-expand_hormonesecretion pankgraph-exact_hormonesecretion oard-kg-expand_metabolic oard-kg-exact_metabolic rdkg-expand_musculoskeletal rdkg-exact_musculoskeletal rdkg-expand_neurological rdkg-exact_neurological

5. What it cost

Cost per Attempt, by Model — Cross Graph Ontology Expansion Heatmap of US dollars per attempt, three models x 12 questions x three attempts. Cost per Attempt, by Model — Cross Graph Ontology Expansion $0.06 $3.01 median $0.35 hit the 900s timeout — no cost reported total Opus 5 effort high KG named ≥$26.73 Opus 5 · KG named · nde-expand_autoimmune · $0.721 Opus 5 · KG named · nde-expand_autoimmune · $0.838 Opus 5 · KG named · nde-expand_autoimmune · $0.986 Opus 5 · KG named · nde-exact_autoimmune · $0.261 Opus 5 · KG named · nde-exact_autoimmune · $0.223 Opus 5 · KG named · nde-exact_autoimmune · $0.244 Opus 5 · KG named · nde-expand_cardiovascular · $0.864 Opus 5 · KG named · nde-expand_cardiovascular · $0.785 Opus 5 · KG named · nde-expand_cardiovascular · $0.823 Opus 5 · KG named · nde-exact_cardiovascular · $0.306 Opus 5 · KG named · nde-exact_cardiovascular · $0.336 Opus 5 · KG named · nde-exact_cardiovascular · $0.351 Opus 5 · KG named · pankgraph-expand_hormonesecretion · $0.848 Opus 5 · KG named · pankgraph-expand_hormonesecretion · $0.833 Opus 5 · KG named · pankgraph-expand_hormonesecretion · $0.915 Opus 5 · KG named · pankgraph-exact_hormonesecretion · $0.472 Opus 5 · KG named · pankgraph-exact_hormonesecretion · $0.519 Opus 5 · KG named · pankgraph-exact_hormonesecretion · $0.264 Opus 5 · KG named · oard-kg-expand_metabolic · $1.312 Opus 5 · KG named · oard-kg-expand_metabolic · $1.544 Opus 5 · KG named · oard-kg-expand_metabolic · $0.688 Opus 5 · KG named · oard-kg-exact_metabolic · $0.349 Opus 5 · KG named · oard-kg-exact_metabolic · $0.332 Opus 5 · KG named · oard-kg-exact_metabolic · $0.349 Opus 5 · KG named · rdkg-expand_musculoskeletal · $0.525 Opus 5 · KG named · rdkg-expand_musculoskeletal · $1.354 Opus 5 · KG named · rdkg-expand_musculoskeletal · $0.492 Opus 5 · KG named · rdkg-exact_musculoskeletal · $0.244 Opus 5 · KG named · rdkg-exact_musculoskeletal · $0.214 Opus 5 · KG named · rdkg-exact_musculoskeletal · $0.284 Opus 5 · KG named · rdkg-expand_neurological · $1.765 Opus 5 · KG named · rdkg-expand_neurological · $1.550 Opus 5 · KG named · rdkg-expand_neurological · hit the 900s timeout, no cost reported Opus 5 · KG named · rdkg-exact_neurological · $1.481 Opus 5 · KG named · rdkg-exact_neurological · $1.161 Opus 5 · KG named · rdkg-exact_neurological · $2.506 Sonnet 5 effort medium KG named ≥$22.34 Sonnet 5 · KG named · nde-expand_autoimmune · hit the 900s timeout, no cost reported Sonnet 5 · KG named · nde-expand_autoimmune · $0.749 Sonnet 5 · KG named · nde-expand_autoimmune · $0.691 Sonnet 5 · KG named · nde-exact_autoimmune · $0.200 Sonnet 5 · KG named · nde-exact_autoimmune · $0.163 Sonnet 5 · KG named · nde-exact_autoimmune · $0.170 Sonnet 5 · KG named · nde-expand_cardiovascular · $0.453 Sonnet 5 · KG named · nde-expand_cardiovascular · $0.375 Sonnet 5 · KG named · nde-expand_cardiovascular · $0.955 Sonnet 5 · KG named · nde-exact_cardiovascular · $0.222 Sonnet 5 · KG named · nde-exact_cardiovascular · $0.372 Sonnet 5 · KG named · nde-exact_cardiovascular · $0.336 Sonnet 5 · KG named · pankgraph-expand_hormonesecretion · $0.387 Sonnet 5 · KG named · pankgraph-expand_hormonesecretion · $0.352 Sonnet 5 · KG named · pankgraph-expand_hormonesecretion · $0.373 Sonnet 5 · KG named · pankgraph-exact_hormonesecretion · $0.188 Sonnet 5 · KG named · pankgraph-exact_hormonesecretion · $0.334 Sonnet 5 · KG named · pankgraph-exact_hormonesecretion · $0.313 Sonnet 5 · KG named · oard-kg-expand_metabolic · $0.434 Sonnet 5 · KG named · oard-kg-expand_metabolic · $0.384 Sonnet 5 · KG named · oard-kg-expand_metabolic · $0.273 Sonnet 5 · KG named · oard-kg-exact_metabolic · $0.794 Sonnet 5 · KG named · oard-kg-exact_metabolic · $0.150 Sonnet 5 · KG named · oard-kg-exact_metabolic · $0.758 Sonnet 5 · KG named · rdkg-expand_musculoskeletal · $2.057 Sonnet 5 · KG named · rdkg-expand_musculoskeletal · $0.985 Sonnet 5 · KG named · rdkg-expand_musculoskeletal · $0.962 Sonnet 5 · KG named · rdkg-exact_musculoskeletal · $1.055 Sonnet 5 · KG named · rdkg-exact_musculoskeletal · $1.971 Sonnet 5 · KG named · rdkg-exact_musculoskeletal · $0.158 Sonnet 5 · KG named · rdkg-expand_neurological · $0.614 Sonnet 5 · KG named · rdkg-expand_neurological · $0.858 Sonnet 5 · KG named · rdkg-expand_neurological · $0.954 Sonnet 5 · KG named · rdkg-exact_neurological · $0.645 Sonnet 5 · KG named · rdkg-exact_neurological · $1.346 Sonnet 5 · KG named · rdkg-exact_neurological · $1.312 Haiku 4.5 effort default KG named $8.38 Haiku 4.5 · KG named · nde-expand_autoimmune · $0.084 Haiku 4.5 · KG named · nde-expand_autoimmune · $0.323 Haiku 4.5 · KG named · nde-expand_autoimmune · $0.094 Haiku 4.5 · KG named · nde-exact_autoimmune · $0.137 Haiku 4.5 · KG named · nde-exact_autoimmune · $0.074 Haiku 4.5 · KG named · nde-exact_autoimmune · $0.115 Haiku 4.5 · KG named · nde-expand_cardiovascular · $0.076 Haiku 4.5 · KG named · nde-expand_cardiovascular · $0.152 Haiku 4.5 · KG named · nde-expand_cardiovascular · $0.123 Haiku 4.5 · KG named · nde-exact_cardiovascular · $0.100 Haiku 4.5 · KG named · nde-exact_cardiovascular · $0.209 Haiku 4.5 · KG named · nde-exact_cardiovascular · $0.189 Haiku 4.5 · KG named · pankgraph-expand_hormonesecretion · $0.144 Haiku 4.5 · KG named · pankgraph-expand_hormonesecretion · $0.692 Haiku 4.5 · KG named · pankgraph-expand_hormonesecretion · $0.107 Haiku 4.5 · KG named · pankgraph-exact_hormonesecretion · $0.505 Haiku 4.5 · KG named · pankgraph-exact_hormonesecretion · $0.185 Haiku 4.5 · KG named · pankgraph-exact_hormonesecretion · $0.299 Haiku 4.5 · KG named · oard-kg-expand_metabolic · $0.233 Haiku 4.5 · KG named · oard-kg-expand_metabolic · $0.304 Haiku 4.5 · KG named · oard-kg-expand_metabolic · $0.254 Haiku 4.5 · KG named · oard-kg-exact_metabolic · $0.215 Haiku 4.5 · KG named · oard-kg-exact_metabolic · $0.167 Haiku 4.5 · KG named · oard-kg-exact_metabolic · $0.129 Haiku 4.5 · KG named · rdkg-expand_musculoskeletal · $0.405 Haiku 4.5 · KG named · rdkg-expand_musculoskeletal · $0.471 Haiku 4.5 · KG named · rdkg-expand_musculoskeletal · $0.346 Haiku 4.5 · KG named · rdkg-exact_musculoskeletal · $0.246 Haiku 4.5 · KG named · rdkg-exact_musculoskeletal · $0.460 Haiku 4.5 · KG named · rdkg-exact_musculoskeletal · $0.339 Haiku 4.5 · KG named · rdkg-expand_neurological · $0.265 Haiku 4.5 · KG named · rdkg-expand_neurological · $0.390 Haiku 4.5 · KG named · rdkg-expand_neurological · $0.274 Haiku 4.5 · KG named · rdkg-exact_neurological · $0.097 Haiku 4.5 · KG named · rdkg-exact_neurological · $0.073 Haiku 4.5 · KG named · rdkg-exact_neurological · $0.103 nde-expand_autoimmune nde-exact_autoimmune nde-expand_cardiovascular nde-exact_cardiovascular pankgraph-expand_hormonesecretion pankgraph-exact_hormonesecretion oard-kg-expand_metabolic oard-kg-exact_metabolic rdkg-expand_musculoskeletal rdkg-exact_musculoskeletal rdkg-expand_neurological rdkg-exact_neurological
Opus 5 Sonnet 5 Haiku 4.5
total≥$26.73≥$22.34$8.38
per correct answer≥$0.81≥$1.02$1.20

Per correct answer the ordering inverts. Haiku is the cheapest model per attempt and the most expensive per answer that was right. Opus is the most expensive per attempt and the cheapest per correct answer.

6. Two findings about the server, not the models

The auto_expand_descendants rewriter emits invalid SPARQL when it collides with the agent's own variable bindings. Observed twice: bind_expansion_to alongside an existing VALUES block produced `Token "?pheno": extraneous input '?pheno', and an agent's own BIND(... AS ?phen) produced *"The target variable ?phen of an AS clause was already used before in the query body"*. Both were returned as ok: true with the error inside the payload — a soft failure that every counter reads as *an agent that chose not to expand*. Runs that need to tell those apart should pass --strict-upstream-errors`.

Where the rewriter does not collide, it expands silently and by default. The same query naming GO_0046879 returned 71 genes with the default and 5 with auto_expand_descendants: false. An exact answer on an -expand arm is therefore not by itself evidence that the agent reasoned about hierarchies — it may only mean the agent left a default alone. This is the most important caveat in the study, and it cuts against the headline result.

get_join_strategy reports can_join: false for pairs that demonstrably join. Confirmed on two independent pairs, one of which joins on byte-identical IRIs.

7. Capability under a resource budget

Section 2 reports accuracy and sections 4–5 report what it cost, as if those were separate facts. They are separate only while nothing is rationed. Under a budget, efficiency is capability — an answer you could not afford is not an answer — and the question needs no new episodes, because what each attempt spent is already recorded. Below, an attempt counts only if it was correct and stayed inside the budget.

This corpus has one condition, so there is no arm to compare: the table is model against budget. It is also by far the most endpoint-expensive of the three corpora — roughly six times the single-graph study's server time for the same number of records — because walking a closure is what strains the endpoint. A server budget therefore bites harder here than anywhere else in the study.

Both sections carry a curve as well as a table. Each line steps up once per correct answer, ordered by what that answer cost, and flattens at the model's uncapped total — so a point reads at this budget per attempt, this model would still have got this many right. The curve is exact at every budget, where the table samples four, and a table of four columns cannot show where two lines cross. There are two curves because there are two scarce resources, and they do not rank the models the same way.

Under a server-time budget

Model ≤10s ≤20s ≤40s ≤80s no cap
Opus 51215212133
Sonnet 579101622
Haiku 4.534457

Opus's lead survives rationing of the endpoint. It keeps 21 of 33 at eighty seconds against Sonnet's 16 of 22, and in proportional terms the gap barely moves. What the budget exposes is how much of the ontology work is endpoint work: Opus loses more than a third of its correct answers at ten seconds.

Correct answers within a server-time budget of x per attempt, three models, 36 attempts each. Answers Affordable at a Given Server-Time Budget — Cross Graph Ontology Expansion Opus 5 Sonnet 5 Haiku 4.5 0 6 12 18 24 30 33 2s 5s 10s 20s 50s 100s 200s Opus 5: 33 correct, cheapest 2.271s, dearest 321.8s 33 Sonnet 5: 22 correct, cheapest 2.425s, dearest 278.092s 22 Haiku 4.5: 7 correct, cheapest 3.112s, dearest 380.183s 7 server-time budget per attempt (seconds, log scale) answers correct

There is no crossing anywhere. From 3.2 seconds upward Opus is strictly ahead of both other models at every budget on the axis — the only figure in the three studies where the uncapped ranking holds at every price. Hold that against the token-budget figure below, drawn from the same episodes, where Opus and Sonnet trade the lead four times and finish tied at ≤$0.50. Two currencies, two different answers to "which model is better", and only the choice of currency separates them.

Under a token budget

Model ≤$0.05 ≤$0.10 ≤$0.25 ≤$0.50 no cap
Opus 50041533
Sonnet 50051522
Haiku 4.502677
Correct answers within a token budget of x per attempt, three models, 36 attempts each. Answers Affordable at a Given Token Budget — Cross Graph Ontology Expansion Opus 5 Sonnet 5 Haiku 4.5 0 6 12 18 24 30 33 $0.1 $0.2 $0.5 $1 $2 Opus 5: 33 correct, cheapest $0.213503, dearest $2.50572 33 Sonnet 5: 22 correct, cheapest $0.149763, dearest $2.05653 22 Haiku 4.5: 7 correct, cheapest $0.0726867, dearest $0.298528 7 token budget per attempt (US dollars, log scale) answers correct

Under a token budget the lead vanishes. Uncapped, Opus answers 33 and Sonnet 22 — an eleven-answer gap. At ≤$0.50 they are tied at 15, and at ≤$0.25 Sonnet is marginally ahead (5 against 4). Whatever Opus is buying with its extra tokens, a reader who cannot spend them does not receive it.

The figure shows the tie is not a single crossing but a braided region: Haiku leads to $0.27, Opus from $0.28, Sonnet retakes it from $0.43 to $0.49, and Opus holds it from $0.52 upward with Sonnet drawing level again at $0.69 and $0.75. A table sampling four budgets can land anywhere in that stretch and report a different model as ahead.

Haiku's line is the counter-case, and worth stating plainly: it reaches its ceiling of 7 by $0.30 and is then flat forever, because 7 is all it can answer at any price. A budget cannot make a model capable; it can only reveal which of two capable models is affordable.

This budget was applied after the fact

Every number above is censoring, not a run under a constraint. Each episode was recorded with no budget in force, and a budget is then drawn across what it happened to spend. The assumption fails in a known direction: an agent told it had twenty seconds of endpoint time would triage — fewer exploratory queries, an earlier commit to an answer — and should therefore score better than truncating its unconstrained trajectory predicts. Read the capped columns as a floor and the gaps between models as a ceiling on the effect. What this establishes is that the effect exists and which resource it is denominated in — not its size.

Nothing here is a lower bound in the other direction. It reads the resource use of correct episodes only, and an episode killed at the timeout produced no answer — a failure at every budget, never in a numerator. build_budget.py refuses to print at all if any correct episode has an incomplete record.

One caution specific to this corpus: its failures are overwhelmingly semantic — column misalignment and the control reproductions of section 3 — rather than resource exhaustion. Only two episodes across all three ontology run roots hit the agent timeout, against 25 in the cross-graph study. So the budgets above censor answers that were produced, rather than rescuing ones that ran out of room.

8. Reproducing it

Path What it is
benchmarks-ontology/*.rqthe twelve records, six -expand/-exact pairs
controls-ontology/<tier>/*.rqthe diagnostic queries: the key with one thing broken
runs-{opus,sonnet,haiku}-ontology/every recorded episode, prompt, transcript and answer
results-ontology/*-by-model.svgthe five grids, built by build_comparison.py
results-ontology/budget-by-*.svgthe affordability curves, from the same script
results-ontology/QUESTIONS.mdthe same episodes read question by question
okn-benchmark reference --corpus benchmarks-ontology
okn-benchmark run --corpus benchmarks-ontology --tools all-tools --kg-hint tags \
  --profile profiles/mcp-proto-okn.local.toml --model claude-opus-5 --effort high \
  --repeat 3 --agent-timeout 900 --controls controls-ontology --out runs-opus-ontology
uv run python results-ontology/build_comparison.py
uv run python results-ontology/build_budget.py