{"@self_hash":"sha256:a48db689321165c52b1f552035906d6f917d2d3d93ee1e95a2e1fcb042818c77","@encoding":"cambridge-tcg/universal/v1","@kind":"play_example_match","@content_hash":"sha256:a25d8121d0ca7da08bab1cb8287b808a976d374a4ee1e4cf513712ff1122cf43","@retrieved_at":{"iso8601":"2026-05-13T20:44:39.553Z","unix_epoch_seconds":1778705079},"_note_opaque":["intent_examples[].scenario"],"_links":{"canonical":"/api/v1/play/example-match","types_source":"apps/storefront/src/lib/play/types.ts","game_state_schema":"/api/v1/play/game-state-schema","effect_grammar":"/api/v1/play/effect-grammar","manifest":"/api/v1/manifest","see_also":{"play_index":"/api/v1/play/index.json","tutorial":"/api/v1/play/tutorial","glossary":"/api/v1/play/glossary","archetypes":"/api/v1/play/archetypes","game_state_schema":"/api/v1/play/game-state-schema","effect_grammar":"/api/v1/play/effect-grammar","deck_validate":"/api/v1/play/deck/validate"},"l3_design_doc":"docs/research/play-engine-l3-design.md","openapi":"/api/openapi.json#/paths/~1api~1v1~1play~1example-match/get"},"preamble":{"purpose":"Curated short match demonstrating the typed MatchEvent[] wire format + Intent → IntentReply exchange. First runtime consumer of lib/play/types.ts.","type_source_of_truth":"apps/storefront/src/lib/play/types.ts","scenario_summary":"Alice (Red Luffy) vs Bob (Green Zoro). Alice goes first. Alice attacks Bob's leader; Bob counters for +2000; defender survives by strict-greater rule. Bob concedes on turn 2 for example brevity.","substrate_honest_notes":["Card ids OP01-001 / OP01-031 / OP01-002 / OP01-032 are illustrative; their printed powers and counter values are encoded here as plausible numbers.","Bob's intent_play_card example is rejected for insufficient_don — the validator catches the under-resourced play before the event is appended.","deck_seed_commit_by_player carries placeholder zero/one hashes; the live runtime uses real commit-reveal sha256 against shuffled deck order.","Card_instance_ids are arbitrary tokens scoped to this match."]},"match":{"match_id":"example-match-001","format":"standard","players":{"alice@example":{"player_id":"alice@example","role":"first_player","leader_card":"OP01-001"},"bob@example":{"player_id":"bob@example","role":"second_player","leader_card":"OP01-031"}},"winner_id":"alice@example","end_reason":"concession"},"event_count":29,"events":[{"kind":"match_created","match_id":"example-match-001","player_a_id":"alice@example","player_b_id":"bob@example","format":"standard","created_at":"2026-05-13T16:00:00.000Z"},{"kind":"deck_declared","match_id":"example-match-001","player_id":"alice@example","leader_id":"OP01-001","main_deck_card_ids":["OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002","OP01-002"]},{"kind":"deck_validated","match_id":"example-match-001","player_id":"alice@example","legal":true,"violation_codes":[]},{"kind":"deck_declared","match_id":"example-match-001","player_id":"bob@example","leader_id":"OP01-031","main_deck_card_ids":["OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032","OP01-032"]},{"kind":"deck_validated","match_id":"example-match-001","player_id":"bob@example","legal":true,"violation_codes":[]},{"kind":"match_started","match_id":"example-match-001","first_player_id":"alice@example","initial_hand_size_by_player":{"alice@example":5,"bob@example":5},"initial_life_count_by_player":{"alice@example":5,"bob@example":5},"deck_seed_commit_by_player":{"alice@example":"sha256:0000000000000000000000000000000000000000000000000000000000000000","bob@example":"sha256:1111111111111111111111111111111111111111111111111111111111111111"}},{"kind":"mulligan_chosen","match_id":"example-match-001","player_id":"alice@example","mulligan":false},{"kind":"mulligan_chosen","match_id":"example-match-001","player_id":"bob@example","mulligan":false},{"kind":"life_placed","match_id":"example-match-001","player_id":"alice@example","count":5},{"kind":"life_placed","match_id":"example-match-001","player_id":"bob@example","count":5},{"kind":"phase_began","match_id":"example-match-001","player_id":"alice@example","phase":"refresh","turn_number":1},{"kind":"phase_began","match_id":"example-match-001","player_id":"alice@example","phase":"draw","turn_number":1},{"kind":"phase_began","match_id":"example-match-001","player_id":"alice@example","phase":"don","turn_number":1},{"kind":"don_added","match_id":"example-match-001","player_id":"alice@example","don_instance_ids":["i_alice_don_001"],"total_active_after":1},{"kind":"phase_began","match_id":"example-match-001","player_id":"alice@example","phase":"main","turn_number":1},{"kind":"attack_declared","match_id":"example-match-001","player_id":"alice@example","attacker_card_instance_id":"i_alice_leader","target_card_instance_id":"i_bob_leader","target_kind":"leader"},{"kind":"counter_played","match_id":"example-match-001","player_id":"bob@example","counter_card_instance_id":"i_bob_hand_counter_001","counter_value":2000,"source":"hand_counter_value"},{"kind":"counter_step_passed","match_id":"example-match-001","player_id":"bob@example"},{"kind":"damage_resolved","match_id":"example-match-001","attacker_power":5000,"defender_power":7000,"defender_survived":true,"ko_card_instance_id":null,"life_flip_count":0},{"kind":"card_state_changed","match_id":"example-match-001","player_id":"alice@example","card_instance_id":"i_alice_leader","new_orientation":"rested"},{"kind":"phase_began","match_id":"example-match-001","player_id":"alice@example","phase":"end","turn_number":1},{"kind":"turn_ended","match_id":"example-match-001","player_id":"alice@example","turn_number":1},{"kind":"phase_began","match_id":"example-match-001","player_id":"bob@example","phase":"refresh","turn_number":2},{"kind":"phase_began","match_id":"example-match-001","player_id":"bob@example","phase":"draw","turn_number":2},{"kind":"card_drawn","match_id":"example-match-001","player_id":"bob@example","card_instance_id":"i_bob_drew_001"},{"kind":"phase_began","match_id":"example-match-001","player_id":"bob@example","phase":"don","turn_number":2},{"kind":"don_added","match_id":"example-match-001","player_id":"bob@example","don_instance_ids":["i_bob_don_001","i_bob_don_002"],"total_active_after":2},{"kind":"phase_began","match_id":"example-match-001","player_id":"bob@example","phase":"main","turn_number":2},{"kind":"match_ended","match_id":"example-match-001","winner_id":"alice@example","reason":"concession"}],"intent_examples_count":3,"intent_examples":[{"scenario":"Alice declares her opening attack — accepted.","intent":{"kind":"intent_attack","attacker_card_instance_id":"i_alice_leader","target_card_instance_id":"i_bob_leader"},"reply":{"accepted":true,"appended_event":{"kind":"attack_declared","match_id":"example-match-001","player_id":"alice@example","attacker_card_instance_id":"i_alice_leader","target_card_instance_id":"i_bob_leader","target_kind":"leader"},"new_offset":14},"resulting_event_offset":14},{"scenario":"Bob attempts to play a 3-cost character with only 2 DON active — rejected.","intent":{"kind":"intent_play_card","card_instance_id":"i_bob_character_001","pay_with_don_instance_ids":["i_bob_don_001","i_bob_don_002"],"into_zone":"character_area"},"reply":{"accepted":false,"error":"insufficient_don"},"resulting_event_offset":null},{"scenario":"Bob concedes the match — accepted.","intent":{"kind":"intent_concede"},"reply":{"accepted":true,"appended_event":{"kind":"match_ended","match_id":"example-match-001","winner_id":"alice@example","reason":"concession"},"new_offset":26},"resulting_event_offset":26}],"kinds_demonstrated":{"match_event":["attack_declared","card_drawn","card_state_changed","counter_played","counter_step_passed","damage_resolved","deck_declared","deck_validated","don_added","life_placed","match_created","match_ended","match_started","mulligan_chosen","phase_began","turn_ended"],"intent":["intent_attack","intent_concede","intent_play_card"],"intent_reply_errors":["insufficient_don"]}}