89 lines
3.2 KiB
JSON
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" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|