Eine Write-Loop, die niemals etwas merged
Mein Homelab-Gehirn hat Probleme bemerkt und nichts dagegen unternommen. Den Kreis zu schließen bedeutete vier menschliche Gatekeeper und einen Executor, dessen Hauptmerkmal ist, dass er bei einem Draft-PR stehenbleibt.
Eine Zeit lang war die Memory-Layer meines Homelabs ein hervorragender Beobachter. Sie konnte mir sagen, wenn ein Decision Record veraltet war, wenn ein dokumentierter Service nicht mit dem laufenden übereinstimmte oder wenn eine Annahme widersprochen wurde. Dann hörte sie damit auf, weil das Einzige, was nach dem Feststellen passierte, war, dass ich einen Report las.
Genau an diesem Punkt geht selbstgehostete Automatisierung meistens schief, deshalb will ich genau erklären, was ich gebaut habe – und was nicht.
Erkennen, vorschlagen, genehmigen, handeln
Jeder Analystenfund wird auf einen typisierten Vorschlag abgebildet:
| Fund | Vorschlag | Was die Genehmigung bewirkt |
|---|---|---|
| veraltete Entscheidung | Supersession-Entwurf | legt eine Drafting-Task an |
| undokumentiertes Subjekt | Doku-Task | legt eine Docs-Task an |
| deklarierte vs. beobachtete Abweichung | Reconciliation | legt eine Placement-Task an |
| widersprochene Tatsache | Fact Reconciliation | füllt eine Correction-Queue, die selbst nochmal separat freigegeben wird |
Die letzte Zeile ist die spannende. Eine genehmigte Fact Reconciliation ändert keine Tatsache. Sie erhält das Recht, als Fact Change vorgeschlagen zu werden, den dann wieder ein Mensch genehmigt. Zwei Gates, bevor sich ein gespeicherter Glaube bewegt.
Drei Einschränkungen, die es sicher machen
Belegt oder verworfen. Ein Vorschlag ohne Zitat wird blockiert und gezählt, aber nie vorgeschlagen. Gleiche Regel wie überall sonst im System.
Begrenztes Fan-out, partitioniert nach Co-Location. Maximal ein Vorschlag pro Subjekt und Typ. Ohne diese Regel würde ein einzelnes Host-Problem zu einem Vorschlag pro Service auf diesem Host führen, und du hättest eine Queue mit hundert Einträgen für ein einziges Problem. Das Limit liegt bei 25.
Zweistufig, niemals automatisch angewendet. Detection ist ein reiner Read. Queueing hängt eine git-ignorierte Pending-Datei an. Nur ein explizites Approve-with-Apply schreibt in die Commit-Schicht – und die Commit-Schicht ist eine Knowledge-Taskliste, keine Infrastruktur.
Das entscheidende Merkmal des Executors
Der letzte Schritt verwandelt einen genehmigten Vorschlag in einen Branch, einen Commit und einen Draft Pull Request, der niemals gemerged wird. Das ist keine Einschränkung, die ich aufheben will; das ist das Produkt.
Standardmäßig ist das Feature hinter einem Environment-Flag deaktiviert, weigert sich, bestehende Dateien zu überschreiben, fügt immer nur eine neue Markdown-Datei hinzu und fasst niemals Compose-Files, Container oder Hosts an. Die komplette Kette vom Erkennen bis zum gemergten Change durchläuft vier menschliche Gates.
Ich habe das einmal live getestet, bei einem echten Fund zu einem Backup-Repository. Es hat den PR eröffnet. Es hat den PR nicht gemerged. Beide Hälften dieses Satzes waren der Test.
Warum nicht einfach automatisch anwenden
Weil der Wert der Schleife darin liegt, dass sie bemerkt – und Bemerken ist günstig zu überprüfen, während Handeln teuer rückgängig zu machen ist. Der Engpass in meinem Homelab war nie meine Fähigkeit, Änderungen durchzuführen. Es war das Wissen, welche Änderungen nötig sind. Den Teil zu automatisieren, in dem ich gut bin, um den Teil zu sparen, in dem ich schlecht bin, wäre der falsche Trade gewesen.
Ein System, das mir jeden Morgen zuverlässig fünf korrekte, zitierte, mit einem Klick überprüfbare Tasks liefert, gibt mir bereits den Großteil des Werts, den volle Autonomie verspricht – bei einem Bruchteil des Blast Radius.
Geschrieben von
Adrian Romo
Senior Backend Engineer für skalierbare Python-APIs, AWS-Lambda-Architekturen, Voice-Systeme und Enterprise-Integrationen.
Verwandt
Weiterlesen
Der Alarm, der etwas benannte und es zum Beweis machte
Fünf Warnmeldungen mit hoher Schwere aus meinem eigenen Monitoring. Alle fünf betrafen denselben Fehler: Ein Datensatz benennt etwas, das als Beobachtung einer Eigenschaft gelesen wird, die nie gemessen wurde.
Einem System beibringen, „Ich weiß es nicht“ zu sagen
Das Nützlichste, was mein Homelab-Gehirn tut, ist zu verweigern, eine Antwort zu geben. Entweder belegt jede Aussage die Tatsache, die sie hervorgebracht hat, oder sie erreicht mich gar nicht erst.
Ein zweites Gehirn, das sich weigert zu raten
Das Beantworten einer operativen Frage kostete ein lokales Modell bisher einen Dump von 30–50K Tokens. Ich habe eine kompilierte Memory-Schicht gebaut, die das in 2–5K erledigt und sich selbst blockiert, wenn sie keine Quelle angeben kann.
Weiter geht's
Wohin als Nächstes?
Stöbere durch weitere technische Texte, sieh dir die Engineering Case Studies an oder melde dich direkt.