5c07aef526
Race-Bug nach Etappe 3: Beim Reconnect schickt die App parallel chat_history_request und (via flushQueuedMessages) die offline gestaute Nachricht. Die history_response kam an bevor die Bridge die Bubble in chat_backup.jsonl geschrieben hatte → Server-Liste ohne unsere Bubble → Merge ersetzte den lokalen Stand → Bubble weg (im Diagnostic war sie gleich danach drin). Bridge: _append_chat_backup nimmt clientMsgId mit auf. send_to_core reicht sie als kwarg durch (chat- und audio-Pfad). App: chat_history_response-Merge dedupt per clientMsgId. Lokale User- Bubbles deren clientMsgId der Server noch nicht kennt bleiben erhalten (localOnly-Filter erweitert). Server-User-Bubbles mit clientMsgId kriegen deliveryStatus='delivered' damit das ✓✓ auch nach Reload sichtbar bleibt. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>