From 2d95b0a334e0befd6d610294df7de344e6f62a07 Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Wed, 8 Jul 2026 17:46:39 +0200 Subject: [PATCH] Fix: Hermes-Update meldet Fehlschlag jetzt ehrlich (rc-Maskierung entfernt) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Befund 08.07.: 'hermes update' scheiterte real an einem verwaisten .git/index.lock (git stash exit 1), aber der Job wurde GRUEN — das ';' vor dem Dienst-Neustart (noetig, damit die gestoppte UI auch im Fehlerfall wieder hochkommt) schluckte den Update-Fehler, und der Postcheck bestand mit dem ALTEN Agenten. User sah 'done', Badge blieb (125 Commits Rueckstand). Neu: RC wird festgehalten, Dienste starten IMMER wieder, aber der Job uebernimmt den echten Update-RC und schreibt eine Klartext-Zeile ins Log. Lock auf der Box entfernt (Verwaisung von gestern 21:22, wie beim MC2-Repo). Co-Authored-By: Claude Fable 5 --- backend/services/maintenance.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/backend/services/maintenance.py b/backend/services/maintenance.py index 8bc0522..fc91097 100644 --- a/backend/services/maintenance.py +++ b/backend/services/maintenance.py @@ -711,14 +711,22 @@ def _hermes_update_cmd() -> str: f"&& rm -rf {hui_dist} && cp -r /tmp/h-build {hui_dist}; fi" ) - return (f"bash {backup} || true; " + # EHRLICHER Exit-Code (Lehre 08.07.): Die Dienste müssen auch bei einem GESCHEITERTEN + # Update wieder hochkommen (die UI wurde ja gestoppt) — aber der Job darf dann nicht + # grün sein. Früher schluckte das `;` vor dem Neustart jeden Update-Fehler: Job rc=0, + # Badge blieb, User sah „done aber nichts passiert" (Update scheiterte real an einem + # verwaisten .git/index.lock). Jetzt: RC festhalten, Dienste immer starten, RC melden. + return ("RC=0; " + f"bash {backup} || true; " f"systemctl --user stop hermes-builtin-ui || true; " - f"cd {path} && {py} -m hermes_cli.main update --yes " + f"{{ cd {path} && {py} -m hermes_cli.main update --yes " f"&& {py} -m hermes_cli.main doctor " - f"&& {build_cmd} " - f"&& systemctl --user reset-failed hermes-builtin-ui || true; " - f"systemctl --user restart hermes-gateway hermes-builtin-ui " - f"&& sleep 6 && bash {postcheck}") + f"&& {build_cmd}; }} || RC=1; " + f"systemctl --user reset-failed hermes-builtin-ui 2>/dev/null; " + f"systemctl --user restart hermes-gateway hermes-builtin-ui || RC=1; " + f"sleep 6; bash {postcheck} || RC=1; " + f"if [ $RC -ne 0 ]; then echo '✗ HERMES-UPDATE FEHLGESCHLAGEN (Dienste laufen wieder, aber alter Stand)'; fi; " + f"exit $RC") def hermes_update_job() -> dict: