Verifikations-Gates und Automatisierung
Überblick
Wo Verifikation stattfindet und was sie real macht. CI ist die Quelle der Wahrheit; der lokale Hook ist ein praktischer Spiegel. Eine Regel, die nicht durch ein unumgehbares Gate erzwungen wird, ist ein Vorschlag (Prinzip 7) – daher deklariert das Projekt, wo die Plattform dieses Gate nicht bereitstellen kann, den Modus als advisory und trägt die Regel bewusst, statt sich auf Mechanismen zu verlassen, die es nicht hat.
Die Regeln
- Ein Task-Runner ist der kanonische Einstieg für jeden täglichen Vorgang – Test, Build, Dev, Deploy sind benannte Rezepte. Ein Vorgang, der nur im Kopf einer Person existiert, passiert nicht zuverlässig und kann keinem Agenten übergeben werden.
- CI ist die Quelle der Wahrheit – autoritativ, geteilt und unumgehbar, wo immer die Plattform es erlaubt. Lint, Typprüfung, Vertragsprüfungen, Tests, Sicherheitsscans, Commit-Validierung – all das läuft hier und muss vor einem Merge bestanden werden im Modus
enforced. Was CI sagt, zählt. Im Modusadvisorylaufen dieselben Prüfungen und melden Ergebnisse; das Gate ist Disziplin, und das ist nie ein Grund, weniger Prüfungen auszuführen. - Der Pre-Push-Hook ist ein Presubmit-Spiegel, keine Mauer. Er führt dieselben schnellen Prüfungen lokal aus, sodass du CI wahrscheinlich bestehst, bevor du pushst. Er ist explizit umgehbar (
--no-verify) und läuft nur dort, wo die Toolchain installiert ist. Seine Aufgabe ist Geschwindigkeit und frühes Feedback, nicht Durchsetzung. Der Hook ist nie ein Gate; CI ist das Gate, wo immer die Plattform es erlaubt. - Halte CI schnell, indem du abstufst, nicht indem du Prüfungen entfernst. Wenn die vollständige Suite den Rahmen jedes PRs sprengt, teile Presubmit (schnelle Teilmenge, blockiert PR) von Postsubmit (vollständige Suite, nach Merge, blockiert Promotion) – verschiebe niemals autoritative Prüfungen zurück in den umgehbaren Hook.
- Container-Images werden in CI gebaut, identifiziert durch Content-Digest und veröffentlicht mit einer Provenance-Attestation. Halte es durch Registry-Layer-Caching oder einen selbstgehosteten Runner erschwinglich – niemals, indem der Build zurück auf einen Laptop verlagert wird, wo die Herkunft des Artefakts von niemand anderem verifiziert werden kann.
- Deklariere den Enforcement-Modus.
enforced– CI blockiert den Merge via Branch-Protection; was CI sagt, zählt.advisory– CI läuft und meldet, und das Gate ist Disziplin, weil Branch-Protection nicht verfügbar ist (z. B. ein privates Repository im kostenlosen Plan). Advisory ist legitim; Enforcement zu behaupten, das man nicht hat, ist es nicht. Gib den Modus im ersten Entscheidungsprotokoll des Projekts an und nenne, was ihn in denenforced-Modus überführen würde.
Die benannte Spannung
Ein umgehbarer lokaler Presubmit ist schnell, aber nicht durchsetzbar; die autoritative CI ist durchsetzbar, aber langsamer. Löse dies, indem du jedem eine andere Aufgabe gibst – der Hook optimiert die innere Schleife, die CI die Korrektheit des Nachweises – und indem du CI, nicht den Hook, zum Blockieren des Merges machst.
Häufige Rechtfertigungen
| Ausrede | Realität |
|---|---|
| „Der Pre-Push-Hook führt die Tests aus, also kann CI minimal sein“ | Der Hook ist umgehbar und toolchain-abhängig. Er kann nicht die Quelle der Wahrheit sein. CI muss alles erneut ausführen. |
„Ich mache einfach dieses eine Mal --no-verify“ | In Ordnung – denn CI wird es trotzdem abfangen. Genau deshalb ist CI das Gate, nicht der Hook. |
| „CI ist langsam, verschieben wir die Tests in den Hook“ | Stufe CI ab (Presubmit/Postsubmit); verlege niemals autoritative Prüfungen auf ein umgehbares Gate. |
| „CI-Builds sind langsam, ich baue das Image lokal“ | Ein auf einem Laptop gebautes Artefakt hat eine Herkunft, die niemand sonst verifizieren kann. Behebe die Latenz mit einem Layer-Cache oder einem selbstgehosteten Runner. |
| „Branch-Protection kostet Geld, also gelten die Regeln nicht“ | Die Regeln gelten; die Durchsetzung unterscheidet sich. Deklariere den Advisory-Modus und behalte die Disziplin bei, oder mach das Repository öffentlich und erhalte Schutz kostenlos. |
Rote Flaggen – STOP
- Autoritative Prüfungen, die nur in einem lokalen Hook existieren
- CI, das nicht erneut ausführt, was der Hook ausgeführt hat
- Ein Merge, der erlaubt wird, während CI rot ist
- Ein Image, das irgendwo außerhalb von CI gebaut oder per Tag anstatt per Digest befördert wird
- Ein Projekt, das sich so verhält, als ob CI den Merge blockiert, wenn keine Branch-Protection existiert
Vollständige Begründung: Artikel VIII der Verfassung, gebündelt unter engineering-constitution/references/engineering-constitution.md. Details zu Deploy/k8s: cloud-delivery-aks.