Read the output¶
Each step writes plain JSON into the output directory, experiments/out/ by default. The viewer, the kernel, and the release job all read these same files.
Verdicts¶
Every invariant check produces one of three results:
| Result | Meaning | What comes with it |
|---|---|---|
| PASS | The guarantee held in this world. | An explanation. |
| FAIL | The guarantee was violated. | A witness: the event ids that form the counterexample. |
| UNKNOWN | The checker could not decide. | missing_data, which names the missing signal. |
UNKNOWN is never rounded up to PASS. A release policy that needs a claim treats UNKNOWN as unmet.
Digests¶
Commands print sha256: digests. The trace digest covers truth, every role's view, and every decision. The same scenario, seed, and fault schedule always give the same trace digest, so two people can compare a run by eye. The bundle root is the head of the evidence hash chain that the kernel signs.
The files¶
| File | Written by | What to look for |
|---|---|---|
traces/root.json, verdicts/root.json |
run, explore |
The unperturbed world and its verdicts. |
exploration.json |
explore |
comparison: failing branches per 100 and the index of the first decision FAIL for each strategy. trace_files lists the exported traces of failing branches. |
minimal_schedule.json |
minimize |
original versus minimal, one_minimal_verified, oracle_calls, witness, and a causal_diff against the root. |
genome.json |
genome extract |
mechanism_sentence, abstract mechanism selectors (never event ids), preconditions, and origin. |
challenge.json |
genome challenge |
primary.reproduced, plus each controls[] result. For a control, "preconditions met, not reproduced" is the success case. |
index.json, agent_evidence.json |
report |
The manifest and the agents' typed claims. Agents can never emit ATTESTED. |
bundle.json |
verify (kernel) |
Records, hash links, and a signed checkpoint. |
authorization.json |
authorize (kernel) |
decision, reasons, satisfied, missing, stale, and downgraded. |
The full shapes of these files are in Viewer and data contract.
Reading a FAIL¶
Take the minimal port_alert counterexample:
- What broke.
decision.consistent_with_truth. The duty officer choseescalate, but the same rule evaluated over truth at 1500 s givesmonitor. - Why. The witness lists truth events from before the decision that the officer's role had not received. One of them is
correction-001, which the intervention delayed. - What is necessary. The minimal schedule has one intervention, and removing it makes the branch pass. That is what 1-minimal means.
- Whether it generalizes. The genome reproduces on
convoy_lostlinkand not onconvoy_lostlink_immune.
Witnesses report all missing information
A decision witness lists every truth event the role had not yet received at decision time, not only the ones the fault caused. The causal_diff in minimal_schedule.json isolates what the intervention changed.
Reading an authorization¶
{"decision": "DENIED", "reasons": ["integrity:record_edited@1: record 1 content does not match its hash"], ...}
The integrity: reasons come from bundle verification. missing lists policy requirements with no acceptable record. stale lists evidence older than the policy's max_age_s. downgraded lists records whose kind is below the required kind. For how the kernel reaches these decisions, see The kernel.