Run Checks (Proof)
Proof is an experimental evidence layer. Model text cannot mark a run verified. Only a valid operator-controlled contract with passing assertions can do that.
Enable Proof
Section titled “Enable Proof”odinn experimental enable proof --confirm-impactRestart a running gateway after changing the gate.
Supported checks
Section titled “Supported checks”A Proof contract can check:
- files under the run workspace;
- bounded HTTP
GETorHEADresponses; - fixed Git working-tree conditions;
- an exact operator-allowlisted command argument vector.
Command assertions are denied by default. Allowing only an executable name is not enough; the complete argument vector must match an operator-owned entry. Approved commands run without a shell, receive a minimal environment without provider credentials, and have bounded output and deadlines.
Workflow
Section titled “Workflow”Validate the contract before using it:
odinn experimental proof contract validate ./contract.ymlRun checks against a recorded run:
odinn experimental proof run <run-id> --contract ./contract.ymlodinn experimental proof show <run-id>Evidence is stored in the content-addressed run ledger. A failed assertion records a failed verification; it does not disappear as an ordinary model response.
Advanced: contract shape
A version 1 contract contains an identifier, the target run, and bounded assertions. File and working-directory paths are confined to the run workspace. Command output and HTTP response evidence are size-limited. See the Task contract reference for a complete example.
Limits
Section titled “Limits”HTTP Proof is loopback-only by default so an untrusted contract cannot become a generic request-forgery primitive. Verification proves only the specified assertions at the observed time. It does not prove arbitrary semantic correctness or reverse external effects.
