589bee99cf
runGroupChatRounds' responder selection had no awareness of the stranded/ harvest state the previous round's harvest pass just confirmed. A member whose turn timed out (marked stranded) but is STILL genuinely running could be re-selected as a responder in a later round of the same invocation — resolveGroupResponders has no busy filter, and a member's watermark is bumped past the stranded timeout regardless of outcome, so a fresh delta re-qualifies them. Re-selecting them fires another prompt.submit into their live session. tui_gateway's _handle_busy_submit treats that as a normal busy mid-turn prompt: by default it either redirects the live turn in place or, for older agents, hard-interrupts it and queues the new text as the next turn. Either way the member's original in-flight work — exactly what the stranded/harvest mechanism exists to protect — gets abandoned or killed, undermining the "never lost, just late" guarantee. Filter responders against the room's current stranded map (freshly confirmed by this round's own harvest pass) before selecting who speaks. A member with a live stranded marker is skipped; the next harvest pass picks their reply up once it actually lands. Added a regression test exercising runGroupChatRounds end-to-end with a member confirmed still-busy: without the guard the round loop resubmits into their session (asserted via prompt.submit call count); with the guard it never does, and the marker survives untouched. Mutation-verified: temporarily reverted the filter and confirmed the new test fails (2 !== 0) fast, without a real wall-clock wait. Full hermes-bots plugin suite: 246/246 pass (47 files). node --check clean on both changed files.