Use this file to discover all available pages before exploring further.
A CANON_STATE_DELTA is a self-contained snapshot delta emitted by the model after every Mode B or Mode C state-changing decision. Unlike a simple diff, a valid CANON_STATE_DELTA always includes a complete current_state object — the full SESSION_STATE as it stands after the decision. This design is intentional: differential-only deltas (those that record only what changed) are not valid recovery material, because they cannot restore working state on their own without access to every prior delta in the chain. A CANON_STATE_DELTA must be usable in isolation, with nothing but the block itself.
Marker identifying this JSON object as a delta block. Must be the constant string "CANON_STATE_DELTA". Any block that lacks this field or uses a different value must not be used as a recovery source.
Sequence number of this delta. Minimum value is 1. Must equal current_state.state_seq — the validator rejects any delta where these two values disagree. See key invariant below.
The state_seq of the state that existed immediately before this delta. Minimum value is 0. Together with previous_hash, this lets a validator confirm that deltas form an unbroken chain.
Optional. SHA-256 hash of the serialized previous SESSION_STATE object. Format: "sha256:<hex>". When present, validate_state.py verifies the hash against the prior state to detect tampering or accidental mutation.
Human-readable description of what was decided. Written in plain language so an operator reading a pasted delta block can understand what happened without additional context.
The specific scope of what was authorized — the exact change permitted by the operator’s decision. Corresponds to the scope field of the matching entry in current_state.authorized_deltas.
Full SESSION_STATE object representing the complete state of the session after this delta was applied. Must validate against SESSION_STATE.schema.json in its entirety — all required fields, all array item schemas, and the constant protocol and protocol_version values. See the SESSION_STATE schema reference for the full field list.
current_state is a complete snapshot, not a diff. Every field the SESSION_STATE schema requires must be present, even fields that did not change in this delta. This is what makes the block usable as a standalone recovery source.
Plain-language instruction telling the operator what to do with this delta to make the state change durable. For example: download the block, re-upload it at next session start, or paste it into chat to restore working state.
current_state.state_seq MUST equal delta.seq. The validate_state.py script checks this invariant explicitly and rejects any delta where the two values disagree. A mismatch indicates the delta was assembled incorrectly or tampered with after emission.
The sequence equality rule exists because seq is the external, chainable identifier for this delta, while current_state.state_seq is the internal, schema-validated sequence number embedded in the full state. If they could diverge, a chain of deltas could become internally inconsistent — a delta could claim to be step 5 in the chain while its embedded state claims to be step 3.
When valid SESSION_STATE is unavailable at session start (for example, because the ephemeral /mnt/data/ storage was cleared), paste a previously emitted CANON_STATE_DELTA block into the chat. The model will:
Parse the block and confirm type === "CANON_STATE_DELTA".
Validate the embedded current_state against SESSION_STATE.schema.json.
Confirm that current_state.state_seq === delta.seq.
If validation passes, restore working state from current_state and continue.
If validation fails, reject the block as a recovery source and enter read-only mode.
See State and Recovery for the full recovery procedure, including what is permitted and forbidden during read-only mode.