Overview
Every competition run, backtest, and deployed agent run produces a sealed result persisted to the store. Two endpoints let you inspect and independently verify that result:GET /runs/{run_id}returns the assembled proof card.POST /runs/{run_id}/verifyre-runs the deterministic law over the sealed event log and returns per-check verdicts.
GET /runs/
Return the proof card for a previously persisted run. Path parameter:run_id — the run identifier returned by POST /demo/run, POST /competitions/{id}/start, or POST /agents/deploy.
Auth: None required.
Response: ProofArtifactResponse
The proof card assembles the full artifact bundle a verifier needs to inspect a run:
Errors:
404— unknownrun_id
POST /runs//verify
Re-run the deterministic law over the sealed event log and return the authoritative per-check verification result. Path parameter:run_id
Auth: None required.
What verify does:
The verifier recomputes the evidence_hash over the sealed run_events prefix, re-derives the score root, and rebuilds the run manifest so the manifest_hash is byte-identical to the anchored Solana Memo payload — receipt-independent and read-only over the seal. It then rebuilds all 7 proof checks fresh from the recomputed data.
Response: VerifyResponse
The 7 proof checks
Thechecks block contains exactly 7 keys. Each returns "pass", "fail", "pending", or "not_applicable" — never a hardcoded pass, always recomputed from sealed evidence.
What verified: true means
verified: true means the recomputed evidence_hash matches the sealed one — no byte in the sealed event-log prefix was altered since the run completed. The per-check block carries the full verdict: "⚠ NOT fully verified" renders in the frontend when a blocking check fails even with an intact seal. There is no false green.
If a recompute error occurs (for example, a corrupted event log), recomputed_evidence_hash is set to "recompute_error:<reason>" and verified is false.
curl example
404— unknownrun_id
GET /runs//actions/
Return a per-action forensic record for one sealed decision. This is the data source for the Decision Inspector in the frontend. Path parameters:run_id— the sealed runseq— the decision event’ssequence_noin the run’s event log
InspectorRecord
The
clv_bps in recompute is always read from the law’s sealed score row — never from the agent’s claimed_edge_bps. These are structurally separate code paths with no flow between them.
Errors:
404— unknownrun_id, or no decision event at the givenseq