LENNY - Abschlussbericht "Produktionsautonomie"¶
Stand: 05.10.2026 07:02 UTC (09:02 MESZ), fortgeschrieben 15:06 UTC (17:06 MESZ) (Endpush, Betriebsprotokoll, Probation); alle Zeiten UTC, MESZ = UTC + 2 (z. B. 05:00 UTC = 07:00 MESZ). Repository E:\Lenny_zf, Branch selbstverbesserung, Prototyp experiments/lenny_language_layer_prototype_v1.
Auftrag: LENNY - Produktionsabschluss Autonomie.md (16 Abschnitte, Start 04.10.2026 ~19:50 UTC). Quelle der Tabellen: docs/produktionsautonomie/ledger.json (python tools/pa_ledger.py md) und
docs/produktionsautonomie/nachweise/; Betrieb: docs/SELBSTVERBESSERUNG_BETRIEB.md (Abschnitt 9) und ops/selfimprove/betrieb/LIESMICH.md.
0. Ergebnis in Kuerze¶
- Der reale Betriebsweg laeuft ohne Bediener (Abschnitt 16 des Auftrags): Lenny beobachtet, erkennt ein Defizit, klassifiziert und bearbeitet DATA / RULE / CONFIG selbst; bei CODE baut die Headless-Coding-KI (
claude -p) einen Kandidaten, der Evaluator bewertet ihn in der Sandbox (14 Gates), der Autopilot deployt, der Host-Watcher beobachtet 24 Stunden - der Administrator behaelt jederzeit das Veto, und keine Automatik hebt eine Sperre auf (E7). - RULE-Zulauf in der Produktion belegt (E3): drei unabhaengige Beobachtungen -> Regelhypothese
hyp-aba2e0031692-> RULE_GAP-Lauf 0014 -> Schatten ->accepted; Wirkungsmeldungen bewegen das Vertrauen (0,10 -> 0,20). Ehrlich dazu: die drei Beobachtungen stammen aus eingespeistem Testverkehr des Feldzugangstraverse-fieldin der Probe-Domaenesi-probe(das Beobachtungsprotokoll des Servers laeuft erst seit 05.10. 00:48 UTC, organische Muster dieser Art gab es noch nicht); der Mechanismus - Protokoll, Cluster, Hypothese, Schatten, Entscheidung - lief dabei vollstaendig und real in der Produktion. Der DATA-Zulauf arbeitet dagegen mit echten Daten: Lauf 0016 ("Tinktur", Abschnitt 9) legte der Planer-Job selbst an. - Regelmaessiger Autopilot als Planer-Job alle 15 Minuten (hoechstens eine Instanz, Protokoll mit Zeit, PID und Exitcode ohne Secrets; 69 Takte seit 04.10. 20:39 UTC, alle Exitcode 0, Stand 05.10.2026 14:56 UTC, Abschnitt 7).
- E1 belegt - der erste ohne Sitzung gebaute CODE-Lauf ging bis in die Probation: Problem A (Lauf 0001) wurde vom Planer-Job mit
claude -pgebaut (Agentclaude-code, 9 Turns, 32 s, 0,10 USD, 0 Verstoesse), der Evaluator gab APPROVE (14 von 14 Gates, Zielfix FAIL -> PASS), der Planer deployte0d7f4e8(Deploy-Schranke, Health, Smoke und Security gruen) - der Lauf steht seit 05.10.2026 06:23 UTC (08:23 MESZ) inprobation. Die einzige Handarbeit im Lauf ist in Abschnitt 6 vollstaendig benannt. - Die uebrigen Posten: Guard-Atomaritaet (Laufzeit E8),
[DEUTUNG]-Fix, Rollback-Bereinigung, Auto-Truth SAFE-CLOSED mit Sandbox-Beweis, fuenf Signalquellen im Betrieb, Produktion auf0d7f4e8(zwei Sammel-Deploys von Hand und ein autonomer Deploy des Planers, alle mit Rollback-Netz und gruener Schranke) - Einzelheiten in den Abschnitten 3 bis 16. - Ehrlich vorweg: die ersten Laeufe im echten Betrieb brachten neun Funde (Abschnitt 17), darunter einen Fehler der eigenen Selbsttests, der den ersten echten Fix von Problem A haette scheitern lassen. Alle sind behoben und getestet; der Evaluator und der Datenkreis haben jeden unbrauchbaren Kandidaten (Laeufe 0013 und 0015) abgelehnt - nichts davon kam in die Produktion.
- Nicht fertig, aber benannt (Abschnitt 17): die 24-h-Probation von Problem A laeuft (Ende fruehestens 06.10. 06:23 UTC), Problem B (Lauf 0012) wartet laut Policy hinter ihr (hoechstens ein CODE-Kandidat) und baut danach selbst; Auto-Truth bleibt SAFE-CLOSED (nur eine Evidenzfamilie, E6 nicht real moeglich); Ausloeser D des Regelzuflusses ist nicht angebunden; der Endpush war am Vormittag
PUSH_AUTH_BLOCKED(Anmeldung des Git Credential Managers) und ist um 15:01 UTC gelungen (Abschnitt 13, Remoteff1cc2b).
1. Ausgangsstand¶
Produktion d482939 (seit 04.10.2026 19:12 UTC; der Selbstverbesserungs-Ausbau war abgeschlossen), Branch selbstverbesserung auf dem Remote 9ba0f54 (04.10. 19:45 UTC). Offen waren: ein vom Watcher zurueckgerollter Lauf (0011, Problem B)
mit Fehlalarm-Verdacht, ein erschoepftes Problem A (0001), kein Headless-Weg der Coding-KI, kein regelmaessiger Autopilot, RULE_GAP nur mit vorgegebenem Regelkandidaten, Auto-Truth ohne Sicherheitsstandard.
2. Finaler Produktionscommit¶
| Angabe | Wert |
|---|---|
| Produktionscommit | 0d7f4e8cbe2298a15acbbaa29263ebfec691c0d2 (Kandidat CAND-0d7f4e8cbe22, Problem A) - seit 05.10.2026 06:23 UTC (08:23 MESZ) in der Produktion, vom Planer-Job ohne Bediener deployt |
| Vorgaenger | b787d8f (05.10. 05:38 UTC, zweiter Sammel-Deploy), 3784085 (05.10. 00:48 UTC, erster Sammel-Deploy), d482939 (Ausgangsstand) |
/health-Identitaet (05.10. 06:28 UTC) |
code_commit 0d7f4e8c..., image_digest sha256:0b6e71dc...ea07, config_hash_env 24e43e2e... (seit dem Ausgangsstand unveraendert), policy_hash 89098a12..., data_generation g54 (26.940 Fragmente, 26.662 Relationen), Identitaet vollstaendig, Modelle gepinnt |
| Bereitstellung | deploy/deploy.sh --commit 0d7f4e8 durch den Controller des Planers: Deploy-Schranke gruen, Rollback-Ziel rb-b787d8fc3bf3-20261005t060339z, Deploy 1.149 s, Health, Smoke und Security gruen |
| Zweigspitze | selbstverbesserung traegt den Kandidaten als Zusammenfuehrung (af8a9b9); zum Produktionscommit unterscheiden sich nur drei Dateien (Betriebsdokument, ops/selfimprove/controller.py - Planer-Seite, ein Test) |
Stand 05.10.2026 06:28 UTC. Weitere Produktions-Deploys geschehen nur noch durch den Kreis selbst (Problem B nach der Probation von A, DATA/RULE nach dem Embargo).
3. Guard-Atomaritaet (Abschnitt 1, E8)¶
| Thema | Befund | Beleg | Status |
|---|---|---|---|
| Ursache | install_brain_guards und install_lai2_core_proof_schema liefen jede DROP-/CREATE-Anweisung im Autocommit bei jedem Oeffnen der Datenbank; dazwischen gab es einen Augenblick ohne Schutz (vor dem Fix gemessen: 941 von 1.441 Umgehungsversuchen angenommen) |
Commit 3479710 | behoben |
| Fix | eine Transaktion (BEGIN IMMEDIATE, bei offener Transaktion SAVEPOINT), Integritaetspruefung am Ende nimmt einen unvollstaendigen Satz zurueck, bei Fehler bleiben die alten Waechter wirksam |
core/fragment_store.py (_atomic_ddl, _atomic), tests/test_brain_guards_atomar.py (9 Tests) |
DONE |
| Laufzeit (E8) | an einer Kopie der Produktionsdatenbank im Container (LAI/2.0, Rolle core, 46 Waechter): 31 Installationen, 9.538 Schreibversuche mit ungueltigem Brain durch 4 parallele Schreiber - 0 angenommen, 0 von 197.799 Beobachtungen mit unvollstaendigem Waechtersatz. Negativkontrolle ohne Huelle: 219.290 von 226.311 Beobachtungen sehen nur 45 von 46 Waechtern | docs/produktionsautonomie/nachweise/e8_guard_atomaritaet_produktion_3784085.json, Skript docs/produktionsautonomie/skripte/e8_guard_atomaritaet.py |
DONE |
Ehrlich: in der Negativkontrolle auf der Produktionskopie wurde der Brain-Waechter selbst im Zeitraum nicht getroffen (0 von 3.849 Versuchen angenommen) - das fehlende Stueck war ein Proof-/Pressure-Trigger; der Umgehungsfall am Brain-Waechter ist durch die Unit-Tests (und die lokalen Proben mit 893 von 1.052 bzw. 1.341 von 3.469 angenommenen Versuchen) belegt.
4. Problem A (Lauf 0001, probe_normalisierung)¶
Problem A ist der Probe-Defekt normalisiere (faltet Umlaute nicht). Seine drei frueheren Versuche (03.10.) waren Selbsttest-Drills (scripted: Regressions- und Produktionsfehler-Rezept) und scheiterten an der Regression, an einem wanduhrabhaengigen core-Test und an Messrauschen (G27 p95) - nicht an einer Loesung der Coding-KI;
der Defekt bestand unveraendert (unresolved).
| Zeit (UTC) | Ereignis |
|---|---|
| 05.10. 01:23 | wiedergeoeffnet mit neuer Evidenz (controller wiederoeffne, Versuchsbudget beginnt neu): die Fehlversuche waren Drills/Messrauschen, der Defekt besteht, der Headless-Weg der Coding-KI ist belegt, die Produktion laeuft auf 3784085, der Rebase ist korrigiert |
| 05.10. 01:33 | der Detektor fuehrt den Lauf bis queued (Versuchsbudget zurueckgesetzt) |
| 05.10. 01:34-01:55 | E2 an diesem Lauf: Versuch 1 = Regressions-Drill (drills/regression.json, Agent scripted, im Audit so gekennzeichnet) -> Evaluator REJECT (G2: test_woerter_zaehlen faellt - die Regression; kein Deploy, Produktion unveraendert, Beleg e2_SIR-20261002T214311Z-0001_20261005T0155Z.json) |
| 05.10. ~05:10 | Der erste echte Fix haette an einem Fehler der Selbsttests scheitern muessen: test_der_spec_zur_invariante_ist_ein_echter_code_gap_im_scope_der_probe setzte den Defekt voraus und faellt, sobald er behoben ist. Gefunden, indem der Fix aus dem Headless-Beleg in einem Scratch-Worktree gegen die Vollsuite gemessen wurde (3.727 gruen, 2 rot - der zweite war eine Kollision paralleler Laeufe und isoliert gruen); Korrektur (der Defekt kommt als Test-Double) und zweiter Sammel-Deploy vor dem Bau |
Versuch 2 - der echte Fix, ohne Sitzung:
| Zeit (UTC) | Ereignis |
|---|---|
| 05.10. 05:21-05:38 | zweiter Sammel-Deploy (b787d8f; Deploy-Schranke gruen: tests/ 3.750 Tests, 0 Fehlschlaege) - die Produktion traegt den korrigierten Selbsttest |
| 05:39 | Detektor: "Problem erneut beobachtet, mit neuer Evidenz" |
| 05:40 | Basis veraltet (Produktion ist auf b787d8f): Change-Spec fuer Versuch 2 erneuert, der Befund des Drills uebernommen mit der Richtigstellung zum fehlerhaften Selbsttest (von Hand ausgeloest, Abschnitt 6) |
| 05:41:47 | Planer-Job: Durchgang pid 3940 (--betrieb --signale, claude im PATH) |
| 05:42:37 | Bau Versuch 2 mit claude-code (headless, isolierter Worktree) |
| 05:43:30 | Kandidat CAND-0d7f4e8cbe22: Commit 0d7f4e8, Branch si/CH-3e2d574950cc, zwei Dateien (core/selfimprove_probe.py +3/-1, tests/test_si_ch_3e2d574950cc.py mit 4 Tests) |
| 05:43:31-06:03:10 | Evaluator (Server-Sandbox, Kandidat gegen Basis): APPROVE, alle 14 geforderten Gates gruen, Zielfix FAIL -> PASS |
| 06:03:41 | deploying, Rollback-Ziel rb-b787d8fc3bf3-20261005t060339z; Deploy-Schranke: tests/ 3.754 Tests = 3.733 gruen, 0 Fehlschlaege, 0 Fehler, 19 uebersprungen, 2 xfailed (895 s); core/ 2.081 gruen = Grundlinie (163 s) |
| 06:23:18 | probation - Health, Smoke, Security gruen, Deploy 1.149 s, Produktion auf 0d7f4e8 |
| 06:25:39 | erste Probation-Beobachtung des Host-Watchers |
Der Fix ist der kleinste wirksame Eingriff: nach dem Kleinschreiben faltet normalisiere ae/oe/ue/ss, zaehle_woerter blieb unveraendert (die Regression des Drills ist damit vermieden). Die Coding-KI hat nur drei Testdateien (21 Tests) ausgefuehrt und das ehrlich im Endtext gesagt; die vollstaendige
Suite, die Gold-/Replay-Gates und den Zielfix pruefte der Evaluator. Der Kandidat ist in selbstverbesserung uebernommen (Zusammenfuehrung af8a9b9), damit ein spaeterer manueller Deploy ihn nicht zurueckdreht.
Ergebnis: wiedergeoeffnet, ueber Coding-KI und Evaluator abgearbeitet, bewilligt und deployt - Status DONE bis zur Probation. Die Probation laeuft bis fruehestens 06.10.2026 06:23 UTC (08:23 MESZ); danach setzt der Watcher accepted oder rollt selbsttaetig zurueck (nicht von mir abzuwarten, nicht von mir zu entscheiden).
5. Problem B (Lauf 0011/0012, probe_kuerzung)¶
Problem B ist der Probe-Defekt kuerze (liefert n+1 statt n Zeichen). Verlauf:
| Zeit (UTC) | Ereignis |
|---|---|
| 04.10. ~20:00 | Lauf 0011, Versuch 1: fachlich richtig, aber build_failed - der Sitzungs-Subagent las seinen Auftrag aus einer Datei ausserhalb des Workspaces (Allowlist-Verstoss, Fehler der Orchestrierung; die Grenze wurde nicht aufgeweicht) |
| 04.10. 20:39-21:40 | Versuch 2 (Kandidat CH-211f2d238cd8, Commit 0a73dcd): Bewertung (14 Gates), APPROVE, autonomer Deploy, Probation - dann Rollback durch den Host-Watcher (21:40): Mischzustand: config_hash_env weicht ab |
| 05.10. 00:00-00:40 | Ursachenanalyse: ein Fehlalarm, kein Fehler des Kandidaten. Der erste Aufruf von /mcp importiert ops/gemma_loop_server.py nachtraeglich; sein Modulkopf setzt LENNY_GEMMA_STATE_DIR per os.environ.setdefault und veraenderte so den Umgebungshash der LAUFENDEN Produktion (config_hash_env: 32a4578a... -> 83d817d7...). Behebung: core/si_identity rechnet mit der Umgebung des Prozessstarts (_ENV_START), Commit 690d96e, 5 Tests |
| 05.10. 00:50 | Laufzeitbeweis im Produktionsabbild: ein frischer Prozess importiert erst si_identity, dann gemma_loop_server - LENNY_GEMMA_STATE_DIR steht danach in der Umgebung, der Hash bleibt 24e43e2e... (und das Gegenbeispiel ohne Schnappschuss waere ein anderer) - docs/produktionsautonomie/nachweise/identitaet_laufzeit_3784085.json |
| 05.10. 01:12 | Lauf 0012 (der Detektor legte das Problem nach dem Rollback neu an, Versuch 3 von 3): im ersten Autopilot-Durchgang scheiterte der Rebase (SpecFehler: Versuch 2 und 3 muessen den Befund erhalten) und liess den Lauf in reproducing zurueck, wo ihn kein Autopilot mehr anfasst. Ursache: Controller.rebasiere gab den Befund des vorherigen Fehlversuchs nicht weiter. Behoben (1758fd7: Befund bleibt, Messung vor dem Zustandswechsel, ein Spec-Fehler laesst nie einen Lauf in reproducing zurueck; 3 Tests), Lauf 0012 mit dem korrigierten Controller fortgesetzt - der Befund traegt die Richtigstellung, dass der Rollback ein Fehlalarm war |
Ausgang (Stand 05.10.2026 06:28 UTC): Lauf 0012 steht in queued (Versuch 3 von 3, Change-Spec CH-4021757458ce auf b787d8f). Er wartet auf die Policy: hoechstens ein CODE-Kandidat gleichzeitig, und die laufende Probation von Problem A zaehlt dazu. Jeder Durchgang des Planers
versucht ihn weiterzufuehren (0012:queued->queued im Betriebsprotokoll), der Detektor haelt die Evidenz frisch (zuletzt 06:23). Nach dem Ende der Probation von A (fruehestens 06.10. 06:23 UTC) baut der Planer ihn ohne weiteres Zutun - Bau mit claude -p, Evaluator, Deploy, 24 h Probation (accepted frueh am 07.10.
zu erwarten). Der bekannte Werkzeugfehler (der Rollback-Fehlalarm) ist behoben und die Wiederoeffnung mit neuer Evidenz geschehen - es ist keine Sonderbehandlung noetig, nur die Reihenfolge der Policy. Status BLOCKED (zeitgebunden, Policy): nicht fehlerhaft, nicht vergessen.
6. Headless-Coding-KI (Abschnitt 4)¶
Die CLI ist angemeldet (claude auth status: loggedIn, claude.ai) - der Punkt ist nicht mehr AUTH_BLOCKED. python -m selfimprove.headless_beweis fuehrt den Weg Dispatcher -> claude -p -> isolierter Git-Worktree -> Commit -> Nachpruefung EINMAL echt aus (an der Probe-Invariante probe_normalisierung, die im Basis-Stand der
Produktion wirklich verletzt ist; der Kandidat wird nie deployt) und schreibt den Beleg E:/si_work/headless_beweis.json nur nach einem Lauf ohne Verstoss mit erfuellter Invariante, gruenem neuem Test und belegter Isolation; eine Attrappe (art: attrappe) nimmt der Autopilot nie an.
| Versuch (05.10.2026) | Ergebnis |
|---|---|
| 1 und 2 (00:55 UTC) | kein Commit: die Coding-KI schrieb Fix und Test, doch ein Bash-Heredoc wurde im Modus dontAsk verweigert, sie zog daraus "Bash ist verweigert" und fuehrte weder Test noch git commit aus. Der erste Lauf liess keine Spur - Transkript-Sicherung (beweis_<zeit>.transkript.json) ergaenzt |
| Behebung | der Auftrags-Prompt nennt jetzt ausdruecklich die erlaubten Bash-Formen (WERKZEUG_HINWEIS: Dateien nur ueber Read/Edit/Write, je Aufruf EIN erlaubter Befehl, bei Verweigerung dieselbe Form erneut), das build_log traegt den Endtext der Coding-KI (Tests) |
| 3 (01:01 UTC) | belegt: Commit 8683802b im isolierten Worktree, 66 s, 9 Turns, 0,077 USD, 8 Werkzeugaufrufe (Bash, Edit, Read, Write), 0 Verstoesse; Invariante vorher verletzt, nachher erfuellt; neuer Test tests/test_si_ch_6c4c20d860cb.py 3 passed; Isolation: Hauptbaum und Produktion unveraendert, Worktree ausserhalb des Hauptbaums, Umgebung der CLI ohne LENNY_/OLLAMA_-Werte und ohne Geheimnisse (nur die Anmeldung der CLI selbst), eigener Branch si/..., Werkzeug-Allowlist |
Der Fix der Coding-KI (normalisiere faltet ae/oe/ue/ss, kleinster wirksamer Eingriff, nur core/selfimprove_probe.py plus ein neuer Test) war inhaltlich richtig. Der Beleg schaltet den CODE-Weg des Autopiloten nur frei (autopilot.coding_ki_bereit: angemeldet UND Beleg gruen); den Rest (Evaluator, Deploy, Probation) beweist der erste vom
Autopiloten ohne Sitzung gebaute CODE-Lauf (E1, unten). In der Umgebung des Planers liegt die CLI im PATH des Benutzers (C:/Users/marco/.local/bin); das Betriebsprotokoll haelt es je Aufruf fest (claude_im_pfad).
E1 - autonomer Headless-CODE (Beleg docs/produktionsautonomie/nachweise/e1_SIR-20261002T214311Z-0001_20261005T0624Z.json)¶
Das Belegwerkzeug (python -m selfimprove.e1_beleg <run_id>, 11 Tests; liest nur den Kreis, das Betriebsprotokoll und /health, schreibt nichts am Lauf) verlangt ALLE Bedingungen. Fuer Lauf 0001 sind alle elf belegt (ok: true):
| Bedingung | Beleg |
|---|---|
| CODE_GAP mit reproduzierbarer Invariante | Spec CODE_GAP, Reproduktion invariante probe_normalisierung |
Der Detektor fuehrte den Lauf bis queued |
Audit: Akteur detector (unresolved -> detected -> classified -> reproducing -> specified -> queued, 05.10. 01:33) |
Gebaut von claude -p headless |
build_log: Agent claude-code, Modell claude-sonnet-5-5, 9 Turns, 32,3 s, 0,103 USD, rc 0, acht Werkzeugaufrufe (Read, Edit, Write, Bash fuer pytest, git add, git commit); die Bauversuche davor waren die Rezept-Drills (scripted, E2) |
| Kein Sitzungs-Subagent, kein Rezept im erfolgreichen Versuch | Audit: "Bau Versuch 2 (CODE_GAP) mit Agent claude-code" |
| Nachpruefung des Dispatchers | 0 Verstoesse (Werkzeug-Allowlist, Workspace, Umgebung ohne Geheimnisse) |
| Evaluator APPROVE | 14 von 14 Gates gruen, Zielfix FAIL -> PASS (docs/ausbau/nachweise/bewertung_SIR-20261002T214311Z-0001_CAND-0d7f4e8cbe22.json) |
| Deploy gesund | Health, Smoke (26 Gold-Faelle: keine neuen Falschen, keine Verschlechterung, keine verlorene Provenienz, kein unerlaubtes Unknown), Security (8 Pruefungen) gruen |
| Probation und Produktion auf dem Kandidaten | probation seit 06:23:18; /health: code_commit 0d7f4e8c... |
| Kein Mensch im Ablauf | Akteure im Audit: nur detector und selfimprove (Dienstkonto) |
| Die Schritte liefen im Betriebsjob des Planers | autopilot.betrieb.jsonl: Durchgang pid 3940, 05:41:47-06:23:21 UTC (2.494 s), Exitcode 0, Aktionen 0001:queued->probation |
Handarbeit im Lauf, vollstaendig benannt: (1) Das Wiederoeffnen mit neuer Evidenz (01:23, vom Auftrag verlangt). (2) Um 05:40 erneuerte ich die Change-Spec auf die neue Produktionsbasis - dieselbe Funktion (Controller.spezifiziere_neu), die der Autopilot bei veralteter Basis selbst ruft; ich loeste sie von Hand aus, um dem
uebernommenen Befund die Richtigstellung zum fehlerhaften Selbsttest beizufuegen (ohne sie haette die Coding-KI glauben koennen, das Problem sei nicht loesbar). Der Akteur im Audit ist auch dort das Dienstkonto, der Weg derselbe. (3) Kein Eingriff in Bau, Bewertung, Entscheidung, Deploy oder Probation: die Zustandswechsel 425 bis 431 stammen
alle aus dem Durchgang des Planer-Jobs, den der Betriebsjob (nicht eine Sitzung) um 05:41:47 UTC startete.
7. Scheduler / Autopilot (Abschnitt 5)¶
Der Autopilot laeuft als Betriebsjob des Betriebssystems (ops/selfimprove/betrieb/installiere_job.ps1, Handbuch ops/selfimprove/betrieb/LIESMICH.md, docs/SELBSTVERBESSERUNG_BETRIEB.md Abschnitt 9):
| Anforderung (Abschnitt 5) | Umsetzung / Beleg |
|---|---|
| OS-Job alle 15 Minuten | Aufgabe Lenny-SelfImprove-Autopilot, Intervall PT15M, Aktion conhost.exe --headless cmd.exe /c <work>/autopilot_job_lokal.cmd (Windows Script Host ist per Gruppenrichtlinie gesperrt und wird nicht benutzt), Benutzer marco, Anmeldeart Interactive, Ebene Limited: kein gespeichertes Kennwort, keine Administratorrechte; Hoechstlaufzeit 5 h |
| hoechstens eine Instanz | MultipleInstances = IgnoreNew UND Schloss <work>/autopilot.lock (nach 6 h als verwaist uebernommen); ein zweiter Start ueberspringt mit Exitcode 0 |
| Exitcodes und Zeitstempel | Betriebsprotokoll <work>/autopilot.betrieb.jsonl: je Aufruf start/ende bzw. uebersprungen mit UTC-Zeit, PID, Exitcode, Dauer, Aktionen; conhost --headless reicht den Exitcode nicht an den Planer weiter - massgeblich ist das Protokoll. Stand 05.10.2026 14:56 UTC: 69 Takte seit 04.10. 20:39 UTC (49 Durchgaenge, 20 wegen der Pause-Marke uebersprungen), alle Exitcode 0, Median-Abstand 15,0 Minuten (groesste Luecke 48 Minuten: ein langer Arbeitsdurchgang - waehrend er laeuft, startet der Task Scheduler keinen weiteren Takt) |
| keine Secrets | die Aufgabe enthaelt nur Pfade; der Controller liest die Zugangsdateien selbst; Fehlertexte laufen durch schwaerze (Bearer-Token, Schluessel, Passwoerter); gesichert durch Tests |
| ein Fehler haelt den naechsten Lauf nicht auf | die Wiederholung gehoert dem Planer, nicht dem Ergebnis des vorigen Aufrufs; jede Ausnahme wird protokolliert (Exitcode 1), der naechste Aufruf in 15 Minuten laeuft trotzdem; Fehler einzelner Laeufe/Quellen sind isoliert |
| Umgebungspruefung | vor jedem Durchgang: git, Repository, ssh, SSH-Schluesseldatei, Git-Bash, deploy.sh, Dienstkonto-Zugang, Arbeitsverzeichnis, SSH-Verbindung, Health (10 von 10 gruen unter dem Planer) - bei Rot beginnt der Durchgang nichts |
| sauberer Arbeitsbaum | der Job laeuft nur auf committetem Code: uncommittete Aenderungen verfolgter Dateien in ops/ oder core/ des Hauptbaums ueberspringen den Durchgang |
| Pause | <work>/autopilot.pause (Wartung, Handarbeit); gesetzt vom 05.10. ~00:30 UTC (Sammel-Deploy und Handlaeufe; erster uebersprungener Takt 00:42:59 UTC, letzter 05:27:59 UTC) bis ~05:40 UTC (Neueinrichtung des Jobs mit --betrieb --signale; erster Durchgang danach 05:41:47 UTC, seither ohne Pause) |
| CODE erst nach belegtem Headless-Weg | autopilot.coding_ki_bereit: claude auth status angemeldet UND headless_beweis.json mit art: echter_lauf, ok: true (Abschnitt 6) |
Durchgaenge mit Arbeit (Betriebsprotokoll; alle uebrigen Takte pruefen nur, ob etwas zu tun ist):
| Ende des Durchgangs (UTC) | Anzahl | Dauer | Aktionen (<Lauf>:<von>-><nach>) |
|---|---|---|---|
| 04.10. 21:18 | 1 | 2.313 s | 0011:candidate_ready->probation |
| 04.10. 21:28 | 1 | 12 s | 0011:probation->probation |
| 04.10. 21:43 - 23:58 | 10 | 11-18 s | 0012:queued->queued |
| 05.10. 00:13 - 00:28 | 2 | 9-11 s | 0012:queued->queued |
| 05.10. 06:23 | 1 | 2.494 s | 0001:queued->probation, 0012:queued->queued |
| 05.10. 06:27 | 1 | 16 s | 0001:probation->probation, 0012:queued->queued |
| 05.10. 06:58 | 1 | 996 s | 0001:probation->probation, 0012:queued->queued, 0016:queued->approved |
| 05.10. 07:12 - 14:57 | 32 | 15-43 s | 0001:probation->probation, 0012:queued->queued, 0016:approved->approved |
Der erste Arbeitsdurchgang (04.10. ~21:18 UTC) bewertete und deployte Problem B (Versuch 2, vom Sitzungs-Subagenten gebaut - damals gab es noch keinen Headless-Weg); der zweite ist der E1-Durchgang (05.10. 05:41-06:23 UTC): --signale und claude im PATH, Bau mit
claude -p, Bewertung, Deploy, Probation in einem Durchgang von 41 Minuten. Die Takte waehrend eines laufenden Durchgangs startet der Task Scheduler gar nicht (IgnoreNew, nichts zu protokollieren). Im Durchgang von 06:41 UTC legte die Unknown-Quelle ausserdem selbst den DATA-Lauf 0016 an (Abschnitt 9): angelegt, gebaut und bewertet (APPROVE) in 17 Minuten - der Deploy wartet auf das Ende der Probation von A (Embargo). Seither bis 14:56 UTC wiederholt sich derselbe ruhige Durchgang alle 15 Minuten (A beobachten, B und 0016 warten), ohne Fehler.
8. RULE-GAP-Zulauf (Abschnitt 6, E3)¶
Der Regelkandidat entsteht jetzt aus dem Betrieb (ops/selfimprove/regel_zulauf.py, Server: api_server._evaluation_beobachtung_protokollieren, Schalter LENNY_ENABLE_REGEL_SCHATTEN war an):
| Stufe | Beleg in der Produktion (05.10.2026) |
|---|---|
| Beobachtungen | drei POST /v1/evaluations des Feldzugangs traverse-field in der Probe-Domaene si-probe, als Testverkehr eingespeist durch ops/selfimprove/probe_verkehr.py (01:11 UTC, je eigener Beleg), Antwort unknown (rule_below_trust_gate) - Beobachtungsprotokoll des Servers; die Proben des Dienstkontos selfimprove zaehlen bewusst nicht |
| Cluster / unabhaengig | Domaene + verlangter Schluss hypothese:probe-y; 3 unabhaengige Faelle, 3 Belegwurzeln, 1 Zugang - Bericht der Signalquelle regelmuster |
| Hypothese | hyp-aba2e0031692: requires symptom:probe-c, symptom:probe-d (gemeinsamer Kern), concludes hypothese:probe-y - RULE_GAP-Lauf SIR-20261005T011226Z-0014 (01:12 UTC), Klasse aus belegten Fakten (RULE_GAP: Fakten vorhanden, es fehlt der Schluss) |
| Kreativ + Schatten | Kandidat im KREATIV-Gehirn (frag:regel:si:si-probe:hyp-aba2e0031692, Namensraum evaluation:si-probe), Schattenlauf in der Sandbox: davor unknown, danach 1 kreativer Treffer, 9 Wirkungsmeldungen der Bewertung |
| Entscheidung | Evaluator APPROVE (alle 13 geforderten Gates gruen, Zielfix FAIL -> PASS), Anwendung als Aenderungssatz CS-20261005T021613Z-1ed66678 mit Rueckweg, accepted (02:16 UTC): die Auswertung bleibt unknown - ein Schluss der Regel wird NICHT als Wahrheit ausgegeben |
| Wirkung / Schwelle | drei unabhaengige Wirkungsmeldungen bestaetigt des Feldzugangs (je Auswertungs-Referenz): Vertrauen 0,10 -> 0,15 -> 0,20, traegt: false (Balken nicht erreicht) |
| Auswahl (LAI/2) | verlangt zwei unabhaengige Evidenzfamilien (core/rueckkehr.py); fuer die Probe-Domaene gibt es sie nicht - die Regel bleibt Kandidat, es gibt keine Rueckkehr in die Wahrheit |
Ausloeser des Auftrags: A (wiederholter gleicher Schluss) und C (Fakten da, Schlussluecke kehrt wieder) sind angebunden (in den Beobachtungen dieselbe Messung), B (wiederholte Wirkung) traegt die Hypothese nach dem Ursprung; D
(wiederkehrender Konflikt mit derselben Aufloesung) ist NICHT angebunden - das Protokoll kennt die Aufloesung eines Konflikts nicht. Nicht ausreichend und nie Ausloeser: eine einzelne Beobachtung, ein Modellurteil, dieselbe Anfrage wiederholt, dasselbe Fragment oder derselbe Wurzelbeleg.
Nachweis: docs/produktionsautonomie/nachweise/ (Ledger E3), Lauf-Export docs/ausbau/nachweise/lauf_SIR-20261005T011226Z-0014.json, Werkzeug ops/selfimprove/probe_verkehr.py (Testverkehr des Feldzugangs; die Domaene si-probe dient nur den Proben des Kreises).
9. Detektor-Erweiterungen (Abschnitt 8)¶
Fuenf reale Signalquellen sind an den Autopiloten angebunden (ops/selfimprove/signale.py, fehler_zulauf.py, regel_zulauf.py, Option --signale); jede legt hoechstens einen Lauf an, scheitert fuer sich und entscheidet nichts - Klassifikation, Change-Spec, Gates, Veto und Versuchsgrenze sind die des Kreises.
UNABHAENGIG heisst: verschiedene Eingaben an verschiedenen Tagen (dieselbe Frage im Minutentakt ist ein Fall; derselbe Beleg, dasselbe Fragment oder dieselbe Quelle mehrfach ebenfalls).
| Quelle | Ergebnis im ersten echten Durchgang (05.10.2026 01:11 UTC, Autopilot --signale, Agent scripted, einmalig) |
Fund an den echten Daten | Behebung |
|---|---|---|---|
| Goldfall faellt | Grundlinie angelegt (signale/gold.json, 26 Faelle, 0 gefallen); ein Fall wird erst Problem, wenn er vorher gruen war und in allen Wiederholungen rot ist |
- | - |
| drei gleiche Fehler (nach verletzter Eigenschaft) | Fehlerbuch des Servers live (GET /v1/selfimprove/fehlerbuch 200, 29 Stellen im api_server), keine_aenderung, noch kein Eintrag |
- | - |
| wiederkehrende Unknowns -> DATA | 47 Gruppen mit mindestens drei unabhaengigen Faellen (3.665 Eintraege in 14 Tagen), Lauf 0013 (Bauchspeicheldruese, 4 Fragen) -> sicherer Datenkreis -> 3 Versuche, Evaluator REJECT (G24 Zielfix FAIL -> FAIL) -> unresolved, nichts deployt | (1) nur die ersten 20 Gruppen wurden geprueft - die einzige mit Beleg stand auf Rang 22; (2) der strenge Beleg nahm aus "ist ein quer im Oberbauch ... Druesenorgan" die Kategorie "quer"; (3) HTTP 429 der Wikipedia bei wiederholten Abfragen | alle Gruppen, Budget 8 Pruefungen je Durchgang (LENNY_SI_UNKNOWN_BUDGET), gemerkte Absagen (24 h bzw. 15 min); ein kleingeschriebenes Einzelwort ist nie Kategorie, Ortsadverbien eroeffnen keine (Tests) |
| Regelmuster -> RULE | Lauf 0014 (siehe Abschnitt 8): APPROVE, accepted |
- | - |
| Konfigurationsabweichung -> CONFIG | Lauf 0015 (LENNY_ENABLE_URSACHE_ANSWERS=1, 33 Luecken-Fragen) -> 3 Versuche REJECT: G2 (test_compose_zeile_steht_aus) und G24 -> unresolved |
die Suite schreibt die Grundstellung AUS aller drei Schalter der Allowlist fest (Freigabe durch die Entwickler); die Quelle schlug sie trotzdem vor | FESTGESCHRIEBEN: ein Schalter, dessen Grundstellung ein Test festhaelt, wird nie vorgeschlagen - faellt der Test (die Freigabe), ist er frei (Tests) |
Nach den Korrekturen: Lauf 0016 (DATA_GAP, Begriff "Tinktur") - vom Planer-Job selbst, ohne jede Handarbeit. Im Durchgang von 06:41 UTC (--signale) fand die Unknown-Quelle im Luecken-Protokoll vier Fragen "Was ist Tinktur?" an drei Tagen (23., 26. und 28.09.; drei unabhaengige Faelle) mit strengem Wikipedia-Beleg, legte den Lauf an
(SIR-20261005T064157Z-0016, 06:41:57 UTC), der sichere Datenkreis baute den Datenstapel CAND-9e06eb65d7a2 (fragment_training, Quelle wikipedia_de, Agent controller-daten) und bewertete ihn: APPROVE, alle 13 geforderten Gates gruen, Zielfix FAIL -> PASS (06:58 UTC, 17 Minuten nach dem Anlegen). Der Deploy wartet bewusst:
waehrend der Probation von Problem A (CODE) deployt der Autopilot keine Daten (Embargo - ein Daten-Deploy verfaelschte die Messung des Watchers); der Planer holt ihn nach, sobald keine CODE-Probation mehr laeuft (voraussichtlich erst nach der Probation von Problem B, die auf die von A folgt). Andere Gruppen uebersprang die Quelle im selben Durchgang mit Grund und merkte die Absage (z. B. Wikipedia 404 fuer ASCII-gefaltete Schreibweisen wie "Gemaelde", "der erste Satz nennt keine Oberkategorie").
Die Funde sind genau der Zweck der echten Daten: der Datenkreis und der Evaluator haben die unbrauchbaren Kandidaten abgelehnt (nichts kam in die Produktion), und die Quellen sind danach strenger. Belege: docs/ausbau/nachweise/lauf_SIR-20261005T0112*.json, lauf_SIR-20261005T0113*.json, die Evaluator-Bewertungen bewertung_SIR-20261005T01*.
10. Auto-Truth-Status (Abschnitt 7, E5, E6)¶
SAFE-CLOSED. Gebaut und getestet (core/evidenzfamilie.py, core/wahrheitspromotion.py, core/si_changeset.py, ask_lenny.py, 41 Tests): Evidenzfamilien (evidence_family, root_source_id; mindestens zwei unabhaengige Familien, Wikipedia und Wikidata zaehlen als EINE, fail-closed), Vorher/Nachher je atomarer Charge
(Gold, Replay, Zielwirkung auf Datenebene, Regression), ein Aenderungssatz je Promotion mit exaktem Rueckweg (Konflikte werden gemeldet, die Admin-Sperrtabelle bleibt unberuehrt), Wirkungsbeobachtung mit selbsttaetigem Rueckweg, Aktivierungsbedingungen. Der Auto-Pfad ist fail-closed: ohne
ausreichende Evidenz evidenz_unzureichend (7 Tage Pause), ohne Messweg (LENNY_PROMOTION_CHARGE_RUNNER) charge_nicht_verfuegbar; der Produktionsschalter LENNY_ENABLE_AUTO_WIKI_OLLAMA_PROMOTION=0 bleibt aus.
| Nachweis | Ergebnis |
|---|---|
| E5 (eine Familie) | keine Promotion: Evidenz-Tor im Auto-Pfad (Unit-Test) und Stufe e5_eine_familie der Sandbox-Testpromotion |
Sandbox-Testpromotion (ops/selfimprove/auto_truth_nachweis.py --sandbox, 7,3 s) |
auf Datenbankkopien mit dem echten Antwortweg: Charge angewandt (ACCEPT, Zielwirkung im Datenstand), Beobachtung ohne Befund, harter Befund -> Rueckweg, exakter Rueckweg (fremde Aenderung, Ursprung und Admin-Sperre bleiben), Antwort nach dem Rueckweg wie vorher |
Aktivierungsstatus am echten Bestand (--status) |
SAFE-CLOSED; fehlt: zwei unabhaengige Familien real testbar, Lauf-Runner aktiv, Gold-Schranke gruen |
| E6 (zwei Familien) | nicht real verfuegbar (siehe Abschnitt 11); eine synthetische zweite Familie gibt es nur in der Sandbox-Testpromotion und ist dort als synthetisch markiert - kein Beleg fuer die Produktion |
Ehrlich: Die Zielwirkung ist eine Wirkung im DATENSTAND; ob eine aufgenommene Aussage sofort beantwortet wird, entscheidet weiterhin das Vertrauen (Stabilitaet oder externe Verifikation, ask_lenny._vertrauensarm). Beleg: docs/produktionsautonomie/nachweise/auto_truth_3784085.json.
11. Evidenzfamilien¶
Am echten Bestand (lesend, im Container, 05.10.2026): 22.698 Fragmente der Wahrheit, davon 5.982 mit Beleg; alle Belege gehoeren zur Familie wikimedia; 0 Fragmente tragen Belege aus zwei unabhaengigen Familien. Eine zweite unabhaengige Quelle wurde
bewusst NICHT erfunden oder nur fuer die Zahl eingefuehrt (Abschnitt 12 des Auftrags). Die Auto-Truth-Promotion bleibt deshalb aus; das ist kein Blocker der uebrigen Produktionsautonomie (Abschnitt 15 des Auftrags).
12. Rollback-Bereinigung (Abschnitt 9)¶
Werkzeug ops/selfimprove/aufraeumen.py (28 Tests; Trockenlauf und Ausfuehrung, Muster-Pruefung auch auf dem Host, docker rmi ohne -f). Behalten: aktive Version samt Rollback-Ziel, Ziel jeder laufenden Probation und jedes offenen Laufs, die letzten drei vollstaendig gueltigen Staende
(Verzeichnis mit Compose, Archiv, Plan UND Abbild-Tag mit der im Plan genannten ID), alles juenger als 6 Stunden. Ausgefuehrt am 05.10.2026 00:53 UTC (Beleg docs/produktionsautonomie/nachweise/rollback_bereinigung_20261005T0053Z.json):
| Messgroesse | vorher | nachher |
|---|---|---|
| Rollback-Verzeichnisse | 20 (18,4 MB) | 4 (3,7 MB) |
Abbild-Tags v01b-lenny-api:rb-*/rollback-* |
22 | 5 |
| freier Platz (Rollback-Ordner) | 28,94 GB | 28,96 GB (+15,06 MB) |
| freier Platz (Docker-Wurzel) | - | +0,15 MB (die Schichten der Staende sind geteilt) |
/health-Identitaet |
Commit 3784085, Abbild-Digest, Umgebungshash | unveraendert |
| Rollback-Ziel der aktiven Version | rb-d48293942fca-20261005t003056z |
weiter vollstaendig (rollback_bereit ok) |
Zweite Ausfuehrung (Endstand, 05.10.2026 06:43 UTC) nach den drei Deploys des Tages: es standen wieder 11 Verzeichnisse (10,5 MB) und 12 Abbild-Tags; entfernt wurden die vier aelteren als 6 Stunden und nicht referenzierten (3,7 MB), uebrig sind 7 Verzeichnisse (6,8 MB) und 8 Tags. Health unveraendert, das Rollback-Ziel der aktiven Version und das Ziel der laufenden Probation (rb-b787d8fc3bf3-20261005t060339z) vollstaendig vorhanden, 0 Loeschfehler (docs/produktionsautonomie/nachweise/rollback_bereinigung_20261005T0643Z.json).
Keine Datenbanken, keine Audit-Nachweise und keine fremden Abbilder wurden angefasst. Beobachtung ausserhalb des Auftrags: docker system df meldet 128,5 GB freigebbare Abbilder (84 %) - nicht Teil von Abschnitt 9, nicht angefasst.
13. Branch-Push (Abschnitt 10)¶
| Zeit (UTC) | Ereignis |
|---|---|
| 05.10. 00:56-01:07 | erster Push von selbstverbesserung blieb am Git Credential Manager haengen (git-credential-manager get, im timeout 280 abgebrochen). Ursache: vier VERWAISTE git-credential-manager.exe get-Prozesse (Elternprozess weg, Stunden alt) aus frueheren git-Aufrufen |
| 05.10. 01:08-01:10 | Prozesse abgeraeumt, git push origin selbstverbesserung ohne Zeitlimit im Hintergrund: 9ba0f54..3784085 (18 Commits, 37 Dateien; vorher Scan der Aenderungen auf Schluessel, Tokens und private Schluessel: keine Treffer; keine temporaeren Produktionskopien im Repository) |
| 05.10. 07:02-07:10 | Endpush mit dem Abschlussstand: PUSH_AUTH_BLOCKED (zwei Versuche, jeder nach 5 Minuten beendet). Der Git Credential Manager (Anbieter generic, Gitea-OAuth gegen git.mycubeserver.com) findet keine gespeicherten Zugangsdaten und kann den OAuth-Aktualisierungstoken nicht erneuern (Spur des Credential Managers: unauthorized_client: token was already used); der Browser-Ablauf (Gitea "Anwendung autorisieren") lief damals nicht durch, und im Terminal ohne Tastatur fragt git per /dev/tty vergeblich nach Benutzername und Kennwort. Eine OAuth-Freigabe ist nicht Sache der Automatik, und Zugangsdaten werden weder gesucht noch ersetzt (Abschnitt 10 des Auftrags: PUSH_AUTH_BLOCKED dokumentieren und weiterarbeiten). |
| 05.10. 15:01 | Endpush gelungen (auf Anweisung des Administrators wiederholt): 9a37300..ff1cc2b, 19 Commits. Der Credential Manager holte die Anmeldung diesmal innerhalb von 4 Sekunden und speicherte sie (ob die Gitea-Freigabe im Browser selbsttaetig durchlief oder vom Administrator bestaetigt wurde, zeigt seine Spur nicht; ich habe nichts freigegeben); git ls-remote origin selbstverbesserung bestaetigt ff1cc2b. Vorher Geheimnis-Scan: 63 geaenderte Dateien, 0 Treffer; keine Datenbanken, Schluessel oder Produktionskopien. Berichtigung: als bisherigen Remote-Stand meldete git 9a37300 (der Stand des Zweigs um 03:09 MESZ), nicht 3784085, wie das lokale Tracking zeigte; 9a37300 ist ein Vorfahr des Endstands, es war ein reiner Fast-Forward, nichts ging verloren. |
Nachgeholt (15:01 UTC): der Stand ist vollstaendig committet, per Geheimnis-Scan geprueft und gepusht. Die Kandidaten-Branches si/CH-* (Audit-Spur der Selbstverbesserung) liegen weiter NUR lokal - sie zu pushen (git push origin "refs/heads/si/*:refs/heads/si/*") ist eine Entscheidung des Administrators und wurde nicht ohne Auftrag getan.
14. [DEUTUNG] KeyError 'JaNein' (Abschnitt 11)¶
| Thema | Befund | Beleg | Status |
|---|---|---|---|
| Ursache | frage_deutung._FORM_ABSICHT kannte die Formen JaNein und Urs nicht; die Deutung wurde bei jeder Ja/Nein-Frage mit KeyError: 'JaNein' uebersprungen (abgefangen, die Antwort blieb unveraendert - kein Hard-Blocker) |
Commit 3479710 | behoben |
| Fix | die Formen sind im Vertrag; Wirk hat keine Absicht und faellt auf die Tafel zurueck | core/frage_deutung.py, tests/test_deutung_ja_nein.py (6 Regressionstests) |
DONE |
| Laufzeit vorher (Produktion d482939, 05.10. 00:45 UTC) | dreimal [DEUTUNG] uebersprungen: KeyError: 'JaNein' bei drei Ja/Nein-Fragen; Fehlerbuch-Endpunkt noch 404 |
docs/produktionsautonomie/nachweise/pa11_vorher_d482939.json |
belegt |
| Laufzeit nachher (Produktion 3784085, 00:50 UTC) | dieselben Fragen, gleiche Antworten, kein DEUTUNG/KeyError/Traceback im Container-Log; Fehlerbuch 200, 0 Eintraege |
docs/produktionsautonomie/nachweise/pa11_nachher_3784085.json |
DONE |
| Laufzeit am Produktionscommit (0d7f4e8, 06:42 UTC) | dieselben Fragen: HTTP 200, keine DEUTUNG-/KeyError-/Traceback-Zeile, Fehlerbuch 200, 0 Eintraege (core/frage_deutung.py seit 3784085 unveraendert) |
docs/produktionsautonomie/nachweise/pa11_nachher_0d7f4e8.json |
DONE |
15. Vollstaendige Tests¶
| Messung | Ergebnis |
|---|---|
Deploy-Schranke vor dem zweiten Sammel-Deploy (Commit b787d8f, 05.10.2026 05:21-05:38 UTC) |
tests/: 3.750 Tests, 0 Fehlschlaege, 0 Fehler, 21 uebersprungen (799 s); core/: 2.210 Tests, 7 Fehlschlaege + 24 Fehler = die bekannten Altfaelle, 2.081 gruen = die Grundlinie (163 s) - Schranke gruen |
Deploy-Schranke vor dem ersten Sammel-Deploy (3784085, 00:31-00:48 UTC) |
gruen (tests/ ohne Fehlschlag, core-Grundlinie 2.081) |
| Vollsuite mit angewandtem Fix von Problem A in einem Scratch-Worktree (05:04-05:17 UTC) | 3.727 gruen, 2 rot: der Selbsttest, der den Probe-Defekt voraussetzte (behoben), und ein Agent-Test, der nur an einer Kollision paralleler Laeufe scheiterte (isoliert gruen) |
| Neue Tests dieses Auftrags (Auswahl) | test_brain_guards_atomar 9, test_deutung_ja_nein 6, test_wahrheitspromotion 41, test_si_aufraeumen 28, test_si_headless_beweis 12, test_si_e2_beweis 11, test_si_e1_beleg 11, test_si_e7_beweis 3, test_si_probe_verkehr 6, test_si_signale 33 (u. a. Budget, gemerkte Absagen, festgeschriebene Schalter), test_si_controller 31 (Rebase im 3. Versuch), test_si_daten_quelle, test_si_identity 5, test_si_autopilot_betrieb 25, test_regel_zulauf 19, test_fehlerbuch 15, test_fehler_zulauf 20 |
Endstand - Vollsuite des Code-Stands der Zweigspitze af8a9b9 (05.10.2026 06:26-06:41 UTC, Deploy-Schranke unit_gates deploy-gate in einem frischen Worktree des Commits, danach entfernt; docs/produktionsautonomie/nachweise/vollsuite_af8a9b9.json):
| Stufe | Ergebnis |
|---|---|
tests/ |
3.755 Tests: 3.734 gruen, 0 Fehlschlaege, 0 Fehler, 19 uebersprungen, 2 erwartet fehlgeschlagen (729 s); keine flackernden Faelle |
core/ |
2.210 Tests: 7 Fehlschlaege + 24 Fehler (die bekannten Altfaelle der Grundlinie), 2.081 gruen = die Grundlinie (2.081), nichts ausgefallen (161 s) |
| Schranke | gruen |
Der Produktionscommit 0d7f4e8 selbst bestand dieselbe Schranke vor seinem Deploy (06:04-06:19 UTC; tests/ 3.754 Tests, 3.733 gruen, 0 Fehlschlaege; core/ 2.081 gruen); zur Zweigspitze af8a9b9 unterscheiden sich nur drei Dateien (Betriebsdokument, ops/selfimprove/controller.py - Planer-Seite, ein Test).
Danach kamen nur noch Dokumentation, Ledger und Nachweise. Die Schranke ist die der Produktion und wurde nicht abgeschwaecht (die sieben Fehlschlaege und 24 Fehler in core/ sind Altfaelle der Grundlinie, kein Teil dieses Auftrags).
16. Runtime-Smokes¶
Gemessen an der laufenden Produktion 0d7f4e8 (soweit nicht anders angegeben, 05.10.2026 06:23-06:43 UTC):
| Messung | Ergebnis | Beleg |
|---|---|---|
| Health | status: ok, Identitaet vollstaendig (Commit, Abbild, Konfiguration, Umgebung, Policy, Schema, Datenstand g54, Modelle gepinnt) |
Abschnitt 2, Deploy-Ereignis |
| Smoke (26 Gold-Faelle vorher/nachher) | hart: keine neuen Falschen, keine Verschlechterung, keine verlorene Provenienz, kein unerlaubtes Unknown; Absagequote 88,46 % vorher und nachher (3 richtig, 0 falsch, 23 unknown) | docs/ausbau/nachweise/lauf_SIR-20261002T214311Z-0001.json (deploy_event) |
| Security (8 Pruefungen) | alle gruen: Chat ohne Anmeldung 401, Dienstkonto ohne Admin-Endpunkt 403, Nutzer ohne Admin-Endpunkt 403 und ohne Kreis 403, anonym 401, Dienstkonto kann keine Sperre aufheben 403, Admin-Sperr-Ereignisse unveraenderlich (Trigger), Audit des Kreises lueckenlos | dito |
| Probation-Beobachtung des Watchers (erster Tick 06:25 UTC) | Admin-Sperre ok, 0 Tracebacks, Container ohne Neustart, Datenintegritaet ok, Gold-Smoke ok, Health ok, Identitaet ohne Abweichung, Tenant-Isolation (9 Faelle, 0 Lecks), Zielfix wirksam | Artefakt probation_events des Laufs 0001 |
| Probation-Beobachtung des Watchers, fortgeschrieben (Stand 05.10. 14:55 UTC) | 103 Ticks seit 06:25 UTC, hard_fail: false, keine harten Befunde, 0 rote Health-Durchgaenge; letzte Pruefung: Admin-Sperre, Container, Health, Identitaet und Zielfix ok; Gold-Smoke (14:30 UTC): Absagequote 88,46 % wie vorher, 0 falsch |
Artefakt probation_events des Laufs 0001 |
| E7 Admin-Veto | 26 Schritte gruen (Server-Sandbox, Stand 3784085): der Administrator sperrt, 3 Durchgaenge + Detektor + neue Evidenz bewegen nichts, 409 admin_gesperrt, die Aufhebung nur durch den Administrator (Dienstkonto 403), danach setzt der Autopilot fort, Audit-Kette lueckenlos |
docs/produktionsautonomie/nachweise/e7_admin_veto_autopilot_3784085.json |
| E8 Guard-Atomaritaet (06:43 UTC, Kopie der Produktions-DB im Container der Produktion) | die deployte atomare Fassung: 24.781 Schreibversuche mit ungueltigem Brain - 0 angenommen, 0 von 304.571 Beobachtungen mit unvollstaendigem Waechtersatz, 33 Installationen, 0 Fehler; Negativkontrolle ohne Huelle: 445.419 von 458.359 Beobachtungen sehen nur 45 von 46 Waechtern - die Messung sieht den Fehler; Kopie danach geloescht | docs/produktionsautonomie/nachweise/e8_guard_atomaritaet_produktion_0d7f4e8.json (frueherer Lauf an 3784085: ..._3784085.json; core/fragment_store.py ist seither unveraendert) |
PA-11 [DEUTUNG] (06:42 UTC) |
drei Ja/Nein-Fragen: HTTP 200, keine DEUTUNG-, KeyError- oder Traceback-Zeile im Container-Log, Fehlerbuch 200 mit 0 Eintraegen |
docs/produktionsautonomie/nachweise/pa11_nachher_0d7f4e8.json |
| Identitaet nach dem Lazy-Import | config_hash_env bleibt 24e43e2e... (seit dem Ausgangsstand unveraendert) |
identitaet_laufzeit_3784085.json; /health 06:28 UTC |
| Rollback-Bereinigung (Endstand 06:43 UTC) | 11 -> 7 Verzeichnisse (10,5 -> 6,8 MB), 12 -> 8 Abbild-Tags; Health unveraendert; das Rollback-Ziel der aktiven Version vollstaendig; keine Datenbank, kein Audit angefasst | docs/produktionsautonomie/nachweise/rollback_bereinigung_20261005T0643Z.json |
17. Verbleibende echte Blocker¶
| Punkt | Art | Stand |
|---|---|---|
| Auto-Truth (E6, Aktivierung) | Datenlage: im Bestand gibt es nur die Evidenzfamilie wikimedia; eine zweite unabhaengige Quelle wurde nicht erfunden |
SAFE-CLOSED - ausdruecklich belegt, dass keine unsichere Promotion erfolgt; kein Blocker der uebrigen Produktionsautonomie (Abschnitt 15 des Auftrags) |
| Probation von Problem A (24 h) und Bau + Probation von Problem B | zeitgebunden (Policy: 24 h Probation, hoechstens ein CODE-Kandidat gleichzeitig), laufen autonom weiter | A: probation seit 05.10. 06:23 UTC, Ende fruehestens 06.10. 06:23 UTC (08:23 MESZ), 103 Ticks des Watchers (Stand 14:55 UTC), kein harter Befund. B: Lauf 0012 queued, der Planer baut ihn danach selbst (Abschnitt 5). Weder von mir abzuwarten noch zu entscheiden |
| Lauf 0016 (DATA, Begriff "Tinktur") | approved, der Deploy wartet laut Embargo auf das Ende der CODE-Probation (A, danach B) |
deployt der Planer selbst; keine Handarbeit noetig |
| RULE-Zulauf aus organischem Verkehr | Datenlage: das Beobachtungsprotokoll des Servers laeuft erst seit 05.10. 00:48 UTC; der Beleg E3 nutzte eingespeisten Testverkehr des Feldzugangs in der Probe-Domaene si-probe |
der Mechanismus lief real und vollstaendig; organische Muster fliessen automatisch ein, sobald sie auftreten (--signale ist aktiv) |
| Auswahl in LAI/2 fuer Regelhypothesen | verlangt zwei unabhaengige Evidenzfamilien; fuer die Probe-Domaene gibt es keine | die Regel bleibt Kandidat (gewollt) |
| Ausloeser D des Regelzuflusses (wiederkehrender Konflikt mit derselben Aufloesung) | Datenlage: das Protokoll kennt die Aufloesung eines Konflikts nicht | nicht angebunden, benannt |
Kandidaten-Branches si/CH-* auf dem Remote |
Entscheidung des Administrators | lokal vorhanden, nicht gepusht |
| Wikipedia-Rate-Limit (HTTP 429) fuer die Belegsuche der Unknowns | extern | gemildert (Budget, gemerkte Absagen), nicht beseitigt |
| ASCII-gefaltete Begriffe im Luecken-Protokoll (z. B. "Gemaelde") | Wikipedia kennt keine Seite dazu (HTTP 404); die Quelle merkt die Absage fuer 24 h | nicht behoben (Auftrag Abschnitt 12: keine unnoetigen Erweiterungen) - eine Rueckfaltung ae/oe/ue waere ein moeglicher naechster Schritt |
| 128,5 GB freigebbare Docker-Abbilder (84 %) auf dem Host | Betrieb, ausserhalb von Abschnitt 9 | nicht angefasst |
AUTH_BLOCKED (Headless-Coding-KI) liegt nicht vor: die CLI ist angemeldet und hat den E1-Lauf gebaut. PUSH_AUTH_BLOCKED lag am Vormittag fuer den Endpush vor und ist behoben (Abschnitt 13: gepusht um 15:01 UTC, Remote ff1cc2b); es hat keinen anderen Teil des Auftrags aufgehalten.
Funde dieses Auftrags (alle behoben, mit Test)¶
| Fund | Wirkung | Behebung |
|---|---|---|
Identitaets-Drift durch einen nachtraeglichen Import (gemma_loop_server) |
Fehlalarm des Watchers, ein gesunder CODE-Kandidat (0011) wurde zurueckgerollt | si_identity rechnet mit der Umgebung des Prozessstarts (690d96e) |
Controller.rebasiere im 2./3. Versuch |
der Lauf blieb in reproducing, wo ihn kein Autopilot mehr anfasst (Lauf 0012) |
Befund bleibt, Messung vor dem Zustandswechsel, ein Spec-Fehler laesst nie einen Lauf haengen (1758fd7) |
| erster echter Headless-Lauf | die Coding-KI gab nach einem verweigerten Bash-Heredoc auf, kein Commit | der Auftrag nennt die erlaubten Bash-Formen; Transkript und Endtext werden gesichert |
| Unknown-Quelle | die einzige belegbare Luecke stand auf Rang 22 und wurde nie geprueft; die Wikipedia wurde alle 15 Minuten gedrosselt | alle Gruppen, Budget, gemerkte Absagen |
| strenger Wikipedia-Beleg | aus "ist ein quer im Oberbauch ... Druesenorgan" wurde die Kategorie "quer" | ein kleingeschriebenes Einzelwort ist nie Kategorie; der Datenkreis hatte den Kandidaten bereits per Messung abgelehnt |
| Konfigurationsquelle | schlug Schalter vor, deren Grundstellung AUS die Suite festschreibt (drei Bewertungen umsonst) | FESTGESCHRIEBEN |
| Selbsttest haengt vom Probe-Defekt ab | haette jeden echten Fix von Problem A an G2 scheitern lassen | der Defekt kommt als Test-Double; zweiter Sammel-Deploy vor dem Bau |
verwaiste git-credential-manager-Prozesse |
der Push haengt | abgeraeumt; im Handbuch dokumentiert |
| zwei Suiten gleichzeitig | Branch-/Worktree-Namen der Kandidaten kollidieren | im Handbuch dokumentiert; nie parallel |
Anhang: Abschlussstatus je Punkt (Abschnitt 14 des Auftrags)¶
Nicht pauschal "fertig": jeder Punkt mit Status, Commit, Tests, Runtime-Nachweis und Produktionsstand. Quelle: docs/produktionsautonomie/ledger.json.
DONE heisst: gebaut UND der geforderte Nachweis erbracht. BLOCKED nennt den Grund. NOT DONE: nicht real moeglich, nicht erfunden.
| ID | Punkt | Status | Kern | Commit | Tests | Runtime-Nachweis | Produktionsstand |
|---|---|---|---|---|---|---|---|
| PA-01 | install_brain_guards atomar (Abschnitt 1) | DONE | Waechter-Installation in EINER Transaktion; Fehler zwischen DROP und CREATE bringt die alten Waechter zurueck | 3479710 |
test_brain_guards_atomar.py |
E8 an der Produktionskopie: 24.781 Umgehungsversuche, 0 angenommen | seit 3784085, jetzt 0d7f4e8 (Datei unveraendert) |
| PA-02 | Problem B vollstaendig weiterfuehren (Abschnitt 2) | BLOCKED (zeitgebunden) | Lauf 0012 (Versuch 3) queued hinter der Probation von A; der Rollback-Fehlalarm ist behoben |
1758fd7 |
test_si_identity.py, test_si_controller.py |
lauf_SIR-20261004T214027Z-0012.json, identitaet_laufzeit_3784085.json |
wartet auf die Policy; baut danach autonom |
| PA-03 | Problem A wieder oeffnen und abarbeiten (Abschnitt 3) | DONE | Lauf 0001 wiedergeoeffnet, vom Planer headless gebaut, APPROVE 14/14, deployt, probation |
0d7f4e8 |
test_si_ch_3e2d574950cc.py, test_si_controller.py |
e1_...json, lauf_SIR-20261002T214311Z-0001.json |
0d7f4e8 seit 06:23 UTC (Probation bis 06.10.) |
| PA-04 | Headless Coding-KI produktionsfaehig (Abschnitt 4) | DONE | claude -p angemeldet; erster echter Lauf 01:01 UTC (0 Verstoesse); E1 darueber ohne Sitzung |
0d7f4e8 |
test_si_headless_beweis.py, test_si_agent.py, test_si_e1_beleg.py |
E:/si_work/headless_beweis.json, e1_...json |
wirksam im Planer-Job |
| PA-05 | Autopilot als 15-Minuten-Betriebsjob (Abschnitt 5) | DONE | Planer-Job alle 15 min, eine Instanz, Protokoll ohne Secrets, Fehler stoppen nichts | 91064e4 |
test_si_autopilot_betrieb.py |
autopilot.betrieb.jsonl (Kopie in den Nachweisen), Abschnitt 7 |
laeuft seit 04.10. 20:39 UTC |
| PA-06 | Natuerlicher RULE_GAP-Zulauf (Abschnitt 6) | DONE | Beobachtungen -> Cluster -> Hypothese -> Schatten -> Entscheidung (Lauf 0014 accepted) |
4bde769 |
test_regel_zulauf.py |
lauf_SIR-20261005T011226Z-0014.json |
Server-Teil seit 3784085 |
| PA-07 | Auto-Truth-Promotion auf Sicherheitsstandard (Abschnitt 7) | DONE | Evidenzfamilien, Vorher/Nachher, Aenderungssatz, Rueckweg gebaut; SAFE-CLOSED (nur Familie wikimedia) |
c0a9649 |
test_wahrheitspromotion.py |
auto_truth_3784085.json |
Schalter AUS (LENNY_ENABLE_AUTO_WIKI_OLLAMA_PROMOTION=0) |
| PA-08 | Detektor aus realen Produktproblemen erweitern (Abschnitt 8) | DONE | fuenf Signalquellen im Betrieb (Laeufe 0013 DATA, 0014 RULE, 0015 CONFIG; Fehlerbuch live); --signale im Planer-Job legte selbst Lauf 0016 (DATA) an |
4bde769 |
test_si_signale.py, test_regel_zulauf.py, test_fehler_zulauf.py |
lauf_SIR-20261005T0112*.json, lauf_SIR-20261005T064157Z-0016.json |
--signale im Planer-Job aktiv |
| PA-09 | Rollback-Artefakte bereinigen (Abschnitt 9) | DONE | aufraeumen.py; 20 -> 4 Verzeichnisse, danach Endstand 11 -> 7 |
3bd461e |
test_si_aufraeumen.py |
rollback_bereinigung_20261005T0053Z.json, ..._0643Z.json |
Health unveraendert, Rollback-Ziel vollstaendig |
| PA-10 | Branch selbstverbesserung sichern/pushen (Abschnitt 10) | DONE | Pushes am 05.10. 01:10 UTC und 15:01 UTC (9a37300..ff1cc2b, 19 Commits); dazwischen am Vormittag PUSH_AUTH_BLOCKED (Credential Manager), danach behoben; Geheimnis-Scan sauber (63 Dateien, 0 Treffer) |
ff1cc2b (Stand des Endpushs) |
- | Abschnitt 13, git ls-remote origin selbstverbesserung |
Remote = lokal (danach nur ein Protokoll-Commit zu diesem Push) |
| PA-11 | [DEUTUNG] KeyError 'JaNein' (Abschnitt 11) | DONE | _FORM_ABSICHT kennt JaNein/Urs; 6 Regressionstests |
3479710 |
test_deutung_ja_nein.py |
pa11_vorher_d482939.json, pa11_nachher_3784085.json, pa11_nachher_0d7f4e8.json |
kein KeyError mehr in der Produktion |
| E1 | autonomer Headless CODE (kein Sitzungs-Subagent) | DONE | autonomer Headless-CODE bis probation, alle elf Bedingungen |
0d7f4e8 |
test_si_e1_beleg.py |
e1_SIR-20261002T214311Z-0001_20261005T0624Z.json |
0d7f4e8 |
| E2 | schlechter CODE-Candidate wird automatisch REJECT | DONE | Kandidat mit Regression -> automatisch REJECT (G2), Produktion unveraendert | 8cd74a6 |
test_si_e2_beweis.py |
e2_SIR-20261002T214311Z-0001_20261005T0155Z.json |
unveraendert |
| E3 | RULE aus Beobachtungen (automatische Regelhypothese bis Entscheidung) | DONE | RULE aus drei Beobachtungen -> Hypothese -> Schatten -> accepted; Vertrauen 0,10 -> 0,20 |
4bde769 |
test_regel_zulauf.py, test_si_probe_verkehr.py |
lauf_SIR-20261005T011226Z-0014.json |
Regel im KREATIV-Gehirn |
| E4 | DATA aus wiederholten Unknowns | DONE | DATA aus wiederkehrenden Unknowns -> sicherer Datenkreis: Lauf 0013 abgelehnt (nichts deployt); Lauf 0016 (Tinktur) vom Planer-Job selbst angelegt, gebaut, APPROVE 13/13 | 22053a4 |
test_si_signale.py, test_si_daten_quelle.py |
lauf_SIR-20261005T011223Z-0013.json, lauf_SIR-20261005T064157Z-0016.json |
0016: Deploy wartet auf das Ende der Probation von A (Embargo) |
| E5 | Auto-Truth ohne ausreichende Evidenz: keine Promotion | DONE | eine Familie -> keine Promotion (Evidenz-Tor, Sandbox-Stufe) | c0a9649 |
test_wahrheitspromotion.py |
auto_truth_3784085.json |
Schalter AUS |
| E6 | Auto-Truth mit zwei unabhaengigen Familien (nur wenn real verfuegbar) | NOT DONE | nicht real verfuegbar: keine zweite unabhaengige Familie im Bestand; nicht erfunden | - | Abschnitt 11 | SAFE-CLOSED | |
| E7 | Admin-Veto waehrend eines autonomen Vorgangs | DONE | Admin-Veto im autonomen Vorgang: admin_gesperrt, keine Wiederaufnahme durch eine Automatik |
1758fd7 |
test_si_e7_beweis.py |
e7_admin_veto_autopilot_3784085.json |
Server-Sandbox, Stand 3784085 |
| E8 | Guard-Atomaritaet unter parallelem Schreiben | DONE | Guard-Atomaritaet unter parallelem Schreiben: kein Zeitraum ohne wirksame Waechter | f3fb74a |
test_brain_guards_atomar.py |
e8_guard_atomaritaet_produktion_0d7f4e8.json |
0d7f4e8 |
Begruendung (Abschnitt 15 des Auftrags): Headless-CODE funktioniert real (E1: claude -p im Planer-Job bis in die Probation, Abschnitt 6), der regelmaessige Autopilot laeuft als Betriebsjob (Abschnitt 7, 69 Takte, alle Exitcode 0) und der RULE-Zulauf funktioniert real in der Produktion (E3, Abschnitt 8: Protokoll, Cluster, Hypothese, Schatten, Entscheidung - mit eingespeistem Testverkehr als Eingabe, organische Muster stehen noch aus; der DATA-Zulauf arbeitet dagegen schon mit echten Daten, Lauf 0016). Auto-Truth ist ausdruecklich SAFE-CLOSED (Abschnitt 10/11) - es erfolgt keine unsichere Promotion; das verhindert den Status nicht. Offen und benannt: die zeitgebundene Probation von A, Bau und Probation von B (Abschnitt 17), der Ausloeser D und E6 (Datenlage).
LENNY PRODUKTIONSAUTONOMIE: COMPLETE