SQLite-backed saga log. Owned by AppState as Arc<SagaLog>;
every SagaCtx::dispatch and compensate call writes through
it. See module-level docs for design notes.
A saga in running or compensating state at startup. Returned
by unresolved_sagas; consumed by PR 2’s compensate_unresolved
to walk succeeded steps in reverse and dispatch compensation.