fix: advance turn in before_message_write to prevent race condition #10

Merged
hzhang merged 2 commits from fix/turn-advance-race-condition into main 2026-03-03 03:47:35 +00:00

2 Commits

Author SHA1 Message Date
zhi
cf9be60145 fix: advance turn in before_message_write to prevent race condition
When a speaker finishes with an end symbol, the turn was only advanced
in the message_sent hook. But by that time, the message had already been
broadcast to other agents, whose before_model_resolve ran with the old
turn state, causing them to be blocked by the turn gate (forced no-reply).

Fix:
- Move turn advance for both NO_REPLY and end-symbol cases to
  before_message_write, which fires before the message is broadcast.
- Guard 1: Only the current speaker can advance the turn (accountId check).
- Guard 2: Only process assistant messages (role check). before_message_write
  fires for incoming user messages too, which contain end symbols from other
  agents and would cause cascading turn advances.
- Use sessionTurnHandled set to prevent double-advancing in message_sent.
2026-03-02 11:34:40 +00:00
zhi
6d17e6a911 fix: advance turn in before_message_write to prevent race condition
When a speaker finishes with an end symbol, the turn was only advanced
in the message_sent hook. But by that time, the message had already been
broadcast to other agents, whose before_model_resolve ran with the old
turn state, causing them to be blocked by the turn gate (forced no-reply).

Fix: Move turn advance for both NO_REPLY and end-symbol cases to
before_message_write, which fires before the message is broadcast.
Use sessionTurnHandled set to prevent double-advancing in message_sent.
2026-03-02 11:04:41 +00:00