Data model: composition-advance-alignment
No new entities. These existing structures change in what composition-backed runs carry:
- AdvancePlan (
engine.AdvancePlan, frozen pydantic). Fields:source,snapshot,decision,result,completed_step_id,significance. It is now the only advance-plan type; the adapter'sCompositionAdvancePlanis removed. - Invariant:
commit_advancecommits only when the persisted snapshot equalssource. Otherwise it raisesStaleAdvancePlanand writes nothing. - MissionRunSnapshot.decisions (
state.json). On composition-backed runs it gainsraci:<issued step>,raci:<audit step>andsignificance:audit:<audit step>, the same values the engine path records. - run.events.jsonl. On composition-backed runs it gains
SignificanceEvaluated, placed afterNextStepAutoCompletedand before the issuance or request event.
Commit order (both advances)
0. On a terminal decision with a completed step: the before_run_completed guard, before anything is written (operator ruling 2026-10-07; a raising guard leaves the run untouched) 1. NextStepAutoCompleted, when a step completed 2. SignificanceEvaluated, when an audit gate was evaluated 3. One of:
4. state.json written
NextStepIssued;DecisionInputRequested, first occurrence only;- on a terminal decision with a completed step:
MissionRunCompleted.
After this, the composition adapter alone runs the non-blocking retrospective capture.