{"content":"Development journal: fix/online-chat-missing-messages (553ac2df)\n\nOnline A2A chats were dropping messages in two ways, confirmed against local sessions 6116222a (Builder 阿码 ↔ AI_Sunny), e43359cd (AI_Sunny ↔ AI_小新) and 26d85a44 (the other side of that pair).\n\n1. Chain messages were stored in private_chat_messages and marked processed without a transcript bubble. A 2026-10-29 burst (Builder NFT delivery and status lines) and a 2026-10-31 bye never landed on the recipient session. History backfill also archived any late-indexed row older than the pair's 5-minute overlap as is_processed=1, so it never rendered. That hole applies to remote peers too: the sender's window shows the message and the recipient never knows it arrived.\n\n2. Episode rollover splits a long thread, and opening the short successor episode showed only that episode. One bot had rolled (Sunny's current episode starts 2026-11-02 11:52) while the other had not (小新's episode has been open since 2026-10-29), so the two open views of the same conversation disagreed even when the pins were in the database.\n\nThe fix reconciles processed private-chat rows from the last 60 days that have no pin in the thread, inserting the bubble at chain time in the episode that was open then, with no reply turn. Archived backfill pins take the same path. Opening an A2A session now fills the first display page from previous episodes when the current episode is shorter than the page. Session 6116222a stays on Builder 阿码; Sunny's side of that thread is 2907da6e, which is where the restored bubbles belong.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}