Repository navigation
bench: silent-saves 1.1.0, repeated runs under UI change, four arms (stacked on #1352) - #1380
Merged
Merged
Conversation
One runner (openadapt-flow silent-saves --agent <adapter>) drives an executor through MockMed while its fault server breaks the save, and scores each item from the store read before and after. Fault set 1.0.0 uses only kinds already published in EFFECT_E2E.md and the scoreboard's claims run. Baselines are rebuilt from committed scoreboard rows; no new runs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…om prevention - proof.py renders four claims-run items side by side: the agent's final message and the store before and after, with verify-run's verdict. The run kept no screenshots; the screen panel is a labeled local re-render. - $0 reference runs of the screen-script, with and without the read-back. - screen-script reads the banner and error in one page evaluation; the old two-call read raced MockMed's re-render under optimistic. - README leads with the one-command runner and reports detection apart from prevention, which fault set 1.0.0 does not measure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tifact inventory Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One change per block over 100 items (MockMed drift modes), five server faults from 1.0.0, a duplicate that lands despite the save key, metrics that keep detection apart from prevention, human-event logging, and a cost ledger with per-arm caps and a stop before $20 total. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
compile_arm.py: the agent records once under compile_agent, scripted admission, then the program; re-record only on a halt that wrote nothing and was not a record check. repair_arm.py: the admitted program under SelfRepair with the shipped ReplayTarget, a missing-referral fault probe and the scoreboard's scripted approver. Spend goes to the benchmark's own ledger. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ult through admission Admission reset the page's fault to ok before the item ran. Only item 60 (duplicate) was affected; its invalid row is kept as item-060-invalid.csv and the item was re-run alone after the fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…h a regex CodeQL py/polynomial-redos on the FAULT pattern. An exact line match also fails closed if the hook changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…h a regex CodeQL py/polynomial-redos on the FAULT pattern. An exact line match also fails closed if the hook changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
….0 table generator Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… 2, 3 and 3r 100 items per arm on MockMed; README tables generated from each run's summary; screen-script reference run shows the traps catch a positional executor. Spend $5.69 in results/spend.json, every call in the run ledgers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ilent-saves-change # Conflicts: # packages/flow/benchmark/silent_saves/app.py
abrichr
added a commit
that referenced
this pull request
Oct 19, 2026
…page zoom Silent-saves 1.1.0 (#1380) stopped the compiled MockMed program on all 28 items of three UI-change blocks, and self-repair fixed none. Two causes are fixed here: - relink: a repaired copy of an admitted agent-compiled (JIT) program was refused by the run gate (DraftNotAdmitted), because its admission pins the digest every patch changes. A repair keeps the record check, so the admission now carries over: lifecycle.admit_repair writes a repair_probe admission (runs only behind a gate that stops before the save) and, after the person's approval or a signed standard change, a repair admission that embeds and re-verifies the prior one. A copy that changes the record check or parameters is refused. - zoom: at 125% a correct screen failed its region_stable postcondition (the content is 25% larger and further from the origin). The check now also looks at the page scale this step's own click showed, only when both axes agree, within one percent, at the same thresholds. A covered region fails. Measured on the same program and items: 18 of 28 now end correct (zoom 9 of 9 with no stop, relink 9 of 9 after one repair), 0 wrong saves. The What's New block (notice) still stops: its fix clicks "Continue to tasks", which the fail-closed write classifier reads as a possible save; the same classification causes #1377. Both need a person's classification. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # CAPABILITIES.md # packages/flow/public-artifacts.json
Member
Author
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.
Stacked on #1352 (itself stacked on #1303). Until those merge, the diff here includes them. This PR adds fault set 1.1.0 of silent-saves: repeated execution under UI change. It touches only
packages/flow/benchmark/silent_saves/andpublic-artifacts.json.What 1.1.0 is
openadapt-flow silent-saves --fault-set 1.1.0 --agent <adapter>: the same MockMed task 100 times, with one UI change switched on per block, all MockMed's existing drift modes: renamed controls, display scaling, moved controls, a What's New screen, latency, a reordered queue, a moved New Encounter control, a look-alike referral, a relabeled type, and the target referral gone (where the right answer is to stop). Five items get a 1.0.0 server fault, including a duplicate that lands despite the page's save key. Versioned infault_set_1.1.0.json.Per arm it reports verified saves, silent wrong saves, false stops, items left for a person, human minutes per 100 items (only minutes a person logged; scripted approvals count as 0-minute events), and cost per verified item. Detection (server-fault bad saves reported as success) is kept apart from prevention (trap items where a wrong record landed).
Results (MockMed, 100 items per arm, 2026-10-19)
screen-scriptreference, which clicks by position, wrote the wrong record on 20 of 25 trap items and reported every one as a success, so the traps do bite.ledgers/; totals are inresults/spend.json. Combined with the scoreboard's ledger, about $18.23, under the $20 stop.Issues filed from these runs
record_writtenfrom effect mining, so the canary refuses.Runner changes
compile_arm.py(arm 2) andrepair_arm.py(arm 3r, a minimal MockMed SelfRepair target over the shippedReplayTarget).spend.py: a locked, per-arm cost ledger that reads the scoreboard's ledger and stops before an arm's cap or a $20 combined total.table_1_1.pybuilds the README tables from the runs, and a test fails if they drift.Honest notes
Tests
python -m pytest benchmark/silent_saves/tests -qfrompackages/flow: 25 passed (including the browser tests). Also passed:ruff checkon the package, and the prospect-name check.🤖 Generated with Claude Code