{
  "mode": "ready_for_tonight",
  "status": "ready",
  "summary": "Use the same first-party handoff on mobile so the starter packet, join rail, and recovery/support routes stay attached.",
  "next_best_screen": "/mobile",
  "install_route": "/downloads",
  "continuity_route": "/play/continuity",
  "pwa_route": "/mobile",
  "frontdoor_launch_route": "/mobile/player",
  "playtime_tools": [
    {
      "id": "inventory",
      "label": "Inventory",
      "summary": "Keep table-facing gear and carried items visible during play without opening the full builder."
    },
    {
      "id": "health",
      "label": "Health",
      "summary": "Track damage and recovery cues as session notes, not as automatic rules decisions."
    },
    {
      "id": "ammo",
      "label": "Ammo",
      "summary": "Keep ammunition and reload reminders close to the play screen."
    },
    {
      "id": "modifiers",
      "label": "Modifiers",
      "summary": "Surface current table modifiers and GM notes before a roll."
    },
    {
      "id": "quick_rolls",
      "label": "Quick rolls and odds",
      "summary": "Show quick dice entry and chance framing for playtime checks without replacing GM authority."
    },
    {
      "id": "living_world",
      "label": "Opt-in living world",
      "summary": "Black Ledger heat and turn updates stay gated behind account opt-in and followed-world selection."
    }
  ],
  "boundaries": [
    "The mobile shell supports playtime tracking; character building stays before or after the session.",
    "Black Ledger live detail requires account opt-in and followed-world selection.",
    "GM remains final authority for modifiers, dice calls, and table consequences."
  ],
  "role_routes": [
    {
      "role": "Player",
      "mode": "player",
      "route": "/mobile/player",
      "manifest_path": "/manifest.player.webmanifest",
      "manifest_id": "/mobile/player",
      "manifest_start_url": "/mobile/player?role=Player",
      "session_handoff_route_template": "/mobile/player?sessionId={sessionId}\u0026role=Player",
      "frontdoor_default": true
    },
    {
      "role": "GameMaster",
      "mode": "gm",
      "route": "/mobile/gm",
      "manifest_path": "/manifest.gm.webmanifest",
      "manifest_id": "/mobile/gm",
      "manifest_start_url": "/mobile/gm?role=GameMaster",
      "session_handoff_route_template": "/mobile/gm?sessionId={sessionId}\u0026role=GameMaster",
      "frontdoor_default": false
    }
  ],
  "packet_routes": [
    {
      "roleId": "player",
      "markdown": "/ready/packet/player.md",
      "json": "/ready/packet/player.json"
    },
    {
      "roleId": "gm",
      "markdown": "/ready/packet/gm.md",
      "json": "/ready/packet/gm.json"
    },
    {
      "roleId": "organizer",
      "markdown": "/ready/packet/organizer.md",
      "json": "/ready/packet/organizer.json"
    }
  ],
  "generated_at_utc": "2026-07-27T00:27:22.7022533+00:00"
}