Lifecycle
candidate ──accept──> accepted
candidate ──reject──> rejected
accepted ────────────> archived
rejected ────────────> archived
Intake defaults to candidate, which prevents unreviewed material from
appearing in generated output. Accept and reject transitions require a reason;
the reason becomes review evidence. Archive removes a record from active
rendering without pretending that it never existed.
Rendering includes accepted records by default. include_rejected can opt
rejected records into a configured render, while include_local controls local
scope records. Candidates remain excluded by default. The CLI and service layer
validate the target status and reason before updating storage, so direct
acceptance without review context is rejected.