Skip to content

Revision diff schema

ordeal diff --json and the saved .json file use schema_version = 1. Missing checks stay missing; consumers must not infer success from an absent field.

Top-level result

Field Meaning
schema_version Result schema version, currently 1
tool Literal ordeal diff
mode function or system when a sequence file drives a factory
target Requested dotted callable or module
status divergent, no_divergence_observed, or inconclusive
claim Smallest statement justified by the measured run
isolated Whether base and candidate worktree paths differed
base, candidate Ref, resolved commit, worker PID, and temporary worktree
settings max_examples, seed, tolerances, and replay attempts
totals Function, example, mismatch, and supported-mismatch counts
added_functions Candidate-only public functions
removed_functions Base-only public functions
candidate_resolution_error Candidate import/target failure, otherwise null
functions Per-function comparison rows
artifacts Embedded ordeal.divergence-evidence/v1 records
system_sequence Supplied operation/fault objects; empty in function mode

When --save-artifacts is used with --json, stdout also includes saved_artifacts.json and saved_artifacts.markdown paths. The saved result keeps the embedded artifacts list and adds generated_at plus commands.rerun.

Revision runtime

base and candidate contain:

Field Meaning
ref User-facing ref such as origin/main or HEAD
commit Fully resolved commit SHA
pid Worker process ID
worktree Detached temporary worktree used for execution

The path is evidence of isolation, not a durable artifact path. It is normally gone by the time the command returns.

Function rows

Field Meaning
name Function name inside the selected target
status Function-scoped bounded status
base_signature, candidate_signature Inspected signatures
signature_changed Whether the signatures differ
total Generated base cases replayed in the candidate
mismatch_count All observed outcome differences
supported_mismatch_count Canonical promoted witnesses with complete bindings and full replay; at most one per function
mismatches Zero or one canonical runtime witness with embedded evidence
blocked_reason Why sound comparison could not run, otherwise null

Each retained mismatch contains:

Field Meaning
args Human-facing selected input
canonical_args Typed graph used for input identity and evidence hashing
replay_args Alias-aware encoded literal for exact durable replay, or null when unsupported
base, candidate Paired canonical outcome envelopes
artifact Embedded source-bound divergence card

mismatch_count still counts every observed difference before canonical selection. Base observations are converted to candidate-independent structural values before candidate import. Base and candidate observations contain kind, return_value, exception, and mutated_arguments; exception replay identity also includes the terminal source location. Canonical observation fields retain the typed structural graph; display fields never substitute target equality or repr. Opaque or otherwise non-lossless values set blocked_reason and make the function inconclusive.

Embedded divergence evidence

Each runtime mismatch embeds schema ordeal.divergence-evidence/v1:

Group Selected fields
revisions Commit, callable target, source SHA-256, and source location
comparison Comparator/normalizer source binding and tolerances
witness Original input, selected canonical input, hashes, and witness source
observations Paired JSON-safe base/candidate envelopes
replay Attempts, exact matches, signatures, and match basis
minimization Canonical observed-case shrinking method and sample boundary
differences Changed outcome-envelope channels
boundaries What the evidence establishes and does not establish

artifact.status = supported only when minimization is verified, every immediate replay matches, and revision, comparator, and normalizer source bindings are complete. Otherwise it is exploratory, and an unverified runtime mismatch makes the function inconclusive.

Status and exit code

Result status Exit
no_divergence_observed 0
divergent 1
inconclusive 2

See Compare Two Git Revisions for the first run and Revision Diff Troubleshooting for failure recovery.