Files
2026-03-10 12:13:56 -04:00

89 lines
3.2 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Commander AI Lab — Per-Game Log Schema v1",
"description": "Optional detailed log for a single simulated game.",
"type": "object",
"required": ["gameIndex", "batchId", "turns"],
"properties": {
"gameIndex": { "type": "integer" },
"batchId": { "type": "string" },
"gameSeed": { "type": "integer" },
"turns": {
"type": "array",
"items": {
"type": "object",
"required": ["turnNumber", "activeSeat", "phases"],
"properties": {
"turnNumber": { "type": "integer", "minimum": 1 },
"activeSeat": { "type": "integer", "minimum": 0, "maximum": 2 },
"phases": {
"type": "array",
"items": {
"type": "object",
"required": ["phase"],
"properties": {
"phase": {
"type": "string",
"enum": ["untap", "upkeep", "draw", "main1", "combat_begin", "declare_attackers", "declare_blockers", "combat_damage", "combat_end", "main2", "end", "cleanup"]
},
"actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["play_land", "cast_spell", "activate_ability", "attack", "block", "trigger", "resolve", "mulligan", "pass_priority"]
},
"card": { "type": "string" },
"targets": {
"type": "array",
"items": { "type": "string" }
},
"seat": { "type": "integer" },
"manaSpent": { "type": "string" },
"notes": { "type": "string" }
}
}
},
"boardState": {
"type": "object",
"description": "Snapshot of board state after this phase (optional, expensive)",
"properties": {
"players": {
"type": "array",
"items": {
"type": "object",
"properties": {
"seat": { "type": "integer" },
"life": { "type": "integer" },
"handSize": { "type": "integer" },
"librarySize": { "type": "integer" },
"permanentCount": { "type": "integer" },
"graveyardSize": { "type": "integer" }
}
}
}
}
}
}
}
}
}
}
},
"outcome": {
"type": "object",
"properties": {
"winningSeat": { "type": ["integer", "null"] },
"winCondition": { "type": "string" },
"totalTurns": { "type": "integer" },
"finalLifeTotals": {
"type": "array",
"items": { "type": "integer" }
}
}
}
}
}