Crash-Fix:
- src/db.rs:801 panickte mit "byte index 240 is not a char boundary"
mitten in einem ✅-Emoji → SIGABRT. Neues strutil-Modul mit
safe_truncate()/safe_truncate_ellipsis() (5 Tests grün), an allen
&s[..N]-Stellen in db/claude/knowledge/session/memory.rs eingebaut.
- update.rs: Stale Lock-Files vom letzten Crash werden jetzt
protokolliert ("🧹 Stale Lock-Datei aus vorherigem Crash gefunden").
Chat-Polish:
- Input-Textfeld wird nach Senden zuverlässig geleert (Store-Reset +
DOM-Reset + tick — Svelte 5 bind:value mit Auto-Subscription
aktualisiert sonst nicht synchron).
- ApprovalBar.svelte (NEU): Sticky-Bar überm Input mit klar
beschrifteten Buttons "Übernehmen"/"Verwerfen" statt mehrdeutigem
"Behalten/Zurueck". Bleibt sichtbar wenn der Chat scrollt. Klick
auf Datei-Name scrollt zur Inline-Karte und blinkt sie. Shortcuts
Ctrl+Enter/Ctrl+Backspace.
- MessageList: Auto-Scroll trackt jetzt auch toolCalls.length und
Status-Änderungen, plus ResizeObserver am Container. Smooth bei
kleinen Distanzen, instant bei großen.
- Streaming-Caret: pulsierender Block-Cursor mit Glow-Shadow.
- Tool-Cards: Slide-In-Transition + Shimmer-Animation auf running.
- WorkingIndicator: Verb passt sich an processingPhase an.