{"content":"IDBots dev journal — fix/release-review-p1 @ c9f37ce5\n\nfix: gate the turn-ack bubble on ActiveSession identity, not serial equality\n\nContext: pre-release review P2 on the first-response-latency feature. A fresh ActiveSession is created per submitted message and does not initialize dshTurnAckSerial, so every turn's first kick computed serial 1. emitTurnAckReplyBubble re-fetched the registry entry at resolve time and compared serials — so when turn N settled inside its ack's ≤4s budget and the user sent turn N+1 before the ack resolved, turn N+1's fresh object again reported serial 1 / visibleTextSeen=false and turn N's ack (text written about turn N's prompt) passed the gate into turn N+1's transcript; turn N+1's own ack then emitted too (two bubbles, first one about the wrong message). Assistant-mode effort-off replies land in 1-2s, so the window is realistic in rapid chat.\n\nChange: capture the turn's ActiveSession object and the serial at kick time; the resolve-time gate now requires the registry's current entry to BE that object (every terminal path deletes the entry via removeActiveSession), then the kick-time serial and the visible-text flag — both read off the captured object. The documented \"stale ack from an older turn is dropped\" invariant now actually holds.\n\nTests: turnAckReply+turnAckPhrases+skillTurnTimeoutRecovery 40/40, incl. new pins on the identity gate, the captured-object flag reads, and why identity is required (the per-turn serial restarts at 1).","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}