Delivery Gate – Mechanisches Qualitätstor für Claude Code
Ein Stop-Hook, der drei Dinge prüft, bevor Claude eine Sitzung beenden kann – nur mit deterministischen Prüfungen: Datei-Änderungszeitstempel, Festplattennutzung und Regex-Muster im Transkripttext. Keine KI-Inferenz.
Dies unterscheidet sich von Reasoning-Gates (wie self-audit): Delivery-Gate prüft maschinenverifizierbare 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 Festplattenspeicher 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 selbstberichteten Status zu verlassen.
Was wird geprü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 |
| Festplattenspeicher < 50 GB | shutil.disk_usage | Warnung |
| Festplattenspeicher < 15 GB | shutil.disk_usage | Block (Exit 2) |
Die Rationalisierungserkennung warnt vor Mustern wie „Tests für jetzt überspringen“ und „bereits vorhandener Bug“ – oberflächliche Signale, dass das Nachdenken möglicherweise abgebrochen wurde. Sie blockiert nie allein, da Regex-Heuristiken falsch positive Ergebnisse liefern können. Die Blockierbedingungen sind: Festplattenkritisch, >=3 Lernbibliotheken veraltet ODER growth-log spezifisch veraltet (beide erfordern komplexe Aufgabe >=3 Änderungen).
Warum
Die eingebauten Prüfungen von Claude Code decken die Codequalität ab (Build → Typ → Lint → Test). Aber es gibt eine andere Fehlerart: Der Agent produziert funktionierenden Code, während die Sitzungshygiene vernachlässigt wurde – Lernerfahrungen nicht festgehalten, Abkürzungen rationalisiert, Festplatte läuft stillschweigend voll.
Über viele Sitzungen des „Abschließen und Vergessen“ hinweg ist der Mensch nicht gewachsen. Dieser Hook erzwingt die Gewohnheit: komplexe Aufgabe → muss Lernbibliotheken berühren.
Installation
cp quality-gate.py ~/.claude/scripts/
In ~/.claude/settings.json hinzufügen:
{
"hooks": {
"Stop": [{
"hooks": [{
"type": "command",
"command": "python3 ~/.claude/scripts/quality-gate.py",
"timeout": 5000
}]
}]
}
}
Lernbibliotheken
Erstelle diese Dateien im Speicherverzeichnis deines 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 # Skill-Bewertungen im Zeitverlauf
└── tooling_capabilities.md # Bekanntes Werkzeuginventar
Passe das LIBS-Dictionary an deine eigene Dateistruktur an.
Konfiguration
Bearbeite quality-gate.py:
| Variable | Standard | Zweck |
|---|---|---|
RATIONALIZE | 4 Muster | Regex-Muster zur Erkennung von Rationalisierungen |
LIBS | 5 Bibliotheken | Dateien/Verzeichnisse auf heutige Aktualisierungen prüfen |
COMPLEX_THRESHOLD | 3 | Edit/Write-Aufrufe, um als komplex einzustufen |
DISK_WARN_GB | 50 | Warnung unterhalb dieses Werts |
DISK_CRIT_GB | 15 | Blockierung 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: "Blocked: complex task completed but no learning captured today."
Wenig Festplattenspeicher – BLOCKIERT:
disk_free=12GB < 15GB kritisch → exit 2
stderr: "Blocked: disk space at 12GB (threshold: 15GB)."
Einschränkungen
Der Hook erzwingt die Gewohnheit, Lernbibliotheken zu berühren, nicht die Qualität dessen, was aufgezeichnet wurde. Wenn output-index.md aktualisiert, aber growth-log übersprungen wird, besteht der Hook (1 von 5 Bibliotheken berührt). Dies ist beabsichtigt: Mechanische Tore prüfen maschinenverifizierbare Fakten. Zur Überprüfung der Inhaltsqualität mit self-audit kombinieren.
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ätstor (Vollständigkeit/Konsistenz/Bodenständigkeit/Ehrlichkeit)verification-loop– Codequalitätsprüfungen (Build/Typ/Lint/Test)gateguard– PreToolUse-Sicherheitstor