048d231b60
Symptom: Ohr aktiv, App im Hintergrund (jetzt mit Foreground-Service permanent lebendig), nach laengerer Zeit oeffnet Stefan die App und sie nimmt schon auf — angeblich Wake-Word getriggert. War aber TV/Husten/ sonstige Hintergrund-Geraeusche waehrend Stefan nicht da war. Mit dem neuen Hintergrund-Modus laeuft openWakeWord jetzt permanent und faengt jedes False-Positive im Hintergrund auf. Ohne dieser Fall war das nicht moeglich weil die JS-Engine pausiert war. Fix: Heuristik beim AppState-Resume in ChatScreen.tsx - backgroundDauer wird gemerkt (lastBackgroundAt vs Resume-Zeit) - Wenn >30s im Hintergrund UND state='conversing' UND letzter Wake- Trigger juenger als 15s: false-positive — Aufnahme abbrechen + zurueck zu armed - Resume-Cooldown 1500 → 3000 ms (Audio-Spikes beim AppState-Switch haben gelegentlich nach 1.5s noch nicht verklungen) Neue Methoden: - wakeword.ts: lastTriggerAt-Tracking + discardIfFreshlyTriggered(maxAge) - audio.ts: cancelRecording() — bricht recorder ab ohne Result zu emittieren, loescht die Audio-Datei Setzt voraus dass Stefan nicht laenger als 30s im Hintergrund mit ARIA spricht ueber Wake-Word. Falls doch: bei Resume waere die Aufnahme weg und er muesste nochmal triggern. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>