Prepare the evidence
Use the configured operator shell and private output parent. SetSEDIMENT_ORG_ID, SEDIMENT_DATABASE_URL, and SEDIMENT_MIRROR_PATH.
The mirrors must contain the failed and fixed commits and their ancestry.
Recovery reads Facts and mirrors directly. It doesn’t accept --from, cohort
filters, a Derivation policy file, or a consumer profile. A reviewed bundle
doesn’t freeze the evidence for this command.
Understand Recovery lineage
The Recovery export writes one row per red-to-green CI transition in a clean, resolved workflow lineage (Recovery pair). It pairs the lastfailed run with the next passed run on a descendant commit. The row carries
the fixing diff and identifiers for Inference calls attributed to each side.
Match workflow IDs within one provider, or paths when both IDs are absent. Names alone don’t
establish a definition; workflow_identity_absent counts each excluded clean
resolution. If an earlier attempt carries the identity, the resolved run retains it.
Recovery pairs documents
the Derivation gates: ancestry, suspected-flake exclusion, ambiguous-verdict
exclusion, non-verdict exclusion, same-commit rerun decline, and the diff-size
cap.
Export the pairs
Run the command with an unused destination:recovery_ci version 1. It prints pairs derived and
recovery rows, each with a separate skipped map, followed by written paths.
The CLI uses the default evaluation fraction of 0.1. Populated partitions
produce recovery.train.jsonl and recovery.eval.jsonl; an empty partition
produces no file. The CLI has no split override.
Inspect the output
- Check that the failed and fixed outcomes describe the same workflow lineage and that the fixed commit descends from the failed commit.
- Inspect
recovery_diffagainst the mirror. The default limit is 200 changed lines, counting additions and removals inside hunks. - Review both diagnostic maps.
workflow_identity_absent,same_commit,not_ancestor, anddiff_oversizedexplain common Derivation exclusions. - Audit the split. A pair goes to eval if any resolvable Session on either side belongs to eval. With no resolvable Session evidence, it goes to train. That fallback doesn’t establish a task-level holdout.
nothing written and leaves earlier
files untouched. Use a fresh destination to keep that result unambiguous.
Read a Recovery row
The RecoveryRow schema defines the complete wire contract. Inspect these fields when auditing a pair:Interpret the degradation tally
The projection declines each unrepresentable pair once undernon_finite_number
or unrepresentable_unicode. It checks emitted content and metadata, excluding
omitted Inference-call messages. The separate inference_call_not_found tally counts
attributed inference-call IDs that are missing from the Inference call lookup.
Missing source records count under attribution_evidence_absent, per side and
Inference call. These two enrichment counts don’t drop the CI pair. Don’t add
them to pair-level exclusions to estimate lost rows.