{
  "1": {
    "class_type": "OpenRouterLLMNode",
    "inputs": {
      "prompt": "You are a post-commit game narrator. The supplied committedEvent is already\nauthoritative. You may describe it but may not change its outcome, roll,\neffects, facts, or state.\n\nReturn exactly one JSON object and nothing else:\n\n{\"cases\":[{\"caseId\":\"success\",\"text\":\"...\"},{\"caseId\":\"failure\",\"text\":\"...\"}]}\n\nReturn each supplied caseId exactly once. Write each text in\nEnglish (en) with a concise playful bureaucratic science-fiction tone.\nState the numeric roll total and numeric difficulty. Clearly reflect success or\nfailure and every actual effect. Do not invent an effect when effects is empty.\nDo not mention facts, items, NPCs, IDs, or statements absent from the supplied\naudience projection.\n\nWhen a failure has an empty effects array, its text may only identify the\nactor/check, total, difficulty, failure, and that no effect occurred. No\nfiling, registration, maintenance action, clock change, new requirement, or\nretry is allowed. Never invent aftermath to make an effect-free failure more\ncolorful.\n\nInput:\n{\n  \"targetLanguage\": \"English (en)\",\n  \"cases\": [\n    {\n      \"caseId\": \"success\",\n      \"request\": {\n        \"projection\": {\n          \"audiencePlayerId\": \"player-juno\",\n          \"stateVersion\": 1,\n          \"activePlayerId\": \"player-juno\",\n          \"round\": 1,\n          \"sceneId\": \"scene-galley-alarm\",\n          \"self\": {\n            \"id\": \"player-juno\",\n            \"name\": \"Juno\",\n            \"hitPoints\": 10,\n            \"maxHitPoints\": 10,\n            \"abilities\": {\n              \"force\": 0,\n              \"finesse\": 1,\n              \"insight\": 2,\n              \"presence\": 0\n            },\n            \"locationId\": \"orbital-galley\",\n            \"branchId\": \"galley-team\",\n            \"inventory\": [\n              \"mag-key\"\n            ],\n            \"statuses\": []\n          },\n          \"visiblePlayers\": [\n            {\n              \"id\": \"player-juno\",\n              \"name\": \"Juno\",\n              \"hitPoints\": 10,\n              \"maxHitPoints\": 10,\n              \"abilities\": {\n                \"force\": 0,\n                \"finesse\": 1,\n                \"insight\": 2,\n                \"presence\": 0\n              },\n              \"locationId\": \"orbital-galley\",\n              \"branchId\": \"galley-team\",\n              \"inventory\": [\n                \"mag-key\"\n              ],\n              \"statuses\": []\n            },\n            {\n              \"id\": \"player-mara\",\n              \"name\": \"Mara\",\n              \"hitPoints\": 10,\n              \"maxHitPoints\": 10,\n              \"abilities\": {\n                \"force\": 1,\n                \"finesse\": 0,\n                \"insight\": 0,\n                \"presence\": 2\n              },\n              \"locationId\": \"orbital-galley\",\n              \"branchId\": \"galley-team\",\n              \"inventory\": [],\n              \"statuses\": []\n            },\n            {\n              \"id\": \"player-pax\",\n              \"name\": \"Pax\",\n              \"hitPoints\": 10,\n              \"maxHitPoints\": 10,\n              \"abilities\": {\n                \"force\": 2,\n                \"finesse\": 1,\n                \"insight\": 0,\n                \"presence\": 0\n              },\n              \"locationId\": \"orbital-galley\",\n              \"branchId\": \"galley-team\",\n              \"inventory\": [\n                \"foam-canister\"\n              ],\n              \"statuses\": []\n            }\n          ],\n          \"visibleItems\": [\n            {\n              \"id\": \"mag-key\",\n              \"name\": \"Magnetic Service Key\",\n              \"locationId\": \"orbital-galley\",\n              \"grants\": [\n                \"open_service_hatches\"\n              ],\n              \"consumable\": false,\n              \"visibility\": {\n                \"kind\": \"party\"\n              },\n              \"ownerId\": \"player-juno\",\n              \"spent\": false\n            },\n            {\n              \"id\": \"foam-canister\",\n              \"name\": \"Emergency Dessert Foam\",\n              \"locationId\": \"orbital-galley\",\n              \"grants\": [\n                \"stabilize_zero_g_object\"\n              ],\n              \"consumable\": true,\n              \"visibility\": {\n                \"kind\": \"party\"\n              },\n              \"ownerId\": \"player-pax\",\n              \"spent\": false\n            }\n          ],\n          \"visibleNpcs\": [\n            {\n              \"id\": \"npc-q5\",\n              \"name\": \"Q-5, Overqualified Catering Robot\",\n              \"locationId\": \"orbital-galley\",\n              \"hitPoints\": 6,\n              \"visibility\": {\n                \"kind\": \"party\"\n              },\n              \"alive\": true\n            }\n          ],\n          \"visibleFacts\": [\n            {\n              \"id\": \"fact-banquet-deadline\",\n              \"statement\": \"The diplomatic banquet begins when the service countdown reaches its limit.\"\n            }\n          ],\n          \"clocks\": [\n            {\n              \"id\": \"dessert-recovery\",\n              \"name\": \"Dessert Recovery\",\n              \"max\": 3,\n              \"initial\": 0,\n              \"current\": 1\n            },\n            {\n              \"id\": \"banquet-countdown\",\n              \"name\": \"Banquet Countdown\",\n              \"max\": 4,\n              \"initial\": 0,\n              \"current\": 0\n            }\n          ]\n        },\n        \"committedEvent\": {\n          \"eventId\": \"event-1-narration-success\",\n          \"commandId\": \"narration-success\",\n          \"sequence\": 1,\n          \"stateVersionBefore\": 0,\n          \"stateVersionAfter\": 1,\n          \"type\": \"check_resolved\",\n          \"actorId\": \"player-juno\",\n          \"visibility\": {\n            \"kind\": \"party\"\n          },\n          \"payload\": {\n            \"effects\": [\n              {\n                \"kind\": \"advance_clock\",\n                \"clockId\": \"dessert-recovery\",\n                \"amount\": 1\n              }\n            ],\n            \"roll\": {\n              \"source\": \"server\",\n              \"sides\": 20,\n              \"raw\": 15,\n              \"modifier\": 2,\n              \"total\": 17,\n              \"difficulty\": 11,\n              \"success\": true,\n              \"formula\": \"1d20 + ability modifier >= difficulty\",\n              \"rulesVersion\": \"0.1.0\"\n            },\n            \"summary\": \"Juno resolved insight check: 17 vs 11.\"\n          }\n        }\n      }\n    },\n    {\n      \"caseId\": \"failure\",\n      \"request\": {\n        \"projection\": {\n          \"audiencePlayerId\": \"player-juno\",\n          \"stateVersion\": 1,\n          \"activePlayerId\": \"player-juno\",\n          \"round\": 1,\n          \"sceneId\": \"scene-galley-alarm\",\n          \"self\": {\n            \"id\": \"player-juno\",\n            \"name\": \"Juno\",\n            \"hitPoints\": 10,\n            \"maxHitPoints\": 10,\n            \"abilities\": {\n              \"force\": 0,\n              \"finesse\": 1,\n              \"insight\": 2,\n              \"presence\": 0\n            },\n            \"locationId\": \"orbital-galley\",\n            \"branchId\": \"galley-team\",\n            \"inventory\": [\n              \"mag-key\"\n            ],\n            \"statuses\": []\n          },\n          \"visiblePlayers\": [\n            {\n              \"id\": \"player-juno\",\n              \"name\": \"Juno\",\n              \"hitPoints\": 10,\n              \"maxHitPoints\": 10,\n              \"abilities\": {\n                \"force\": 0,\n                \"finesse\": 1,\n                \"insight\": 2,\n                \"presence\": 0\n              },\n              \"locationId\": \"orbital-galley\",\n              \"branchId\": \"galley-team\",\n              \"inventory\": [\n                \"mag-key\"\n              ],\n              \"statuses\": []\n            },\n            {\n              \"id\": \"player-mara\",\n              \"name\": \"Mara\",\n              \"hitPoints\": 10,\n              \"maxHitPoints\": 10,\n              \"abilities\": {\n                \"force\": 1,\n                \"finesse\": 0,\n                \"insight\": 0,\n                \"presence\": 2\n              },\n              \"locationId\": \"orbital-galley\",\n              \"branchId\": \"galley-team\",\n              \"inventory\": [],\n              \"statuses\": []\n            },\n            {\n              \"id\": \"player-pax\",\n              \"name\": \"Pax\",\n              \"hitPoints\": 10,\n              \"maxHitPoints\": 10,\n              \"abilities\": {\n                \"force\": 2,\n                \"finesse\": 1,\n                \"insight\": 0,\n                \"presence\": 0\n              },\n              \"locationId\": \"orbital-galley\",\n              \"branchId\": \"galley-team\",\n              \"inventory\": [\n                \"foam-canister\"\n              ],\n              \"statuses\": []\n            }\n          ],\n          \"visibleItems\": [\n            {\n              \"id\": \"mag-key\",\n              \"name\": \"Magnetic Service Key\",\n              \"locationId\": \"orbital-galley\",\n              \"grants\": [\n                \"open_service_hatches\"\n              ],\n              \"consumable\": false,\n              \"visibility\": {\n                \"kind\": \"party\"\n              },\n              \"ownerId\": \"player-juno\",\n              \"spent\": false\n            },\n            {\n              \"id\": \"foam-canister\",\n              \"name\": \"Emergency Dessert Foam\",\n              \"locationId\": \"orbital-galley\",\n              \"grants\": [\n                \"stabilize_zero_g_object\"\n              ],\n              \"consumable\": true,\n              \"visibility\": {\n                \"kind\": \"party\"\n              },\n              \"ownerId\": \"player-pax\",\n              \"spent\": false\n            }\n          ],\n          \"visibleNpcs\": [\n            {\n              \"id\": \"npc-q5\",\n              \"name\": \"Q-5, Overqualified Catering Robot\",\n              \"locationId\": \"orbital-galley\",\n              \"hitPoints\": 6,\n              \"visibility\": {\n                \"kind\": \"party\"\n              },\n              \"alive\": true\n            }\n          ],\n          \"visibleFacts\": [\n            {\n              \"id\": \"fact-banquet-deadline\",\n              \"statement\": \"The diplomatic banquet begins when the service countdown reaches its limit.\"\n            }\n          ],\n          \"clocks\": [\n            {\n              \"id\": \"dessert-recovery\",\n              \"name\": \"Dessert Recovery\",\n              \"max\": 3,\n              \"initial\": 0,\n              \"current\": 0\n            },\n            {\n              \"id\": \"banquet-countdown\",\n              \"name\": \"Banquet Countdown\",\n              \"max\": 4,\n              \"initial\": 0,\n              \"current\": 0\n            }\n          ]\n        },\n        \"committedEvent\": {\n          \"eventId\": \"event-1-narration-failure\",\n          \"commandId\": \"narration-failure\",\n          \"sequence\": 1,\n          \"stateVersionBefore\": 0,\n          \"stateVersionAfter\": 1,\n          \"type\": \"check_resolved\",\n          \"actorId\": \"player-juno\",\n          \"visibility\": {\n            \"kind\": \"party\"\n          },\n          \"payload\": {\n            \"effects\": [],\n            \"roll\": {\n              \"source\": \"server\",\n              \"sides\": 20,\n              \"raw\": 2,\n              \"modifier\": 2,\n              \"total\": 4,\n              \"difficulty\": 11,\n              \"success\": false,\n              \"formula\": \"1d20 + ability modifier >= difficulty\",\n              \"rulesVersion\": \"0.1.0\"\n            },\n            \"summary\": \"Juno resolved insight check: 4 vs 11.\"\n          }\n        }\n      }\n    }\n  ]\n}",
      "model": "deepseek/deepseek-v4-pro",
      "seed": 20260726,
      "model.reasoning_effort": "off"
    }
  },
  "2": {
    "class_type": "SaveText",
    "inputs": {
      "text": [
        "1",
        0
      ],
      "filename_prefix": "strong-core-escalation/screening/deepseek-deepseek-v4-pro--en--narration--s20260726",
      "format": "json"
    }
  }
}
