T2 — Governor-Agent — aktueller Stand¶
1:1-Spiegel aus dem Repo
Quelle: comms/T2_AKTUELL.md · Stand der Quelldatei: 09.08.2026 21:33 · erzeugt: 14.08.2026 00:33
Diese Seite ist eine wortgetreue Kopie. Geaendert wird immer die Quelldatei, nie diese Seite.
Sprint: 3 (Agenten-Runtime) · Auftrag T2-01 R5 WD-Haertung B5/B6 · UEBERNOMMEN 2026-08-09 20:10 · ZURUECKGEGEBEN 2026-08-09 21:40
MELDUNG T2 · T2-01 · Runde 5 · 2026-08-09 ~21:40 · STOPP
T2 AKTUELL · Runde 5: WD-Haertung B5 + WD-Registrierung B6 — GEBAUT, GEPRUEFT, LIVE¶
W6-WD v0.2.3 ist publiziert und laeuft (aktive Version 2db41818, vorher 3fe4be51 = v0.2.2, 41 Knoten). Gate-Report mit allen Belegen: ablauf/T2-01_governor-agent/GATE_5.md · Spezifikation und Rechenwege: SPEZ_WD_HAERTUNG_v1.1.md.
Erledigt¶
Die Ursache der Fehlabschaltungen war eine einzige Zeile — aber sie war nicht die einzige Fehlfunktion.
-
Mitternachts-Luecke (B5). Weder die Zaehlung noch die Dedupe-Funktion waren tagesgebunden:
errors_24hist ueberv_gov_digestbereits ein rollierendes 24-h-Fenster,w6a_alert_seenprueft ein Zeitfenster ab Ack-Erteilung. Tagesgebunden war allein die Signatur:new Date().toISOString().slice(0,10)liefert das UTC-Datum — der Workflow-Timezone Europe/Berlin wirkt dort nicht. Um 00:00 UTC entstand eine neue Signatur, die Dedupe musstefalseliefern, der Befund galt als frisch. Alle drei Vorfaelle liegen im ersten Takt nach UTC-Mitternacht (gov 37 · 43/44 · 49/50). Behoben, indem die Datumsstelle entfaellt statt umgerechnet zu werden — das ist G's Variante (a). -
Der schwerere Befund: „fail_streak" war gar kein Streak. Die Schwelle 3 ist eine absolute Anzahl in 24 h. Zum Abschaltzeitpunkt am 08.08. hatte EIA 87 erfolgreiche von 97 Laeufen (10,3 % Fehlerquote) — und wurde abgeschaltet. Am 07.08. waren es 95 von 98 (3,1 %). VKA: 19 von 23. Bei 96 Laeufen/Tag misst die Schwelle die Taktrate, nicht die Gesundheit.
-
F21 — der Not-Aus fuettert die Abschaltautomatik (neuer Befund, Wurzel liegt ausserhalb meiner Zone). Ein vom Kill-Switch korrekt geblockter Lauf wird als
status='error'gebucht (runs 303/424). Agent aus → jeder Takt bucht einen „Fehler" → naechste Abschaltung. Der CHECK aufagent_runs.statuserlaubt('running','ok','partial','error');errors_24hzaehlt nur'error'. Der Fix ist ein Wort: geblockte Laeufe alspartialbuchen.
Gebaut (v0.2.3): Signatur ohne Datum · Werkzeuge (kind='werkzeug') erzeugen gar keinen Befund mehr · Auto-Disable nur noch bei echtem Totalausfall (kein einziger erfolgreicher Lauf in 24 h) mit Mindestbeleg 4 Laeufe, Schalter an, kein Not-Aus, kein Werkzeug, nicht der Waechter selbst · Zwei-Takte-Regel: erst Vorwarnung, Vollzug erst im Folgetakt · Gate Schalter pruefen (G1) auf w6.agents.enabled UND w6.wd.enabled · Registry-Zeile wd + Laufbuchung in agent_runs (Status ok/partial, nie error).
Gegenprobe an der Historie: in allen vier Vorfaellen ist die Erfolgs-Bedingung verletzt → beide Fehlabschaltungen waeren mit v0.2.3 nicht passiert, ein echter Totalausfall fuehrt weiterhin zur Abschaltung.
| Beweis | Beleg |
|---|---|
| H1 — der Vorfall vom 08.08. exakt nachgestellt (EIA 10/97 · VKA 4/23 · gread 3/19 werkzeug · BMA 3/3), also „522-Fenster + Tageswechsel + Werkzeugfehler" in einem Takt | exec 8993: 3 Befunde gemeldet, gread ohne Befund, targets: [] — keine Abschaltung |
| H2a/H2b — echter Totalausfall 8/8: erst Vorwarnung, dann Vollzug | 8991 (targets: [], „VORWARNUNG …") → 8992 (targets:[{eia}], ADMIN-Aufruf, Mail nennt den Vollzug) |
| H3 — globaler Not-Aus | 8994: G1:kill_switch(global), Befunde bilden lief nicht, Lauf als partial gebucht |
| H4 — Odoo nicht erreichbar (522) | 8997: „ok (eingeschraenkt: Schalterlage nicht lesbar - kein Auto-Disable)", kein Eingriff |
| H5 — Waechter selbst 48/48 Fehler | 8996: „Waechter schaltet sich nicht selbst ab" |
| H6 — alles gruen · H8 — Schluessel fehlen | 8987 (still) · 8995 (Anlaufschutz, Schutz bleibt wirksam) |
| Betriebsprobe live, zwei Takte | exec 9000 (19:00:47Z) gruen · agent_runs run 502, agent wd, status ok, „0 neue(r) Befund(e) · ok (Anlaufschutz: w6.wd.enabled fehlt in Odoo)" · nach fix3 run 506 (19:30:47–19:30:49) gruen und icp_checked_at aller Agenten wieder auf 19:30:49 = Spiegel schreibt nachweislich wieder |
Der Harness ist vollstaendig inert: Trigger-, HTTP-, Gmail- und ADMIN-Knoten sind gepinnt — es wurde nichts versendet, nichts geschaltet, nichts geschrieben.
Subagent-Review nach D-063 vor der Abgabe gefahren; Urteil war „nicht publizierbar" — zu Recht. Wichtigster Punkt: h.runs_24h || 0 haette bei fehlender Laufzahl „0 Erfolge" ergeben und damit abgeschaltet — die einzige Stelle, an der eine fehlende Information in Richtung Eingriff aufloeste. Jetzt gilt durchgehend: fehlende Information sperrt den Eingriff, sie loest ihn nie aus. Ebenfalls behoben: Dedupe sperrte den Disable-Pfad 24 h · kind-Fallback bei unlesbarer Config · fehlender globaler Schluessel haette den Waechter dauerhaft selbst geblockt · kein run_end bei hartem Mailfehler. Die Zwei-Takte-Regel ist aus diesem Review entstanden.
Eigene Regression im Livelauf gefunden und behoben. Durch das neue Gate wurde Weiterlaufen? zum Vorgaenger von ICP-Spiegel (CP), dessen Body $json.icps las → p_values undefiniert → PostgREST PGRST202 → der Spiegel schrieb still nichts mehr (neverError:true). Aufgefallen nur daran, dass icp_checked_at beim 19:00-Takt auf 18:30:49 stehen blieb. Behoben in fix3 (Body zieht die Karte benannt), publiziert als 2db41818; Gegenpruefung ueber alle 41 Knoten: das war der einzige betroffene.
Zustand¶
WD v0.2.3 aktiv (2db41818), 30-min-Takt und Digest 07:30 unveraendert. Registry: neue Zeile wd (kind=agent, stage 1, w6.wd.enabled, alle 30 min) — der Waechter hat ab jetzt Kachel, Herzschlag und Laufhistorie; der Schalter fehlt noch in Odoo (Anlaufschutz greift). EIA/VKA laufen unveraendert weiter (eia=1, vka=1, bma=0). Kein Agent wurde geschaltet, keine Mail versendet, kein Odoo-Write.
Uebergaben¶
An M — ein Handgriff: Systemparameter w6.wd.enabled = 1 in Odoo anlegen (Einstellungen → Technisch → Systemparameter). Danach ist B6 vollstaendig; bis dahin laeuft der Waechter im Anlaufschutz und sagt das in jedem Lauf.
An G — vier Entscheide (Details in GATE_5.md §6):
1. F21 an der Wurzel schliessen: geblockte Laeufe in EIA/VKA/GRT-1 als partial statt error buchen. Ein Wort je Flow. Solange das offen ist, bleibt „Agent war lange aus" der einzige Weg, auf dem die 24-h-Quote noch kippen kann — die Zwei-Takte-Regel faengt genau das ab, heilt es aber nicht.
2. Verhalten bei globalem Not-Aus bestaetigen: gebaut ist „Gate prueft beide" wie beauftragt — waehrend eines Not-Aus laeuft damit keine Ueberwachung (kein stale_run/dead_job-Alarm). Folgt LIES_MICH_ZUERST, ist aber eine bewusste Entscheidung und keine Nebenwirkung. Bestaetigen oder Ausnahme fuer den Waechter beschliessen.
3. Nachlieferung einspielen? Der SQL-Wortlaut fuer public.w6a_fail_profile(p_hours) liegt fertig in SPEZ §4 (rein additiv, read-only, klassifiziert geblockt/transient/vollzug, liefert letzter_erfolg). Nicht eingespielt — Migrationen sind G's Akt und die Nummer (v0_9_13) muss mit T5 abgestimmt sein. Mit ihr liefere ich v0.2.4 mit G's Original-Wortlaut („6-h-Fenster", „>=3 aufeinanderfolgende Stunden").
4. Grundsatz: fail_streak_disable als Quote statt als absolute Anzahl definieren? Fuer Takt-Agenten ist eine Anzahl konstruktionsbedingt sinnlos (3 Fehler = 3,1 % bei EIA, = 3 Tage Totalausfall bei BMA).
Redaktionell: die Freigabe nennt fuer die Registry schedule 'stuendlich :00'; der Trigger laeuft real alle 30 min — ich habe die Wahrheit eingetragen (alle 30 min). Bitte kurz nicken.
Offen / Naechster Schritt¶
STOPP. Der publizierte Stand laeuft; die naechsten regulaeren Takte sind die weitere Betriebsprobe. B2 aus der Runde-5-Freigabe (Dedupe-UX fuer human:%) liegt bei T5/RPC und bleibt unveraendert offen; B3 ist durch D-049 gedeckt und hier nur vermerkt.
Befunde¶
- F21 (hoch, an G): geblockte Laeufe als
errorgebucht → der Not-Aus erzeugt die Fehlerlawine, die zur naechsten Abschaltung fuehrt. Fix:partial. - F22 (mittel, an G):
fail_streak_disableist eine absolute Anzahl und damit taktratenabhaengig — 3 Fehler heissen bei EIA 3,1 % Fehlerquote, bei BMA drei Tage Totalausfall. - F23 (mittel, an G/T5):
v_board_headerreichtregistry.kindnicht durch; der WD kommt nur ueberw6a_agent_configje Kandidat an die Agentenart. Fuer eine Auswertung ueber alle Agenten waerekindin der View der sauberere Ort. - F24 (niedrig, Betriebswissen): HTTP-Knoten mit
neverError:trueverschlucken auch Strukturfehler wie PGRST202 — ein Knoten kann monatelang „gruen" laufen und nichts tun. Die eigene Regression heute war genau dieser Fall und wurde nur ueber den fachlichen Nebeneffekt (icp_checked_atstand still) sichtbar. Vorschlag: bei RPC-Knoten die Antwort aufcode-Felder pruefen, statt nur den HTTP-Status zu ignorieren.
Abholung: zentral durch G ueber Cowork. Weiter erst nach FREIGABEN-Eintrag; auf »weiter« im Terminal zuerst FREIGABEN.md und comms/G_AKTUELL.md neu lesen.