11b205ddaf
Bug-1: _append_chat_backup nutzte asyncio.get_event_loop().time() — das ist Container-Monotonic (bei Restart wieder 0), NICHT UNIX-Zeit. Bridge schrieb so Eintraege mit ts wie 394M (=6.5 min Uptime), App-side generiert User-Bubbles mit Date.now() = 1.778e12. Beim Sortieren in der App: Server-Bubbles landeten alle als "uralt" (kleine ts) ueber den lokalen Bubbles und teilweise unter dem 500er-Cap raus — Symptom: "alles nach Hello Kitty fehlt in der App". Fix: _append_chat_backup nutzt jetzt time.time() * 1000 (UNIX-ms). Bug-2: doppelte User-Bubble nach App-Hintergrund/Restart mit Retry-Knopf. Race-Fix von vorhin (text+timestamp-Heuristik, 5-Min-Fenster) griff nicht weil bei kaputten Server-ts (394M) und lokalen UNIX-ms (1.778e12) das Diff 1.7 Billionen ms war → Fenster nie zutreffend → lokale Bubble blieb als Duplikat. Fix: Text-Match alleine reicht — wenn der Server irgendwo eine textgleiche User-Bubble hat, ist es dieselbe Nachricht. Greift jetzt unabhaengig von ts-Konsistenz. Plus: tools/migrate_chat_backup_ts.py — repariert vorhandene jsonl (284 von 299 Eintraege auf der VM hatten Container-Uptime-ts). Datei- Reihenfolge bleibt erhalten (war eh chronologisch), ts werden ab File- Mtime rueckwaerts 60s-Schritten vergeben. Idempotent, .bak-Backup. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
tools/
Hilfsskripte für die Dev-Maschine. Brauchen .claude/aria-vm.env (aus
.example kopieren + lokale VM-IP eintragen).
fetch-app-logs.sh
Holt App-Crash-Logs von der VM und speichert sie unter .aria-debug/
(gitignored). Die App schickt JS-Errors und ungefangene Promise-
Rejections via RVS an die Bridge — Bridge sammelt in
/shared/logs/app.log, Diagnostic-Server gibt sie via
GET /api/app-log raus.
tools/fetch-app-logs.sh # 200 neueste Eintraege
tools/fetch-app-logs.sh --limit 50 # weniger
tools/fetch-app-logs.sh --watch # alle 5s pollen, neue rausgeben
tools/fetch-app-logs.sh --clear # nach Abholen Log auf VM leeren
Ausgabe enthaelt pro Eintrag: Uhrzeit, Level (error/warn/info), Scope
(z.B. ChatScreen.InboxModal oder global-fatal), Message, und die
ersten ~8 Stack-Frames. Die kompletten Daten liegen als JSON in
.aria-debug/app-log-<timestamp>.json.
Workflow nach einem Crash:
- App rebuilden mit Crash-Reporting (passiert automatisch ab dem
21a315c-Commit) - Crash in der App ausloesen
tools/fetch-app-logs.shauf der Dev-Maschine- Stacktrace lesen / Claude geben
- Fix bauen
tools/fetch-app-logs.sh --cleardamit der Log wieder sauber ist