# Architektur

Der Watcher führt aktivierte lokale Collector mit individuellem Timeout aus. Zusätzlich akzeptiert die zentrale API Ereignisse von externen Agenten. Ein Collector oder Agent liefert typisierte Beobachtungen und Evidenz; er entscheidet nicht über globale Gesundheitsregeln. `normalizer.py` wendet die Statusachsen und Stale-Regeln zentral an. Die Repository-Schicht schreibt je Collector oder Remote-Event in Transaktionen, aktualisiert den Current Status per Upsert und erzeugt nur bei relevanten Änderungen ein `status_events`-Element.

`worker_key` bezeichnet den logischen Worker unabhängig von Host und Prozess. `instance_key` bezeichnet die konkrete Ausprägung an einem Standort. `execution_agents` registriert Beobachter und `remote_events` bildet die idempotente Ereigniseingangsschicht. Ein Agent darf offline puffern; bleibt sein Heartbeat aus, werden seine Instanzen als stale markiert.

Collector-Fehler werden in `collector_runs` und `watcher_events` isoliert. Ein hängender Collector blockiert die Verarbeitung nachfolgender Collector nicht. Neue Adapter benötigen nur das `Collector`-Protokoll und dürfen keine schreibenden Systemaktionen ausführen.
