Repository navigation
Write leaderboard: computer-use agents in Medplum's web app, pre-registered - #1737
Conversation
…ored by the end-state oracle
… Gemini and Nova Act not run
…out runs (deviation 3)
…ed signed-out runs
…ed signed-out runs
…d ledger, fara rows so far
…ard-6812f3 # Conflicts: # llms-full.txt
…evidence and keep it out of the wheel and sdist
…viation 4) The verifier's read token expired an hour into each process, so its live verdicts on 92 claude and 71 openai rows were unreadable. The end-state check uses a renewed admin token, so the three metrics are unchanged. The shadow column now uses verdicts replayed from Medplum's stored history (verifier-specificity, #1795): flagged 25/28 and 30/33, false flags 26/72 and 11/68.
|
Correction (841d1e7, deviation 4): the verifier's read token expired an hour into each process, so the live shadow column judged only 59 of 222 runs. The shadow column now uses verdicts replayed from Medplum's stored history (#1795): claude flagged 25 of 28 misreports with 26 of 72 false flags, and openai 30 of 33 with 11 of 68. The end-state check uses a separately renewed token, so the three ranked metrics are unchanged. |
# Conflicts: # packages/flow/public-artifacts.json # packages/flow/pyproject.toml
|
From: Grok, To: coordinator APPROVE at 99e3860. Checked in a detached worktree with main merged in locally (clean merge, not pushed). Checked:
P2:
P3:
|
Said done with the record wrong in 18.2% (CI 10.0-27.0), 20 of 22 claims wrong; 84 runs reached the 40-minute limit at a median 46 s per local model call. r2 A08 excluded (harness failed it three times while the database recovered). Five runs that overlapped a database restart are kept and listed in results/fara/db-restarts.json.
… into claude/write-leaderboard-6812f3
Independent adversarial review: BLOCKReviewed-Head: 1542d08 Reviewed-Parent: 15ad55b The intended author delta is from merge-base e67d1e0 to this head. It contains the leaderboard, its results, packaging/inventory entries and two capability rows. The literal parent already has identical leaderboard code; these are shared defects, not regressions introduced by the final merge.
Validation: all 134 existing tests in the complete release-contract, source-policy-binding and public Medplum modules passed. The first combined run was 143 passed / 7 failed in 65.48 seconds. A bounded navigation follow-up corrected an observation race without changing its assertions: 2 same-app controls passed and all 4 head/parent adapter confinement controls failed in 12.11 seconds. Bootstrap all-pass/all-fail, claim and infrastructure-exclusion controls passed. The committed board JSON and Markdown reproduce byte for byte. Source-boundary and release-consistency checks passed. Focused Ruff reports the three existing Limits: this is code/scoring review, with synthetic offline and owned-loopback probes. No model calls, live app fixture, external destination or native UI was used. PNGs were not visually or OCR audited; the retained result artifacts are not privacy-certified here. No wheel/sdist was built. At the inspected head, Python CodeQL failed in the upload phase with no retained explicit cause, so CI is not described as fully green. Website, paper and outreach approval are outside this review. |
…f-app navigation score.py pooled the runs of a case drawn twice under one id, so pass^3 intervals counted a 2-of-3 case drawn twice as 4 of 6. Each draw now gets its own id. Regenerated LEADERBOARD.json/md: point estimates unchanged, pass^3 intervals claude 45.8-69.6 -> 40.5-73.0, openai 50.0-73.9 -> 46.0-78.4, fara 0.0-1.1 -> 0.0-0.0. browser.py now aborts any navigation to another origin (click, key, script, pop-up, goto) inside the browser and logs it; Screen.goto refuses other origins. Deviations 5 and 6 record both, with what the retained evidence shows. Fix ruff errors in file_times.py. Add tests/test_write_leaderboard.py.
|
APPROVE — bootstrap sampling and HTTP navigation delta only From: Codex The sampler gives every draw its own case ID before statistics group its repetitions, preserving independent case units. All four head scoring controls passed, including the mixed-case example that must never invent an all-pass case. The whole author module recorded nine passes and its original missing-board setup skip. The genuine click, keyboard, popup and script-navigation cases recorded blocked navigation and zero requests at the owned outside HTTP server; direct off-app goto refused and same-app navigation worked. The three private browser controls also passed, but their adapter cases did not retain an attempted-navigation callback, so they receive no extra attempted-navigation credit. This validates the measured HTTP navigation boundary; subresources and arbitrary protocols are outside that claim. The overall run remains incomplete: 22 collected cases, 65 phases, 19 passes, two assertion failures and one setup skip. One failure is the retained head diagnostic that manually pools duplicate IDs while bypassing the corrected sampler. Parent scoring recorded three passes and the mixed-case failure, then its post-test source-origin check raised before the after snapshot; parent browser/diagnostic groups and the final integrity footer were not reached. Complete parent attribution and full-harness qualification remain unestablished. I independently reconciled phase/JUnit/checkpoint records and rehashed 236 loaded public ref/path pairs against Git. Required Ruff, private formatting and Python 3.10 syntax checks passed. Immutable public-format diagnostics exited nonzero on both refs and remain recorded. Mypy and actual Python 3.10 execution were not run. No original assertion, skip or refusal gate was weakened. Generality: no per-app engine change; one draw-unit model and context-level HTTP navigation rule cover the reviewed entry points. Held-out evidence: synthetic software only. This approval does not qualify committed board results, model runs, native applications or real-app/M1 acceptance. |
Adds a pre-registered leaderboard of computer-use agents on the 37 public Medplum cases, run in Medplum's own web app.
What is in it (
packages/flow/benchmark/fhir_medplum/leaderboard/):PROTOCOL.md: the protocol, frozen before any scored run. Its SHA-256, and the hashes of every harness file, are committed to openadapt-internal (evidence/write-leaderboard-2026-11/PREREGISTRATION.sha256).browser.py,run.py: the harness signs in to the Medplum web app, routes the app's FHIR calls through the public fault proxy inside the browser, and scores each run withpublic/oracle.py. Anyone can run their own agent with--agent py:<module>:<function>.agents/: adapters for Claude computer use, OpenAI's computer tool, Gemini's computer use (built, not run: no API credit) and Fara-7B on MLX. The Fara prompt is vendored MIT text from microsoft/fara.score.py: the three metrics (said done with the record wrong, collateral writes said done, pass^k with k=3), bootstrap intervals over cases.REPORT.md,DEVIATIONS.md,results/: every scored row with its transcript and first and last screenshots, the excluded signed-out runs, and the spend ledger.Results (3 runs of each case):
The intervals overlap; the data do not rank the two. Neither misreported a clean case. Fara-7B's rows are still running locally and will be added by a follow-up commit.
Three deviations are logged with reasons: a host-load guard, Fara run one process at a time, and 188 runs rerun after the app's one-hour session expired under them.
Spend at list prices: $64.78 (claude) and $20.48 (openai), including the excluded runs.