Betrieb

Eine grüne Prüfung, die nichts verglichen hat

Wochenlang meldete eine Prüfung Erfolg, ohne je zwei Dinge miteinander zu vergleichen. Der teuerste Fehler war nicht die Lücke, sondern das Häkchen darüber.

Jede Schema-Änderung an dieser Datenbank kommt als Datei im Repository und wird beim Zusammenführen angewendet. Damit die Dateien und die Produktion nicht auseinanderlaufen, gibt es eine tägliche Prüfung namens «Dateien und Ledger stimmen überein». Sie meldete wochenlang Erfolg.

Sie verglich nichts. Der Befehl, den sie ausführte, druckt eine Tabelle und beendet sich mit Erfolg, egal was in der Tabelle steht. Eine Prüfung, deren Fehlerpfad nie ausgeführt wird, ist keine Prüfung - sie ist ein Häkchen, auf das sich alle verlassen.

Was sie hätte finden sollen

Als das Repository in eine Organisation umzog, blieb die Datenbank-Integration beim alten Konto zurück. Neun Pull Requests wurden an diesem Nachmittag zusammengeführt, und kein einziger erreichte die Datenbank. Nichts schlug fehl: die Prüfungen waren grün, die Merges sauber. Das einzige Anzeichen waren 110 Dateien gegen 109 Zeilen im Ledger.

Eine zusammengeführte Migration sieht angewendet aus, weil der Merge geklappt hat.

Heute liest die Prüfung die angewendeten Versionen über die Management-API, vergleicht sie mit den Dateien und schlägt bei drei Formen fehl: eine angewendete Version ohne Datei, eine Datei älter als die neueste angewendete Version, die nie lief, und eine Datei, die zusammengeführt und nie angewendet wurde. Kann sie nicht prüfen, schlägt sie fehl, statt zu warnen - denn ein blinder Detektor, der Erfolg meldet, ist genau die Form, gegen die sie existiert.

Wer über die Prüfung urteilt

Die zweite Lehre war unbequemer. Die Prüfungen laufen aus dem Stand des Zweigs, den sie prüfen. Ein Pull Request kann also eine Garantie schwächen und im selben Schritt den Test umschreiben, der sie hält - und grün zusammenführen. Seit Ende August urteilt über die Kontrollfläche - Workflows, Skripte, Prüf-Konfiguration, Abhängigkeitsdateien - eine Prüfung, die den Zweig nie auscheckt und ihre Definition aus dem Hauptzweig nimmt. Berührt eine Änderung diese Fläche, braucht sie ein Etikett, das ein Mensch anbringt; ein Bot-Etikett wird abgelehnt, weil genau das einmal funktioniert hat.

Sechs Korrekturen folgten der ersten Fassung, jede aus einer gemessenen Lücke. Eine davon: ein Vollständigkeitstest zählte Namen statt Dateiobjekten, und weil eine Umbenennung zwei Namen erzeugt, wirkte die Zählung erfüllt, während eine geschützte Datei ungeprüft durchging. Die allgemeine Form davon ist die eigentliche Lehre - eine Kalibrierung, die sich mit der falschen Menge zufriedengeben lässt, ist so gut wie keine.

Offen und notiert: diese Prüfung ist heute noch nicht als erforderlich eingetragen. Sie meldet sich, aber sie hält nichts auf. Das ist ein Eintrag auf der Liste, kein Satz, den wir weglassen.