morz-infoboard/docs/PLAYER-AGENT-LIFECYCLE.md
Jesko Anschütz 2c780d3e60 Dokumentiere Statusspeicherung und Connectivity-Zustaende
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-22 18:22:31 +01:00

3.3 KiB

Info-Board Neu - Player-Agent Lifecycle und Health-Modell

Ziel

Dieses Dokument beschreibt die erste belastbare Laufzeitstufe des player/agent fuer v1.

Es legt fest, wie der Agent seinen internen Zustand fuehrt, welche strukturierten Log-Ereignisse er ausgibt und wie ein kontrollierter Stop funktioniert.

V1-Entscheidung

  • der Agent fuehrt zunaechst ein internes Health-Modell ohne externen HTTP-Endpunkt
  • Lifecycle-Wechsel werden ueber einen in-memory Snapshot verfolgt
  • Server-Erreichbarkeit wird getrennt vom Lifecycle als eigener Connectivity-Zustand gefuehrt
  • Logs werden als stabile key=value-Ereignisse ausgegeben
  • Stop erfolgt signalgesteuert ueber SIGINT oder SIGTERM

Health-Snapshot

Der Laufzeitsnapshot enthaelt mindestens:

  • status
  • server_connectivity
  • screen_id
  • server_base_url
  • mqtt_broker
  • heartbeat_every_seconds
  • started_at
  • last_heartbeat_at

Der Snapshot dient in v1 der internen Laufzeitbeobachtung und Testsicherheit.

Statusmodell

Fuer die aktuelle Ausbaustufe gelten diese Stati:

  • starting vor dem Start der Run-Loop
  • running sobald Konfiguration uebernommen und der erste Heartbeat verarbeitet wurde
  • stopped nach kontrolliertem Verlassen der Run-Loop

Ein separater Fehlerstatus wird in dieser Stufe noch nicht eingefuehrt. Technische Startfehler bleiben weiterhin normale Rueckgabefehler beim Initialisieren oder Starten.

Connectivity-Modell

Getrennt vom Lifecycle fuehrt der Agent fuer die Server-Erreichbarkeit aktuell diese Zustaende:

  • unknown vor dem ersten erfolgreichen oder fehlgeschlagenen Status-Report
  • online nach einem erfolgreich bestaetigten HTTP-Status-Report
  • degraded nach einem fehlgeschlagenen HTTP-Status-Report

Damit bleibt der Lifecycle sauber von Netz- und Gegenstellenproblemen getrennt. Ein Report-Fehler stoppt den Agenten nicht, sondern veraendert nur den Connectivity-Zustand.

Strukturierte Log-Ereignisse

Der Agent emittiert in v1 mindestens diese Ereignisse:

  • event=agent_starting
  • event=agent_configured
  • event=heartbeat_tick
  • event=status_report_sent
  • event=status_report_failed
  • event=agent_stopped

Ziel ist keine vollstaendige Logging-Plattform, sondern ein stabiler, maschinenlesbarer Anfang fuer lokale Verifikation, spaetere Journald-Auswertung und Device-Debugging.

Heartbeat-Verhalten

  • beim Start wird direkt ein erster Heartbeat verarbeitet und geloggt
  • danach laeuft der Heartbeat im konfigurierten Intervall weiter
  • jeder Heartbeat aktualisiert last_heartbeat_at

Das direkte erste Tick-Verhalten vereinfacht lokale Checks und Tests, weil ein frisch gestarteter Agent sofort einen nachvollziehbaren Lebensnachweis liefert.

Shutdown-Verhalten

  • cmd/agent erstellt einen signalgebundenen Context
  • bei SIGINT oder SIGTERM verlaesst die Run-Loop kontrolliert den Ticker
  • vor Rueckkehr wird event=agent_stopped geloggt und der Snapshot auf stopped gesetzt

V1-Abgrenzung

Nicht Teil dieser Stufe:

  • externer Health-Endpunkt
  • MQTT-Verbindungsstatus
  • Snapshot-Persistenz
  • Kommandos oder Sync-Status

Die erste Backend-Reachability-Pruefung ist in dieser Stufe bereits ueber den HTTP-Status-Report abgebildet. Ein expliziter offline-Zustand, MQTT-Reachability und weitergehende Schwellenlogik folgen spaeter.

Diese Punkte folgen erst, wenn echte Netzwerk- und Sync-Funktionalitaet eingebaut wird.