# Client-Integration: `refreshKey` ersetzen Type: prototype Status: resolved Blocked by: — Parent: ../map.md ## Question Wie sieht der Frontend-State aus, wenn Nachrichten gepusht statt nachgeladen werden — und wie fühlt sich das bei N gleichzeitig verbundenen Servern an? Ein Prototyp, kein Produktionscode. Ziel ist, an etwas Konkretem zu sehen, ob das Zustandsmodell trägt, bevor die Spec es festschreibt. ### Ausgangslage `ChatPage.tsx` hält heute `refreshKey` als Zähler und reicht ihn an `MessageList` durch; `MessageInput` zählt nach dem Senden hoch. Das ist der Hack, dessen Verschwinden den ganzen Effort motiviert. **Zugeschnitten am 14.08.2026** durch [*Wo lebt die WS-Verbindung im Client*](05-wo-lebt-die-ws-verbindung.md): die Verbindung und der Backfill liegen in Rust, das Frontend hat **keine Cursor-Logik** und kein Debouncing. Es bekommt aufgelöste Entitäten per `emit` plus ein separates `resync`-Signal. Das schrumpft dieses Ticket erheblich — und verschiebt eine Frage hierher: **soll Rust für Conversations nachladen, die gar nicht sichtbar sind?** Das weiß nur das Frontend, also muss es diese Information nach unten reichen. ### Zu klären - **Zustandsform.** Wo leben Nachrichten — pro Conversation gecacht, oder nur die gerade offene? Was passiert beim Wechsel zwischen Conversations? Braucht es überhaupt eine State-Bibliothek, oder reicht React-State plus ein Cursor pro Conversation? - **Ungelesen-Anzeige.** Der Dumb-Pipe-Event trifft auch für Conversations ein, die nicht offen sind. Wird dann nachgeladen (kostet Requests) oder nur ein Punkt gesetzt und erst beim Öffnen geladen? Zweiteres wirkt richtig — am Prototyp prüfen. - **Optimistisches Senden.** Erscheint die eigene Nachricht sofort, und wie wird sie mit der später gepushten Version zusammengeführt, ohne zu doppeln oder zu springen? - **Multi-Server im UI.** N Server heißt N Conversation-Listen, N Verbindungszustände, N Fehlerfälle. Wie sieht das aus, wenn ein Server nicht erreichbar ist, während die anderen laufen? Das ist der Punkt, an dem das Multi-Server-Modell konkret wird. - **Verbindungszustand sichtbar machen.** „Verbunden", „reconnecting", „offline" — was sieht der Nutzer, und wo? - **Koaleszenz.** Zehn Events in zwei Sekunden sollen einen Fetch auslösen, nicht zehn. Wo sitzt das Debouncing, und mit welcher Verzögerung fühlt es sich noch sofort an? ### Erwartetes Ergebnis Ein Wegwerf-Prototyp, der die Zustandsform greifbar macht, plus eine kurze Notiz, was er über das Zustandsmodell gezeigt hat. Der Prototyp wird als Asset verlinkt, nicht in die Antwort kopiert. --- ## Answer Entschieden am 14.08.2026. **Asset:** `PROTOTYPE-frontend-zustandsmodell.html` im Repo `rustification-client`, auf dem Wegwerf-Branch `prototype/frontend-zustandsmodell` (bewusst nicht auf `master`) — eine eigenständige HTML-Datei, im Browser zu öffnen. Freies Ausprobieren plus sechs geführte Durchläufe. Der Reducer im ersten `