Self-Heal-Watchdog für Hermes-Aufgaben-Dispatcher (M40 Bauteil #84).
Stand: 2026-05-27 Status: Bauteil-Mac (Reife-5), LIVE launchd (5min interval) Visibility: private Bauteil-ID: #84
Periodisch (alle 5min) prüfen ob der at.aie.hermes-aufgaben launchd-Job in
den letzten 40 Minuten gelaufen ist (Schedule = alle 30min, 10min Grace).
Wenn nicht: launchctl kickstart -k gui/<uid>/at.aie.hermes-aufgaben.
Bei 2x consecutive failed kickstarts: Joe-DM-Eskalation via MM_HOME_CHANNEL.
Pattern-Vorbild: ~/code-aie/hermes-mm-heal/ (#78).
| Code | Bedeutung |
|---|---|
| 0 | Dispatcher gesund (frischer Tick im Log) |
| 1 | War stuck, kickstart healed |
| 2 | Dispatcher-Log nicht lesbar |
| 3 | Kickstart fehlgeschlagen (oder healed nicht) |
| 4 | Eskaliert zu Joe (consecutive_fails >= 2) |
hermes-dispatcher-watcher/
├── src/
│ └── hermes_dispatcher_watcher.py # stdlib-only, Python 3.9+
├── tests/
│ └── test_dispatcher_watcher.py # 7 pure-function tests
├── at.aie.hermes-dispatcher-watcher.plist
├── README.md
└── LICENSE
# Tests
/usr/bin/python3 tests/test_dispatcher_watcher.py
# Manueller Run
/usr/bin/python3 src/hermes_dispatcher_watcher.py
echo "exit=$?"
# Logs
tail -20 ~/.hermes/dispatcher_watcher.log
cat ~/.hermes/dispatcher_watcher_state.jsoncp at.aie.hermes-dispatcher-watcher.plist ~/Library/LaunchAgents/
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/at.aie.hermes-dispatcher-watcher.plist
launchctl kickstart -k gui/$(id -u)/at.aie.hermes-dispatcher-watcher
launchctl print gui/$(id -u)/at.aie.hermes-dispatcher-watcher | grep -E "state|last exit"- Anti-Pattern A33 (KEIN-MOCK-ABSOLUT): echte Log-mtime + Log-Inhalt, kein Fake-Status.
- ISC2-CC-Framing: Block 11 (Defense-in-Depth), Block 14 (Risk-Treatment Mitigate), Block 17 (Incident-Response → Joe-DM bei 2x fail).
- Append-only Code: Refactor via DEC-Eintrag.
- Fallback-Chain (Regel 16):
- Probe-Fail → return exit 2 (kein false-restart)
- Kickstart-Fail 1x → state.consecutive_fails++, retry next tick
- Kickstart-Fail 2x → Joe-MM-DM + exit 4
- MM-Token missing → escalation skipped + WARN-log (kein silent-fail)
- Pattern-Vorbild:
~/code-aie/hermes-mm-heal/(#78) - Watch-Ziel:
~/hermes-docker/aufgaben/_dispatcher.py - Build-Beleg (raw):
~/kb/raw/2026-05-27-w84-h-hermes-dispatcher-watcher-bauteil.md - Bauteil-Inventar:
~/kb/ops/BAUTEILE-INVENTAR.md(Eintrag #84)
Proprietary — internal infrastructure. See LICENSE.