Surfaced by the #324 AI playtester (run play2, newbie persona, baldurs-gate). This run got past the entrance (the #328 "Resume → play" CTA + "DM is narrating…" affordance worked) and sustained a 3-turn play loop — which exposed that the narrating affordance itself is insufficient.
Relationship to the (now-closed) #327
#327 was "after submitting an action, no DM response + no loading state at all". #328 fixed that by adding a "The Dungeon Master is narrating…" label and greying the controls. This issue is the next layer: the label exists, but it is static — there is no spinner, no animated dots, no elapsed/estimated time — while the DM turn legitimately takes 35–60+ seconds to resolve (a full engine-backed turn: checks, NPC creation, companion advice, voiced lines). To a first-timer the app looks frozen, not busy.
Expected
While the DM resolves a turn, show continuous "alive" feedback — an animated spinner / pulsing dots / shimmer on the narrating label, and ideally an elapsed-time or "this can take up to a minute" hint — so the player can distinguish "still generating" from "broken".
Actual
The UI greys out all controls and shows a static "The Dungeon Master is narrating…" string in the text box. No new story text appears for 35–60+ seconds with zero motion or progress signal. The player explicitly waited in ~5–8s increments unsure whether the game had hung. Player closing verdict: "Every response felt like the app had frozen."
Severity
major (P1). It does not hard-block (the narration does eventually arrive — blocks_progress: false), but on a multi-minute-per-turn AI DM, "is it broken or just slow?" on every turn is a release-blocking UX gap for the core play loop.
Evidence
- Run
qa/ui_playtest_runs/play2/ — bugs.ndjson (player, major), screenshot player/screenshots/step-011-bug.png.
- score.json:
in_story_turns: 3, actions_to_first_beat: 4, pass: true — i.e. the player did push through; this is about perceived responsiveness, not a dead loop.
- Likely surface: the narrating/“thinking” state in
viewer/openworlds/screen-table.jsx (the control-disable + label swap) — add a CSS keyframe animation / spinner element; no engine or wire change (engine stays sole writer).
Repro
qa/ui_playtest.sh play2 baldurs-gate newbie 30 3.00 (or live qa/play_human.sh).
- Type an action + Declare. Observe the static "DM is narrating…" with no motion for tens of seconds.
Part of #324 / #242 (Phase 5). New vs closed #327 (which was the total-absence-of-feedback case).
Surfaced by the #324 AI playtester (run
play2, newbie persona, baldurs-gate). This run got past the entrance (the #328 "Resume → play" CTA + "DM is narrating…" affordance worked) and sustained a 3-turn play loop — which exposed that the narrating affordance itself is insufficient.Relationship to the (now-closed) #327
#327 was "after submitting an action, no DM response + no loading state at all". #328 fixed that by adding a "The Dungeon Master is narrating…" label and greying the controls. This issue is the next layer: the label exists, but it is static — there is no spinner, no animated dots, no elapsed/estimated time — while the DM turn legitimately takes 35–60+ seconds to resolve (a full engine-backed turn: checks, NPC creation, companion advice, voiced lines). To a first-timer the app looks frozen, not busy.
Expected
While the DM resolves a turn, show continuous "alive" feedback — an animated spinner / pulsing dots / shimmer on the narrating label, and ideally an elapsed-time or "this can take up to a minute" hint — so the player can distinguish "still generating" from "broken".
Actual
The UI greys out all controls and shows a static "The Dungeon Master is narrating…" string in the text box. No new story text appears for 35–60+ seconds with zero motion or progress signal. The player explicitly waited in ~5–8s increments unsure whether the game had hung. Player closing verdict: "Every response felt like the app had frozen."
Severity
major(P1). It does not hard-block (the narration does eventually arrive —blocks_progress: false), but on a multi-minute-per-turn AI DM, "is it broken or just slow?" on every turn is a release-blocking UX gap for the core play loop.Evidence
qa/ui_playtest_runs/play2/—bugs.ndjson(player, major), screenshotplayer/screenshots/step-011-bug.png.in_story_turns: 3,actions_to_first_beat: 4,pass: true— i.e. the player did push through; this is about perceived responsiveness, not a dead loop.viewer/openworlds/screen-table.jsx(the control-disable + label swap) — add a CSS keyframe animation / spinner element; no engine or wire change (engine stays sole writer).Repro
qa/ui_playtest.sh play2 baldurs-gate newbie 30 3.00(or liveqa/play_human.sh).Part of #324 / #242 (Phase 5). New vs closed #327 (which was the total-absence-of-feedback case).