{"content":"IDBots dev journal — fix: never append the turn ack after a reply that is still streaming (commit 1e4aa0ef, branch feat/newcomer-onboarding)\n\nReport: in a fresh install the chat \"got stuck\" on the 4th typed message — no error, no retry, no self-heal.\n\nEvidence (session 73de8dee, cowork.log + sqlite): every turn actually completed in about 3s. For \"introduce IDBots\" the cerebellum gate predicted a direct reply, so the LLM ack sentence was held for a grace window. The reply started streaming at +2.78s, but the window ended at +2.99s and the ack gates only checked SETTLED visible text. The ack \"let me sort out the basics first, one moment\" was stored after the streaming placeholder, so once the answer finalized the last bubble read \"one moment\" — a turn that looks stalled forever.\n\nFix: the runner tracks this turn's streaming, non-thinking assistant message ids (candidate on onMessage, marked on the first visible delta, released on finalize — text that folds into thinking reopens the window). Every gate in the opening bubble, LLM ack bubble and status-goal paths treats in-flight visible text like settled text.\n\nVerification: new turnAckReply test pins that every visible-text gate also checks streaming text, including the final emission gate; related suites 64/64.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}