verified_chain Contract (v1)
April 14, 2026 ยท View on GitHub
This document defines the machine-verifiable contract for:
verified_chain/verified_chain.json
Validation entrypoint:
python3 scripts/verify_verified_chain.py --run-dir <RUN_DIR>
Required Run Layout
The verifier fails closed if any required directory is missing.
verified_chain/verified_chain.jsonstages/dynamic_validation/exploits/
All linked paths must be run-relative and must resolve inside run_dir.
Contract Shape
verified_chain/verified_chain.json must contain:
schema_version:"verified-chain-v1"generated_at: ISO8601 timestamprun_id: non-empty stringfirmware: objectsha256: lowercase 64-hex digestprofile: non-empty string
tool_versions: objectfirmae_commit: non-empty string (placeholder allowed)firmae_version: non-empty string (placeholder allowed)tcpdump: non-empty stringiproute2: non-empty string
timestamps: objectstarted_at: ISO8601 timestampfinished_at: ISO8601 timestamp
execution: object (new in 2C.5; legacy contracts may omit and default to sequential provenance)mode:sequential|parallelmax_workers: positive int
dynamic_validation: objectbundle_dir: run-relative directory path (normallystages/dynamic_validation)isolation_verified: boolevidence_refs: non-empty run-relative path list
verdict: objectstate:pass|fail|inconclusivereason_codes: non-empty machine-checkable reason code listevidence_refs: non-empty run-relative path list
attempts: non-empty list of attempt objectsattempt: intstatus:pass|fail|inconclusivebundle_dir: run-relative directory path underexploits/chain_<id>/started_at: ISO8601 timestampfinished_at: ISO8601 timestampevidence_refs: non-empty run-relative path list
evidence_refs: non-empty run-relative path list
Verdict Semantics
Allowed reason codes:
repro_3_of_3isolation_verifiedpoc_repro_failedisolation_violationboot_flakyboot_timeoutmissing_dynamic_bundlemissing_exploit_bundlemissing_required_artifactinvalid_contract
State rules:
pass- must include
repro_3_of_3andisolation_verified - must contain exactly 3 attempts
- all 3 attempts must have
status == pass
- must include
fail- must include at least one fail-class reason code
inconclusive- must include at least one inconclusive-class reason code
Execution Provenance
build_verified_chain.pyshould copy execution provenance frommanifest.json:manifest.execution_mode->verified_chain.execution.modemanifest.max_workers->verified_chain.execution.max_workers
- Backward-compatible defaults:
- if the run manifest omits both fields, builder should emit
{"mode": "sequential", "max_workers": 1} - verifier should continue to accept legacy
verified_chain.jsonfiles that predate theexecutionobject and treat them as the same default
- if the run manifest omits both fields, builder should emit
- Validation rules when
executionis present:modemust besequentialorparallelmax_workersmust be a positive integer
Verifier Output Contract
Exit codes:
0: contract and evidence links validate1: verification failed
Stdout line format:
- success:
[OK] verified_chain contract verified: <run_dir> - failure:
[FAIL] <reason_code>: <detail>
Reason codes are deterministic and suitable for machine checks.