8c6627638e
note_turn_start kept its in-flight marker on the agent object, but the gateway caches agents per routing key (_agent_cache) while transcripts are owned by session_id — and switch_session (/resume from a second surface, CLI-continuity rebinding, async-delegation pinning, topic-binding tip-walks) maps multiple routing keys onto one session_id without any cross-key check. Two keys mapped to one session run concurrent turns on two different agent objects, so the per-agent tripwire could never fire for exactly the dispatch route #64934 is waiting to identify. Add a module-level session_id-keyed in-flight registry alongside the per-agent marker. Same philosophy as the original tripwire: log-only, takes ownership on overlap, under-reports rather than double-reports (a same-agent overlap warns once, not twice). The persist-time clear pops the session id stamped at turn start, so a mid-turn compression rotation of agent.session_id cannot strand the slot.