Public JSON contract

marginci test ... --json writes exactly one JSON document to stdout, followed by newline, including errors. Application output is saved in attempt log files; --verbose progress uses stderr. Human verdict, JSON verdict and process status agree.

Schema version 2, scope declared_workload. Additive comparison_identity records comparison inputs without changing finite-workload semantics. Consumers should accept additive fields; changing meaning/removing fields requires a version change.

Completed run fields: schema_version, scope, run_id, operation, verdict, exit_code, baseline_revision, candidate_revision, comparison_identity, baseline, candidate, measured_regression, max_regression, providers, coverage, comparison, reasons, artifacts and pairs.

Unknown/nonfinite economic results use explicit null, never NaN/Infinity or a fabricated zero. ERROR keeps the existing smaller envelope: schema_version, scope, verdict, exit_code and reasons. No revisions/economics are invented if preconditions prevented construction.

init, doctor, help and version with --json also produce one JSON document but are setup interfaces, not this economic-report schema. A successful doctor response explicitly says it is not PASS and does not perform dependency installs or paid operations.