Tests decide the reward
OpenAnvil grades the generated app with deterministic hidden tests. Android and iOS use different boot environments, but they produce the same evidence and reward contract.
What starts grading
The build must stop before hidden tests can enter the environment.
submit or boot_grader events delivered through EventBridge, SNS, and SQS.trials/*/trial.toml now requires description under [trial] for CLI menu. Validation via openanvil validate errors if missing, CI checks category + description and runs validate for each trial.Android and iOS boot differently
The platform boundary affects compute, device startup, installation, and cleanup. It does not change reward semantics.
One trigger branches into two platform environments
Android and iOS boot differently, then converge on the same test tiers and reward contract.
Android grader
TargetThe target cloud path runs a pinned grader image on a Linux EC2 host with Docker and hardware virtualization.
_boot_android_grader() is a stub.iOS grader
TargetThe target cloud path runs a pinned macOS Tart VM on an EC2 Mac host controlled through SSM.
_boot_ios_grader() is a stub.Four tiers test different failure classes
A single pass or fail hides useful signal. The reward preserves which kind of capability succeeded.
How subtests become reward
Every subtest produces a deterministic binary result. Tier means are combined using the trial weights.
Reward composition
The final score preserves four kinds of product correctness, with flow carrying the largest weight.
What grading publishes
Grading completes only after the evidence and terminal state are durable.