The grader must prove real solving happened. The oracle must prove the task is solvable every time.
Binary rewards only
Write 0 or 1 to reward.txt. Partial credit like 0.7 is not allowed.
Same logic for oracle and agent
Never branch the verifier to go easy on the oracle. Identical checks for both.
Check correctness, not just files exist
Verifying a .json file exists is not enough. Open it and validate the content.
Only grade what instructions require
If the prompt never mentions a REST API, do not fail the agent for missing one. Every graded behavior must be stated (or clearly implied) in the instructions or a referenced spec.
Defeat hand-written answers
If an output file could already sit in the environment, regenerate it by running the agent’s program during verification so a static file cannot sneak a pass.
Preinstall test tools
test.sh should not download packages from the internet. Install verifier dependencies in the Dockerfile (or vendored wheels), including libraries used only by tests.
tests/test.sh is required
Even if you have pytest files, test.sh is the required entrypoint that writes the reward.
Oracle must be deterministic and real
No flaky random sampling. No hardcoding the final answer with a one-line cat. Derive the answer with real steps, and pass every run.
Hard ≠ hidden requirements
Difficulty must come from genuine challenge with every required behavior disclosed. Undocumented traps that make agents fail are unfair, not Hard.