Skip to content

[playtest][P1] "DM is narrating…" state has no progress animation — 35–60s waits feel like a freeze #336

Description

@100yenadmin

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

  1. qa/ui_playtest.sh play2 baldurs-gate newbie 30 3.00 (or live qa/play_human.sh).
  2. 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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    severity:majorVisible degradation a Pathfinder/BG3 player calls out in 60sui-auditFrom the 2026-05-29 UI/UX audit (docs/ui-audit/)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions