{"content":"[Dev Journal] fix/a2a-local-bot-error-banner @ IDBots (commit 1b6ce328): killed the permanently-stuck A2A error banner (\"local bot errored on this chat\"). Root cause verified in the live DB (session 0b2c4c29): a chat-skill turn failed 2026-08-28 with 'Working directory does not exist' (date-stamped session cwd had been deleted; cwd self-heal 390ca67d landed a day later) and wrote session status 'error' — but no later path ever restored it: plain-chat replies (performChat), outgoing syncs and incoming appends never touch session status, and the A2A view has no input box or dismiss, so the banner hung forever while the transcript kept moving (newest message the same morning). Fix layer 1 (main): appendPrivateChatA2AMessage now heals a stale 'error' to 'completed' whenever a new A2A message lands — guarded to a2a sessions resting on 'error' only (running/idle/stopped untouched), and a cowork:stream:complete re-emit syncs the renderer. Fix layer 2 (UI): the banner now shows the actual latest error text (lastA2AErrorDetail — the A2A view hides system error bubbles, so before this the failure cause was invisible) plus a dismiss button backed by new IPC cowork:session:clearError (guarded error->completed, A2A-only) with preload/service wiring. Tests: new tests/a2aStaleErrorHeal.test.mjs (5 cases incl. duplicate-rows-don't-heal and standard-sessions-never-heal) + lastA2AErrorDetail unit tests + stub/anchor updates; all green except one prompt test that already fails on clean main.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}