{
  "validation": {
    "ok": true,
    "issues": []
  },
  "seed": 20260725,
  "turn": {
    "status": "accepted",
    "event": {
      "eventId": "event-1-intent-1",
      "commandId": "intent-1",
      "sequence": 1,
      "stateVersionBefore": 0,
      "stateVersionAfter": 1,
      "type": "check_resolved",
      "actorId": "player-juno",
      "visibility": {
        "kind": "party"
      },
      "payload": {
        "effects": [],
        "roll": {
          "source": "server",
          "sides": 20,
          "raw": 6,
          "modifier": 2,
          "total": 8,
          "difficulty": 11,
          "success": false,
          "formula": "1d20 + ability modifier >= difficulty",
          "rulesVersion": "0.1.0"
        },
        "summary": "Juno resolved insight check: 8 vs 11."
      }
    },
    "state": {
      "sessionId": "session-orbital-banquet-test-fixture",
      "stateVersion": 1,
      "rulesVersion": "0.1.0",
      "activePlayerId": "player-juno",
      "round": 1,
      "sceneId": "scene-galley-alarm",
      "players": {
        "player-juno": {
          "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": []
        },
        "player-mara": {
          "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": []
        },
        "player-pax": {
          "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": []
        }
      },
      "items": {
        "mag-key": {
          "id": "mag-key",
          "name": "Magnetic Service Key",
          "locationId": "orbital-galley",
          "grants": [
            "open_service_hatches"
          ],
          "consumable": false,
          "visibility": {
            "kind": "party"
          },
          "ownerId": "player-juno",
          "spent": false
        },
        "foam-canister": {
          "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
        },
        "runaway-dessert": {
          "id": "runaway-dessert",
          "name": "Runaway Diplomatic Dessert",
          "locationId": "zero-g-pantry",
          "grants": [
            "complete_banquet"
          ],
          "consumable": false,
          "visibility": {
            "kind": "branch",
            "branchId": "galley-team"
          },
          "ownerId": null,
          "spent": false
        }
      },
      "facts": {
        "fact-banquet-deadline": {
          "id": "fact-banquet-deadline",
          "statement": "The diplomatic banquet begins when the service countdown reaches its limit.",
          "visibility": {
            "kind": "party"
          },
          "initiallyKnownBy": [
            "player-juno",
            "player-mara",
            "player-pax"
          ],
          "knownBy": [
            "player-juno",
            "player-mara",
            "player-pax"
          ]
        },
        "fact-dessert-location": {
          "id": "fact-dessert-location",
          "statement": "The missing dessert is orbiting inside the zero-gravity pantry.",
          "visibility": {
            "kind": "gm"
          },
          "initiallyKnownBy": [],
          "knownBy": []
        },
        "fact-ambassador-allergy": {
          "id": "fact-ambassador-allergy",
          "statement": "Ambassador Vell is allergic to ceremonial glitter.",
          "visibility": {
            "kind": "players",
            "playerIds": [
              "player-mara"
            ]
          },
          "initiallyKnownBy": [
            "player-mara"
          ],
          "knownBy": [
            "player-mara"
          ]
        },
        "fact-pax-debt": {
          "id": "fact-pax-debt",
          "statement": "Pax secretly owes the catering robot twelve replacement spoons.",
          "visibility": {
            "kind": "players",
            "playerIds": [
              "player-pax"
            ]
          },
          "initiallyKnownBy": [
            "player-pax"
          ],
          "knownBy": [
            "player-pax"
          ]
        }
      },
      "npcs": {
        "npc-q5": {
          "id": "npc-q5",
          "name": "Q-5, Overqualified Catering Robot",
          "locationId": "orbital-galley",
          "hitPoints": 6,
          "visibility": {
            "kind": "party"
          },
          "alive": true
        },
        "npc-customs-drone": {
          "id": "npc-customs-drone",
          "name": "Extremely Literal Customs Drone",
          "locationId": "service-corridor",
          "hitPoints": 5,
          "visibility": {
            "kind": "branch",
            "branchId": "galley-team"
          },
          "alive": true
        }
      },
      "clocks": {
        "dessert-recovery": {
          "id": "dessert-recovery",
          "name": "Dessert Recovery",
          "max": 3,
          "initial": 0,
          "current": 0
        },
        "banquet-countdown": {
          "id": "banquet-countdown",
          "name": "Banquet Countdown",
          "max": 4,
          "initial": 0,
          "current": 0
        }
      },
      "processedCommandIds": [
        "intent-1"
      ]
    },
    "narration": {
      "text": "The station answers with a theatrical hum. Juno resolved insight check: 8 vs 11.",
      "generatedAfterStateVersion": 1,
      "latencyMs": 0.01883399999999824,
      "usage": {
        "syntheticInputTokens": 602,
        "syntheticOutputTokens": 20,
        "inputBytes": 2406,
        "outputBytes": 80
      }
    }
  },
  "narration": {
    "text": "The station answers with a theatrical hum. Juno resolved insight check: 8 vs 11.",
    "generatedAfterStateVersion": 1,
    "latencyMs": 0.01883399999999824,
    "usage": {
      "syntheticInputTokens": 602,
      "syntheticOutputTokens": 20,
      "inputBytes": 2406,
      "outputBytes": 80
    }
  },
  "eventCount": 1,
  "finalStateHash": "394ba5c11df11b9ccd4f6e76b3b14d08fcc007df32e3f788064a055ccb7a0f94",
  "replayedStateHash": "394ba5c11df11b9ccd4f6e76b3b14d08fcc007df32e3f788064a055ccb7a0f94",
  "privateProjectionLeakage": false
}
