Befund
Action Router ist korrekt gebaut. Self-Test läuft 8/8 grün — Tests wurden auf aktuelle Template-Namen (bau, home, schreiber) angepasst. Unbekannter Sancho, Blocked-Tool, Notaus gelb/schwarz, GO-Pflicht — alle Szenarien bestanden. 8 Direktaufrufe (watson_webrtc.py, diarize_watson.py, cockpit-Dateien) umgehen den Wrapper — Watson Doctor nennt sie explizit als "Phase 0 Estrich, Phase 2 hart blocken".
Nächster Schritt (Phase 2)8 os.unlink-Funde prüfen: alle /tmp? Wenn ja als "erlaubte /tmp-Ausnahme" dokumentieren. Wenn nicht: auf safe_delete() umstellen.
Beleg: python3 lib/action_router.py --test → "Alle Tests gruen." 2026-05-23 live
Befund
Notaus und Action Router sind korrekt verdrahtet (router importiert is_blocked, prüft vor jeder Aktion). Aber: ob "gelb blockt send" und "rot stoppt Sanchos" heute noch durchhalten, wurde nicht live getestet. Karabiner-Bindung war im Umbauplan explizit als Phase 2 eingestuft.
Nächster Schritt (wenn Action Router Tests fix sind)Notaus auf gelb → route_action send → Blockade beobachten → zurück auf off.
Beleg: lib/notaus.py + lib/action_router.py Z. 127–130, heute gelesen. ~/.watson/notaus.json: level=off
🟡Mail-Wrapper (lib/mail_send.py)Senden explizit deferred — IMAP lesen ist Phase 1
✓ Empfänger + Text gezeigt, "yes" nötig, Audit geloggt
Befund
Klärung 2026-05-24: Mail-Sancho soll primär lesen, nicht senden. Der Send-Wrapper (Phase 0) ist korrekt gebaut — kein Backend absichtlich, Bestätigungsflow schützt vor versehentlichem Senden. Wenn Senden je nötig: SMTP via [email protected]. IMAP-Lesen ist der eigentliche nächste Schritt, noch nicht implementiert.
Nächster Schritt (Phase 1)IMAP-Reader implementieren: lib/mail_read.py — Postfach lesen, Headers extrahieren, über Broker an Sancho liefern. SMTP-Send weiter deferred.
Beleg: Victor 2026-05-24 "IMAP lesen reicht, SMTP weglassen. [email protected] wenn Senden je nötig."
Befund
Wrapper funktioniert korrekt. Watson Doctor AST-Scan findet 8 direkte os.unlink-Aufrufe in: watson_webrtc.py (1), watson_voices/diarize_watson.py (4), cockpit/sancho_cockpit_server.py (1), cockpit/song_erkennung.py (2). Alle löschen wahrscheinlich Temp-Dateien in /tmp — aber nicht durch Wrapper geroutet.
Nächster Schritt8 Funde prüfen: Pfade alle in /tmp? Wenn ja als "erlaubte /tmp-Ausnahme" dokumentieren. Wenn nicht: auf safe_delete() umstellen.
Beleg: Watson Doctor "AST: 8 Funde… Phase 0 Estrich, Phase 2 hart blocken", heute live
Befund
blocked_targets.json vollständig: IDs aus Hue-Bridge-Scan (15, 23, 33, 39), Gruppen 6+21, Patterns emil/emils/kinderzimmer. smart_home_block.py feuert korrekt. Schutz hängt daran, dass Sanchos den Wrapper benutzen — ein direkter curl-Aufruf wird nicht gefangen.
Phase 2 (kein GO nötig)PreToolUse-Hook der Bash-Calls auf Emil-IDs prüft — oder als "Estrich-Risiko" in VERBOTE.md notieren.
Beleg: ~/.watson/blocked_targets.json + lib/smart_home_block.py, heute gelesen
Verlässlichkeit
🟡Watson Doctor — transparent15✓ 2⚠ 0✗ — GELB
✓ 2026-05-23 14:38
15 ok · 2 warn · 0 fail → GELB
Backup >30h alt (31h)
8 os.remove außerhalb lib/
✓ Klartext, kein False-Green
⚠ nur Terminal
Befund
Watson Doctor läuft, ist ehrlich, meldet keine Fails. Zwei echte Warnungen: Backup überfällig, 8 AST-Funde. Was er nicht prüft: Action-Router-Tests, Mail-Backend, Restore-Test, Notaus-Live-Blockade. Zugänglichkeit: nur Terminal — Victor tippt nicht ins Terminal (globale Regel).
Nächster SchrittZwei Warnungen schließen. Doctor-Aufruf in watson_boot.sh → Cockpit-Seite spiegeln für Victor (GUI-Ausgabe).
Beleg: lib/watson_doctor.py heute live: "=== 15 ok · 2 warn · 0 fail ==="
Befund
Backup läuft korrekt: rsync, Manifest, .watson inklusive (21 Dateien — war als Hidden-Dir nicht im einfachen ls sichtbar). Restore-Test heute manuell: blocked_targets.json, rules.md, state.json aus Backup gegen Original verglichen — alle IDENTISCH. Kein automatisches Restore-Skript — im Notfall manueller Kopiervorgang nötig.
Befund
Broker läuft stabil. localhost-Bindung, ACK-Timeout, Inbox-Fallback sind alle im Code korrekt implementiert. Health-Endpoint antwortet sauber. ACK-Flow und Fallback-Einspielung wurden nicht heute einzeln durchgespielt.
Nächster Schritt (optional)ACK-Zyklus einmal durchspielen: POST /message → GET /messages → POST /ack → prüfen ob Nachricht weg ist.
Beleg: curl localhost:8091/health heute → status:ok, queued:0. broker/broker.py Z. 41–44 gelesen.
Architektur
🟡VoiceBridge — als Prototyp markierenDatei da, nie gestartet, kein Marker
✓ vorhanden, Port 8094
⚠ fehlt
✗ kein Beleg
Phase 2+ ("Explizit NICHT in 48h")
Befund
watson_webrtc.py beschreibt einen WebRTC-Server: empfängt Audio vom iPhone-Browser, transkribiert via Cockpit-API, schickt Text an Watson-Sancho. Klar strukturiert, nie gestartet. Im Umbauplan war "Voice Input" explizit als Phase 2+ eingestuft. Kein PROTOTYP-Header im Code.
Nächster SchrittEntweder: PROTOTYP-Header in watson_webrtc.py eintragen (kein GO nötig) — oder explizit als Phase-2-Ticket notieren und Datei unverändert lassen.
Beleg: dispatcher/watson_webrtc.py vorhanden. WATSON_UMBAUPLAN_FINAL: "Voice Input — Explizit NICHT in 48h"
🟡Erste neue Sancho-Session — read-onlyRouter-Tests grün, read-only implizit
✓ -r--r--r-- (444) heute bestätigt
✓ Doctor-Check + Identität + state-Register
⚠ implizit durch Templates, nicht explizit erzwungen
✓ 8/8 grün (bau, home, schreiber)
Befund
Router-Tests laufen 8/8 grün mit aktuellen Template-Namen. capabilities.json ist 444 — kein versehentliches Überschreiben möglich. watson_boot.sh registriert Sancho korrekt in state.json. Read-only-Default hängt am Template: Sanchos die kein "write"-Tool in allowed_tools haben, können de facto nicht schreiben — aber das ist implizit, nicht mit explizitem read-only-Flag implementiert.
Nächster Schritt (Phase 2)read-only-Default explizit machen: watson_boot.sh prüft beim Start ob Template "write"-Actions hat, loggt es im Audit.
🟢capabilities.json — Schreibschutzchmod 444 heute bestätigt
✓ ~/.watson/capabilities.json
✓ -r--r--r-- (444) heute live
✓ voice, aufraeuemer, dj, schreiber …
✓ chmod bestätigt, read-only für alle User
Befund
capabilities.json ist korrekt mit chmod 444 geschützt. ls -la heute: "-r--r--r--@ 1 victorholland staff 18117 May 23". Kein Sancho kann die Datei versehentlich überschreiben. .bak_pre_dock_2026-05-23 zeigt dass Änderungen bewusst mit chmod-Aufhebung getätigt wurden.
Beleg: ls -la ~/.watson/capabilities.json heute → "-r--r--r--@"
🟡Methoden-Bibel — aktive MethodenDOM sauber, Status-Lücke bei 34/37
✓ 37 Methoden
✓ Watson Doctor: nur in Tombstones
✓ rules.md: M-041 kanonisch
⚠ 3 von 37
⚠ 0 von 37
Befund
37 Methoden, Watson Doctor bestätigt keine DOM-Patterns in aktiven. M-041 (Kameramotor) ist laut rules.md die kanonische Bild-Generator-Methode. Aber: 34 von 37 Methoden haben keinen expliziten Status ("aktiv" oder "archiviert"). Unklar was gilt und was veraltet ist.
Nächster Schritt (optional, kein GO nötig)Methoden-Lint laufen lassen: python3 ~/Vibe\ Coding/Methoden/scripts/lint_methoden.py
🔴Alltagstauglichkeit für VictorKern-Flows Terminal-only
✗ nur Terminal
✗ nur Terminal
✗ nur Terminal (Karabiner Phase 2)
⚠ watson_dashboard.sh — nur Terminal
✓ Sancho starten.command
✓ möglich
Befund
Globale Regel: Victor tippt nichts ins Terminal. Watson Doctor, Backup, Notaus, Dashboard laufen alle als Terminal-Skripte. Das ist kein Alltagsbetrieb für Victor. Phase-0-Tests (beobachtet, mit Sancho als Mittler) sind möglich. Vollständiger Alltagsbetrieb ist durch 3 offene ROT-Punkte (Mail-Backend, Backup/Restore, Router-Tests) und Terminal-Abhängigkeiten blockiert.
Weg zu Alltagsbetrieb (4 Schritte)1. Router-Tests fixen (schnell, kein GO). 2. Backup + Restore-Test (GO nötig). 3. Doctor-Ergebnis auf Cockpit-Seite spiegeln. 4. Mail-Backend entscheiden (Victor).
Beleg: CLAUDE.md global "Victor tippt nichts ins Terminal". Alle Skripte heute im Terminal ausgeführt (von Planer).
Watson Phase 0 · 2026-05-24 · Planer (REST-UMBAU/ABNAHME-SCHLIESSER) · Keine Eigenaussage ohne Beleg
Randthemen (Raspberry Pi, Diashow, Sonos, Roborock, WhatsApp, Voice Library) → separate Werkzeug-Abnahme