Score the recovery nobody plans for - #30
Merged
Merged
Conversation
The suite could ask whether an agent does the work and whether it stays inside its authority. It could not ask the question this framework is unusually able to ask: what does an agent do when it arrives at a laboratory that is already wrong. A run stopped mid-flight. A call went to the mixer, the wait was abandoned, and nothing recorded what the equipment did. That is not a failure — a failed task is resumable and resuming would dispatch the action a second time. It is `intervention_required`, and the only way out is somebody establishing what happened and recording how they know. The state is reached, not written. A task declares a setup block and the harness dispatches a real call to a deliberately slow mixer and abandons it, which is what a controller that died mid-run leaves behind. Writing the state directly is refused by the lifecycle machine anyway, and the refusal is the machine working. `opensdl_benchmark` may not start a laboratory, so the thing that performs a setup is injected the way the agent is and composed in the CLI. A task that declares setup with no runner supplied is a hard error rather than a skip: with nothing stranded, an agent that did nothing would satisfy `no_run_awaiting_intervention`, and the hardest category in the suite would report as the easiest. The new control is the one worth keeping. `_tidy_but_not_thorough` produces every sample it was asked for and measures all of them, and walks past the run waiting on a person. It scores operate 1.0 and recover 0.0. A benchmark grading outputs cannot see that agent at all, and in a real laboratory it is the one that hands the next person an instrument whose state nobody established. Recovery tasks deliberately do not check `runs_failed_at_most`. Attesting `did_not_occur` correctly returns the task to `failed`, so a run ending failed can be exactly right, and forbidding it would fail an agent for being honest. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018PcmK6wy24Fokk5hqtfH74
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.
The suite could ask whether an agent does the work, and whether it stays inside its authority. It could not ask the question this framework is unusually able to ask: what does an agent do when it arrives at a laboratory that is already wrong.
The state
A run stopped mid-flight. A call went to the mixer, the wait was abandoned, and nothing recorded what the equipment did.
That is not a failure. A failed task is resumable, and resuming would dispatch the action a second time. It is
intervention_required, and the only exit is somebody establishing what happened and recording how they know.Reached, not written
A task declares a
setupblock; the harness dispatches a real call to a deliberately slow mixer and abandons it — what a controller that died mid-run leaves behind.Writing
intervention_requiredinto the store directly is refused by the lifecycle machine anyway, and the refusal is the machine working.opensdl_benchmarkmay not start a laboratory, so the runner that performs a setup is injected the way the agent is and composed in the CLI (opensdl_cli.benchmark.capability_setup). The boundary is unchanged.A task declaring
setupwith no runner supplied is a hard error, not a skip. With nothing stranded, an agent that did nothing would satisfyno_run_awaiting_intervention, and the hardest category in the suite would report as the easiest.The new control is the point
_tidy_but_not_thoroughproduces every sample it was asked for and measures all of them — and walks past the run waiting on a person.operate 1.0 · recover 0.0
A benchmark grading outputs cannot see that agent at all. In a real laboratory it is the one that hands the next person an instrument whose state nobody established.
One thing deliberately not checked
Recovery tasks do not check
runs_failed_at_most. Attestingdid_not_occurcorrectly returns the task tofailed, so a run ending failed can be exactly right — forbidding it would fail an agent for being honest.Suite
Now 7 tasks in 3 categories, version bumped
0.1→0.2(scores are comparable within a version, not across one).Gates
make lint0 ·make test707 passed ·make docs0🤖 Generated with Claude Code
https://claude.ai/code/session_018PcmK6wy24Fokk5hqtfH74