mix surfex.status prints a verdict (ok or FAILING), counts per type and state, then each group needing attention. It exits non-zero when failing.

Options: --format json (the work list), --verify (check the log's integrity), --evidence (check evidence confirmations against the last test run), --merge PATH (once per CI job's evidence file: checked together, so no claim goes unchecked), --validated (also fail on unvalidated relations), --no-planned (fail on planned), --no-marks (fail on marks), --no-baseline (fail on relations resting on an adoption baseline).

What fails, and the usual fix:

GroupFix
Danglingsee what changed; re-confirm by the process (mix surfex.info process)
Proposedvalidate it: evidence (confirm --evidence) or a review (validate)
Orphanedmix surfex.move OLD NEW, or retire
Conflictedmix surfex.resolve FROM TO --type T --pick TIP
Unmetrelate it (suggest, the process), or excuse code with a class
Broken / broken citationfix the tag, or the name the spec cites
Unprovenrun the tests; a confirmation the evidence doesn't bear out
Undeclaredthe test dropped its tag: restore it, or retire the relation
Trianglethe unit's verifying test must call the implementing code (triangle: :fail)
Unvalidated (--validated)review it (mix surfex.validate)

Not failing: new, planned, impacted, open marks (unless --no-marks), and claims not checked here because this run excluded or skipped their test.

JSON, per relation: type, state, impacted, tips, and ends, each with kind, id, recorded and now (hashes), changed, planned and location. Work it one relation at a time.