--- id: INT-13 family: RT-INT level: extended profiles: [runtime] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/rt-int/int-13 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # INT-13 — A checkpoint round-trip preserves cancellation *RT-INT (Part II) · level: extended · profiles: runtime · added in 1.0* Whether a run was cancelled or completed cannot be re-derived after the fact; "finished" looks identical either way. So the outcome is recorded, not inferred. ## The rule > **Normative.** This is the rule. > > 1. Execution state carries its terminal outcome explicitly (completed, failed or cancelled, and unset while the run is live), and a checkpoint persists it. > > 2. A snapshot's status is the persisted outcome, never a re-derivation from whether the run finished, which cannot express cancellation. > > 3. A cancel signal marks the state cancelled and writes the final checkpoint. > > 4. Seeding a new turn from a terminal state clears the run state, outcome and execution position alike (SG-12), so a recorded cancellation never closes a conversation thread; only explicit resumption of a run is gated (INT-14). ## What it means "Finished" looks the same whether a run completed, failed or was cancelled, if all that is stored is whether it finished at all. Deriving the outcome from completion alone cannot tell a deliberate cancellation apart from an ordinary finish, so the outcome has to be written down as its own fact, and a checkpoint has to carry that fact forward rather than reconstructing it. Cancellation recorded this way still does not close a conversation thread: seeding a new turn from a terminal state clears the run's outcome along with its execution position, so the next turn starts clean. Only resuming the run itself is gated (INT-14); continuing the conversation is not. ## Example ```json title="A checkpoint written with the outcome recorded" verdict="cancelled" {"isComplete": true, "error": null, "status": "cancelled"} ``` ## Related rules - Names: INT-6, INT-14, SG-12 - Referenced by: INT-6, INT-14 --- Rule identifiers are permanent and are never renumbered. This specification carries no implementation status: each implementation publishes its own standing against these rules. Licensed CC BY 4.0.