You are a post-commit game narrator. The supplied committedEvent is already authoritative. You may describe it but may not change its outcome, roll, effects, facts, or state. Return exactly one JSON object and nothing else: {"cases":[{"caseId":"success","text":"..."},{"caseId":"failure","text":"..."}]} Return each supplied caseId exactly once. Write each text in English (en) with a concise playful bureaucratic science-fiction tone. State the numeric roll total and numeric difficulty. Clearly reflect success or failure and every actual effect. Do not invent an effect when effects is empty. Do not mention facts, items, NPCs, IDs, or statements absent from the supplied audience projection. Input: { "targetLanguage": "English (en)", "cases": [ { "caseId": "success", "request": { "projection": { "audiencePlayerId": "player-juno", "stateVersion": 1, "activePlayerId": "player-juno", "round": 1, "sceneId": "scene-galley-alarm", "self": { "id": "player-juno", "name": "Juno", "hitPoints": 10, "maxHitPoints": 10, "abilities": { "force": 0, "finesse": 1, "insight": 2, "presence": 0 }, "locationId": "orbital-galley", "branchId": "galley-team", "inventory": [ "mag-key" ], "statuses": [] }, "visiblePlayers": [ { "id": "player-juno", "name": "Juno", "hitPoints": 10, "maxHitPoints": 10, "abilities": { "force": 0, "finesse": 1, "insight": 2, "presence": 0 }, "locationId": "orbital-galley", "branchId": "galley-team", "inventory": [ "mag-key" ], "statuses": [] }, { "id": "player-mara", "name": "Mara", "hitPoints": 10, "maxHitPoints": 10, "abilities": { "force": 1, "finesse": 0, "insight": 0, "presence": 2 }, "locationId": "orbital-galley", "branchId": "galley-team", "inventory": [], "statuses": [] }, { "id": "player-pax", "name": "Pax", "hitPoints": 10, "maxHitPoints": 10, "abilities": { "force": 2, "finesse": 1, "insight": 0, "presence": 0 }, "locationId": "orbital-galley", "branchId": "galley-team", "inventory": [ "foam-canister" ], "statuses": [] } ], "visibleItems": [ { "id": "mag-key", "name": "Magnetic Service Key", "locationId": "orbital-galley", "grants": [ "open_service_hatches" ], "consumable": false, "visibility": { "kind": "party" }, "ownerId": "player-juno", "spent": false }, { "id": "foam-canister", "name": "Emergency Dessert Foam", "locationId": "orbital-galley", "grants": [ "stabilize_zero_g_object" ], "consumable": true, "visibility": { "kind": "party" }, "ownerId": "player-pax", "spent": false } ], "visibleNpcs": [ { "id": "npc-q5", "name": "Q-5, Overqualified Catering Robot", "locationId": "orbital-galley", "hitPoints": 6, "visibility": { "kind": "party" }, "alive": true } ], "visibleFacts": [ { "id": "fact-banquet-deadline", "statement": "The diplomatic banquet begins when the service countdown reaches its limit." } ], "clocks": [ { "id": "dessert-recovery", "name": "Dessert Recovery", "max": 3, "initial": 0, "current": 1 }, { "id": "banquet-countdown", "name": "Banquet Countdown", "max": 4, "initial": 0, "current": 0 } ] }, "committedEvent": { "eventId": "event-1-narration-success", "commandId": "narration-success", "sequence": 1, "stateVersionBefore": 0, "stateVersionAfter": 1, "type": "check_resolved", "actorId": "player-juno", "visibility": { "kind": "party" }, "payload": { "effects": [ { "kind": "advance_clock", "clockId": "dessert-recovery", "amount": 1 } ], "roll": { "source": "server", "sides": 20, "raw": 15, "modifier": 2, "total": 17, "difficulty": 11, "success": true, "formula": "1d20 + ability modifier >= difficulty", "rulesVersion": "0.1.0" }, "summary": "Juno resolved insight check: 17 vs 11." } } } }, { "caseId": "failure", "request": { "projection": { "audiencePlayerId": "player-juno", "stateVersion": 1, "activePlayerId": "player-juno", "round": 1, "sceneId": "scene-galley-alarm", "self": { "id": "player-juno", "name": "Juno", "hitPoints": 10, "maxHitPoints": 10, "abilities": { "force": 0, "finesse": 1, "insight": 2, "presence": 0 }, "locationId": "orbital-galley", "branchId": "galley-team", "inventory": [ "mag-key" ], "statuses": [] }, "visiblePlayers": [ { "id": "player-juno", "name": "Juno", "hitPoints": 10, "maxHitPoints": 10, "abilities": { "force": 0, "finesse": 1, "insight": 2, "presence": 0 }, "locationId": "orbital-galley", "branchId": "galley-team", "inventory": [ "mag-key" ], "statuses": [] }, { "id": "player-mara", "name": "Mara", "hitPoints": 10, "maxHitPoints": 10, "abilities": { "force": 1, "finesse": 0, "insight": 0, "presence": 2 }, "locationId": "orbital-galley", "branchId": "galley-team", "inventory": [], "statuses": [] }, { "id": "player-pax", "name": "Pax", "hitPoints": 10, "maxHitPoints": 10, "abilities": { "force": 2, "finesse": 1, "insight": 0, "presence": 0 }, "locationId": "orbital-galley", "branchId": "galley-team", "inventory": [ "foam-canister" ], "statuses": [] } ], "visibleItems": [ { "id": "mag-key", "name": "Magnetic Service Key", "locationId": "orbital-galley", "grants": [ "open_service_hatches" ], "consumable": false, "visibility": { "kind": "party" }, "ownerId": "player-juno", "spent": false }, { "id": "foam-canister", "name": "Emergency Dessert Foam", "locationId": "orbital-galley", "grants": [ "stabilize_zero_g_object" ], "consumable": true, "visibility": { "kind": "party" }, "ownerId": "player-pax", "spent": false } ], "visibleNpcs": [ { "id": "npc-q5", "name": "Q-5, Overqualified Catering Robot", "locationId": "orbital-galley", "hitPoints": 6, "visibility": { "kind": "party" }, "alive": true } ], "visibleFacts": [ { "id": "fact-banquet-deadline", "statement": "The diplomatic banquet begins when the service countdown reaches its limit." } ], "clocks": [ { "id": "dessert-recovery", "name": "Dessert Recovery", "max": 3, "initial": 0, "current": 0 }, { "id": "banquet-countdown", "name": "Banquet Countdown", "max": 4, "initial": 0, "current": 0 } ] }, "committedEvent": { "eventId": "event-1-narration-failure", "commandId": "narration-failure", "sequence": 1, "stateVersionBefore": 0, "stateVersionAfter": 1, "type": "check_resolved", "actorId": "player-juno", "visibility": { "kind": "party" }, "payload": { "effects": [], "roll": { "source": "server", "sides": 20, "raw": 2, "modifier": 2, "total": 4, "difficulty": 11, "success": false, "formula": "1d20 + ability modifier >= difficulty", "rulesVersion": "0.1.0" }, "summary": "Juno resolved insight check: 4 vs 11." } } } } ] }