From 041ede7f8d790f9f239286bdedf614945a96223a Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Fri, 28 Aug 2026 10:04:08 +0200 Subject: [PATCH] =?UTF-8?q?fix(agent):=20Zeitstempel=20mit=20Zeitzone=20?= =?UTF-8?q?=E2=80=94=20die=20Ampel=20hatte=20recht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Ampel wurde ROT: ruff DTZ007, `datetime.strptime()` ohne Offset in services/agent_aktivitaet.py. Lokal war alles gruen, weil ich ruff nicht laufen liess — nur py_compile, tsc, vitest und den Build. Mein Fehler, nicht der der Regel. Und die Regel ist keine Schikane: AGENTS.md haelt fest, dass naive Zeiten ueber MC_LOCAL_TZ aufzuloesen sind, nie zu raten. Hermes schreibt Ortszeit ohne Offset; das so durchzureichen waere bequem gewesen (der Klient zeigt sie nur an) — aber sobald jemand spaeter damit RECHNET (Dauer ueber Mitternacht, Abgleich mit einem Cron-Plan), waere es eine Falle, die erst zur Zeitumstellung zuschnappt. vorher: 2026-08-28T07:03:18 jetzt: 2026-08-28T07:03:18+02:00 Gegengeprueft am echten Box-Log; die Anzeige schneidet weiterhin Stelle 11-19 heraus und zeigt unveraendert 07:03:18. `ruff check .` laeuft jetzt ueber das ganze Repo sauber durch — ab hier gehoert es vor jeden Commit, der Python anfasst. Co-Authored-By: Claude Opus 5 --- backend/services/agent_aktivitaet.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/backend/services/agent_aktivitaet.py b/backend/services/agent_aktivitaet.py index 3ba5115..44ffce6 100644 --- a/backend/services/agent_aktivitaet.py +++ b/backend/services/agent_aktivitaet.py @@ -25,9 +25,13 @@ import os import re from datetime import datetime from pathlib import Path +from zoneinfo import ZoneInfo log = logging.getLogger(__name__) +# Die Box läuft in Europe/Berlin (AGENTS.md). Hermes' Log trägt Ortszeit ohne Offset. +LOCAL_TZ = ZoneInfo(os.environ.get("MC_LOCAL_TZ", "Europe/Berlin")) + LOG_PFAD = Path(os.path.expanduser( os.environ.get("MC_HERMES_AGENT_LOG", "~/.hermes/logs/agent.log"))) @@ -109,10 +113,16 @@ def rufe(limit: int = 60) -> list[dict]: def _iso(s: str) -> str: - """`2026-08-28 07:03:18` → ISO. Die Box läuft in Europe/Berlin; die Zeit bleibt naiv, - weil der Klient sie ohnehin nur anzeigt und nicht rechnet.""" + """`2026-08-28 07:03:18` → ISO MIT Zeitzone. + + Hermes schreibt seine Log-Zeitstempel in Ortszeit ohne Offset. Die naiv zu lassen + wäre bequem (der Klient zeigt sie nur an) — aber genau daran hängt eine + Projektregel: Naive Zeiten werden über MC_LOCAL_TZ aufgelöst, nie geraten + (AGENTS.md; ruff DTZ007 erzwingt es). Sobald jemand später damit rechnet — Dauer + über Mitternacht, Vergleich mit einem Cron-Plan — wäre eine offsetlose Zeit eine + Falle, die erst zur Zeitumstellung zuschnappt.""" try: - return datetime.strptime(s, "%Y-%m-%d %H:%M:%S").isoformat() + return datetime.strptime(s, "%Y-%m-%d %H:%M:%S").replace(tzinfo=LOCAL_TZ).isoformat() except ValueError: return s