Repository navigation
Conversation
…ecycle totals Split from #1441 onto the production-lifecycle stack (#1514, #1513): code, the raw rows the tables come from, and the README. Per-item agent traces and the per-call spend ledger moved to a release asset in the private workspace repo (sha256 906a9daf...); spend.json keeps per-label totals. - lifecycle/arms: agent with tools, agent-written script, screenshot agent, hand-written script, the comparison runner (--drift, per-item watchdog) - silent_saves/agent_arms.py: the same two competitors on MockMed - economic_comparison: assumptions, totals over 10/100/1,000 items, README Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
abrichr
commented
Oct 25, 2026
abrichr
left a comment
Member
Author
There was a problem hiding this comment.
Coordinator review (AI-assisted). Approved, with small fixes before merge.
The numbers reproduce: economic_comparison.totals regenerates results/TABLE.md identically, and spot recomputations match. Fairness is acceptable and disclosed.
Fixes:
- Remove the absolute local paths in
silent_saves/results/1.1.0/openadapt-program/2026-10-24*/meta.json:7and the~/oa/scratch/...reference ineconomic_comparison/README.md:331. lifecycle/arms/economics.py:90-97takes n from theitem_resultrows. Compare it with the planned item count and fail or label any run that came up short, so a hard exit can't shrink the denominator without notice.- Reword the load note: the ledgers peak at 79 and 102, not "about 5 to 20".
- economics.py labels a run that ended short of its planned items (run_start.items, lowered by plan.json stop_after) with the reason, and totals.py carries that label, so a hard exit can't shrink a denominator without notice (test added) - no absolute local paths in the committed meta.json or README - the README gives each run's measured median and peak host load Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Evidence: OpenAdapt against competent alternatives on the same task, counting every person's minute and total cost over 10, 100 and 1,000 items. Write-up and tables:
packages/flow/benchmark/economic_comparison/README.md.Stacked on #1513 (production-lifecycle soak, which sits on #1514). Split from #1441: this PR carries only code, the raw rows the tables come from, and the README. The agents' per-item traces and the per-call spend ledger are a release asset in the private
openadapt-workspacerepo (tagevidence-economic-comparison-2026-10-24, sha256906a9daf…).What was measured (2026-10-24, synthetic data)
OpenEMR referral intake. Seed 7, 55 items, the save button relabeled at item 26.
MockMed silent-saves 1.1.0. 100 items, 10 UI changes, 5 server-side bad saves.
Where a baseline beats OpenAdapt. On OpenEMR, the agent with tools wins every row except model cost and setup. On MockMed, both competent alternatives verify more items and have fewer false stops. OpenAdapt's silent-wrong advantage holds only against the agent that trusts the screen; every arm that reads the record back had 0.
People time is priced from
economic_comparison/assumptions.json(cost model V1, $30/h operator, $100/h engineer; shown at x0.5 and x2). It is not measured.Not done
baselines-restin the fixture queue. The agent script will rerun in full under the new watchdog. That run also adds a hybrid arm: the agent with tools calling OpenAdapt-taught programs (taught_<name>) with read-back.Code
silent_saves/agent_arms.py: the two new MockMed executors.economic_comparison/totals.pyandassumptions.json: the totals.lifecycle.arms.compare:--drift, and a per-item watchdog. On a timeout it dumps every thread's stack tostacks.txt, kills the browser driver, records an error row and gives the arm a fresh browser; it hard-exits if the arm still does not return (tests/test_lifecycle_watchdog.py).Model spend: $6.05 of the $30 cap (
lifecycle/results/spend.json). Tests:test_lifecycle_watchdog.py,test_lifecycle_arms.py,test_lifecycle_arms_mock.pyandtest_lifecycle_benchmark.py, 34 passing locally. No public copy changed.🤖 Generated with Claude Code