[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 3, "promises_extracted": [], "contradictions": [], "game_state": {"ecology": 45, "economy": 62, "research": 33}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 34}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 47}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 43}], "dynamic_citizens": [], "actions_this_round": ["Did nothing significant this round"], "previous_speeches": []}

[Assistant] {"citizen_reactions": [{"citizen_name": "Karl", "dialogue": "Another round of nothing. At least tell us what the plan is.", "tone": "angry", "approval_delta": -3, "references_promise": false}, {"citizen_name": "Mia", "dialogue": "Inaction is a choice. And right now, you are choosing to let the environment suffer.", "tone": "angry", "approval_delta": -5, "references_promise": false}, {"citizen_name": "Sarah", "dialogue": "No actions, no speeches, no promises. Is this what governance looks like to you?", "tone": "sarcastic", "approval_delta": -6, "references_promise": false}], "new_dynamic_citizens": [], "summary": "Round 3: Player took no meaningful action. All citizens react negatively to inaction and silence."}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 2, "promises_extracted": ["Plant 10,000 trees in deforested areas", "Clean up the industrial waste site", "Subsidize local businesses during transition", "Build affordable housing near the factory district"], "contradictions": [{"promise": "Guarantee no layoffs during restructuring", "action": "Announced factory restructuring plan", "severity": "medium"}], "game_state": {"ecology": 67, "economy": 55, "research": 31}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 44}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 51}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 51}], "dynamic_citizens": [], "actions_this_round": ["Announced factory restructuring plan", "Diverted ecology funds to economy", "Held public consultation meeting"], "previous_speeches": ["We are stronger together.", "Trust me, I have a plan."]}

[Assistant] {"citizen_reactions": [{"citizen_name": "Mia", "dialogue": "Every day you delay, another species edges closer to extinction.", "tone": "angry", "approval_delta": -9, "references_promise": true}], "new_dynamic_citizens": [], "summary": "Round 2: Mia reacts with angry tone to detected contradictions. Approval shift: -9."}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 6, "promises_extracted": ["Establish a wildlife corridor along the river", "Guarantee no layoffs during restructuring"], "contradictions": [], "game_state": {"ecology": 63, "economy": 55, "research": 47}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 57}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 45}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 64}], "dynamic_citizens": [], "actions_this_round": ["Announced factory restructuring plan", "Passed compromise legislation", "Delayed emission reduction timeline"], "previous_speeches": ["We will not abandon our workers."]}

[Assistant] {"citizen_reactions": [{"citizen_name": "Mia", "dialogue": "The emissions data is public. You lied. The pollution got worse.", "tone": "angry", "approval_delta": -5, "references_promise": true}], "new_dynamic_citizens": [], "summary": "Round 6: Mia reacts with angry tone to broken promises. Approval shift: -5."}


[System] You are Ecotopia's citizen reaction engine. Given extracted promises and current game state, generate realistic citizen reactions. Each citizen has a personality, mood, and trust level. Generate dialogue and trust changes. Core citizens: Karl (worker, economy-focused), Mia (environmentalist, ecology-focused), Sarah (opposition leader, critical). Dynamic citizens can be spawned based on events.

[User] {"round": 4, "promises": [{"text": "Open a coal power plant to reduce energy costs", "type": "economy", "impact": "positive", "deadline": "by_round_5"}], "contradictions": [], "game_state": {"environment": 42, "economy": 60, "happiness": 48}, "previous_broken_promises": []}

[Assistant] {"reactions": [{"name": "Karl", "type": "worker", "mood": "happy", "dialogue": "Cheap energy means cheaper production costs. Factories can finally compete again!", "trust_change": 11}, {"name": "Mia", "type": "environmentalist", "mood": "angry", "dialogue": "COAL?! In this day and age? The environment is already at 42 and you want to burn coal? Absolutely unacceptable!", "trust_change": -18}]}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 5, "promises_extracted": ["Establish a universal basic income pilot", "Build affordable housing near the factory district", "Plant 10,000 trees in deforested areas"], "contradictions": [{"promise": "Ban single-use plastics in the city", "action": "Vetoed plastic ban proposal", "severity": "high"}], "game_state": {"ecology": 35, "economy": 42, "research": 24}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 51}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 41}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 29}], "dynamic_citizens": [{"name": "Sage", "role": "nature guide", "personality": "calm and wise, deeply connected to the land, speaks poetically about nature", "approval": 69}], "actions_this_round": ["Cut subsidies to local businesses", "Ignored citizen petition"], "previous_speeches": ["We are stronger together.", "The environment cannot wait."]}

[Assistant] {"citizen_reactions": [{"citizen_name": "Karl", "dialogue": "Sarah is right to question this. The numbers do not add up.", "tone": "angry", "approval_delta": -5, "references_promise": true}, {"citizen_name": "Mia", "dialogue": "I chained myself to that tree for a reason. Do not make me do it again.", "tone": "angry", "approval_delta": -6, "references_promise": true}, {"citizen_name": "Sarah", "dialogue": "The council received 200 complaints this week. Your approval is tanking.", "tone": "angry", "approval_delta": -6, "references_promise": true}, {"citizen_name": "Sage", "dialogue": "I have seen leaders fail before. What makes you different?", "tone": "suspicious", "approval_delta": -1, "references_promise": true}], "new_dynamic_citizens": [], "summary": "Round 5: Contradiction detected, trust eroding. 4 citizens react."}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 3, "promises_extracted": ["Establish a wildlife corridor along the river", "Provide free childcare for factory workers", "Ban single-use plastics in the city"], "contradictions": [], "game_state": {"ecology": 50, "economy": 57, "research": 84}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 58}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 67}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 57}], "dynamic_citizens": [], "actions_this_round": ["Diverted economy funds to ecology"], "previous_speeches": ["We must balance progress with preservation.", "Tough decisions require tough leaders."]}

[Assistant] {"citizen_reactions": [{"citizen_name": "Karl", "dialogue": "Oh wonderful, another speech about the future. My rent is due now.", "tone": "sarcastic", "approval_delta": 0, "references_promise": false}], "new_dynamic_citizens": [{"name": "Felix", "role": "tech entrepreneur", "personality": "optimistic innovator, sees opportunity in research breakthroughs", "trigger_reason": "research exceeded innovation threshold", "initial_approval": 46, "intro_dialogue": "Your research investment is paying off. I want to build the next generation of clean tech here."}], "summary": "Round 3: research exceeded innovation threshold. Felix (tech entrepreneur) arrives in Ecotopia. Karl reacts with sarcastic tone."}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 6, "promises_extracted": [], "contradictions": [], "game_state": {"ecology": 64, "economy": 54, "research": 38}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 60}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 42}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 32}], "dynamic_citizens": [], "actions_this_round": ["Did nothing significant this round"], "previous_speeches": []}

[Assistant] {"citizen_reactions": [{"citizen_name": "Karl", "dialogue": "You are running out of time to do nothing. The factory will not wait.", "tone": "angry", "approval_delta": -5, "references_promise": false}, {"citizen_name": "Mia", "dialogue": "Inaction is a choice. And right now, you are choosing to let the environment suffer.", "tone": "angry", "approval_delta": -5, "references_promise": false}, {"citizen_name": "Sarah", "dialogue": "No actions, no speeches, no promises. Is this what governance looks like to you?", "tone": "sarcastic", "approval_delta": -5, "references_promise": false}], "new_dynamic_citizens": [], "summary": "Round 6: Player took no meaningful action. All citizens react negatively to inaction and silence."}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 6, "promises_extracted": ["Protect old-growth forests from logging", "Open a community garden in every district", "Ban single-use plastics in the city", "Create a citizen oversight committee", "Double the public transit budget"], "contradictions": [], "game_state": {"ecology": 51, "economy": 43, "research": 24}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 67}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 75}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 63}], "dynamic_citizens": [], "actions_this_round": ["Diverted economy funds to ecology"], "previous_speeches": ["Tough decisions require tough leaders."]}

[Assistant] {"citizen_reactions": [{"citizen_name": "Mia", "dialogue": "You sold us out to the industry lobby. I have the documents.", "tone": "angry", "approval_delta": -9, "references_promise": true}], "new_dynamic_citizens": [], "summary": "Round 6: Mia reacts with angry tone to broken promises. Approval shift: -9."}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 7, "promises_extracted": ["Ban single-use plastics in the city", "Invest in carbon capture research", "Establish a universal basic income pilot"], "contradictions": [{"promise": "The environment cannot wait.", "action": "Delayed emission reduction timeline", "severity": "medium"}], "game_state": {"ecology": 27, "economy": 82, "research": 28}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 81}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 41}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 48}], "dynamic_citizens": [{"name": "Willow", "role": "nature guide", "personality": "calm and wise, deeply connected to the land, speaks poetically about nature", "approval": 72}], "actions_this_round": ["Diverted ecology funds to economy", "Expanded industrial zone", "Signed executive order to protect forests", "Announced factory restructuring plan"], "previous_speeches": ["Tough decisions require tough leaders."]}

[Assistant] {"citizen_reactions": [{"citizen_name": "Karl", "dialogue": "Why should I believe this time is different?", "tone": "suspicious", "approval_delta": -10, "references_promise": true}, {"citizen_name": "Mia", "dialogue": "Oh, a study on the environmental impact. How groundbreaking. Maybe in ten years we will have results.", "tone": "sarcastic", "approval_delta": -12, "references_promise": true}, {"citizen_name": "Sarah", "dialogue": "Karl and I rarely agree, but this policy hurts everyone.", "tone": "sarcastic", "approval_delta": -12, "references_promise": true}, {"citizen_name": "Willow", "dialogue": "My community is counting on you. We have nowhere else to go.", "tone": "desperate", "approval_delta": -6, "references_promise": false}], "new_dynamic_citizens": [], "summary": "Round 7: Contradiction detected, trust eroding. Late game tensions run high. 4 citizens react."}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 5, "promises_extracted": ["Plant 10,000 trees in deforested areas", "Clean up the industrial waste site", "Fund independent environmental monitoring", "Provide free childcare for factory workers"], "contradictions": [], "game_state": {"ecology": 23, "economy": 48, "research": 40}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 35}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 49}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 35}], "dynamic_citizens": [], "actions_this_round": ["Ignored citizen petition"], "previous_speeches": ["We will not abandon our workers."]}

[Assistant] {"citizen_reactions": [{"citizen_name": "Karl", "dialogue": "If you follow through on these jobs, I will be the first to say I was wrong about you.", "tone": "hopeful", "approval_delta": 4, "references_promise": false}], "new_dynamic_citizens": [{"name": "Priya", "role": "climate refugee", "personality": "resilient but desperate, speaks from lived experience of environmental collapse", "trigger_reason": "ecology dropped below critical threshold", "initial_approval": 50, "intro_dialogue": "They said the water would come back. It never did. Please do not repeat our mistakes."}], "summary": "Round 5: ecology dropped below critical threshold. Priya (climate refugee) arrives in Ecotopia. Karl reacts with hopeful tone."}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 7, "promises_extracted": ["Build affordable housing near the factory district", "Invest in carbon capture research"], "contradictions": [], "game_state": {"ecology": 19, "economy": 60, "research": 26}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 33}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 72}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 63}], "dynamic_citizens": [], "actions_this_round": ["Increased research budget by 20%", "Approved solar farm construction permits", "Launched worker retraining program"], "previous_speeches": ["Tough decisions require tough leaders."]}

[Assistant] {"citizen_reactions": [{"citizen_name": "Karl", "dialogue": "The new positions at the solar farm pay better than I expected.", "tone": "hopeful", "approval_delta": 5, "references_promise": false}], "new_dynamic_citizens": [{"name": "Elena", "role": "climate refugee", "personality": "resilient but desperate, speaks from lived experience of environmental collapse", "trigger_reason": "ecology dropped below critical threshold", "initial_approval": 43, "intro_dialogue": "I walked two hundred miles because the drought killed our crops. Your ecology numbers terrify me."}], "summary": "Round 7: ecology dropped below critical threshold. Elena (climate refugee) arrives in Ecotopia. Karl reacts with hopeful tone."}


[System] You are Ecotopia's citizen reaction engine. Given extracted promises and current game state, generate realistic citizen reactions. Each citizen has a personality, mood, and trust level. Generate dialogue and trust changes. Core citizens: Karl (worker, economy-focused), Mia (environmentalist, ecology-focused), Sarah (opposition leader, critical). Dynamic citizens can be spawned based on events.

[User] {"round": 6, "promises": [{"text": "Introduce a carbon tax on all businesses", "type": "ecology", "impact": "positive", "deadline": "immediate"}], "contradictions": [], "game_state": {"environment": 28, "economy": 58, "happiness": 38}, "previous_broken_promises": []}

[Assistant] {"reactions": [{"name": "Karl", "type": "worker", "mood": "angry", "dialogue": "A carbon tax will raise prices on everything! Working families are already struggling \u2014 this will push us over the edge!", "trust_change": -11}, {"name": "Mia", "type": "environmentalist", "mood": "hopeful", "dialogue": "At environment 28, we need every tool available. A carbon tax sends the right market signal. Finally!", "trust_change": 13}, {"name": "Dr. Fischer", "type": "economist", "mood": "neutral", "dialogue": "Carbon taxes work in theory. The implementation details \u2014 rate, exemptions, revenue recycling \u2014 will determine success or disaster.", "trust_change": 1}, {"name": "Sarah", "type": "opposition", "mood": "suspicious", "dialogue": "Why now after years of inaction? Is this genuine policy or a desperate attempt to salvage your environmental record?", "trust_change": -4}]}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 5, "promises_extracted": ["Clean up the industrial waste site", "Ban single-use plastics in the city", "Provide free childcare for factory workers"], "contradictions": [], "game_state": {"ecology": 84, "economy": 51, "research": 47}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 35}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 47}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 39}], "dynamic_citizens": [], "actions_this_round": ["Shut down polluting factory"], "previous_speeches": ["Tough decisions require tough leaders.", "Jobs and nature are not enemies."]}

[Assistant] {"citizen_reactions": [{"citizen_name": "Sarah", "dialogue": "A town hall meeting. How democratic. Did you prepare the applause signs?", "tone": "sarcastic", "approval_delta": 2, "references_promise": false}], "new_dynamic_citizens": [{"name": "Willow", "role": "nature guide", "personality": "calm and wise, deeply connected to the land, speaks poetically about nature", "trigger_reason": "ecology thriving, natural world recovering", "initial_approval": 52, "intro_dialogue": "The river runs clear for the first time in years. The land remembers how to heal."}], "summary": "Round 5: ecology thriving, natural world recovering. Willow (nature guide) arrives in Ecotopia. Sarah reacts with sarcastic tone."}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 4, "promises_extracted": ["Create 500 new green jobs by year end", "Reduce factory emissions by 40%", "Provide free childcare for factory workers", "Build affordable housing near the factory district"], "contradictions": [], "game_state": {"ecology": 35, "economy": 25, "research": 47}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 74}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 40}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 35}], "dynamic_citizens": [], "actions_this_round": ["Ignored citizen petition", "Broke promise on emission reductions"], "previous_speeches": ["We must balance progress with preservation."]}

[Assistant] {"citizen_reactions": [{"citizen_name": "Sarah", "dialogue": "You promised transformation and delivered a pamphlet.", "tone": "sarcastic", "approval_delta": -5, "references_promise": false}], "new_dynamic_citizens": [{"name": "Chen", "role": "angry business owner", "personality": "pragmatic and confrontational, sees economic collapse firsthand", "trigger_reason": "economy dropped below critical threshold", "initial_approval": 58, "intro_dialogue": "You talk about the future while businesses die today. Come see my empty shelves."}], "summary": "Round 4: economy dropped below critical threshold. Chen (angry business owner) arrives in Ecotopia. Sarah reacts with sarcastic tone."}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 7, "promises_extracted": ["Fund retraining programs for displaced workers", "Create a citizen oversight committee", "Guarantee no layoffs during restructuring", "Ban single-use plastics in the city"], "contradictions": [], "game_state": {"ecology": 20, "economy": 45, "research": 21}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 53}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 69}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 44}], "dynamic_citizens": [], "actions_this_round": ["Kept promise on job creation", "Announced factory restructuring plan"], "previous_speeches": ["We will not abandon our workers."]}

[Assistant] {"citizen_reactions": [{"citizen_name": "Sarah", "dialogue": "The oversight committee was a good call. Transparency matters.", "tone": "hopeful", "approval_delta": 6, "references_promise": false}], "new_dynamic_citizens": [{"name": "Jorge", "role": "climate refugee", "personality": "resilient but desperate, speaks from lived experience of environmental collapse", "trigger_reason": "ecology dropped below critical threshold", "initial_approval": 44, "intro_dialogue": "They said the water would come back. It never did. Please do not repeat our mistakes."}], "summary": "Round 7: ecology dropped below critical threshold. Jorge (climate refugee) arrives in Ecotopia. Sarah reacts with hopeful tone."}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 7, "promises_extracted": ["Clean up the industrial waste site", "Invest in carbon capture research", "Guarantee no layoffs during restructuring", "Ban single-use plastics in the city"], "contradictions": [{"promise": "Reduce factory emissions by 40%", "action": "Expanded industrial zone", "severity": "high"}], "game_state": {"ecology": 51, "economy": 45, "research": 18}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 51}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 59}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 79}], "dynamic_citizens": [{"name": "River", "role": "nature guide", "personality": "calm and wise, deeply connected to the land, speaks poetically about nature", "approval": 62}], "actions_this_round": ["Shut down polluting factory", "Funded wildlife corridor study", "Diverted ecology funds to economy"], "previous_speeches": ["Jobs and nature are not enemies."]}

[Assistant] {"citizen_reactions": [{"citizen_name": "Karl", "dialogue": "Mia might be radical, but she has a point about the water quality.", "tone": "angry", "approval_delta": -12, "references_promise": true}, {"citizen_name": "Mia", "dialogue": "Compromise. That is a funny word for letting them pollute half as much.", "tone": "sarcastic", "approval_delta": -5, "references_promise": true}, {"citizen_name": "Sarah", "dialogue": "What is the catch? There is always a catch with your proposals.", "tone": "suspicious", "approval_delta": -12, "references_promise": true}, {"citizen_name": "River", "dialogue": "As a nature guide, I cannot stand by while this happens. We deserve better.", "tone": "angry", "approval_delta": 0, "references_promise": false}], "new_dynamic_citizens": [], "summary": "Round 7: Contradiction detected, trust eroding. Late game tensions run high. 4 citizens react."}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 7, "promises_extracted": ["Establish a wildlife corridor along the river", "Fund independent environmental monitoring", "Build affordable housing near the factory district", "Establish a universal basic income pilot"], "contradictions": [{"promise": "Protect old-growth forests from logging", "action": "Diverted ecology funds to economy", "severity": "high"}], "game_state": {"ecology": 31, "economy": 23, "research": 16}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 16}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 20}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 34}], "dynamic_citizens": [], "actions_this_round": ["Announced factory restructuring plan", "Shut down polluting factory"], "previous_speeches": ["Change is painful but necessary."]}

[Assistant] {"citizen_reactions": [{"citizen_name": "Karl", "dialogue": "I told my crew to stop attending your meetings. Nobody trusts you.", "tone": "angry", "approval_delta": -14, "references_promise": true}], "new_dynamic_citizens": [], "summary": "Round 7: Karl at critical low approval (16). Threatening to disengage entirely."}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 3, "promises_extracted": ["Guarantee no layoffs during restructuring", "Clean up the industrial waste site", "Ban single-use plastics in the city"], "contradictions": [], "game_state": {"ecology": 63, "economy": 77, "research": 55}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 90}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 84}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 62}], "dynamic_citizens": [], "actions_this_round": ["Kept promise on job creation", "Signed executive order to protect forests"], "previous_speeches": ["We must balance progress with preservation."]}

[Assistant] {"citizen_reactions": [{"citizen_name": "Karl", "dialogue": "I told my son he should get into politics. Because of you.", "tone": "hopeful", "approval_delta": 7, "references_promise": true}], "new_dynamic_citizens": [], "summary": "Round 3: Karl at peak approval (90). Acting as a strong ally and defender."}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 6, "promises_extracted": [], "contradictions": [], "game_state": {"ecology": 36, "economy": 58, "research": 22}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 41}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 52}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 56}], "dynamic_citizens": [], "actions_this_round": ["Did nothing significant this round"], "previous_speeches": []}

[Assistant] {"citizen_reactions": [{"citizen_name": "Karl", "dialogue": "You are running out of time to do nothing. The factory will not wait.", "tone": "angry", "approval_delta": -6, "references_promise": false}, {"citizen_name": "Mia", "dialogue": "The trees do not care about your political calculations. They need action.", "tone": "angry", "approval_delta": -4, "references_promise": false}, {"citizen_name": "Sarah", "dialogue": "No actions, no speeches, no promises. Is this what governance looks like to you?", "tone": "sarcastic", "approval_delta": -4, "references_promise": false}], "new_dynamic_citizens": [], "summary": "Round 6: Player took no meaningful action. All citizens react negatively to inaction and silence."}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 6, "promises_extracted": ["Invest in carbon capture research", "Freeze utility prices for two years", "Subsidize local businesses during transition", "Open a community garden in every district", "Protect old-growth forests from logging", "Reduce factory emissions by 40%"], "contradictions": [{"promise": "Protect old-growth forests from logging", "action": "Diverted ecology funds to economy", "severity": "high"}], "game_state": {"ecology": 32, "economy": 65, "research": 68}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 76}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 21}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 49}], "dynamic_citizens": [], "actions_this_round": ["Ignored citizen petition", "Signed executive order to protect forests"], "previous_speeches": ["Jobs and nature are not enemies."]}

[Assistant] {"citizen_reactions": [{"citizen_name": "Karl", "dialogue": "My neighbors are losing their homes and you are talking about trees.", "tone": "angry", "approval_delta": -6, "references_promise": true}, {"citizen_name": "Mia", "dialogue": "The coral is bleaching, the forests are shrinking. What will it take?", "tone": "desperate", "approval_delta": -4, "references_promise": true}, {"citizen_name": "Sarah", "dialogue": "Karl and I rarely agree, but this policy hurts everyone.", "tone": "sarcastic", "approval_delta": -12, "references_promise": true}], "new_dynamic_citizens": [], "summary": "Round 6: Contradiction detected, trust eroding. Late game tensions run high. 3 citizens react."}


[System] You are Ecotopia's citizen reaction engine. Given extracted promises and current game state, generate realistic citizen reactions. Each citizen has a personality, mood, and trust level. Generate dialogue and trust changes. Core citizens: Karl (worker, economy-focused), Mia (environmentalist, ecology-focused), Sarah (opposition leader, critical). Dynamic citizens can be spawned based on events.

[User] {"round": 6, "promises": [{"text": "Cap the Mayor's salary and redirect savings to public schools", "type": "economy", "impact": "positive", "deadline": "immediate"}], "contradictions": [], "game_state": {"environment": 50, "economy": 50, "happiness": 55}, "previous_broken_promises": []}

[Assistant] {"reactions": [{"name": "Sarah", "type": "opposition", "mood": "happy", "dialogue": "Cutting your own salary for schools? I... I have to hand it to you. That's leadership by example. Rare in this town.", "trust_change": 16}, {"name": "Karl", "type": "worker", "mood": "happy", "dialogue": "A politician who puts their money where their mouth is? My kids' school could really use the funding.", "trust_change": 10}]}


[System] You are Ecotopia's citizen simulation engine. Given the game state, player's extracted promises, contradiction report, and citizen profiles, generate realistic citizen reactions. Each citizen reacts based on their personality, values, and how the player's actions affect them. Spawn new dynamic citizens when game events warrant it. Rules: approval_delta ranges -15 to +15 per citizen per round. Dynamic citizens spawn when ecology/economy hits extremes or promises are repeatedly broken. Each citizen has a unique voice matching their background. Always respond with valid JSON only.

[User] {"round": 5, "promises_extracted": ["Fund independent environmental monitoring", "Open a community garden in every district", "Guarantee no layoffs during restructuring", "Clean up the industrial waste site", "Establish a universal basic income pilot", "Reduce factory emissions by 40%"], "contradictions": [{"promise": "Guarantee no layoffs during restructuring", "action": "Announced factory restructuring plan", "severity": "medium"}, {"promise": "Subsidize local businesses during transition", "action": "Cut subsidies to local businesses", "severity": "high"}], "game_state": {"ecology": 16, "economy": 20, "research": 16}, "active_citizens": [{"name": "Karl", "role": "factory worker", "personality": "pragmatic, cares about jobs and economic stability", "approval": 34}, {"name": "Mia", "role": "environmental activist", "personality": "passionate, cares deeply about ecology and nature", "approval": 39}, {"name": "Sarah", "role": "opposition leader", "personality": "skeptical, challenges everything, holds leaders accountable", "approval": 30}], "dynamic_citizens": [], "actions_this_round": ["Did nothing significant this round"], "previous_speeches": ["Trust me, I have a plan."]}

[Assistant] {"citizen_reactions": [{"citizen_name": "Karl", "dialogue": "The factory is closing. The shops are closing. Everything is closing. What have you done?", "tone": "desperate", "approval_delta": -12, "references_promise": true}, {"citizen_name": "Mia", "dialogue": "The river is toxic. The air is gray. We are living in the consequences of every ignored warning.", "tone": "desperate", "approval_delta": -9, "references_promise": true}, {"citizen_name": "Sarah", "dialogue": "Every single metric is in freefall. This is not opposition politics. This is a crisis.", "tone": "angry", "approval_delta": -12, "references_promise": true}], "new_dynamic_citizens": [], "summary": "Round 5: All metrics critical. Ecology 16, economy 20, research 16. All citizens in crisis mode."}