Blolabel
← Notes
analysis 9 min read

ComtradeBench's shipped harness owns all 5 execution-critical decisions, so 21 of 21 model pairs submit byte-identical answers; phoneshell's scaffold prompt makes none of a task's decisions for the model

A measurement-theory audit of agent benchmarks names a "double measurement confound": a fixed scaffold that makes a task's real decisions instead of the model, scored by a judge that grades shape instead of truth. On ComtradeBench's shipped configuration, the harness owns all five execution-critical decisions and 21 of 21 model pairs return byte-identical submissions. A fabricated 2,345-row answer scores 0.987 under the shipped judge, tied with the correct one. phoneshell's published scaffold prompt makes none of a task's decisions; the model owns every tap.

The Double Measurement Confound in Agent Benchmarks: De-Scaffolding, Ground-Truth Scoring, and Reliability Beyond the Mean (arXiv:2609.09218), submitted 6 September 2026 by Yonghong Zhang, Shadi Motaali, Vu Phong Dinh, Avin Piroutiniya, Jorge E. Lopez de Vergara, Luis de Pedro, Ricardo Correia, Isabel M. Parra, and Yong Xie, argues that an agent benchmark score is only evidence about the model if two conditions hold: the scaffold around the model is not making the task's real decisions for it, and the scorer is checking submitted values against ground truth rather than checking output shape. The paper tests both conditions directly on ComtradeBench, a benchmark built on seeded, synthetic trade-statistics data served by a mock API, by building an explicit decision-ownership map covering five execution-critical choices: retry, dedup, totals-drop, pagination, and submission. Under the benchmark's shipped, production harness (which the paper labels L0), the harness owns all five of those decisions. The model is never asked to make any of them.

Abstract technical illustration on a dark grid: twenty-one small identical nodes representing different models all funnel into one rigid control box that makes every branching decision, producing a single converged output line, contrasted with a second, looser box that only passes decisions through unchanged, producing many visibly different output lines

Twenty-one model pairs, one answer, because the harness never asked them anything

The paper's starkest number is a null result dressed as data: when the production harness owns all five execution-critical decisions, 21 of 21 tested model pairs submit byte-identical outputs on the same task. Swapping in a different model changes nothing observable in the submission, because the model was never in a position to change anything; the harness had already decided what to retry, what to deduplicate, when to drop a totals row, how to paginate, and what exactly to submit. A second result shows the scoring side has an equally direct failure: on the task T2_multi_page, a submission of 2,345 fabricated rows, formatted to the correct schema, scores 0.987 under the benchmark's shipped judge, the same score the correct record set receives. Scored against ground truth instead, the fabrication gets an F1 of 0.000 and the correct set gets 1.000. The shipped judge, the paper notes, was grading "output format, field presence, or self-reported metadata," never the submitted values.

ConfigurationResultSource
L0 (shipped harness), decision ownershipharness owns 5/5 execution-critical decisionsarXiv:2609.09218
L0, model-pair comparison21/21 model pairs byte-identical submissionsarXiv:2609.09218
Shipped judge, T2_multi_page, fabricated 2,345 rowsscores 0.987 (ties the correct answer)arXiv:2609.09218
Ground truth, same fabricated rowsF1 = 0.000 (correct set: F1 = 1.000)arXiv:2609.09218
τ-bench, scaffold flag alonereward shifts up to 0.267, reorders the leaderboardarXiv:2609.09218
ComtradeBench leaderboard, before and after the audit-and-repair Before: production harness + shipped judge (0-100 scale) 97.5Kimi 97.5Claude 96.8no-LLM script indistinguishable, including from a rule-based script After: model owns execution + ground-truth scoring (0-1 scale) 0.974Fable-5 0.930GPT-5 0.924Haiku-4.5 0.805GPT-4o 0.000Llama-70B 0.000Qwen-7B full spread, 0.000 to 0.974 Source: arXiv:2609.09218, ComtradeBench results (E1/E0 configurations) and joint 2x2 intervention table, read 18 October 2026.

phoneshell's published scaffold prompt owns zero of a task's decisions, by design

phoneshell's scaffold prompt (github.com/Blomega/phoneshell, phoneshell/bench/runner.py) is published in full in its source, and its own docstring states the reasoning behind publishing it: "A benchmark measures a model INSIDE a harness, and the harness always shapes the result, so this is stated rather than hidden." Reading the prompt against the double measurement confound's five-decision checklist (retry, dedup, totals-drop, pagination, submission) finds no equivalent of any of them. The text tells the model how to batch tool calls efficiently, how to set a picker wheel, and to call a dedicated phone_dismiss_popup tool rather than hunting for a close button; it never decides, on the model's behalf, which element to tap, when a task is finished, or what answer to submit. The model owns every one of those calls. That is the condition the Double Measurement Confound paper's repaired ComtradeBench configuration had to be engineered to reach; it is phoneshell's starting position.

Who decides: the harness, or the model ComtradeBench, shipped L0 harness decides: retry decides: dedup decides: totals-drop decides: pagination decides: submission Model's role: none of the above. Result: 21/21 model pairs tie. phoneshell scaffold prompt states: batch tool calls when the route is known states: observe only when genuinely exploring states: use phone_set_picker, don't swipe a wheel states: call phone_dismiss_popup for interruptions Model's role: which element, which order, when the task is done, what to submit. Grading reads the resulting phone state, never the harness's own account of the run. Sources: arXiv:2609.09218, decision-ownership map; phoneshell/bench/runner.py SCAFFOLD_PROMPT, read 18 October 2026.

What it means for reading any agent leaderboard

Check it yourself

# the paper's decision-ownership map and ComtradeBench results
curl -s https://arxiv.org/abs/2609.09218
# full tables (E0/E1 leaderboards, tau-bench scaffold-flip, BFCL probe): https://arxiv.org/html/2609.09218

# phoneshell's scaffold prompt, published in full, and what it does NOT decide
sed -n '/SCAFFOLD_PROMPT/,/^"""/p' phoneshell/bench/runner.py

# confirm grading reads device state, never the harness's own report
grep -n "run_all\|CheckResult" phoneshell/bench/verify.py | head -10

What would prove this wrong

We report that ComtradeBench's shipped L0 harness owns all five of the paper's named execution-critical decisions and that this produces byte-identical submissions across 21 of 21 tested model pairs, both read directly from arXiv:2609.09218. That is wrong if a future revision restates the decision-ownership table differently, or if the 21 model pairs are later found to diverge once more of the paper's appendix is checked. We also claim phoneshell's scaffold prompt makes none of a task's decisions for the model, based on reading its full published text in phoneshell/bench/runner.py; that claim is wrong the moment a future commit adds any task-level decision, such as a fixed order of operations or a pre-chosen UI route, into that prompt. We will check both by 31 March 2027.

Sources