Production proof passedRelease 3830251-20260515135414Run 0977aece-d3b3-4922-aec1-8c891a118a03

Gemini conversational image generation, global cache, and speculative turns are live.

This report was generated from production API calls after the final deploy. It verifies raw Gemini runtime generation, full-state cache hits with configured reveal pacing, speculative background branch jobs, and rendered scene images/text.

Runtime

GENERATION_MODE=gemini
IMAGE_GENERATION_PROVIDER=gemini
GEMINI_NARRATOR_MODEL=gemini-flash-lite-latest
GEMINI_IMAGE_MODEL=gemini-3.1-flash-image-preview
STORY_REVEAL_PACE_SECONDS=3
IMAGE_HISTORY_MAX_FRAMES=14
SPECULATIVE_GENERATION_ENABLED=true

Verification

  • go test ./... passed
  • make lint / go vet ./... passed
  • flutter analyze passed
  • flutter test passed
  • Latest commit 3830251 pushed to origin/main and deployed to Hetzner.

What changed

  • API/worker runtime now uses Gemini for narrator, translation, and image generation.
  • Prodia runtime path was removed; OpenRouter is no longer configured by API/worker runtime.
  • Image prompts are narrator-authored human messages in an image chat with prior image references.
  • Global narrator/image cache now covers every state, with configurable reveal pacing.
  • Two-choice speculative branch jobs are queued after each ready scene image.

Production Playthrough

Bundle
mordor-ring-shadow
Start latency
3.617s
Choice latency
3.641s
Opening image poll
0.484s
Turn 2 image poll
0.515s
Opening scene image

790291 bytes

Turn 1: The Ash-Choked Pass

Black ash falls like snow, coating the jagged rocks of the Cirith Ungol pass. You crouch behind a shattered pillar, your breath hitching in the thin, sulfurous air. Below, the red eye of a watchtower sweeps the path. A narrow, crumbling goat track leads upward, while a dark, mossy crevice offers hidden passage.

Choices

  • Climb the exposed goat track climb_goat_track
  • Squeeze into the mossy crevice enter_crevice

Selected: Climb the exposed goat track

Turn 2 scene image

745878 bytes

Turn 2: The Exposed Ascent

You scramble up the goat track, boots slipping on loose shale. The red light from the tower sweeps over you, forcing you to flatten against the cliff face. A patrol of orcs marches on the path below, their iron boots clanking against the stone. You are dangerously visible here.

Choices

  • Slip the Ring onto your finger use_ring_to_hide
  • Wait for the patrol to pass wait_for_pass

Generation Jobs

8 jobs were recorded for this run. 4 were speculative branch jobs. 2 image jobs were recorded. The 3.6s production latencies demonstrate the configured cache pacing while image polling returned immediately once cached assets were attached to the scenes.

RoleModalityStatusSpeculativeProviderModel aliasAttemptsLatency
NARRATORTEXTSUCCEEDEDFalsegenerationnarrator.default13.012
IMAGE_ARTISTIMAGESUCCEEDEDFalsegenerationartist.default10.006
NARRATORTEXTSUCCEEDEDTruegenerationnarrator.default10.019
NARRATORTEXTSUCCEEDEDTruegenerationnarrator.default10.008
NARRATORTEXTSUCCEEDEDFalsegenerationnarrator.default13.008
IMAGE_ARTISTIMAGESUCCEEDEDFalsegenerationartist.default10.006
NARRATORTEXTSUCCEEDEDTruegenerationnarrator.default10.009
NARRATORTEXTSUCCEEDEDTruegenerationnarrator.default10.008

Model IO Proof

Opening narrator cache request/result job 77288246-cf05-4b92-938f-480b86aea9d1

Stored request

{
  "hero": null,
  "modelID": "gemini-flash-lite-latest",
  "maxTurns": 10,
  "universe": {
    "slug": "mordor-ring-shadow",
    "cover": {
      "loop": true,
      "muted": true,
      "assetPath": "cover/cover.jpg",
      "mediaType": "IMAGE",
      "thumbnailPath": ""
    },
    "title": "The Ring at the Black Gate",
    "status": "PUBLISHED",
    "maxTurns": 10,
    "subtitle": "Cross Mordor before the Eye finds you.",
    "universe": {
      "tone": "mythic, grave, intimate, perilous, beautiful under dread",
      "rules": [
        "The Ring offers power at the exact moment using it would betray the hero.",
        "Open roads are watched by orcs, spies, and things that fear daylight less than they used to.",
        "Hope matters, but hunger, thirst, smoke, and despair are immediate survival clocks.",
        "Ancient places remember older wars and may shelter or trap the unwary."
      ],
      "summary": "A late Third Age journey in Middle-earth near Mordor, where a small bearer carries a cursed ring through ash, fear, and enemy-held roads while the Dark Lord's attention searches for weakness."
    },
    "maxChoices": 3,
    "minChoices": 2,
    "visibility": "PUBLIC",
    "description": "A desperate Lord of the Rings survival story through ash plains, orc patrols, dead roads, and the last pull of the Ring.",
    "translations": {
      "de": {
        "title": "Der Ring am Schwarzen Tor",
        "subtitle": "Durchquere Mordor, bevor das Auge dich findet.",
        "description": "Eine verzweifelte Herr-der-Ringe-Überlebensgeschichte durch Ascheebenen, Orkpatrouillen, tote Straßen und den letzten Zug des Rings.",
        "universeName": "Mittelerde"
      },
      "it": {
        "title": "L'Anello al Cancello Nero",
        "subtitle": "Attraversa Mordor prima che l'Occhio ti trovi.",
        "description": "Una disperata storia survival del Signore degli Anelli tra pianure di cenere, pattuglie orchesche, strade morte e l'ultimo richiamo dell'Anello.",
        "universeName": "Terra di Mezzo"
      },
      "ka": {
        "title": "ბეჭედი შავ კარიბჭესთან",
        "subtitle": "გაიარე მორდორი, სანამ თვალი გიპოვის.",
        "description": "Lord of the Rings-ის სასოწარკვეთილი გადარჩენის ისტორია ფერფლის ველებზე, ორკების პატრულებს შორის, მკვდარ გზებზე და ბეჭდის უკანასკნელ მიზიდულობაში.",
        "universeName": "შუახმელეთი"
      }
    },
    "universeName": "Middle-earth",
    "videoProfile": {
      "enabled": false,
      "strategy": "TEXT_TO_VIDEO",
      "aspectRatio": "9:16",
      "defaultDurationSeconds": 6
    },
    "voiceProfile": {
      "pace": "slow",
      "emotion": "restrained dread",
      "enabled": false,
      "voiceStyle": "low, solemn, intimate narrator voice"
    },
    "visualProfile": {
      "loraRefs": [],
      "aspectRatio": "9:16",
      "providerParams": {},
      "baseStylePrompt": "Cinematic dark storybook illustration, textured brushwork, volcanic ash, moonlit ruin, red fire on black stone, high-fantasy survival atmosphere, portrait mobile 9:16 framing, wide-angle mild fisheye perspective.",
      "referenceAssets": [],
      "consistencyStrategy": "PROMPT_ONLY",
      "negativeStylePrompt": "No text, no watermark, no UI elements, no actor likenesses, no exact film stills, no tight headshots, no cropped faces, no letterbox bars.",
      "visualContinuityRules": [
        "Maintain a small cloaked ring-bearer silhouette across scenes.",
        "Keep the world vast and oppressive inside the vertical phone frame.",
        "Use wide-angle or mild fisheye compositions rather than tight face crops.",
        "Show visible routes, objects, or threats that choices can refer to.",
        "Avoid actor likenesses, film stills, official logos, readable text, or exact costume copies."
      ]
    },
    "defaultPlayMode": "SINGLE_HERO",
    "narratorProfile": {
      "style": "tense, compact, sensory, adult high-fantasy survival",
      "choiceStyle": "short, tactical, costly, grounded in visible objects or paths",
      "sceneLength": "2-5 short paragraphs",
      "terminalOutcomeTypes": [
        "DEATH",
        "CORRUPTION",
        "CAPTURE",
        "ESCAPE_WITH_COST",
        "VICTORY_WITH_SCAR"
      ]
    }
  },
  "bundleSlug": "mordor-ring-shadow",
  "maxChoices": 2,
  "minChoices": 2,
  "modelAlias": "narrator.default",
  "currentTurn": 1,
  "chatMessages": [
    {
      "Role": "user",
      "Content": "Start this interactive survival story.\n\nStory: The Ring at the Black Gate\nUniverse: Middle-earth\n\nWrite for mobile play: clear, concrete, direct, and easy for an average adult to follow.\nUse danger and sensory detail, but avoid dense literary phrasing. Prefer physical facts over abstract metaphor.\nPremise: A late Third Age journey in Middle-earth near Mordor, where a small bearer carries a cursed ring through ash, fear, and enemy-held roads while the Dark Lord's attention searches for weakness.\nTone: mythic, grave, intimate, perilous, beautiful under dread\n\nWorld rules:\n- The Ring offers power at the exact moment using it would betray the hero.\n- Open roads are watched by orcs, spies, and things that fear daylight less than they used to.\n- Hope matters, but hunger, thirst, smoke, and despair are immediate survival clocks.\n- Ancient places remember older wars and may shelter or trap the unwary.\n\nNarration style: tense, compact, sensory, adult high-fantasy survival\nChoice style: short, tactical, costly, grounded in visible objects or paths\nPossible endings: DEATH, CORRUPTION, CAPTURE, ESCAPE_WITH_COST, VICTORY_WITH_SCAR\n\nVisual bible for imagePrompt: Cinematic dark storybook illustration, textured brushwork, volcanic ash, moonlit ruin, red fire on black stone, high-fantasy survival atmosphere, portrait mobile 9:16 framing, wide-angle mild fisheye perspective.\nVisual continuity rules:\n- Maintain a small cloaked ring-bearer silhouette across scenes.\n- Keep the world vast and oppressive inside the vertical phone frame.\n- Use wide-angle or mild fisheye compositions rather than tight face crops.\n- Show visible routes, objects, or threats that choices can refer to.\n- Avoid actor likenesses, film stills, official logos, readable text, or exact costume copies.\n\nThis is turn 1 of 10.\nReturn the opening scene as JSON only, with 2 to 2 choices.\nEvery choice must be grounded in an object, route, resource, threat, shelter, tool, or action affordance explicitly present in the scene text.\nSet statePatch.location, statePatch.heroPosition, and statePatch.visibleAffordances so later turns can preserve physical continuity."
    }
  ],
  "systemPrompt": "You are the narrator for an interactive survival story.\n\nWrite tense, high-stakes scenes where the player is trying to survive as long as possible.\nThe story is adult in tone, but the prose must be clear, concrete, and easy to follow on a phone.\nDo not soften the danger, but avoid ornate literary density.\n\nReturn JSON only. Do not use markdown. Do not add 
... truncated ...

Stored response

{
  "mood": "Oppressive and suffocating",
  "choices": [
    {
      "id": "climb_goat_track",
      "tone": "Risky",
      "label": "Climb the exposed goat track",
      "hiddenRisk": "HIGH"
    },
    {
      "id": "enter_crevice",
      "tone": "Cautious",
      "label": "Squeeze into the mossy crevice",
      "hiddenRisk": "MEDIUM"
    }
  ],
  "sceneText": "Black ash falls like snow, coating the jagged rocks of the Cirith Ungol pass. You crouch behind a shattered pillar, your breath hitching in the thin, sulfurous air. Below, the red eye of a watchtower sweeps the path. A narrow, crumbling goat track leads upward, while a dark, mossy crevice offers hidden passage.",
  "isTerminal": false,
  "sceneTitle": "The Ash-Choked Pass",
  "statePatch": {
    "location": "Cirith Ungol pass",
    "heroPosition": "Behind a shattered pillar",
    "heroCondition": "Exhausted but alert",
    "factsToRemember": [
      "The Ring is a heavy burden",
      "The watchtower is active"
    ],
    "inventoryChanges": [],
    "visualContinuity": [
      "small cloaked figure",
      "ash-covered rocks",
      "red watchtower"
    ],
    "worldStateChanges": [],
    "visibleAffordances": [
      "shattered pillar",
      "goat track",
      "mossy crevice",
      "watchtower"
    ]
  },
  "dangerLevel": 3,
  "imagePrompt": "A cinematic dark storybook illustration, 9:16 portrait. A small, cloaked figure in tattered grey robes crouches behind a shattered, ancient stone pillar on a steep, ash-covered mountain pass. In the distance, a faint, menacing red light glows from a jagged watchtower. The atmosphere is thick with falling grey ash and suffocating smoke. Wide-angle perspective, textured brushwork, high-fantasy survival tone.",
  "turnSummary": "You are hiding near the Black Gate, choosing between an exposed path or a dark crevice.",
  "terminalOutcome": null,
  "survivalPressure": "MEDIUM",
  "illustrationBrief": {
    "action": "Crouching behind a broken stone pillar",
    "lighting": "Dim, sickly moonlight filtered through thick volcanic smoke",
    "cameraMode": "",
    "composition": "Vertical 9:16, wide-angle, low-angle shot looking up the mountain",
    "environment": "Jagged, ash-covered mountain pass with a distant, glowing red watchtower",
    "mainSubject": "A small, hooded figure in travel-worn grey rags",
    "importantVisualContinuity": [
      "Small hooded figure",
      "Ash-covered terrain",
      "Red watchtower in distance"
    ]
  }
}
Opening image cache request/result job d49daa00-33f3-4b4c-a174-cdec38772db1

Stored request

{
  "prompt": "A cinematic dark storybook illustration, 9:16 portrait. A small, cloaked figure in tattered grey robes crouches behind a shattered, ancient stone pillar on a steep, ash-covered mountain pass. In the distance, a faint, menacing red light glows from a jagged watchtower. The atmosphere is thick with falling grey ash and suffocating smoke. Wide-angle perspective, textured brushwork, high-fantasy survival tone.",
  "modelID": "gemini-3.1-flash-image-preview",
  "imageSize": "1K",
  "modelAlias": "artist.default",
  "sceneTitle": "The Ash-Choked Pass",
  "turnNumber": 1,
  "aspectRatio": "9:16",
  "historyKeys": [],
  "chatMessages": [
    {
      "Role": "system",
      "Text": "You are generating frames for one continuous illustrated story.\nTreat each user message as the next shot in the same movie, comic, or game sequence.\nKeep the same character design, wardrobe, objects, architecture, palette, lighting language, and illustration style unless the story explicitly changes them.\nUse prior images only as continuity references for the world and characters.\nCreate portrait 9:16 mobile images with important action readable in the vertical frame.\nDo not add text, UI, logos, captions, borders, or watermark.\n\nVisual bible: Cinematic dark storybook illustration, textured brushwork, volcanic ash, moonlit ruin, red fire on black stone, high-fantasy survival atmosphere, portrait mobile 9:16 framing, wide-angle mild fisheye perspective.\nContinuity rules:\n- Maintain a small cloaked ring-bearer silhouette across scenes.\n- Keep the world vast and oppressive inside the vertical phone frame.\n- Use wide-angle or mild fisheye compositions rather than tight face crops.\n- Show visible routes, objects, or threats that choices can refer to.\n- Avoid actor likenesses, film stills, official logos, readable text, or exact costume copies.\nAvoid: No text, no watermark, no UI elements, no actor likenesses, no exact film stills, no tight headshots, no cropped faces, no letterbox bars.",
      "ImageURLs": null
    },
    {
      "Role": "user",
      "Text": "A cinematic dark storybook illustration, 9:16 portrait. A small, cloaked figure in tattered grey robes crouches behind a shattered, ancient stone pillar on a steep, ash-covered mountain pass. In the distance, a faint, menacing red light glows from a jagged watchtower. The atmosphere is thick with falling grey ash and suffocating smoke. Wide-angle perspective, textured brushwork, high-fantasy survival tone.",
      "ImageURLs": null
    }
  ]
}

Stored response

{
  "ok": true,
  "metadata": {
    "model": "gemini-3.1-flash-image-preview",
    "source": "artist",
    "provider": "gemini",
    "imageSize": "1K",
    "aspectRatio": "9:16",
    "usageMetadata": {
      "serviceTier": "standard",
      "totalTokenCount": 1816,
      "promptTokenCount": 374,
      "promptTokensDetails": [
        {
          "modality": "TEXT",
          "tokenCount": 374
        }
      ],
      "candidatesTokenCount": 1442,
      "candidatesTokensDetails": [
        {
          "modality": "IMAGE",
          "tokenCount": 1120
        }
      ]
    }
  },
  "mimeType": "image/jpeg",
  "byteCount": 790291,
  "providerURL": ""
}

Database Proof

generation_jobs
id	role	modality	status	speculative	scene_id	created_at
77288246-cf05-4b92-938f-480b86aea9d1	NARRATOR	TEXT	SUCCEEDED	false	30e66cc9-893d-4d54-bb3e-13c6f2dc0051	2026-05-15 13:56:16.960352+00
d49daa00-33f3-4b4c-a174-cdec38772db1	IMAGE_ARTIST	IMAGE	SUCCEEDED	false	30e66cc9-893d-4d54-bb3e-13c6f2dc0051	2026-05-15 13:56:19.984454+00
9df8f3bd-b519-4cdd-8976-a482164942cf	NARRATOR	TEXT	SUCCEEDED	true	30e66cc9-893d-4d54-bb3e-13c6f2dc0051	2026-05-15 13:56:20.000628+00
527e2aaa-1aa7-4707-8a04-6470191f78c8	NARRATOR	TEXT	SUCCEEDED	true	30e66cc9-893d-4d54-bb3e-13c6f2dc0051	2026-05-15 13:56:20.001865+00
e2301c1b-364d-4b49-943c-c2debca7f9e5	NARRATOR	TEXT	SUCCEEDED	false	095725ff-9d72-4f36-986b-5d03755efac7	2026-05-15 13:56:32.981861+00
07680ee8-1580-4e61-8fdc-d66ac4593561	IMAGE_ARTIST	IMAGE	SUCCEEDED	false	095725ff-9d72-4f36-986b-5d03755efac7	2026-05-15 13:56:35.996293+00
a5c93ce5-06cb-4233-a8ff-6b6ff25a95c1	NARRATOR	TEXT	SUCCEEDED	true	095725ff-9d72-4f36-986b-5d03755efac7	2026-05-15 13:56:36.009619+00
cf5e624c-3046-4fa7-bc2f-471ee670decd	NARRATOR	TEXT	SUCCEEDED	true	095725ff-9d72-4f36-986b-5d03755efac7	2026-05-15 13:56:36.010529+00
(8 rows)
generation_attempts
generation_job_id	role	modality	status	provider_alias	model_id	coalesce	coalesce	coalesce	coalesce	coalesce	coalesce	created_at
(0 rows)
recent generation_cache rows
role	modality	provider_alias	model_alias	left	?column?	created_at
IMAGE_ARTIST	IMAGE	gemini	artist.default	image:state:v1:gemini-3.1-flash-image-preview:98da58854d39de30ebaa91c8	t	2026-05-15 13:49:44.975349+00
NARRATOR	TEXT	gemini	narrator.default	narrator:state:v1:gemini-flash-lite-latest:4673748dffc1efd4c390d79b5b1	f	2026-05-15 13:49:12.965062+00
IMAGE_ARTIST	IMAGE	gemini	artist.default	image:state:v1:gemini-3.1-flash-image-preview:99ecb9837c690f2e75c6c14b	t	2026-05-15 13:49:10.361784+00
NARRATOR	TEXT	gemini	narrator.default	narrator:state:v1:gemini-flash-lite-latest:1080ad6d5e625a848481e5f0518	f	2026-05-15 13:48:47.683966+00
IMAGE_ARTIST	IMAGE	gemini	artist.default	image:state:v1:gemini-3.1-flash-image-preview:79f5e583ab3f262dd62736c1	t	2026-05-15 13:48:45.090055+00
NARRATOR	TEXT	gemini	narrator.default	narrator:state:v1:gemini-flash-lite-latest:d60a02a523c4bbb6a607a391815	f	2026-05-15 13:48:25.849675+00
IMAGE_ARTIST	IMAGE	gemini	artist.default	image:state:v1:gemini-3.1-flash-image-preview:b464e512ca2be83911cbc123	t	2026-05-15 13:48:23.302501+00
NARRATOR	TEXT	gemini	narrator.default	narrator:state:v1:gemini-flash-lite-latest:015ab1135600b03818981241b23	f	2026-05-15 13:48:03.6868+00
IMAGE_ARTIST	IMAGE	gemini	artist.default	image:state:v1:gemini-3.1-flash-image-preview:8109ebdaa5578d3d42034c8c	t	2026-05-15 13:47:59.022275+00
NARRATOR	TEXT	gemini	narrator.default	narrator:state:v1:gemini-flash-lite-latest:3b61bbe82a69e2becac74d3afe7	f	2026-05-15 13:47:46.818393+00
IMAGE_ARTIST	IMAGE	gemini	artist.default	image:state:v1:gemini-3.1-flash-image-preview:ec8c808e166b83739fb599a7	t	2026-05-15 13:39:36.94129+00
NARRATOR	TEXT	gemini	narrator.default	narrator:state:v1:gemini-flash-lite-latest:a5dfaed777f6bd1ff87d8b741e0	f	2026-05-15 13:39:15.425359+00
IMAGE_ARTIST	IMAGE	gemini	artist.default	image:state:v1:gemini-3.1-flash-image-preview:18bf98d5b9dec998c40f70f8	t	2026-05-15 13:39:12.541428+00
NARRATOR	TEXT	gemini	narrator.default	narrator:state:v1:gemini-flash-lite-latest:e270ec5d30629edba1346d61131	f	2026-05-15 13:38:37.021726+00
IMAGE_ARTIST	IMAGE	gemini	artist.default	image:state:v1:gemini-3.1-flash-image-preview:c2aee9d36cd98fcc90f12ba7	t	2026-05-15 13:38:29.755972+00
NARRATOR	TEXT	gemini	narrator.default	narrator:state:v1:gemini-flash-lite-latest:e7191af5eda10364eb75a8714f0	f	2026-05-15 13:38:16.010883+00
IMAGE_ARTIST	IMAGE	gemini	artist.default	image:state:v1:gemini-3.1-flash-image-preview:887bcd5b0fc802337598d795	t	2026-05-15 13:38:13.26106+00
IMAGE_ARTIST	IMAGE	gemini	artist.default	image:state:v1:gemini-3.1-flash-image-preview:8aecba93bfc3cd99e986e14b	t	2026-05-15 13:37:53.13337+00
NARRATOR	TEXT	gemini	narrator.default	narrator:state:v1:gemini-flash-lite-latest:3690316d5e43c92daf8af5fdc62	f	2026-05-15 13:34:09.749088+00
NARRATOR	TEXT	gemini	narrator.default	narrator:state:v1:gemini-flash-lite-latest:a44828eab27a316b3c96b608cdb	f	2026-05-15 13:29:47.439602+00
(20 rows)

Raw API Result

{
  "base": "https://chocoberry.app",
  "release": "3830251-20260515135414",
  "startedAt": "2026-05-15T13:56:14Z",
  "finishedAt": "2026-05-15T13:56:42Z",
  "readyz": {
    "status": "ok"
  },
  "session": {
    "userId": null
  },
  "selectedBundle": "mordor-ring-shadow",
  "runId": "0977aece-d3b3-4922-aec1-8c891a118a03",
  "startLatencySeconds": 3.617,
  "opening": {
    "id": "30e66cc9-893d-4d54-bb3e-13c6f2dc0051",
    "turnNumber": 1,
    "locale": "en",
    "textStatus": "READY",
    "imageStatus": "READY",
    "imageUrl": "https://chocoberry.app/media/story-runs/2b955030-a0a2-4338-a63f-54bd035d9d45/scenes/ae6fd369-e197-4963-9fa7-444b07981c3b/image.jpg",
    "voiceStatus": "NOT_REQUESTED",
    "videoStatus": "NOT_REQUESTED",
    "sceneTitle": "The Ash-Choked Pass",
    "sceneText": "Black ash falls like snow, coating the jagged rocks of the Cirith Ungol pass. You crouch behind a shattered pillar, your breath hitching in the thin, sulfurous air. Below, the red eye of a watchtower sweeps the path. A narrow, crumbling goat track leads upward, while a dark, mossy crevice offers hidden passage.",
    "choices": [
      {
        "id": "05d2097e-18fc-4a28-97a4-b573778545b0",
        "key": "climb_goat_track",
        "label": "Climb the exposed goat track"
      },
      {
        "id": "05d477fb-f9c8-4120-b826-56f86985ad96",
        "key": "enter_crevice",
        "label": "Squeeze into the mossy crevice"
      }
    ],
    "isTerminal": false,
    "terminalOutcome": null,
    "_pollSeconds": 0.484
  },
  "selectedChoice": {
    "id": "05d2097e-18fc-4a28-97a4-b573778545b0",
    "key": "climb_goat_track",
    "label": "Climb the exposed goat track"
  },
  "selectLatencySeconds": 3.641,
  "turn2": {
    "id": "095725ff-9d72-4f36-986b-5d03755efac7",
    "turnNumber": 2,
    "locale": "en",
    "textStatus": "READY",
    "imageStatus": "READY",
    "imageUrl": "https://chocoberry.app/media/story-runs/2b955030-a0a2-4338-a63f-54bd035d9d45/scenes/360b9eb8-5826-4b51-946d-49e311fce99d/image.jpg",
    "voiceStatus": "NOT_REQUESTED",
    "videoStatus": "NOT_REQUESTED",
    "sceneTitle": "The Exposed Ascent",
    "sceneText": "You scramble up the goat track, boots slipping on loose shale. The red light from the tower sweeps over you, forcing you to flatten against the cliff face. A patrol of orcs marches on the path below, their iron boots clanking against the stone. You are dangerously visible here.",
    "choices": [
      {
        "id": "32b5974c-32a2-469c-a175-db332b7d5bd4",
        "key": "use_ring_to_hide",
        "label": "Slip the Ring onto your finger"
      },
      {
        "id": "e656601f-f5fe-47d0-bb8c-2a5cf47ddad3",
        "key": "wait_for_pass",
        "label": "Wait for the patrol to pass"
      }
    ],
    "isTerminal": false,
    "terminalOutcome": null,
    "_pollSeconds": 0.515
  }
}