Delivery Gate – Mechanische Qualitätssperre für Claude Code
Ein Stopp-Hook, der drei Dinge prüft, bevor Claude eine Sitzung beenden kann, und dabei ausschließlich deterministische Prüfungen verwendet – Dateiänderungszeitstempel, Speichernutzung und Regex-Muster im Transkripttext. Keine KI-Inferenz.
Dies unterscheidet sich von Reasoning-Gates (wie self-audit): delivery-gate prüft maschinell überprüfbare Fakten; self-audit prüft die Ausgabequalität in vier Reasoning-Dimensionen. Zusammen bilden sie eine mehrschichtige Verteidigung:
- delivery-gate: „Wurde die Lernbibliothek heute aktualisiert? Ist der Speicherplatz sicher?“
- self-audit: „Ist der Dateiinhalt korrekt, vollständig und ehrlich?“
Dies entspricht dem gleichen Muster wie CI-Pipeline-Gates – automatisierte, deterministische Prüfungen, die maschinenlesbare Fakten verifizieren, anstatt sich auf selbstberichtete Statusangaben zu verlassen.
Was es prüft
| Prüfung | Mechanismus | Bei Treffer |
|---|---|---|
| Rationalisierungsmuster | Regex auf Transkript-Ende | Nur Warnung (blockiert nie) |
| Veraltete Lernbibliotheken | mtime auf 5 konfigurierbaren Pfaden | Warnung, wenn einige veraltet; Block, wenn >=3 veraltet ODER growth-log veraltet + komplexe Aufgabe |
| Speicherplatz < 50 GB | shutil.disk_usage | Warnung |
| Speicherplatz < 15 GB | shutil.disk_usage | Block (exit 2) |
Die Rationalisierungserkennung warnt vor Mustern wie „Tests für jetzt überspringen“ und „bereits bestehender Fehler“ – oberflächliche Signale, dass das Denken möglicherweise abgekürzt wurde. Sie blockiert nie allein, da Regex-Heuristiken falsch positive Ergebnisse liefern können. Die Blockierbedingungen sind: kritischer Speicherplatz, >=3 Lernbibliotheken veraltet ODER growth-log spezifisch veraltet (beide erfordern komplexe Aufgabe mit >=3 Bearbeitungen).
Warum
Die integrierten Prüfungen von Claude Code decken Codequalität ab (Build → Typ → Lint → Test). Aber es gibt eine andere Fehlerart: Der Agent erzeugt funktionierenden Code, während die Sitzungshygiene vernachlässigt wurde – Lernerfahrungen nicht festgehalten, Rationalisierungen abgekürzt, Speicherplatz wird stillschweigend knapp.
Über viele Sitzungen von „liefern und vergessen“ hinweg ist der Mensch nicht gewachsen. Dieser Hook setzt die Gewohnheit durch: Komplexe Aufgabe → muss Lernbibliotheken aktualisieren.
Installation
cp quality-gate.py ~/.claude/scripts/
Zu ~/.claude/settings.json hinzufügen:
{
"hooks": {
"Stop": [{
"hooks": [{
"type": "command",
"command": "python3 ~/.claude/scripts/quality-gate.py",
"timeout": 5000
}]
}]
}
}
Lernbibliotheken
Erstellen Sie diese Dateien im Memory-Verzeichnis Ihres Projekts. Der Hook prüft, ob mindestens eine davon heute aktualisiert wurde:
memory/
├── growth-log/ # Tägliche Lerneinträge (Verzeichnis)
├── decisions/log.md # Entscheidungsprotokoll
├── output-index.md # Index der Sitzungsausgaben
├── ratings-tracker.md # Bewertungen von Fähigkeiten im Zeitverlauf
└── tooling_capabilities.md # Bekannte Werkzeuginventar
Passen Sie das LIBS-Dictionary an Ihre eigene Dateistruktur an.
Konfiguration
Editieren Sie quality-gate.py:
| Variable | Standard | Zweck |
|---|---|---|
RATIONALIZE | 4 Muster | Regex-Muster zur Erkennung von Rationalisierungen |
LIBS | 5 Bibliotheken | Dateien/Verzeichnisse, die auf heutige Aktualisierungen geprüft werden |
COMPLEX_THRESHOLD | 3 | Bearbeitungs-/Schreibaufrufe, um als komplex zu klassifizieren |
DISK_WARN_GB | 50 | Warnung unterhalb dieses Werts |
DISK_CRIT_GB | 15 | Block unterhalb dieses Werts |
Beispiele
Einfache Sitzung – erlaubt:
edit_count=1 (< 3, nicht komplex) → exit 0
Komplexe Aufgabe, Lernerfahrung festgehalten – erlaubt:
edit_count=5 (komplex) → prüft LIBS → growth-log heute aktualisiert → exit 0
Komplexe Aufgabe, keine Lernerfahrung – BLOCKIERT:
edit_count=4 (komplex) → prüft LIBS → alle 5 veraltet → exit 2
stderr: "Blockiert: Komplexe Aufgabe abgeschlossen, aber heute keine Lernerfahrung festgehalten."
Wenig Speicherplatz – BLOCKIERT:
disk_free=12GB < 15GB kritisch → exit 2
stderr: "Blockiert: Speicherplatz bei 12GB (Schwellenwert: 15GB)."
Einschränkungen
Der Hook erzwingt die Gewohnheit, Lernbibliotheken zu aktualisieren, nicht die Qualität dessen, was aufgezeichnet wurde. Wenn output-index.md aktualisiert wird, aber growth-log übersprungen wird, besteht der Hook (1 von 5 Bibliotheken aktualisiert). Dies ist beabsichtigt: Mechanische Sperren prüfen maschinell überprüfbare Fakten. Verwenden Sie für die Inhaltsqualitätsprüfung die Kombination mit self-audit.
Kompatibilität
- Python 3.8+ (verwendet
from __future__ import annotations) - Plattformübergreifend: Windows, macOS, Linux
- Keine Abhängigkeiten außerhalb der Standardbibliothek
Qualität
Dieser Code durchlief 4 Runden automatisierter Code-Reviews (CodeRabbit + Greptile), bei denen 9 echte Fehler gefunden und behoben wurden.
Siehe auch
self-audit– Reasoning-Qualitätssperre (Vollständigkeit/Konsistenz/Bodenständigkeit/Ehrlichkeit)verification-loop– Codequalitätsprüfungen (Build/Typ/Lint/Test)gateguard– PreToolUse-Sicherheitssperre