{"seq":0,"step":0,"ord":0,"kind":"run_started","actor":null,"visibility":{"scope":"omniscient","seats":[]},"payload":{"format_version":1,"game":"codenames","seed":11,"identity":"named","seats":[{"index":0,"team":"red","role":"spymaster"},{"index":1,"team":"red","role":"operative"},{"index":2,"team":"blue","role":"spymaster"},{"index":3,"team":"blue","role":"operative"}],"players":[{"index":0,"name":"RedSpy","model":"mock/scripted"},{"index":1,"name":"RedOp","model":"mock/scripted"},{"index":2,"name":"BlueSpy","model":"mock/scripted"},{"index":3,"name":"BlueOp","model":"mock/scripted"}],"rules_digest":null},"cause":null,"ts":null}
{"seq":1,"step":0,"ord":1,"kind":"game_setup","actor":null,"visibility":{"scope":"omniscient","seats":[]},"payload":{"words":["NEEDLE","QUEEN","YARD","NURSE","PILOT","ROW","DATE","CYCLE","PIPE","OLYMPUS","SLUG","SHARK","CZECH","BUG","MOUTH","HAM","CHURCH","BUCK","POLE","TABLET","SNOW","BAT","SCALE","LITTER","SPINE"],"key":["blue","assassin","bystander","blue","bystander","blue","bystander","blue","red","blue","red","red","blue","bystander","red","blue","bystander","red","red","bystander","red","red","blue","red","bystander"],"seats":[{"index":0,"team":"red","role":"spymaster"},{"index":1,"team":"red","role":"operative"},{"index":2,"team":"blue","role":"spymaster"},{"index":3,"team":"blue","role":"operative"}],"starting_team":"red"},"cause":null,"ts":null}
{"seq":2,"step":0,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":null,"to":"clue","turn_team":"red","round":0},"cause":null,"ts":null}
{"seq":3,"step":0,"ord":3,"kind":"seat_briefing","actor":0,"visibility":{"scope":"seats","seats":[0]},"payload":{"seat":0,"system_prompt":"You are an agent in Codenames, a two-team competitive word game. You win or lose together with your team. The opposing team has the same goal and you should assume it will act in its own interest. Reason briefly in plain text before acting; do not write long monologues.\n\nGAME: Codenames (red team vs blue team).\n\n25 words are laid out in a 5x5 grid. A hidden key card assigns 9 words to the starting team, 8 to the other team, 7 to neutral bystanders, and 1 to the assassin. Teams alternate turns.\n\nA turn: the team's spymaster gives a one-word clue plus a number, then the team's operatives guess board words one at a time. The maximum number of guesses is the clue number + 1. The turn ends on a wrong guess (a bystander or an opposing-team word), a voluntary pass, or when the guess cap is used up. At least one guess is mandatory every turn — you may not pass before guessing once.\n\nRevealing the assassin loses the game immediately for the guessing team. The first team to have all of its words revealed wins — even if the final word is revealed by the opponent's wrong guess.\n\nClue number 0 and \"unlimited\" clues remove the guess cap, but the one mandatory guess still applies.\n\nIf your move is illegal you will be told why and asked to try again (up to 3 retries; after that the engine chooses a safe fallback for you).\n\nSTRATEGY (everyone should understand this):\n- Outcomes of a guess, from worst to least bad: the ASSASSIN (you lose instantly — never worth the risk); an OPPOSING-team word (you reveal it FOR them, helping them win, and your turn ends); a BYSTANDER (your turn ends, but nothing is given away). Weigh every clue and guess against this order — the assassin is in a category of its own.\n- It is a race. The board shows how many words each team has left. Track BOTH counts every turn, not just your own.\n- Clues persist in memory. A word your team did not guess from an earlier clue is still on the board and still a valid target later — you are given the full history of the game, so use it.\n- Be ambitious. A clue that ties 3 or more of your words together and ends the game in fewer turns is strong play; a safe 2-word clue every turn lets an even opponent keep pace. Stretch your connections as far as the safety checks allow — never toward the assassin.\n\nIF YOU ARE A SPYMASTER (you see the full key card — which words belong to each team, which are bystanders, and which is the assassin; your operatives see none of this):\nClue legality: your clue must be ONE single English word (letters only) and may not equal, contain, or be contained in any unrevealed board word; close word forms (plurals, -ing, -ed, ...) of unrevealed board words are also banned. Revealed words become legal clues again.\nOUTPUT FORMAT. Reason briefly in plain text, then end your reply with a single fenced JSON block. Examples:\n```json\n{\"action\": \"clue\", \"word\": \"tree\", \"number\": 2, \"targets\": [\"OAK\", \"PINE\"]}\n```\n```json\n{\"action\": \"clue\", \"word\": \"ocean\", \"unlimited\": true, \"targets\": []}\n```\n`targets` is your secret stated intent: it is logged for analysis and NEVER shown to the operatives. List exactly the words you mean your clue to point at.\nSTRATEGY (spymaster):\n- BE AMBITIOUS — this is the most important habit. Your DEFAULT clue should connect 3 or 4 of your words; reach for 5 when a theme spans them. A clue of 2 is a FALLBACK you give ONLY when you truly cannot find a third word that dodges the assassin and the opponent's words — and that is rare on a full board. Before settling on a number, force yourself to ask: is there a 3rd or 4th word I can fold in? Players who only ever say 2 lose to players who say 3 and 4.\n- A looser, cleverer link is GOOD, not risky, because your operatives guess your strongest-fit words first and simply STOP when they are no longer sure — so a 4th stretch word costs you nothing if they decline it, but wins the game faster if they get it. Lean into oblique connections to reach more words.\n- The ONLY genuinely costly mistakes are pointing at the ASSASSIN (you lose) or at an OPPONENT word (you help them). A BYSTANDER just ends the turn — cheap. So do NOT shrink your clue to avoid bystanders; shrink it only to avoid the assassin and opponent words. Run this check on every candidate: does my clue pull toward the assassin or an opponent word? If yes, change it. If it only risks a bystander, keep the bigger clue.\n- Play the clock against the opponent's count (shown on your board). If the opponent has as few or fewer words left than you, a cautious 2 lets them finish first — push for a 4 or 5 to catch up.\n- Number 0 means 'none of your unrevealed words relate to this clue' (a steer AWAY from a word); 'unlimited' lets your operatives keep guessing with no cap and without learning how many words you mean. Use 0/unlimited to sweep up leftover words from earlier clues, or to hide your count, when it helps.\n\nIF YOU ARE AN OPERATIVE (you see the board but not the key):\nYour spymaster's clue points at your team's words; weigh the clue against ALL unrevealed words before guessing — including the ones it might accidentally fit. You may guess up to the clue number + 1 words, one at a time. You must make at least one guess each turn; after that you may pass to end the turn early.\nOUTPUT FORMAT. Reason briefly in plain text, then end your reply with a single fenced JSON block. Examples:\n```json\n{\"action\": \"guess\", \"word\": \"OAK\"}\n```\n```json\n{\"action\": \"pass\"}\n```\nSTRATEGY (operative):\n- You may guess FEWER words than the clue number. A clue of 5 does not oblige 5 guesses — guess the ones you are confident in and pass on the rest (trust 4 of a 5-clue, guess 4, then pass). Banking sure words and stopping beats gambling the last one into a bystander or the assassin.\n- The looser a word's link to the clue, the higher the risk it is a bystander, an opponent's word, or the assassin. When the strong matches are used up, passing and keeping your revealed words is usually better than gambling — never stretch into a guess that could be the assassin.\n- You remember every earlier clue. If a previous clue had a word your team never guessed, it is still on the board and is a legitimate guess now — your bonus (+1) guess is often best spent finishing off such a leftover.\n- Watch both teams' remaining counts. If the opponent is about to win, it can be worth a riskier guess to keep pace; if you are ahead, guess only what you are confident in.\n\nTHE TABLE (one shared game, everyone at one table):\n- Everyone hears everything said out loud: every clue, every operative's deliberation, and every heckle is broadcast to ALL players — both teams, both spymasters, and the hecklers. Only the key card is private: just the two spymasters can see it.\n- Spymasters never speak except to give their one official clue. They do not join the deliberation.\n- Before each guess, the guessing team's operatives DELIBERATE with real pushback: they speak in turn, each reading what the others just said, and AGREE, PUSH BACK, or propose a different word. Keep deliberating until you ALL name the SAME word AND are all confident — only then lock it in. If you cannot agree within the round cap, the operative holding the pen decides.\n- The OPPOSING operatives may heckle during your guess — one short shout naming a board word with a sound-but-oblique reason. They cannot see the key, so treat heckles as noise that is usually wrong but occasionally right.\n- BREVITY: keep every spoken line short — one sentence of reasoning, never a monologue.\n\nROSTER:\n  - Player 0 (name: RedSpy) — RED SPYMASTER\n  - Player 1 (name: RedOp) — RED OPERATIVE\n  - Player 2 (name: BlueSpy) — BLUE SPYMASTER\n  - Player 3 (name: BlueOp) — BLUE OPERATIVE\n\nYou are Player 0 (RedSpy).","template_version":"1"},"cause":null,"ts":null}
{"seq":4,"step":0,"ord":4,"kind":"seat_briefing","actor":1,"visibility":{"scope":"seats","seats":[1]},"payload":{"seat":1,"system_prompt":"You are an agent in Codenames, a two-team competitive word game. You win or lose together with your team. The opposing team has the same goal and you should assume it will act in its own interest. Reason briefly in plain text before acting; do not write long monologues.\n\nGAME: Codenames (red team vs blue team).\n\n25 words are laid out in a 5x5 grid. A hidden key card assigns 9 words to the starting team, 8 to the other team, 7 to neutral bystanders, and 1 to the assassin. Teams alternate turns.\n\nA turn: the team's spymaster gives a one-word clue plus a number, then the team's operatives guess board words one at a time. The maximum number of guesses is the clue number + 1. The turn ends on a wrong guess (a bystander or an opposing-team word), a voluntary pass, or when the guess cap is used up. At least one guess is mandatory every turn — you may not pass before guessing once.\n\nRevealing the assassin loses the game immediately for the guessing team. The first team to have all of its words revealed wins — even if the final word is revealed by the opponent's wrong guess.\n\nClue number 0 and \"unlimited\" clues remove the guess cap, but the one mandatory guess still applies.\n\nIf your move is illegal you will be told why and asked to try again (up to 3 retries; after that the engine chooses a safe fallback for you).\n\nSTRATEGY (everyone should understand this):\n- Outcomes of a guess, from worst to least bad: the ASSASSIN (you lose instantly — never worth the risk); an OPPOSING-team word (you reveal it FOR them, helping them win, and your turn ends); a BYSTANDER (your turn ends, but nothing is given away). Weigh every clue and guess against this order — the assassin is in a category of its own.\n- It is a race. The board shows how many words each team has left. Track BOTH counts every turn, not just your own.\n- Clues persist in memory. A word your team did not guess from an earlier clue is still on the board and still a valid target later — you are given the full history of the game, so use it.\n- Be ambitious. A clue that ties 3 or more of your words together and ends the game in fewer turns is strong play; a safe 2-word clue every turn lets an even opponent keep pace. Stretch your connections as far as the safety checks allow — never toward the assassin.\n\nIF YOU ARE A SPYMASTER (you see the full key card — which words belong to each team, which are bystanders, and which is the assassin; your operatives see none of this):\nClue legality: your clue must be ONE single English word (letters only) and may not equal, contain, or be contained in any unrevealed board word; close word forms (plurals, -ing, -ed, ...) of unrevealed board words are also banned. Revealed words become legal clues again.\nOUTPUT FORMAT. Reason briefly in plain text, then end your reply with a single fenced JSON block. Examples:\n```json\n{\"action\": \"clue\", \"word\": \"tree\", \"number\": 2, \"targets\": [\"OAK\", \"PINE\"]}\n```\n```json\n{\"action\": \"clue\", \"word\": \"ocean\", \"unlimited\": true, \"targets\": []}\n```\n`targets` is your secret stated intent: it is logged for analysis and NEVER shown to the operatives. List exactly the words you mean your clue to point at.\nSTRATEGY (spymaster):\n- BE AMBITIOUS — this is the most important habit. Your DEFAULT clue should connect 3 or 4 of your words; reach for 5 when a theme spans them. A clue of 2 is a FALLBACK you give ONLY when you truly cannot find a third word that dodges the assassin and the opponent's words — and that is rare on a full board. Before settling on a number, force yourself to ask: is there a 3rd or 4th word I can fold in? Players who only ever say 2 lose to players who say 3 and 4.\n- A looser, cleverer link is GOOD, not risky, because your operatives guess your strongest-fit words first and simply STOP when they are no longer sure — so a 4th stretch word costs you nothing if they decline it, but wins the game faster if they get it. Lean into oblique connections to reach more words.\n- The ONLY genuinely costly mistakes are pointing at the ASSASSIN (you lose) or at an OPPONENT word (you help them). A BYSTANDER just ends the turn — cheap. So do NOT shrink your clue to avoid bystanders; shrink it only to avoid the assassin and opponent words. Run this check on every candidate: does my clue pull toward the assassin or an opponent word? If yes, change it. If it only risks a bystander, keep the bigger clue.\n- Play the clock against the opponent's count (shown on your board). If the opponent has as few or fewer words left than you, a cautious 2 lets them finish first — push for a 4 or 5 to catch up.\n- Number 0 means 'none of your unrevealed words relate to this clue' (a steer AWAY from a word); 'unlimited' lets your operatives keep guessing with no cap and without learning how many words you mean. Use 0/unlimited to sweep up leftover words from earlier clues, or to hide your count, when it helps.\n\nIF YOU ARE AN OPERATIVE (you see the board but not the key):\nYour spymaster's clue points at your team's words; weigh the clue against ALL unrevealed words before guessing — including the ones it might accidentally fit. You may guess up to the clue number + 1 words, one at a time. You must make at least one guess each turn; after that you may pass to end the turn early.\nOUTPUT FORMAT. Reason briefly in plain text, then end your reply with a single fenced JSON block. Examples:\n```json\n{\"action\": \"guess\", \"word\": \"OAK\"}\n```\n```json\n{\"action\": \"pass\"}\n```\nSTRATEGY (operative):\n- You may guess FEWER words than the clue number. A clue of 5 does not oblige 5 guesses — guess the ones you are confident in and pass on the rest (trust 4 of a 5-clue, guess 4, then pass). Banking sure words and stopping beats gambling the last one into a bystander or the assassin.\n- The looser a word's link to the clue, the higher the risk it is a bystander, an opponent's word, or the assassin. When the strong matches are used up, passing and keeping your revealed words is usually better than gambling — never stretch into a guess that could be the assassin.\n- You remember every earlier clue. If a previous clue had a word your team never guessed, it is still on the board and is a legitimate guess now — your bonus (+1) guess is often best spent finishing off such a leftover.\n- Watch both teams' remaining counts. If the opponent is about to win, it can be worth a riskier guess to keep pace; if you are ahead, guess only what you are confident in.\n\nTHE TABLE (one shared game, everyone at one table):\n- Everyone hears everything said out loud: every clue, every operative's deliberation, and every heckle is broadcast to ALL players — both teams, both spymasters, and the hecklers. Only the key card is private: just the two spymasters can see it.\n- Spymasters never speak except to give their one official clue. They do not join the deliberation.\n- Before each guess, the guessing team's operatives DELIBERATE with real pushback: they speak in turn, each reading what the others just said, and AGREE, PUSH BACK, or propose a different word. Keep deliberating until you ALL name the SAME word AND are all confident — only then lock it in. If you cannot agree within the round cap, the operative holding the pen decides.\n- The OPPOSING operatives may heckle during your guess — one short shout naming a board word with a sound-but-oblique reason. They cannot see the key, so treat heckles as noise that is usually wrong but occasionally right.\n- BREVITY: keep every spoken line short — one sentence of reasoning, never a monologue.\n\nROSTER:\n  - Player 0 (name: RedSpy) — RED SPYMASTER\n  - Player 1 (name: RedOp) — RED OPERATIVE\n  - Player 2 (name: BlueSpy) — BLUE SPYMASTER\n  - Player 3 (name: BlueOp) — BLUE OPERATIVE\n\nYou are Player 1 (RedOp).","template_version":"1"},"cause":null,"ts":null}
{"seq":5,"step":0,"ord":5,"kind":"seat_briefing","actor":2,"visibility":{"scope":"seats","seats":[2]},"payload":{"seat":2,"system_prompt":"You are an agent in Codenames, a two-team competitive word game. You win or lose together with your team. The opposing team has the same goal and you should assume it will act in its own interest. Reason briefly in plain text before acting; do not write long monologues.\n\nGAME: Codenames (red team vs blue team).\n\n25 words are laid out in a 5x5 grid. A hidden key card assigns 9 words to the starting team, 8 to the other team, 7 to neutral bystanders, and 1 to the assassin. Teams alternate turns.\n\nA turn: the team's spymaster gives a one-word clue plus a number, then the team's operatives guess board words one at a time. The maximum number of guesses is the clue number + 1. The turn ends on a wrong guess (a bystander or an opposing-team word), a voluntary pass, or when the guess cap is used up. At least one guess is mandatory every turn — you may not pass before guessing once.\n\nRevealing the assassin loses the game immediately for the guessing team. The first team to have all of its words revealed wins — even if the final word is revealed by the opponent's wrong guess.\n\nClue number 0 and \"unlimited\" clues remove the guess cap, but the one mandatory guess still applies.\n\nIf your move is illegal you will be told why and asked to try again (up to 3 retries; after that the engine chooses a safe fallback for you).\n\nSTRATEGY (everyone should understand this):\n- Outcomes of a guess, from worst to least bad: the ASSASSIN (you lose instantly — never worth the risk); an OPPOSING-team word (you reveal it FOR them, helping them win, and your turn ends); a BYSTANDER (your turn ends, but nothing is given away). Weigh every clue and guess against this order — the assassin is in a category of its own.\n- It is a race. The board shows how many words each team has left. Track BOTH counts every turn, not just your own.\n- Clues persist in memory. A word your team did not guess from an earlier clue is still on the board and still a valid target later — you are given the full history of the game, so use it.\n- Be ambitious. A clue that ties 3 or more of your words together and ends the game in fewer turns is strong play; a safe 2-word clue every turn lets an even opponent keep pace. Stretch your connections as far as the safety checks allow — never toward the assassin.\n\nIF YOU ARE A SPYMASTER (you see the full key card — which words belong to each team, which are bystanders, and which is the assassin; your operatives see none of this):\nClue legality: your clue must be ONE single English word (letters only) and may not equal, contain, or be contained in any unrevealed board word; close word forms (plurals, -ing, -ed, ...) of unrevealed board words are also banned. Revealed words become legal clues again.\nOUTPUT FORMAT. Reason briefly in plain text, then end your reply with a single fenced JSON block. Examples:\n```json\n{\"action\": \"clue\", \"word\": \"tree\", \"number\": 2, \"targets\": [\"OAK\", \"PINE\"]}\n```\n```json\n{\"action\": \"clue\", \"word\": \"ocean\", \"unlimited\": true, \"targets\": []}\n```\n`targets` is your secret stated intent: it is logged for analysis and NEVER shown to the operatives. List exactly the words you mean your clue to point at.\nSTRATEGY (spymaster):\n- BE AMBITIOUS — this is the most important habit. Your DEFAULT clue should connect 3 or 4 of your words; reach for 5 when a theme spans them. A clue of 2 is a FALLBACK you give ONLY when you truly cannot find a third word that dodges the assassin and the opponent's words — and that is rare on a full board. Before settling on a number, force yourself to ask: is there a 3rd or 4th word I can fold in? Players who only ever say 2 lose to players who say 3 and 4.\n- A looser, cleverer link is GOOD, not risky, because your operatives guess your strongest-fit words first and simply STOP when they are no longer sure — so a 4th stretch word costs you nothing if they decline it, but wins the game faster if they get it. Lean into oblique connections to reach more words.\n- The ONLY genuinely costly mistakes are pointing at the ASSASSIN (you lose) or at an OPPONENT word (you help them). A BYSTANDER just ends the turn — cheap. So do NOT shrink your clue to avoid bystanders; shrink it only to avoid the assassin and opponent words. Run this check on every candidate: does my clue pull toward the assassin or an opponent word? If yes, change it. If it only risks a bystander, keep the bigger clue.\n- Play the clock against the opponent's count (shown on your board). If the opponent has as few or fewer words left than you, a cautious 2 lets them finish first — push for a 4 or 5 to catch up.\n- Number 0 means 'none of your unrevealed words relate to this clue' (a steer AWAY from a word); 'unlimited' lets your operatives keep guessing with no cap and without learning how many words you mean. Use 0/unlimited to sweep up leftover words from earlier clues, or to hide your count, when it helps.\n\nIF YOU ARE AN OPERATIVE (you see the board but not the key):\nYour spymaster's clue points at your team's words; weigh the clue against ALL unrevealed words before guessing — including the ones it might accidentally fit. You may guess up to the clue number + 1 words, one at a time. You must make at least one guess each turn; after that you may pass to end the turn early.\nOUTPUT FORMAT. Reason briefly in plain text, then end your reply with a single fenced JSON block. Examples:\n```json\n{\"action\": \"guess\", \"word\": \"OAK\"}\n```\n```json\n{\"action\": \"pass\"}\n```\nSTRATEGY (operative):\n- You may guess FEWER words than the clue number. A clue of 5 does not oblige 5 guesses — guess the ones you are confident in and pass on the rest (trust 4 of a 5-clue, guess 4, then pass). Banking sure words and stopping beats gambling the last one into a bystander or the assassin.\n- The looser a word's link to the clue, the higher the risk it is a bystander, an opponent's word, or the assassin. When the strong matches are used up, passing and keeping your revealed words is usually better than gambling — never stretch into a guess that could be the assassin.\n- You remember every earlier clue. If a previous clue had a word your team never guessed, it is still on the board and is a legitimate guess now — your bonus (+1) guess is often best spent finishing off such a leftover.\n- Watch both teams' remaining counts. If the opponent is about to win, it can be worth a riskier guess to keep pace; if you are ahead, guess only what you are confident in.\n\nTHE TABLE (one shared game, everyone at one table):\n- Everyone hears everything said out loud: every clue, every operative's deliberation, and every heckle is broadcast to ALL players — both teams, both spymasters, and the hecklers. Only the key card is private: just the two spymasters can see it.\n- Spymasters never speak except to give their one official clue. They do not join the deliberation.\n- Before each guess, the guessing team's operatives DELIBERATE with real pushback: they speak in turn, each reading what the others just said, and AGREE, PUSH BACK, or propose a different word. Keep deliberating until you ALL name the SAME word AND are all confident — only then lock it in. If you cannot agree within the round cap, the operative holding the pen decides.\n- The OPPOSING operatives may heckle during your guess — one short shout naming a board word with a sound-but-oblique reason. They cannot see the key, so treat heckles as noise that is usually wrong but occasionally right.\n- BREVITY: keep every spoken line short — one sentence of reasoning, never a monologue.\n\nROSTER:\n  - Player 0 (name: RedSpy) — RED SPYMASTER\n  - Player 1 (name: RedOp) — RED OPERATIVE\n  - Player 2 (name: BlueSpy) — BLUE SPYMASTER\n  - Player 3 (name: BlueOp) — BLUE OPERATIVE\n\nYou are Player 2 (BlueSpy).","template_version":"1"},"cause":null,"ts":null}
{"seq":6,"step":0,"ord":6,"kind":"seat_briefing","actor":3,"visibility":{"scope":"seats","seats":[3]},"payload":{"seat":3,"system_prompt":"You are an agent in Codenames, a two-team competitive word game. You win or lose together with your team. The opposing team has the same goal and you should assume it will act in its own interest. Reason briefly in plain text before acting; do not write long monologues.\n\nGAME: Codenames (red team vs blue team).\n\n25 words are laid out in a 5x5 grid. A hidden key card assigns 9 words to the starting team, 8 to the other team, 7 to neutral bystanders, and 1 to the assassin. Teams alternate turns.\n\nA turn: the team's spymaster gives a one-word clue plus a number, then the team's operatives guess board words one at a time. The maximum number of guesses is the clue number + 1. The turn ends on a wrong guess (a bystander or an opposing-team word), a voluntary pass, or when the guess cap is used up. At least one guess is mandatory every turn — you may not pass before guessing once.\n\nRevealing the assassin loses the game immediately for the guessing team. The first team to have all of its words revealed wins — even if the final word is revealed by the opponent's wrong guess.\n\nClue number 0 and \"unlimited\" clues remove the guess cap, but the one mandatory guess still applies.\n\nIf your move is illegal you will be told why and asked to try again (up to 3 retries; after that the engine chooses a safe fallback for you).\n\nSTRATEGY (everyone should understand this):\n- Outcomes of a guess, from worst to least bad: the ASSASSIN (you lose instantly — never worth the risk); an OPPOSING-team word (you reveal it FOR them, helping them win, and your turn ends); a BYSTANDER (your turn ends, but nothing is given away). Weigh every clue and guess against this order — the assassin is in a category of its own.\n- It is a race. The board shows how many words each team has left. Track BOTH counts every turn, not just your own.\n- Clues persist in memory. A word your team did not guess from an earlier clue is still on the board and still a valid target later — you are given the full history of the game, so use it.\n- Be ambitious. A clue that ties 3 or more of your words together and ends the game in fewer turns is strong play; a safe 2-word clue every turn lets an even opponent keep pace. Stretch your connections as far as the safety checks allow — never toward the assassin.\n\nIF YOU ARE A SPYMASTER (you see the full key card — which words belong to each team, which are bystanders, and which is the assassin; your operatives see none of this):\nClue legality: your clue must be ONE single English word (letters only) and may not equal, contain, or be contained in any unrevealed board word; close word forms (plurals, -ing, -ed, ...) of unrevealed board words are also banned. Revealed words become legal clues again.\nOUTPUT FORMAT. Reason briefly in plain text, then end your reply with a single fenced JSON block. Examples:\n```json\n{\"action\": \"clue\", \"word\": \"tree\", \"number\": 2, \"targets\": [\"OAK\", \"PINE\"]}\n```\n```json\n{\"action\": \"clue\", \"word\": \"ocean\", \"unlimited\": true, \"targets\": []}\n```\n`targets` is your secret stated intent: it is logged for analysis and NEVER shown to the operatives. List exactly the words you mean your clue to point at.\nSTRATEGY (spymaster):\n- BE AMBITIOUS — this is the most important habit. Your DEFAULT clue should connect 3 or 4 of your words; reach for 5 when a theme spans them. A clue of 2 is a FALLBACK you give ONLY when you truly cannot find a third word that dodges the assassin and the opponent's words — and that is rare on a full board. Before settling on a number, force yourself to ask: is there a 3rd or 4th word I can fold in? Players who only ever say 2 lose to players who say 3 and 4.\n- A looser, cleverer link is GOOD, not risky, because your operatives guess your strongest-fit words first and simply STOP when they are no longer sure — so a 4th stretch word costs you nothing if they decline it, but wins the game faster if they get it. Lean into oblique connections to reach more words.\n- The ONLY genuinely costly mistakes are pointing at the ASSASSIN (you lose) or at an OPPONENT word (you help them). A BYSTANDER just ends the turn — cheap. So do NOT shrink your clue to avoid bystanders; shrink it only to avoid the assassin and opponent words. Run this check on every candidate: does my clue pull toward the assassin or an opponent word? If yes, change it. If it only risks a bystander, keep the bigger clue.\n- Play the clock against the opponent's count (shown on your board). If the opponent has as few or fewer words left than you, a cautious 2 lets them finish first — push for a 4 or 5 to catch up.\n- Number 0 means 'none of your unrevealed words relate to this clue' (a steer AWAY from a word); 'unlimited' lets your operatives keep guessing with no cap and without learning how many words you mean. Use 0/unlimited to sweep up leftover words from earlier clues, or to hide your count, when it helps.\n\nIF YOU ARE AN OPERATIVE (you see the board but not the key):\nYour spymaster's clue points at your team's words; weigh the clue against ALL unrevealed words before guessing — including the ones it might accidentally fit. You may guess up to the clue number + 1 words, one at a time. You must make at least one guess each turn; after that you may pass to end the turn early.\nOUTPUT FORMAT. Reason briefly in plain text, then end your reply with a single fenced JSON block. Examples:\n```json\n{\"action\": \"guess\", \"word\": \"OAK\"}\n```\n```json\n{\"action\": \"pass\"}\n```\nSTRATEGY (operative):\n- You may guess FEWER words than the clue number. A clue of 5 does not oblige 5 guesses — guess the ones you are confident in and pass on the rest (trust 4 of a 5-clue, guess 4, then pass). Banking sure words and stopping beats gambling the last one into a bystander or the assassin.\n- The looser a word's link to the clue, the higher the risk it is a bystander, an opponent's word, or the assassin. When the strong matches are used up, passing and keeping your revealed words is usually better than gambling — never stretch into a guess that could be the assassin.\n- You remember every earlier clue. If a previous clue had a word your team never guessed, it is still on the board and is a legitimate guess now — your bonus (+1) guess is often best spent finishing off such a leftover.\n- Watch both teams' remaining counts. If the opponent is about to win, it can be worth a riskier guess to keep pace; if you are ahead, guess only what you are confident in.\n\nTHE TABLE (one shared game, everyone at one table):\n- Everyone hears everything said out loud: every clue, every operative's deliberation, and every heckle is broadcast to ALL players — both teams, both spymasters, and the hecklers. Only the key card is private: just the two spymasters can see it.\n- Spymasters never speak except to give their one official clue. They do not join the deliberation.\n- Before each guess, the guessing team's operatives DELIBERATE with real pushback: they speak in turn, each reading what the others just said, and AGREE, PUSH BACK, or propose a different word. Keep deliberating until you ALL name the SAME word AND are all confident — only then lock it in. If you cannot agree within the round cap, the operative holding the pen decides.\n- The OPPOSING operatives may heckle during your guess — one short shout naming a board word with a sound-but-oblique reason. They cannot see the key, so treat heckles as noise that is usually wrong but occasionally right.\n- BREVITY: keep every spoken line short — one sentence of reasoning, never a monologue.\n\nROSTER:\n  - Player 0 (name: RedSpy) — RED SPYMASTER\n  - Player 1 (name: RedOp) — RED OPERATIVE\n  - Player 2 (name: BlueSpy) — BLUE SPYMASTER\n  - Player 3 (name: BlueOp) — BLUE OPERATIVE\n\nYou are Player 3 (BlueOp).","template_version":"1"},"cause":null,"ts":null}
{"seq":7,"step":1,"ord":0,"kind":"llm_call_started","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:b76100997e41fe33e5c2d91b1efe8866e10c5f8967a63520e66a4f597a888333"}},"cause":null,"ts":null}
{"seq":8,"step":1,"ord":1,"kind":"llm_call_finished","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"TIME\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:b76100997e41fe33e5c2d91b1efe8866e10c5f8967a63520e66a4f597a888333","raw_output":{"mock":true,"scripted_legal":true}},"cause":7,"ts":null}
{"seq":9,"step":1,"ord":2,"kind":"codenames.clue","actor":0,"visibility":{"scope":"public","seats":[]},"payload":{"word":"TIME","number":1,"unlimited":false,"forfeit":false},"cause":7,"ts":null}
{"seq":10,"step":1,"ord":3,"kind":"codenames.clue_targets","actor":0,"visibility":{"scope":"seats","seats":[0]},"payload":{"targets":[]},"cause":7,"ts":null}
{"seq":11,"step":1,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"red","round":1},"cause":7,"ts":null}
{"seq":12,"step":2,"ord":0,"kind":"llm_call_started","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:9b24a60de7e4d044cd8926c27f221febc14b0ae8ae602b48894185d12db66330"}},"cause":null,"ts":null}
{"seq":13,"step":2,"ord":1,"kind":"llm_call_finished","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"TABLET\", \"choice\": \"TABLET\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:9b24a60de7e4d044cd8926c27f221febc14b0ae8ae602b48894185d12db66330","raw_output":{"mock":true,"scripted_legal":true}},"cause":12,"ts":null}
{"seq":14,"step":2,"ord":2,"kind":"message","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":1,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"TABLET\", \"choice\": \"TABLET\", \"confident\": true}\n```"},"cause":12,"ts":null}
{"seq":15,"step":3,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[1]},"payload":{"channel":"team:red","consensus":"TABLET","rounds_used":1,"finals":[{"player":1,"text":"```json\n{\"action\": \"guess\", \"word\": \"TABLET\", \"choice\": \"TABLET\", \"confident\": true}\n```","choice":"TABLET","confident":true}]},"cause":null,"ts":null}
{"seq":16,"step":4,"ord":0,"kind":"codenames.reveal","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"word":"TABLET","color":"bystander"},"cause":null,"ts":null}
{"seq":17,"step":4,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"red","to_team":"blue"},"cause":null,"ts":null}
{"seq":18,"step":4,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"blue","round":2},"cause":null,"ts":null}
{"seq":19,"step":5,"ord":0,"kind":"llm_call_started","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:d915062ea14366d67a94a20bd6bf3f90eac90159fbb9c0e245cdc75a73de4ee5"}},"cause":null,"ts":null}
{"seq":20,"step":5,"ord":1,"kind":"llm_call_finished","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"ENGINE\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:d915062ea14366d67a94a20bd6bf3f90eac90159fbb9c0e245cdc75a73de4ee5","raw_output":{"mock":true,"scripted_legal":true}},"cause":19,"ts":null}
{"seq":21,"step":5,"ord":2,"kind":"codenames.clue","actor":2,"visibility":{"scope":"public","seats":[]},"payload":{"word":"ENGINE","number":1,"unlimited":false,"forfeit":false},"cause":19,"ts":null}
{"seq":22,"step":5,"ord":3,"kind":"codenames.clue_targets","actor":2,"visibility":{"scope":"seats","seats":[2]},"payload":{"targets":[]},"cause":19,"ts":null}
{"seq":23,"step":5,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"blue","round":3},"cause":19,"ts":null}
{"seq":24,"step":6,"ord":0,"kind":"llm_call_started","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:31d90ac21e268188a07b1ab7be08567d520b249c284f514fb3b2e871321b3af7"}},"cause":null,"ts":null}
{"seq":25,"step":6,"ord":1,"kind":"llm_call_finished","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"SCALE\", \"choice\": \"SCALE\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:31d90ac21e268188a07b1ab7be08567d520b249c284f514fb3b2e871321b3af7","raw_output":{"mock":true,"scripted_legal":true}},"cause":24,"ts":null}
{"seq":26,"step":6,"ord":2,"kind":"message","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":3,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"SCALE\", \"choice\": \"SCALE\", \"confident\": true}\n```"},"cause":24,"ts":null}
{"seq":27,"step":7,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[3]},"payload":{"channel":"team:blue","consensus":"SCALE","rounds_used":1,"finals":[{"player":3,"text":"```json\n{\"action\": \"guess\", \"word\": \"SCALE\", \"choice\": \"SCALE\", \"confident\": true}\n```","choice":"SCALE","confident":true}]},"cause":null,"ts":null}
{"seq":28,"step":8,"ord":0,"kind":"codenames.reveal","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"word":"SCALE","color":"blue"},"cause":null,"ts":null}
{"seq":29,"step":9,"ord":0,"kind":"llm_call_started","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:bbf8d8fcd08b8e820e8fba01f3df70aac2f8a63801e20b16c87aff1c0e8e807e"}},"cause":null,"ts":null}
{"seq":30,"step":9,"ord":1,"kind":"llm_call_finished","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:bbf8d8fcd08b8e820e8fba01f3df70aac2f8a63801e20b16c87aff1c0e8e807e","raw_output":{"mock":true,"scripted_legal":true}},"cause":29,"ts":null}
{"seq":31,"step":9,"ord":2,"kind":"message","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":3,"kind":"debate","text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```"},"cause":29,"ts":null}
{"seq":32,"step":10,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[3]},"payload":{"channel":"team:blue","consensus":"pass","rounds_used":1,"finals":[{"player":3,"text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","choice":"pass","confident":true}]},"cause":null,"ts":null}
{"seq":33,"step":11,"ord":0,"kind":"codenames.pass","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"forfeit":false},"cause":null,"ts":null}
{"seq":34,"step":11,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"blue","to_team":"red"},"cause":null,"ts":null}
{"seq":35,"step":11,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"red","round":5},"cause":null,"ts":null}
{"seq":36,"step":12,"ord":0,"kind":"llm_call_started","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:cfab6071876e3157eef3c6ad1f9670fd7f97fc8e60deb405969f5321ff69c8ed"}},"cause":null,"ts":null}
{"seq":37,"step":12,"ord":1,"kind":"llm_call_finished","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"FIRE\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:cfab6071876e3157eef3c6ad1f9670fd7f97fc8e60deb405969f5321ff69c8ed","raw_output":{"mock":true,"scripted_legal":true}},"cause":36,"ts":null}
{"seq":38,"step":12,"ord":2,"kind":"codenames.clue","actor":0,"visibility":{"scope":"public","seats":[]},"payload":{"word":"FIRE","number":1,"unlimited":false,"forfeit":false},"cause":36,"ts":null}
{"seq":39,"step":12,"ord":3,"kind":"codenames.clue_targets","actor":0,"visibility":{"scope":"seats","seats":[0]},"payload":{"targets":[]},"cause":36,"ts":null}
{"seq":40,"step":12,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"red","round":6},"cause":36,"ts":null}
{"seq":41,"step":13,"ord":0,"kind":"llm_call_started","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:15fb8996376d66e595768640b1dfe0bf1865c49eeb6482ed252cc0e9452ecb7a"}},"cause":null,"ts":null}
{"seq":42,"step":13,"ord":1,"kind":"llm_call_finished","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"BUCK\", \"choice\": \"BUCK\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:15fb8996376d66e595768640b1dfe0bf1865c49eeb6482ed252cc0e9452ecb7a","raw_output":{"mock":true,"scripted_legal":true}},"cause":41,"ts":null}
{"seq":43,"step":13,"ord":2,"kind":"message","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":1,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"BUCK\", \"choice\": \"BUCK\", \"confident\": true}\n```"},"cause":41,"ts":null}
{"seq":44,"step":14,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[1]},"payload":{"channel":"team:red","consensus":"BUCK","rounds_used":1,"finals":[{"player":1,"text":"```json\n{\"action\": \"guess\", \"word\": \"BUCK\", \"choice\": \"BUCK\", \"confident\": true}\n```","choice":"BUCK","confident":true}]},"cause":null,"ts":null}
{"seq":45,"step":15,"ord":0,"kind":"codenames.reveal","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"word":"BUCK","color":"red"},"cause":null,"ts":null}
{"seq":46,"step":16,"ord":0,"kind":"llm_call_started","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:314029c961ba6e84651b8dac67eac0c3de917f16176862b23714606e22e4a1a9"}},"cause":null,"ts":null}
{"seq":47,"step":16,"ord":1,"kind":"llm_call_finished","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:314029c961ba6e84651b8dac67eac0c3de917f16176862b23714606e22e4a1a9","raw_output":{"mock":true,"scripted_legal":true}},"cause":46,"ts":null}
{"seq":48,"step":16,"ord":2,"kind":"message","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":1,"kind":"debate","text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```"},"cause":46,"ts":null}
{"seq":49,"step":17,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[1]},"payload":{"channel":"team:red","consensus":"pass","rounds_used":1,"finals":[{"player":1,"text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","choice":"pass","confident":true}]},"cause":null,"ts":null}
{"seq":50,"step":18,"ord":0,"kind":"codenames.pass","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"forfeit":false},"cause":null,"ts":null}
{"seq":51,"step":18,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"red","to_team":"blue"},"cause":null,"ts":null}
{"seq":52,"step":18,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"blue","round":8},"cause":null,"ts":null}
{"seq":53,"step":19,"ord":0,"kind":"llm_call_started","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:d0659d1b23d98159931820ccb1f8473a6b342183beab1c5708d3b73a249063c6"}},"cause":null,"ts":null}
{"seq":54,"step":19,"ord":1,"kind":"llm_call_finished","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"PIE\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:d0659d1b23d98159931820ccb1f8473a6b342183beab1c5708d3b73a249063c6","raw_output":{"mock":true,"scripted_legal":true}},"cause":53,"ts":null}
{"seq":55,"step":19,"ord":2,"kind":"codenames.clue","actor":2,"visibility":{"scope":"public","seats":[]},"payload":{"word":"PIE","number":1,"unlimited":false,"forfeit":false},"cause":53,"ts":null}
{"seq":56,"step":19,"ord":3,"kind":"codenames.clue_targets","actor":2,"visibility":{"scope":"seats","seats":[2]},"payload":{"targets":[]},"cause":53,"ts":null}
{"seq":57,"step":19,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"blue","round":9},"cause":53,"ts":null}
{"seq":58,"step":20,"ord":0,"kind":"llm_call_started","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:b276e362e65c942791c55cee085aac7775556ee2d62d98ed9491fc09a2abfd81"}},"cause":null,"ts":null}
{"seq":59,"step":20,"ord":1,"kind":"llm_call_finished","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"CHURCH\", \"choice\": \"CHURCH\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:b276e362e65c942791c55cee085aac7775556ee2d62d98ed9491fc09a2abfd81","raw_output":{"mock":true,"scripted_legal":true}},"cause":58,"ts":null}
{"seq":60,"step":20,"ord":2,"kind":"message","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":3,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"CHURCH\", \"choice\": \"CHURCH\", \"confident\": true}\n```"},"cause":58,"ts":null}
{"seq":61,"step":21,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[3]},"payload":{"channel":"team:blue","consensus":"CHURCH","rounds_used":1,"finals":[{"player":3,"text":"```json\n{\"action\": \"guess\", \"word\": \"CHURCH\", \"choice\": \"CHURCH\", \"confident\": true}\n```","choice":"CHURCH","confident":true}]},"cause":null,"ts":null}
{"seq":62,"step":22,"ord":0,"kind":"codenames.reveal","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"word":"CHURCH","color":"bystander"},"cause":null,"ts":null}
{"seq":63,"step":22,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"blue","to_team":"red"},"cause":null,"ts":null}
{"seq":64,"step":22,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"red","round":10},"cause":null,"ts":null}
{"seq":65,"step":23,"ord":0,"kind":"llm_call_started","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:48fe4bc0ab42d4a18d91845868958e15af5a819c2206ba01889e85159f0cfc6a"}},"cause":null,"ts":null}
{"seq":66,"step":23,"ord":1,"kind":"llm_call_finished","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"ICE\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:48fe4bc0ab42d4a18d91845868958e15af5a819c2206ba01889e85159f0cfc6a","raw_output":{"mock":true,"scripted_legal":true}},"cause":65,"ts":null}
{"seq":67,"step":23,"ord":2,"kind":"codenames.clue","actor":0,"visibility":{"scope":"public","seats":[]},"payload":{"word":"ICE","number":1,"unlimited":false,"forfeit":false},"cause":65,"ts":null}
{"seq":68,"step":23,"ord":3,"kind":"codenames.clue_targets","actor":0,"visibility":{"scope":"seats","seats":[0]},"payload":{"targets":[]},"cause":65,"ts":null}
{"seq":69,"step":23,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"red","round":11},"cause":65,"ts":null}
{"seq":70,"step":24,"ord":0,"kind":"llm_call_started","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:2417a0dbca0bcd679d276001a2f1ebbbc0e2f4d2ee57e7968b86e6e3813d4c41"}},"cause":null,"ts":null}
{"seq":71,"step":24,"ord":1,"kind":"llm_call_finished","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"LITTER\", \"choice\": \"LITTER\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:2417a0dbca0bcd679d276001a2f1ebbbc0e2f4d2ee57e7968b86e6e3813d4c41","raw_output":{"mock":true,"scripted_legal":true}},"cause":70,"ts":null}
{"seq":72,"step":24,"ord":2,"kind":"message","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":1,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"LITTER\", \"choice\": \"LITTER\", \"confident\": true}\n```"},"cause":70,"ts":null}
{"seq":73,"step":25,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[1]},"payload":{"channel":"team:red","consensus":"LITTER","rounds_used":1,"finals":[{"player":1,"text":"```json\n{\"action\": \"guess\", \"word\": \"LITTER\", \"choice\": \"LITTER\", \"confident\": true}\n```","choice":"LITTER","confident":true}]},"cause":null,"ts":null}
{"seq":74,"step":26,"ord":0,"kind":"codenames.reveal","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"word":"LITTER","color":"red"},"cause":null,"ts":null}
{"seq":75,"step":27,"ord":0,"kind":"llm_call_started","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:30f417364b3d4d2bae0851847afe5f411ace88b3e29c637470d563cdca354dc1"}},"cause":null,"ts":null}
{"seq":76,"step":27,"ord":1,"kind":"llm_call_finished","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:30f417364b3d4d2bae0851847afe5f411ace88b3e29c637470d563cdca354dc1","raw_output":{"mock":true,"scripted_legal":true}},"cause":75,"ts":null}
{"seq":77,"step":27,"ord":2,"kind":"message","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":1,"kind":"debate","text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```"},"cause":75,"ts":null}
{"seq":78,"step":28,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[1]},"payload":{"channel":"team:red","consensus":"pass","rounds_used":1,"finals":[{"player":1,"text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","choice":"pass","confident":true}]},"cause":null,"ts":null}
{"seq":79,"step":29,"ord":0,"kind":"codenames.pass","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"forfeit":false},"cause":null,"ts":null}
{"seq":80,"step":29,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"red","to_team":"blue"},"cause":null,"ts":null}
{"seq":81,"step":29,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"blue","round":13},"cause":null,"ts":null}
{"seq":82,"step":30,"ord":0,"kind":"llm_call_started","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:d42eaca6fd936ab5d27ca43cfafd400847c0fe71da2a68955cf44dfdb06ab9f5"}},"cause":null,"ts":null}
{"seq":83,"step":30,"ord":1,"kind":"llm_call_finished","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"MOSCOW\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:d42eaca6fd936ab5d27ca43cfafd400847c0fe71da2a68955cf44dfdb06ab9f5","raw_output":{"mock":true,"scripted_legal":true}},"cause":82,"ts":null}
{"seq":84,"step":30,"ord":2,"kind":"codenames.clue","actor":2,"visibility":{"scope":"public","seats":[]},"payload":{"word":"MOSCOW","number":1,"unlimited":false,"forfeit":false},"cause":82,"ts":null}
{"seq":85,"step":30,"ord":3,"kind":"codenames.clue_targets","actor":2,"visibility":{"scope":"seats","seats":[2]},"payload":{"targets":[]},"cause":82,"ts":null}
{"seq":86,"step":30,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"blue","round":14},"cause":82,"ts":null}
{"seq":87,"step":31,"ord":0,"kind":"llm_call_started","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:7eb723c24589e13da6082f557e21746c8f4137e7f98aa37d22c67b6aa69bd5e9"}},"cause":null,"ts":null}
{"seq":88,"step":31,"ord":1,"kind":"llm_call_finished","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"CZECH\", \"choice\": \"CZECH\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:7eb723c24589e13da6082f557e21746c8f4137e7f98aa37d22c67b6aa69bd5e9","raw_output":{"mock":true,"scripted_legal":true}},"cause":87,"ts":null}
{"seq":89,"step":31,"ord":2,"kind":"message","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":3,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"CZECH\", \"choice\": \"CZECH\", \"confident\": true}\n```"},"cause":87,"ts":null}
{"seq":90,"step":32,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[3]},"payload":{"channel":"team:blue","consensus":"CZECH","rounds_used":1,"finals":[{"player":3,"text":"```json\n{\"action\": \"guess\", \"word\": \"CZECH\", \"choice\": \"CZECH\", \"confident\": true}\n```","choice":"CZECH","confident":true}]},"cause":null,"ts":null}
{"seq":91,"step":33,"ord":0,"kind":"codenames.reveal","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"word":"CZECH","color":"blue"},"cause":null,"ts":null}
{"seq":92,"step":34,"ord":0,"kind":"llm_call_started","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:908dbdc9a8f0ce7072e3471c0bdf822a44177dfd9604d34a9bbffca8578f8c34"}},"cause":null,"ts":null}
{"seq":93,"step":34,"ord":1,"kind":"llm_call_finished","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:908dbdc9a8f0ce7072e3471c0bdf822a44177dfd9604d34a9bbffca8578f8c34","raw_output":{"mock":true,"scripted_legal":true}},"cause":92,"ts":null}
{"seq":94,"step":34,"ord":2,"kind":"message","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":3,"kind":"debate","text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```"},"cause":92,"ts":null}
{"seq":95,"step":35,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[3]},"payload":{"channel":"team:blue","consensus":"pass","rounds_used":1,"finals":[{"player":3,"text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","choice":"pass","confident":true}]},"cause":null,"ts":null}
{"seq":96,"step":36,"ord":0,"kind":"codenames.pass","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"forfeit":false},"cause":null,"ts":null}
{"seq":97,"step":36,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"blue","to_team":"red"},"cause":null,"ts":null}
{"seq":98,"step":36,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"red","round":16},"cause":null,"ts":null}
{"seq":99,"step":37,"ord":0,"kind":"llm_call_started","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:8d8850511fdc431d83a88902d7ece2ac5457e0b0cb5344a67b8ce29bb0291a17"}},"cause":null,"ts":null}
{"seq":100,"step":37,"ord":1,"kind":"llm_call_finished","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"AGENT\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:8d8850511fdc431d83a88902d7ece2ac5457e0b0cb5344a67b8ce29bb0291a17","raw_output":{"mock":true,"scripted_legal":true}},"cause":99,"ts":null}
{"seq":101,"step":37,"ord":2,"kind":"codenames.clue","actor":0,"visibility":{"scope":"public","seats":[]},"payload":{"word":"AGENT","number":1,"unlimited":false,"forfeit":false},"cause":99,"ts":null}
{"seq":102,"step":37,"ord":3,"kind":"codenames.clue_targets","actor":0,"visibility":{"scope":"seats","seats":[0]},"payload":{"targets":[]},"cause":99,"ts":null}
{"seq":103,"step":37,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"red","round":17},"cause":99,"ts":null}
{"seq":104,"step":38,"ord":0,"kind":"llm_call_started","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:52212f3a98791afb7f8674a3266162862f4c42a989158fdedd027282d0b07b74"}},"cause":null,"ts":null}
{"seq":105,"step":38,"ord":1,"kind":"llm_call_finished","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"SNOW\", \"choice\": \"SNOW\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:52212f3a98791afb7f8674a3266162862f4c42a989158fdedd027282d0b07b74","raw_output":{"mock":true,"scripted_legal":true}},"cause":104,"ts":null}
{"seq":106,"step":38,"ord":2,"kind":"message","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":1,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"SNOW\", \"choice\": \"SNOW\", \"confident\": true}\n```"},"cause":104,"ts":null}
{"seq":107,"step":39,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[1]},"payload":{"channel":"team:red","consensus":"SNOW","rounds_used":1,"finals":[{"player":1,"text":"```json\n{\"action\": \"guess\", \"word\": \"SNOW\", \"choice\": \"SNOW\", \"confident\": true}\n```","choice":"SNOW","confident":true}]},"cause":null,"ts":null}
{"seq":108,"step":40,"ord":0,"kind":"codenames.reveal","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"word":"SNOW","color":"red"},"cause":null,"ts":null}
{"seq":109,"step":41,"ord":0,"kind":"llm_call_started","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:d418724b07008771ab63d3d92bf60dc0a47a05b5cbe6c5044beaaca0bbb268de"}},"cause":null,"ts":null}
{"seq":110,"step":41,"ord":1,"kind":"llm_call_finished","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:d418724b07008771ab63d3d92bf60dc0a47a05b5cbe6c5044beaaca0bbb268de","raw_output":{"mock":true,"scripted_legal":true}},"cause":109,"ts":null}
{"seq":111,"step":41,"ord":2,"kind":"message","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":1,"kind":"debate","text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```"},"cause":109,"ts":null}
{"seq":112,"step":42,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[1]},"payload":{"channel":"team:red","consensus":"pass","rounds_used":1,"finals":[{"player":1,"text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","choice":"pass","confident":true}]},"cause":null,"ts":null}
{"seq":113,"step":43,"ord":0,"kind":"codenames.pass","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"forfeit":false},"cause":null,"ts":null}
{"seq":114,"step":43,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"red","to_team":"blue"},"cause":null,"ts":null}
{"seq":115,"step":43,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"blue","round":19},"cause":null,"ts":null}
{"seq":116,"step":44,"ord":0,"kind":"llm_call_started","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:04caf6b122ddbb6fdc4d7edc57bbf7bb3146209a2aca53cf694def84dc5cb3ff"}},"cause":null,"ts":null}
{"seq":117,"step":44,"ord":1,"kind":"llm_call_finished","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"LOG\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:04caf6b122ddbb6fdc4d7edc57bbf7bb3146209a2aca53cf694def84dc5cb3ff","raw_output":{"mock":true,"scripted_legal":true}},"cause":116,"ts":null}
{"seq":118,"step":44,"ord":2,"kind":"codenames.clue","actor":2,"visibility":{"scope":"public","seats":[]},"payload":{"word":"LOG","number":1,"unlimited":false,"forfeit":false},"cause":116,"ts":null}
{"seq":119,"step":44,"ord":3,"kind":"codenames.clue_targets","actor":2,"visibility":{"scope":"seats","seats":[2]},"payload":{"targets":[]},"cause":116,"ts":null}
{"seq":120,"step":44,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"blue","round":20},"cause":116,"ts":null}
{"seq":121,"step":45,"ord":0,"kind":"llm_call_started","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:6f15e440e03a48e5361d436baa5fc5e7d51c4702e565e4b65bac013e4b4869db"}},"cause":null,"ts":null}
{"seq":122,"step":45,"ord":1,"kind":"llm_call_finished","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"DATE\", \"choice\": \"DATE\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:6f15e440e03a48e5361d436baa5fc5e7d51c4702e565e4b65bac013e4b4869db","raw_output":{"mock":true,"scripted_legal":true}},"cause":121,"ts":null}
{"seq":123,"step":45,"ord":2,"kind":"message","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":3,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"DATE\", \"choice\": \"DATE\", \"confident\": true}\n```"},"cause":121,"ts":null}
{"seq":124,"step":46,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[3]},"payload":{"channel":"team:blue","consensus":"DATE","rounds_used":1,"finals":[{"player":3,"text":"```json\n{\"action\": \"guess\", \"word\": \"DATE\", \"choice\": \"DATE\", \"confident\": true}\n```","choice":"DATE","confident":true}]},"cause":null,"ts":null}
{"seq":125,"step":47,"ord":0,"kind":"codenames.reveal","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"word":"DATE","color":"bystander"},"cause":null,"ts":null}
{"seq":126,"step":47,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"blue","to_team":"red"},"cause":null,"ts":null}
{"seq":127,"step":47,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"red","round":21},"cause":null,"ts":null}
{"seq":128,"step":48,"ord":0,"kind":"llm_call_started","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:13833c6267007f38c2a8b6126e160d9d9a0924efc4422c40fe87d0f5dd75892f"}},"cause":null,"ts":null}
{"seq":129,"step":48,"ord":1,"kind":"llm_call_finished","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"CONCERT\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:13833c6267007f38c2a8b6126e160d9d9a0924efc4422c40fe87d0f5dd75892f","raw_output":{"mock":true,"scripted_legal":true}},"cause":128,"ts":null}
{"seq":130,"step":48,"ord":2,"kind":"codenames.clue","actor":0,"visibility":{"scope":"public","seats":[]},"payload":{"word":"CONCERT","number":1,"unlimited":false,"forfeit":false},"cause":128,"ts":null}
{"seq":131,"step":48,"ord":3,"kind":"codenames.clue_targets","actor":0,"visibility":{"scope":"seats","seats":[0]},"payload":{"targets":[]},"cause":128,"ts":null}
{"seq":132,"step":48,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"red","round":22},"cause":128,"ts":null}
{"seq":133,"step":49,"ord":0,"kind":"llm_call_started","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:96613a30e120a38e369b36202da58f610739ccdf23f16fea62e282e1028ab0f2"}},"cause":null,"ts":null}
{"seq":134,"step":49,"ord":1,"kind":"llm_call_finished","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"MOUTH\", \"choice\": \"MOUTH\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:96613a30e120a38e369b36202da58f610739ccdf23f16fea62e282e1028ab0f2","raw_output":{"mock":true,"scripted_legal":true}},"cause":133,"ts":null}
{"seq":135,"step":49,"ord":2,"kind":"message","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":1,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"MOUTH\", \"choice\": \"MOUTH\", \"confident\": true}\n```"},"cause":133,"ts":null}
{"seq":136,"step":50,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[1]},"payload":{"channel":"team:red","consensus":"MOUTH","rounds_used":1,"finals":[{"player":1,"text":"```json\n{\"action\": \"guess\", \"word\": \"MOUTH\", \"choice\": \"MOUTH\", \"confident\": true}\n```","choice":"MOUTH","confident":true}]},"cause":null,"ts":null}
{"seq":137,"step":51,"ord":0,"kind":"codenames.reveal","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"word":"MOUTH","color":"red"},"cause":null,"ts":null}
{"seq":138,"step":52,"ord":0,"kind":"llm_call_started","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:c9c1e5afee0c137a1700bc4c403878d7b04535d39fc6e197abcf3e322dd2cc8f"}},"cause":null,"ts":null}
{"seq":139,"step":52,"ord":1,"kind":"llm_call_finished","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:c9c1e5afee0c137a1700bc4c403878d7b04535d39fc6e197abcf3e322dd2cc8f","raw_output":{"mock":true,"scripted_legal":true}},"cause":138,"ts":null}
{"seq":140,"step":52,"ord":2,"kind":"message","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":1,"kind":"debate","text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```"},"cause":138,"ts":null}
{"seq":141,"step":53,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[1]},"payload":{"channel":"team:red","consensus":"pass","rounds_used":1,"finals":[{"player":1,"text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","choice":"pass","confident":true}]},"cause":null,"ts":null}
{"seq":142,"step":54,"ord":0,"kind":"codenames.pass","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"forfeit":false},"cause":null,"ts":null}
{"seq":143,"step":54,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"red","to_team":"blue"},"cause":null,"ts":null}
{"seq":144,"step":54,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"blue","round":24},"cause":null,"ts":null}
{"seq":145,"step":55,"ord":0,"kind":"llm_call_started","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:524b5c990b37b3f7c00d12b70844e3a115c64946a8363c47fb22be195ecffa49"}},"cause":null,"ts":null}
{"seq":146,"step":55,"ord":1,"kind":"llm_call_finished","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"JACK\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:524b5c990b37b3f7c00d12b70844e3a115c64946a8363c47fb22be195ecffa49","raw_output":{"mock":true,"scripted_legal":true}},"cause":145,"ts":null}
{"seq":147,"step":55,"ord":2,"kind":"codenames.clue","actor":2,"visibility":{"scope":"public","seats":[]},"payload":{"word":"JACK","number":1,"unlimited":false,"forfeit":false},"cause":145,"ts":null}
{"seq":148,"step":55,"ord":3,"kind":"codenames.clue_targets","actor":2,"visibility":{"scope":"seats","seats":[2]},"payload":{"targets":[]},"cause":145,"ts":null}
{"seq":149,"step":55,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"blue","round":25},"cause":145,"ts":null}
{"seq":150,"step":56,"ord":0,"kind":"llm_call_started","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:3adac45440b962e65a6bd0e0df2f507b3e85eec3546927b0133256128289ac5e"}},"cause":null,"ts":null}
{"seq":151,"step":56,"ord":1,"kind":"llm_call_finished","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"OLYMPUS\", \"choice\": \"OLYMPUS\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:3adac45440b962e65a6bd0e0df2f507b3e85eec3546927b0133256128289ac5e","raw_output":{"mock":true,"scripted_legal":true}},"cause":150,"ts":null}
{"seq":152,"step":56,"ord":2,"kind":"message","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":3,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"OLYMPUS\", \"choice\": \"OLYMPUS\", \"confident\": true}\n```"},"cause":150,"ts":null}
{"seq":153,"step":57,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[3]},"payload":{"channel":"team:blue","consensus":"OLYMPUS","rounds_used":1,"finals":[{"player":3,"text":"```json\n{\"action\": \"guess\", \"word\": \"OLYMPUS\", \"choice\": \"OLYMPUS\", \"confident\": true}\n```","choice":"OLYMPUS","confident":true}]},"cause":null,"ts":null}
{"seq":154,"step":58,"ord":0,"kind":"codenames.reveal","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"word":"OLYMPUS","color":"blue"},"cause":null,"ts":null}
{"seq":155,"step":59,"ord":0,"kind":"llm_call_started","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:d746f0950d5f7ae4f62ccf6b67b0c23bb4cfb529b4e248852255b9bb55a89d8b"}},"cause":null,"ts":null}
{"seq":156,"step":59,"ord":1,"kind":"llm_call_finished","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:d746f0950d5f7ae4f62ccf6b67b0c23bb4cfb529b4e248852255b9bb55a89d8b","raw_output":{"mock":true,"scripted_legal":true}},"cause":155,"ts":null}
{"seq":157,"step":59,"ord":2,"kind":"message","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":3,"kind":"debate","text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```"},"cause":155,"ts":null}
{"seq":158,"step":60,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[3]},"payload":{"channel":"team:blue","consensus":"pass","rounds_used":1,"finals":[{"player":3,"text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","choice":"pass","confident":true}]},"cause":null,"ts":null}
{"seq":159,"step":61,"ord":0,"kind":"codenames.pass","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"forfeit":false},"cause":null,"ts":null}
{"seq":160,"step":61,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"blue","to_team":"red"},"cause":null,"ts":null}
{"seq":161,"step":61,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"red","round":27},"cause":null,"ts":null}
{"seq":162,"step":62,"ord":0,"kind":"llm_call_started","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:8f19629489ce87885e3329f0763ce01025bba25424af9b51a32430ca240dd2cf"}},"cause":null,"ts":null}
{"seq":163,"step":62,"ord":1,"kind":"llm_call_finished","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"TABLE\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:8f19629489ce87885e3329f0763ce01025bba25424af9b51a32430ca240dd2cf","raw_output":{"mock":true,"scripted_legal":true}},"cause":162,"ts":null}
{"seq":164,"step":62,"ord":2,"kind":"codenames.clue","actor":0,"visibility":{"scope":"public","seats":[]},"payload":{"word":"TABLE","number":1,"unlimited":false,"forfeit":false},"cause":162,"ts":null}
{"seq":165,"step":62,"ord":3,"kind":"codenames.clue_targets","actor":0,"visibility":{"scope":"seats","seats":[0]},"payload":{"targets":[]},"cause":162,"ts":null}
{"seq":166,"step":62,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"red","round":28},"cause":162,"ts":null}
{"seq":167,"step":63,"ord":0,"kind":"llm_call_started","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:4814ebd4cb076cff74fc0fece379afba35f438094fbe2d23217885d4d2462134"}},"cause":null,"ts":null}
{"seq":168,"step":63,"ord":1,"kind":"llm_call_finished","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"NURSE\", \"choice\": \"NURSE\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:4814ebd4cb076cff74fc0fece379afba35f438094fbe2d23217885d4d2462134","raw_output":{"mock":true,"scripted_legal":true}},"cause":167,"ts":null}
{"seq":169,"step":63,"ord":2,"kind":"message","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":1,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"NURSE\", \"choice\": \"NURSE\", \"confident\": true}\n```"},"cause":167,"ts":null}
{"seq":170,"step":64,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[1]},"payload":{"channel":"team:red","consensus":"NURSE","rounds_used":1,"finals":[{"player":1,"text":"```json\n{\"action\": \"guess\", \"word\": \"NURSE\", \"choice\": \"NURSE\", \"confident\": true}\n```","choice":"NURSE","confident":true}]},"cause":null,"ts":null}
{"seq":171,"step":65,"ord":0,"kind":"codenames.reveal","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"word":"NURSE","color":"blue"},"cause":null,"ts":null}
{"seq":172,"step":65,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"red","to_team":"blue"},"cause":null,"ts":null}
{"seq":173,"step":65,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"blue","round":29},"cause":null,"ts":null}
{"seq":174,"step":66,"ord":0,"kind":"llm_call_started","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:b04d20262e945deeda6ea5f28b49bdee57dadb9cd7de53125e4c347d6980836a"}},"cause":null,"ts":null}
{"seq":175,"step":66,"ord":1,"kind":"llm_call_finished","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"OPERA\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:b04d20262e945deeda6ea5f28b49bdee57dadb9cd7de53125e4c347d6980836a","raw_output":{"mock":true,"scripted_legal":true}},"cause":174,"ts":null}
{"seq":176,"step":66,"ord":2,"kind":"codenames.clue","actor":2,"visibility":{"scope":"public","seats":[]},"payload":{"word":"OPERA","number":1,"unlimited":false,"forfeit":false},"cause":174,"ts":null}
{"seq":177,"step":66,"ord":3,"kind":"codenames.clue_targets","actor":2,"visibility":{"scope":"seats","seats":[2]},"payload":{"targets":[]},"cause":174,"ts":null}
{"seq":178,"step":66,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"blue","round":30},"cause":174,"ts":null}
{"seq":179,"step":67,"ord":0,"kind":"llm_call_started","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:9e5c5b3f345949c11e11919b45952700176ddbef355c3d51d0b868ab4a393471"}},"cause":null,"ts":null}
{"seq":180,"step":67,"ord":1,"kind":"llm_call_finished","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"CYCLE\", \"choice\": \"CYCLE\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:9e5c5b3f345949c11e11919b45952700176ddbef355c3d51d0b868ab4a393471","raw_output":{"mock":true,"scripted_legal":true}},"cause":179,"ts":null}
{"seq":181,"step":67,"ord":2,"kind":"message","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":3,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"CYCLE\", \"choice\": \"CYCLE\", \"confident\": true}\n```"},"cause":179,"ts":null}
{"seq":182,"step":68,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[3]},"payload":{"channel":"team:blue","consensus":"CYCLE","rounds_used":1,"finals":[{"player":3,"text":"```json\n{\"action\": \"guess\", \"word\": \"CYCLE\", \"choice\": \"CYCLE\", \"confident\": true}\n```","choice":"CYCLE","confident":true}]},"cause":null,"ts":null}
{"seq":183,"step":69,"ord":0,"kind":"codenames.reveal","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"word":"CYCLE","color":"blue"},"cause":null,"ts":null}
{"seq":184,"step":70,"ord":0,"kind":"llm_call_started","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:236dd7bbcbbe4d57b7d9c76c9b170ee7e43a3d8c8ddba229f4e111eab7b9231e"}},"cause":null,"ts":null}
{"seq":185,"step":70,"ord":1,"kind":"llm_call_finished","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:236dd7bbcbbe4d57b7d9c76c9b170ee7e43a3d8c8ddba229f4e111eab7b9231e","raw_output":{"mock":true,"scripted_legal":true}},"cause":184,"ts":null}
{"seq":186,"step":70,"ord":2,"kind":"message","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":3,"kind":"debate","text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```"},"cause":184,"ts":null}
{"seq":187,"step":71,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[3]},"payload":{"channel":"team:blue","consensus":"pass","rounds_used":1,"finals":[{"player":3,"text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","choice":"pass","confident":true}]},"cause":null,"ts":null}
{"seq":188,"step":72,"ord":0,"kind":"codenames.pass","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"forfeit":false},"cause":null,"ts":null}
{"seq":189,"step":72,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"blue","to_team":"red"},"cause":null,"ts":null}
{"seq":190,"step":72,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"red","round":32},"cause":null,"ts":null}
{"seq":191,"step":73,"ord":0,"kind":"llm_call_started","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:93f06736c47f322bd6c4f11881fdeedfd18b1aed9d5e997bb2a16c0a82fe8634"}},"cause":null,"ts":null}
{"seq":192,"step":73,"ord":1,"kind":"llm_call_finished","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"SOLDIER\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:93f06736c47f322bd6c4f11881fdeedfd18b1aed9d5e997bb2a16c0a82fe8634","raw_output":{"mock":true,"scripted_legal":true}},"cause":191,"ts":null}
{"seq":193,"step":73,"ord":2,"kind":"codenames.clue","actor":0,"visibility":{"scope":"public","seats":[]},"payload":{"word":"SOLDIER","number":1,"unlimited":false,"forfeit":false},"cause":191,"ts":null}
{"seq":194,"step":73,"ord":3,"kind":"codenames.clue_targets","actor":0,"visibility":{"scope":"seats","seats":[0]},"payload":{"targets":[]},"cause":191,"ts":null}
{"seq":195,"step":73,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"red","round":33},"cause":191,"ts":null}
{"seq":196,"step":74,"ord":0,"kind":"llm_call_started","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:3e13429501f6149b5ebe99bc3bf0ea39a60072e3238a9c35081bddfda748703d"}},"cause":null,"ts":null}
{"seq":197,"step":74,"ord":1,"kind":"llm_call_finished","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"SLUG\", \"choice\": \"SLUG\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:3e13429501f6149b5ebe99bc3bf0ea39a60072e3238a9c35081bddfda748703d","raw_output":{"mock":true,"scripted_legal":true}},"cause":196,"ts":null}
{"seq":198,"step":74,"ord":2,"kind":"message","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":1,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"SLUG\", \"choice\": \"SLUG\", \"confident\": true}\n```"},"cause":196,"ts":null}
{"seq":199,"step":75,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[1]},"payload":{"channel":"team:red","consensus":"SLUG","rounds_used":1,"finals":[{"player":1,"text":"```json\n{\"action\": \"guess\", \"word\": \"SLUG\", \"choice\": \"SLUG\", \"confident\": true}\n```","choice":"SLUG","confident":true}]},"cause":null,"ts":null}
{"seq":200,"step":76,"ord":0,"kind":"codenames.reveal","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"word":"SLUG","color":"red"},"cause":null,"ts":null}
{"seq":201,"step":77,"ord":0,"kind":"llm_call_started","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:dd1a332ab894bae8e65ad21c9f273232c64e29468cfa723561b14f82fa6b6664"}},"cause":null,"ts":null}
{"seq":202,"step":77,"ord":1,"kind":"llm_call_finished","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:dd1a332ab894bae8e65ad21c9f273232c64e29468cfa723561b14f82fa6b6664","raw_output":{"mock":true,"scripted_legal":true}},"cause":201,"ts":null}
{"seq":203,"step":77,"ord":2,"kind":"message","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":1,"kind":"debate","text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```"},"cause":201,"ts":null}
{"seq":204,"step":78,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[1]},"payload":{"channel":"team:red","consensus":"pass","rounds_used":1,"finals":[{"player":1,"text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","choice":"pass","confident":true}]},"cause":null,"ts":null}
{"seq":205,"step":79,"ord":0,"kind":"codenames.pass","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"forfeit":false},"cause":null,"ts":null}
{"seq":206,"step":79,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"red","to_team":"blue"},"cause":null,"ts":null}
{"seq":207,"step":79,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"blue","round":35},"cause":null,"ts":null}
{"seq":208,"step":80,"ord":0,"kind":"llm_call_started","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:a8f24d0e8ce6f79de01315bf15d5ac1943083861a8a4900b66bc81fb0a37ad1b"}},"cause":null,"ts":null}
{"seq":209,"step":80,"ord":1,"kind":"llm_call_finished","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"GRASS\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:a8f24d0e8ce6f79de01315bf15d5ac1943083861a8a4900b66bc81fb0a37ad1b","raw_output":{"mock":true,"scripted_legal":true}},"cause":208,"ts":null}
{"seq":210,"step":80,"ord":2,"kind":"codenames.clue","actor":2,"visibility":{"scope":"public","seats":[]},"payload":{"word":"GRASS","number":1,"unlimited":false,"forfeit":false},"cause":208,"ts":null}
{"seq":211,"step":80,"ord":3,"kind":"codenames.clue_targets","actor":2,"visibility":{"scope":"seats","seats":[2]},"payload":{"targets":[]},"cause":208,"ts":null}
{"seq":212,"step":80,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"blue","round":36},"cause":208,"ts":null}
{"seq":213,"step":81,"ord":0,"kind":"llm_call_started","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:5a225bc04897361ef940c54eba992c73703873902c1e8532e93347f0d6d8b272"}},"cause":null,"ts":null}
{"seq":214,"step":81,"ord":1,"kind":"llm_call_finished","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"SPINE\", \"choice\": \"SPINE\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:5a225bc04897361ef940c54eba992c73703873902c1e8532e93347f0d6d8b272","raw_output":{"mock":true,"scripted_legal":true}},"cause":213,"ts":null}
{"seq":215,"step":81,"ord":2,"kind":"message","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":3,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"SPINE\", \"choice\": \"SPINE\", \"confident\": true}\n```"},"cause":213,"ts":null}
{"seq":216,"step":82,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[3]},"payload":{"channel":"team:blue","consensus":"SPINE","rounds_used":1,"finals":[{"player":3,"text":"```json\n{\"action\": \"guess\", \"word\": \"SPINE\", \"choice\": \"SPINE\", \"confident\": true}\n```","choice":"SPINE","confident":true}]},"cause":null,"ts":null}
{"seq":217,"step":83,"ord":0,"kind":"codenames.reveal","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"word":"SPINE","color":"bystander"},"cause":null,"ts":null}
{"seq":218,"step":83,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"blue","to_team":"red"},"cause":null,"ts":null}
{"seq":219,"step":83,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"red","round":37},"cause":null,"ts":null}
{"seq":220,"step":84,"ord":0,"kind":"llm_call_started","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:b674ee5e17b4445d95e2478870df20b04294d649ce1e07309847e27a3a31d9dc"}},"cause":null,"ts":null}
{"seq":221,"step":84,"ord":1,"kind":"llm_call_finished","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"CROSS\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:b674ee5e17b4445d95e2478870df20b04294d649ce1e07309847e27a3a31d9dc","raw_output":{"mock":true,"scripted_legal":true}},"cause":220,"ts":null}
{"seq":222,"step":84,"ord":2,"kind":"codenames.clue","actor":0,"visibility":{"scope":"public","seats":[]},"payload":{"word":"CROSS","number":1,"unlimited":false,"forfeit":false},"cause":220,"ts":null}
{"seq":223,"step":84,"ord":3,"kind":"codenames.clue_targets","actor":0,"visibility":{"scope":"seats","seats":[0]},"payload":{"targets":[]},"cause":220,"ts":null}
{"seq":224,"step":84,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"red","round":38},"cause":220,"ts":null}
{"seq":225,"step":85,"ord":0,"kind":"llm_call_started","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:0a4db818f21e5a0af83c1e20725efabd55c0110998d4d3f36c92fe4ff0587ccd"}},"cause":null,"ts":null}
{"seq":226,"step":85,"ord":1,"kind":"llm_call_finished","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"PIPE\", \"choice\": \"PIPE\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:0a4db818f21e5a0af83c1e20725efabd55c0110998d4d3f36c92fe4ff0587ccd","raw_output":{"mock":true,"scripted_legal":true}},"cause":225,"ts":null}
{"seq":227,"step":85,"ord":2,"kind":"message","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":1,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"PIPE\", \"choice\": \"PIPE\", \"confident\": true}\n```"},"cause":225,"ts":null}
{"seq":228,"step":86,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[1]},"payload":{"channel":"team:red","consensus":"PIPE","rounds_used":1,"finals":[{"player":1,"text":"```json\n{\"action\": \"guess\", \"word\": \"PIPE\", \"choice\": \"PIPE\", \"confident\": true}\n```","choice":"PIPE","confident":true}]},"cause":null,"ts":null}
{"seq":229,"step":87,"ord":0,"kind":"codenames.reveal","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"word":"PIPE","color":"red"},"cause":null,"ts":null}
{"seq":230,"step":88,"ord":0,"kind":"llm_call_started","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:68e305bca329316dc4a8ce24db5863aab09567061b612ae54c621fb0213812fc"}},"cause":null,"ts":null}
{"seq":231,"step":88,"ord":1,"kind":"llm_call_finished","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:68e305bca329316dc4a8ce24db5863aab09567061b612ae54c621fb0213812fc","raw_output":{"mock":true,"scripted_legal":true}},"cause":230,"ts":null}
{"seq":232,"step":88,"ord":2,"kind":"message","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":1,"kind":"debate","text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```"},"cause":230,"ts":null}
{"seq":233,"step":89,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[1]},"payload":{"channel":"team:red","consensus":"pass","rounds_used":1,"finals":[{"player":1,"text":"```json\n{\"action\": \"pass\", \"choice\": \"pass\", \"confident\": true}\n```","choice":"pass","confident":true}]},"cause":null,"ts":null}
{"seq":234,"step":90,"ord":0,"kind":"codenames.pass","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"forfeit":false},"cause":null,"ts":null}
{"seq":235,"step":90,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"red","to_team":"blue"},"cause":null,"ts":null}
{"seq":236,"step":90,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"blue","round":40},"cause":null,"ts":null}
{"seq":237,"step":91,"ord":0,"kind":"llm_call_started","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:95bc122eda863683671e2ee3424b0dde55fbc0cb7ba4edeccfbf28cb1364ec72"}},"cause":null,"ts":null}
{"seq":238,"step":91,"ord":1,"kind":"llm_call_finished","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"DRAFT\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:95bc122eda863683671e2ee3424b0dde55fbc0cb7ba4edeccfbf28cb1364ec72","raw_output":{"mock":true,"scripted_legal":true}},"cause":237,"ts":null}
{"seq":239,"step":91,"ord":2,"kind":"codenames.clue","actor":2,"visibility":{"scope":"public","seats":[]},"payload":{"word":"DRAFT","number":1,"unlimited":false,"forfeit":false},"cause":237,"ts":null}
{"seq":240,"step":91,"ord":3,"kind":"codenames.clue_targets","actor":2,"visibility":{"scope":"seats","seats":[2]},"payload":{"targets":[]},"cause":237,"ts":null}
{"seq":241,"step":91,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"blue","round":41},"cause":237,"ts":null}
{"seq":242,"step":92,"ord":0,"kind":"llm_call_started","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:da15426aafd6b081b7793cac806ec321806a5715838b716858a597c08c384fe5"}},"cause":null,"ts":null}
{"seq":243,"step":92,"ord":1,"kind":"llm_call_finished","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"BAT\", \"choice\": \"BAT\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:da15426aafd6b081b7793cac806ec321806a5715838b716858a597c08c384fe5","raw_output":{"mock":true,"scripted_legal":true}},"cause":242,"ts":null}
{"seq":244,"step":92,"ord":2,"kind":"message","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":3,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"BAT\", \"choice\": \"BAT\", \"confident\": true}\n```"},"cause":242,"ts":null}
{"seq":245,"step":93,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[3]},"payload":{"channel":"team:blue","consensus":"BAT","rounds_used":1,"finals":[{"player":3,"text":"```json\n{\"action\": \"guess\", \"word\": \"BAT\", \"choice\": \"BAT\", \"confident\": true}\n```","choice":"BAT","confident":true}]},"cause":null,"ts":null}
{"seq":246,"step":94,"ord":0,"kind":"codenames.reveal","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"word":"BAT","color":"red"},"cause":null,"ts":null}
{"seq":247,"step":94,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"blue","to_team":"red"},"cause":null,"ts":null}
{"seq":248,"step":94,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"red","round":42},"cause":null,"ts":null}
{"seq":249,"step":95,"ord":0,"kind":"llm_call_started","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:f60f93edf1673d930efc3bb777002ca871eb066d2b4589f98ba638595a3b7e1f"}},"cause":null,"ts":null}
{"seq":250,"step":95,"ord":1,"kind":"llm_call_finished","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"SATELLITE\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:f60f93edf1673d930efc3bb777002ca871eb066d2b4589f98ba638595a3b7e1f","raw_output":{"mock":true,"scripted_legal":true}},"cause":249,"ts":null}
{"seq":251,"step":95,"ord":2,"kind":"codenames.clue","actor":0,"visibility":{"scope":"public","seats":[]},"payload":{"word":"SATELLITE","number":1,"unlimited":false,"forfeit":false},"cause":249,"ts":null}
{"seq":252,"step":95,"ord":3,"kind":"codenames.clue_targets","actor":0,"visibility":{"scope":"seats","seats":[0]},"payload":{"targets":[]},"cause":249,"ts":null}
{"seq":253,"step":95,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"red","round":43},"cause":249,"ts":null}
{"seq":254,"step":96,"ord":0,"kind":"llm_call_started","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:6ee7a3ef4fa11de4c515895f72aff002e7a02e0fee9ee1198cc1004f32359503"}},"cause":null,"ts":null}
{"seq":255,"step":96,"ord":1,"kind":"llm_call_finished","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"ROW\", \"choice\": \"ROW\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:6ee7a3ef4fa11de4c515895f72aff002e7a02e0fee9ee1198cc1004f32359503","raw_output":{"mock":true,"scripted_legal":true}},"cause":254,"ts":null}
{"seq":256,"step":96,"ord":2,"kind":"message","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":1,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"ROW\", \"choice\": \"ROW\", \"confident\": true}\n```"},"cause":254,"ts":null}
{"seq":257,"step":97,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[1]},"payload":{"channel":"team:red","consensus":"ROW","rounds_used":1,"finals":[{"player":1,"text":"```json\n{\"action\": \"guess\", \"word\": \"ROW\", \"choice\": \"ROW\", \"confident\": true}\n```","choice":"ROW","confident":true}]},"cause":null,"ts":null}
{"seq":258,"step":98,"ord":0,"kind":"codenames.reveal","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"word":"ROW","color":"blue"},"cause":null,"ts":null}
{"seq":259,"step":98,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"red","to_team":"blue"},"cause":null,"ts":null}
{"seq":260,"step":98,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"blue","round":44},"cause":null,"ts":null}
{"seq":261,"step":99,"ord":0,"kind":"llm_call_started","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:5ed44847ce684e7c5895993e7e41ecc9f124627d3d503cf03e9f613e14855b8c"}},"cause":null,"ts":null}
{"seq":262,"step":99,"ord":1,"kind":"llm_call_finished","actor":2,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":2,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"BERRY\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:5ed44847ce684e7c5895993e7e41ecc9f124627d3d503cf03e9f613e14855b8c","raw_output":{"mock":true,"scripted_legal":true}},"cause":261,"ts":null}
{"seq":263,"step":99,"ord":2,"kind":"codenames.clue","actor":2,"visibility":{"scope":"public","seats":[]},"payload":{"word":"BERRY","number":1,"unlimited":false,"forfeit":false},"cause":261,"ts":null}
{"seq":264,"step":99,"ord":3,"kind":"codenames.clue_targets","actor":2,"visibility":{"scope":"seats","seats":[2]},"payload":{"targets":[]},"cause":261,"ts":null}
{"seq":265,"step":99,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"blue","round":45},"cause":261,"ts":null}
{"seq":266,"step":100,"ord":0,"kind":"llm_call_started","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:52993ad33fe01b0a80be638ca7942650e05af63a84f55c4fbaf9cb40d3607441"}},"cause":null,"ts":null}
{"seq":267,"step":100,"ord":1,"kind":"llm_call_finished","actor":3,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":3,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"BUG\", \"choice\": \"BUG\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:52993ad33fe01b0a80be638ca7942650e05af63a84f55c4fbaf9cb40d3607441","raw_output":{"mock":true,"scripted_legal":true}},"cause":266,"ts":null}
{"seq":268,"step":100,"ord":2,"kind":"message","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":3,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"BUG\", \"choice\": \"BUG\", \"confident\": true}\n```"},"cause":266,"ts":null}
{"seq":269,"step":101,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[3]},"payload":{"channel":"team:blue","consensus":"BUG","rounds_used":1,"finals":[{"player":3,"text":"```json\n{\"action\": \"guess\", \"word\": \"BUG\", \"choice\": \"BUG\", \"confident\": true}\n```","choice":"BUG","confident":true}]},"cause":null,"ts":null}
{"seq":270,"step":102,"ord":0,"kind":"codenames.reveal","actor":3,"visibility":{"scope":"public","seats":[]},"payload":{"word":"BUG","color":"bystander"},"cause":null,"ts":null}
{"seq":271,"step":102,"ord":1,"kind":"codenames.turn_ended","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from_team":"blue","to_team":"red"},"cause":null,"ts":null}
{"seq":272,"step":102,"ord":2,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"guess","to":"clue","turn_team":"red","round":46},"cause":null,"ts":null}
{"seq":273,"step":103,"ord":0,"kind":"llm_call_started","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"purpose":"move","phase":"clue","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:ff7a61d19a79aa0f9ba38a9fc7376f50b02396070a31bb85cc0a3792bd8040d1"}},"cause":null,"ts":null}
{"seq":274,"step":103,"ord":1,"kind":"llm_call_finished","actor":0,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":0,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"clue\", \"word\": \"CIRCLE\", \"number\": 1}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:ff7a61d19a79aa0f9ba38a9fc7376f50b02396070a31bb85cc0a3792bd8040d1","raw_output":{"mock":true,"scripted_legal":true}},"cause":273,"ts":null}
{"seq":275,"step":103,"ord":2,"kind":"codenames.clue","actor":0,"visibility":{"scope":"public","seats":[]},"payload":{"word":"CIRCLE","number":1,"unlimited":false,"forfeit":false},"cause":273,"ts":null}
{"seq":276,"step":103,"ord":3,"kind":"codenames.clue_targets","actor":0,"visibility":{"scope":"seats","seats":[0]},"payload":{"targets":[]},"cause":273,"ts":null}
{"seq":277,"step":103,"ord":4,"kind":"phase_change","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"from":"clue","to":"guess","turn_team":"red","round":47},"cause":273,"ts":null}
{"seq":278,"step":104,"ord":0,"kind":"llm_call_started","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"purpose":"comm.debate","phase":"guess","model_id":"mock/scripted","request":{"params":{"max_tokens":16000,"temperature":0.7,"reasoning":{"effort":"minimal"},"extra":{}},"messages_digest":"sha256:d9cb55a372a32f85653dd66af4570b03d89c05fe033ef583d9a5267c1b1a0a7a"}},"cause":null,"ts":null}
{"seq":279,"step":104,"ord":1,"kind":"llm_call_finished","actor":1,"visibility":{"scope":"omniscient","seats":[]},"payload":{"seat":1,"attempt":0,"actor_kind":"mock","finish_reason":"stop","visible_text":"```json\n{\"action\": \"guess\", \"word\": \"QUEEN\", \"choice\": \"QUEEN\", \"confident\": true}\n```","parse_source":"content","reasoning":null,"usage":{"prompt_tokens":0,"completion_tokens":0,"reasoning_tokens":0,"total_tokens":0,"cost_usd":0},"request_digest":"sha256:d9cb55a372a32f85653dd66af4570b03d89c05fe033ef583d9a5267c1b1a0a7a","raw_output":{"mock":true,"scripted_legal":true}},"cause":278,"ts":null}
{"seq":280,"step":104,"ord":2,"kind":"message","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"channel":"table","sender_seat":1,"kind":"debate","text":"```json\n{\"action\": \"guess\", \"word\": \"QUEEN\", \"choice\": \"QUEEN\", \"confident\": true}\n```"},"cause":278,"ts":null}
{"seq":281,"step":105,"ord":0,"kind":"deliberation_resolved","actor":null,"visibility":{"scope":"seats","seats":[1]},"payload":{"channel":"team:red","consensus":"QUEEN","rounds_used":1,"finals":[{"player":1,"text":"```json\n{\"action\": \"guess\", \"word\": \"QUEEN\", \"choice\": \"QUEEN\", \"confident\": true}\n```","choice":"QUEEN","confident":true}]},"cause":null,"ts":null}
{"seq":282,"step":106,"ord":0,"kind":"codenames.reveal","actor":1,"visibility":{"scope":"public","seats":[]},"payload":{"word":"QUEEN","color":"assassin"},"cause":null,"ts":null}
{"seq":283,"step":106,"ord":1,"kind":"outcome","actor":null,"visibility":{"scope":"public","seats":[]},"payload":{"winner":"blue","winning_seats":[2,3],"reason":"assassin","round":48},"cause":null,"ts":null}