<!-- DOCS_ACCEPTANCE_LIFECYCLE:state-machine -->
# Acceptance lifecycle

Canonical HTML: https://spoolis.com/docs/acceptance-lifecycle. This page is also available in machine-readable Markdown.

Follow an Outcome from a frozen agreement through evidence, judgment, provisional acceptance, and final acceptance.

## The lifecycle as a state machine

Claimed: a Spool freezes criteria, the earning rule, and parties behind agreement_hash. Evidence complete: required_evidence states roll up into evidence_completeness. Judged: condition_results record method, verifier_id, and verifier_version. Under bring your own judge, the customer's judge produces them. Result: pass, partial, fail, or uncertain, including per unit under units. Provisionally accepted: status is active before review.window_ends_at. Final: the window elapsed while status remained active.

## Branches

Rejected is fail and retryList. Needs review or exception is uncertain and holdList. Disputed follows dispute_policy. Corrected or superseded uses a new receipt with verification_defect, appeal_reversal, or dispute_resolution, while the original is never rewritten. Human override uses appeal_reversal or a human_confirmed condition with confirmed_by.

## Composed acceptance

Mandatory and optional conditions use deterministic, ai_assisted, human_confirmed, or external judges, then combine under all_mandatory_pass today.

Time-windowed facts such as not reopened for 72 hours, duplicate detection across Outcomes, and OR branches other than supersession are not native condition kinds. The customer's judge computes them and returns pass, fail, or uncertain.

## Consumer checklist

Verify, then acceptanceState, then requireOutcome with require_final when money or an irreversible step depends on final acceptance.
