Audit-confirmed. qa/ui_playtest.sh dm_turn is single-attempt and always writes a chatlog DM row via clawdnd_dm_narration_or_fallback — a beat where claude -p dies entirely 'resolves' with stale prior prose (+ filtered heartbeat), DM_TURNS increments, and assert_behavioral both_sides_acted counts inflate on exactly the broken runs. Fix in flight (heartbeat-repair PR): wrapper-aware fallback + fallback_recovered flag; follow-up: discount flagged rows in behavioral tallies.
Audit-confirmed. qa/ui_playtest.sh dm_turn is single-attempt and always writes a chatlog DM row via clawdnd_dm_narration_or_fallback — a beat where claude -p dies entirely 'resolves' with stale prior prose (+ filtered heartbeat), DM_TURNS increments, and assert_behavioral both_sides_acted counts inflate on exactly the broken runs. Fix in flight (heartbeat-repair PR): wrapper-aware fallback + fallback_recovered flag; follow-up: discount flagged rows in behavioral tallies.