Logpy-AgentOne/pipe
Jeuner 3749d60aa4 fix: Watcher griff Aufnahmen mitten im Schreiben (Race Condition)
Der Fehler "[Errno 2] No such file or directory: '...stt_out_*.json'"
sah wie ein Transkriptions-Bug aus, war aber ein Timing-Problem:
_fertig() prüfte nur, ob die Dateigröße 2 Sekunden (RUHE_S) unveraendert
blieb - eine normale Sprechpause reicht dafuer schon aus, waehrend
FreeSWITCH den Anruf noch aktiv aufnimmt. Belegt im Verlauf-Log: die
Aufnahme wurde um 10:15:56 als "fertig" gegriffen, der Anrufer legte laut
Log aber erst um 10:16:01 auf.

ffmpeg/whisper-cli lasen dabei einen mitten im Schreiben befindlichen
RIFF-Header, produzierten keine Ausgabe, und process_call brach mit einem
FileNotFoundError auf die erwartete JSON-Datei ab. Die Original-Audiodatei
selbst blieb dabei unbeschaedigt (FreeSWITCH schrieb einfach in die schon
nach telefon/fehler/ verschobene Datei weiter) - deshalb sah eine manuelle
Nachpruefung der "kaputten" Datei immer intakt aus und liess sich nicht
reproduzieren.

_fertig() prueft jetzt zusaetzlich per `lsof -t`, ob noch ein Prozess die
Datei offen haelt - nur wenn weder die Groesse waechst noch ein Handle
offen ist, gilt die Aufnahme als abgeschlossen.

Nebenbei: tempfile.mkstemp() in transcribe.py gab einen offenen File-
Descriptor zurueck, der nie geschlossen wurde (fd-Leak in beiden
Tempdatei-Erzeugungen) - behoben.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PuP3zfgYqhnrwyEne2ejG7
2026-08-23 10:25:22 +02:00
..
__init__.py Praxis-Telefon-Agent: Anrufannahme, Transkription, Triage — vollständig on-prem 2026-08-22 22:37:17 +02:00
categorize.py Praxis-Telefon-Agent: Anrufannahme, Transkription, Triage — vollständig on-prem 2026-08-22 22:37:17 +02:00
config.py feat: Kontakt-Abgleich gegen Nextcloud-Adressbuch bei eingehenden Anrufen 2026-08-23 02:18:51 +02:00
dashboard.py Praxis-Telefon-Agent: Anrufannahme, Transkription, Triage — vollständig on-prem 2026-08-22 22:37:17 +02:00
deck.py Praxis-Telefon-Agent: Anrufannahme, Transkription, Triage — vollständig on-prem 2026-08-22 22:37:17 +02:00
kontakte.py feat: Kontakt-Abgleich gegen Nextcloud-Adressbuch bei eingehenden Anrufen 2026-08-23 02:18:51 +02:00
process_call.py feat: Kontakt-Abgleich gegen Nextcloud-Adressbuch bei eingehenden Anrufen 2026-08-23 02:18:51 +02:00
protokoll.py Praxis-Telefon-Agent: Anrufannahme, Transkription, Triage — vollständig on-prem 2026-08-22 22:37:17 +02:00
resync.py feat: Kontakt-Abgleich gegen Nextcloud-Adressbuch bei eingehenden Anrufen 2026-08-23 02:18:51 +02:00
server.py feat: Kontakt-Abgleich gegen Nextcloud-Adressbuch bei eingehenden Anrufen 2026-08-23 02:18:51 +02:00
stapel.py feat: "Tag archivieren"-Button im Leitstand (simuliert) 2026-08-23 01:35:22 +02:00
store.py feat: Kontakt-Abgleich gegen Nextcloud-Adressbuch bei eingehenden Anrufen 2026-08-23 02:18:51 +02:00
transcribe.py fix: Watcher griff Aufnahmen mitten im Schreiben (Race Condition) 2026-08-23 10:25:22 +02:00
watch.py fix: Watcher griff Aufnahmen mitten im Schreiben (Race Condition) 2026-08-23 10:25:22 +02:00