{"kind":"contract_index","contract_version":"v0.4.6","api_version":"0.4.6","stability":"locked_for_godot_v0_4_render_foundation","order_types":["move_unit","attack_unit","claim_edge","build_unit"],"order_payload_examples":{"move_unit":{"type":"move_unit","player_id":"player_1","payload":{"unit_id":"u_p1_standard_1","from":"h_0_0","to":"h_1_0"}},"attack_unit":{"type":"attack_unit","player_id":"player_1","payload":{"attacker_id":"u_p1_standard_1","defender_id":"u_p2_standard_1","from":"h_1_0","to":"h_2_0"}},"claim_edge":{"type":"claim_edge","player_id":"player_1","payload":{"unit_id":"u_p1_standard_1","from":"h_2_0","to":"h_3_0"}},"build_unit":{"type":"build_unit","player_id":"player_1","payload":{"unit_type":"fast","tile_id":"h_0_0"}}},"replay_event_types":["turn_started","unit_moved","move_rejected","attack_rejected","combat_resolved","unit_destroyed","edge_claimed","edge_claim_rejected","supply_updated","supply_cut","city_captured","production_resolved","unit_created","build_rejected","score_updated","match_ended","turn_resolved"],"state_sections":["turn","phase","players","tiles","edges","units","resources","supply","score","victory_status"],"scenario_ids":["foundation_contract_boot","tutorial_move_resolve_replay","combat_supply_edge_build_victory","contract_error_envelope"],"golden_fixture_ids":["fixture_manifest","foundation_contract_boot","tutorial_move_resolve_replay","combat_supply_edge_build_victory","contract_error_envelope"],"contract_kinds":["contract_index","godot_contract","health","version","match","match_summary","match_state","order_submit","resolve_result","replay","victory","error","golden_fixture_manifest","golden_fixture","godot_source_manifest","godot_web_export_manifest","godot_api_load_demo","visual_seed_asset_manifest","snapshot_manifest","godot_scene_marker_manifest","godot_scene_instancing_manifest","godot_input_foundation_manifest"],"endpoints":{"health":"GET /api/health","version":"GET /api/version","contracts":"GET /api/contracts","godot_contract":"GET /api/contracts/godot","contract_scenarios":"GET /api/contracts/scenarios","golden_fixtures":"GET /api/contracts/fixtures","golden_fixture":"GET /api/contracts/fixtures/{fixture_id}","maps":"GET /api/maps","map":"GET /api/maps/{map_id}","create_match":"POST /api/matches","match":"GET /api/matches/{match_id}","state":"GET /api/matches/{match_id}/state","orders":"POST /api/matches/{match_id}/orders","resolve":"POST /api/matches/{match_id}/resolve","replay":"GET /api/matches/{match_id}/replay","victory":"GET /api/matches/{match_id}/victory","supply":"GET /api/matches/{match_id}/supply","edges":"GET /api/matches/{match_id}/edges","build_options":"GET /api/matches/{match_id}/build-options?player_id={player_id}"},"required_response_fields":{"match_state":["kind","contract_version","match_id","status","turn","phase","state","entity_counts","available_actions","links"],"resolve_result":["kind","contract_version","match_id","status","events","event_count","state","score","victory","links"],"replay":["kind","contract_version","match_id","event_count","events","links"],"error":["kind","contract_version","status","error"]},"response_rules":["critical match endpoints include kind and contract_version","state responses keep state as the single canonical payload object","state responses include entity_counts and available_actions for clients","orders are queued on submit and fully validated at resolve time","resolver responses always include events, event_count, state, score and victory","replay events are sorted by turn and sequence before leaving the API","HTTP errors use the contract error envelope","Godot clients must not infer rules outside these contracts","Godot v0.4 renders state and replay previews from API data only","Godot web export slot may contain a placeholder until an actual export is produced","Godot v0.4.6 uses ASSET_MANIFEST.json for visual lookup, not hardcoded texture paths where possible","Godot v0.4.6 scene markers are typed render nodes only and must not become rule authority","Godot v0.4.6 map_renderer instantiates marker scenes through scene_registry instead of building all visuals inline","Snapshots exclude .env, secrets and mutable database/cache directories by default","scenario contracts provide stable example flows before Godot integration","Golden fixtures are static JSON examples and must not mutate runtime state"],"links":{"godot_contract":"/api/contracts/godot","contract_scenarios":"/api/contracts/scenarios","golden_fixtures":"/api/contracts/fixtures","godot_source":"client-godot/project.godot","godot_export_preset":"client-godot/export_presets.cfg","godot_web_slot":"web/public/game/index.html","health":"/api/health","version":"/api/version"}}