{
"type": "object",
"required": [
"frameId",
"index",
"runSequence",
"combatStep",
"transitionType",
"payload",
"effectSteps",
"calculations",
"applications",
"cardZoneSteps",
"snapshotSequence"
],
"properties": {
"frameId": {
"type": "string",
"format": "uuid"
},
"index": {
"type": "integer",
"minimum": 0
},
"runSequence": {
"type": "integer",
"minimum": 1
},
"combatStep": {
"type": "integer",
"format": "uint64"
},
"transitionType": {
"type": "string"
},
"payload": {
"type": "object",
"additionalProperties": true
},
"effectSteps": {
"type": "array",
"description": "Ordered, source-independent effect execution trace.",
"items": {
"$ref": "#/components/schemas/EffectExecutionStep"
}
},
"calculations": {
"type": "array",
"description": "Bucket calculations used by effects in this frame.",
"items": {
"$ref": "#/components/schemas/CalculationTrace"
}
},
"applications": {
"type": "array",
"description": "Concrete immutable mutations produced by the frame.",
"items": {
"$ref": "#/components/schemas/EffectApplicationRecord"
}
},
"cardZoneSteps": {
"type": "array",
"description": "Ordered, purpose-independent card-zone transitions produced by this command frame.",
"items": {
"$ref": "#/components/schemas/CardZoneFlowStepRecord"
}
},
"stateAfter": {
"type": "object",
"nullable": true,
"additionalProperties": true,
"description": "Present in FullSnapshots mode; null in compact mode."
},
"snapshotSequence": {
"type": "integer",
"minimum": 1,
"description": "Sequence accepted by GET /timeline/{sequence}/state for compact frame lookup."
}
}
}