Source: v1.0.4-rc1 RRI @fa97b34, found by 4/5 personas — the dominant zero_critical gate blocker. Evidence: /Volumes/LEXAR/Codex/worldos-qa-results-fa97b34/runs/vm2-{newbie,adversarial,narrative}/bugs.ndjson.
The focused/active player character silently changes between DM beats with no UI handoff or explanation — the wrong character's story plays after each action:
- newbie: Liara Portyr → Rolan, then alternates Liara/Rolan on every beat.
- adversarial: Florrick → Rolan between beats, no player input.
- narrative: Rolan → Liara Portyr mid-beat, no handoff.
Almost certainly an active-character / session-focus resolution bug (same class as the #717/#719 campaign-resolution fixes). Investigate active-PC/party-focus resolution across viewer/server.py (_pick_campaign / active-character) + the engine session/party focus + play_party.sh. Add an assert_behavioral guard ("active_pc_stable_across_beats"). Related: the Parley focus-switch (#734). Sprint 1 — highest leverage (single root behind the gate).
Source: v1.0.4-rc1 RRI @
fa97b34, found by 4/5 personas — the dominantzero_criticalgate blocker. Evidence:/Volumes/LEXAR/Codex/worldos-qa-results-fa97b34/runs/vm2-{newbie,adversarial,narrative}/bugs.ndjson.The focused/active player character silently changes between DM beats with no UI handoff or explanation — the wrong character's story plays after each action:
Almost certainly an active-character / session-focus resolution bug (same class as the #717/#719 campaign-resolution fixes). Investigate active-PC/party-focus resolution across
viewer/server.py(_pick_campaign/ active-character) + the engine session/party focus +play_party.sh. Add anassert_behavioralguard ("active_pc_stable_across_beats"). Related: the Parley focus-switch (#734). Sprint 1 — highest leverage (single root behind the gate).