Hermes-Lauf: Maximale Laufzeit des Watchdogs einstellbar, Abbruchgrund anzeigen #333
Labels
No labels
herkunft/alpha-feedback
status
blockiert
status
zu-testen
typ
bug
typ
docs
typ
enhancement
typ
feature
typ
idea
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
iris/Iris#333
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
Der Circuit Breaker
HermesRunWatchdogstoppt jeden Hermes-Lauf nach 45 Minuten Gesamtdauer (maxTotalRunDuration, fest einprogrammiert), auch wenn der Lauf Fortschritt macht. Lange Läufe (Recherche an einem Arcade-ROM mit dem Plugin iris-rea-recherche, lokales Modell mit 40 bis 80 s je API-Aufruf) brechen deshalb alle 45 Minuten mit „⏹️ Hermes-Job abgebrochen." ab, ohne dass der Nutzer erfährt, warum.Belegt im Log des MacBooks (
~/.hermes/logs/agent.log, 2026-11-06): Läufe 16:06:09 → 16:51:45, 16:52:26 → 17:37:48, 17:38:17 → 18:23:50, jeweilsPOST /v1/runs/<id>/stopvon Iris nach 45:22 bis 45:36 Minuten, während der Lauf normal Tools aufrief und Dateien schrieb.Warum
Der Watchdog soll hängende Läufe und Endlosschleifen begrenzen (Vorfall 2026-08-05). Eine feste Grenze trifft aber auch legitime lange Arbeit. Nach der Regel „nie Settings hardcoden" gehört der Wert in eine Einstellung.
Umfang (Weg 1)
Nicht im Umfang
Fortschrittsbewusster Timer (Weg 2); Linux-Server (hat keinen solchen Watchdog).
PR #334 gemergt: feat(hermes): Maximale Laufzeit des Watchdogs einstellbar, Abbruchmeldung nennt den Grund (#333)
http://docker:3000/iris/Iris/pulls/334
Commits:
Stand: umgesetzt (Weg 1), gebaut nur als Quelltext, nicht in der App.
Befund:
HermesRunWatchdog.maxTotalRunDurationwar fest 45 Minuten. Im Log des MacBooks (2026-11-06) stoppte Iris drei Läufe (16:06→16:51, 16:52→17:37, 17:38→18:23) nach 45:22 bis 45:36 Minuten perPOST /v1/runs/<id>/stop, obwohl sie Tools aufriefen und Dateien schrieben. Die Meldung „Hermes-Job abgebrochen." nannte keinen Grund.Geändert:
Iris/HermesRunLimits.swift(nur Foundation): SchlüsselhermesMaxRunMinutes, Standard 45, Auswahl 30/45/60/120/240/480 Minuten, gespeicherte Werte werden auf 10 Minuten bis 24 Stunden begrenzt (ein Wert von Hand kann den Schutz nicht abschalten).HermesRunWatchdog: liest die Grenze bei jeder Prüfung (gilt auch für laufende Läufe), merkt sich den Stoppgrund vor dem Stopp (takeTripReason).AgentJob: die Meldung nach einem Watchdog-Stopp nennt den Grund und den Hinweis auf die Einstellung (vorher nur „abgebrochen").CompanionPanelView: Picker „Maximale Laufzeit“ unter Sonstiges;Localizable.xcstringsmit den deutschen Texten.Geprüft: Die Rechnung von
HermesRunLimitsmitswiftcund einem kleinen Testprogramm außerhalb der App (12 Prüfungen: Standard bei fehlendem Wert, Unter- und Obergrenze, Sekunden, Auswahlliste mit Sonderwert, Beschriftung, Meldung); mit ausgebauter Klammerung schlagen die Grenzfälle fehl.swiftc -typechecküberHermesRunLimits,HermesRunWatchdog,HermesGatewayClientundIrisConfig: keine Fehler in den geänderten Dateien (Fehler nur durch fehlende Nachbardateien).Localizable.xcstringsbleibt gültiges JSON.Nicht geprüft: Bauen der App (
xcodebuildim Terminal ist ausgeschlossen, TCC); die Änderungen inAgentJob.swiftundCompanionPanelView.swiftwurden nicht typgeprüft und die Oberfläche nicht angesehen; ein echter Lauf über die Grenze (Stopp mit Grund) auf dem MacBook; dass der Picker einen Wert wirklich speichert und der Watchdog ihn beim nächsten Poll nutzt. Der Lauf auf dem MacBook läuft mit dem alten Build, bis dort ein neuer Build installiert ist.Offen: Weg 2 (fortschrittsbewusster Timer: nur Läufe stoppen, die keine neuen Ergebnisse liefern).