Delivery Gate — Passerelle Qualité Mécanique pour Claude Code
Un crochet d'arrêt qui vérifie trois choses avant que Claude puisse terminer une session, en utilisant uniquement des vérifications déterministes — horodatages de modification de fichiers, utilisation du disque et motifs regex sur le texte de la transcription. Aucune inférence IA.
Ceci est distinct des passerelles de raisonnement (comme self-audit) : delivery-gate vérifie des faits vérifiables par machine ; self-audit vérifie la qualité de la sortie sur quatre dimensions de raisonnement. Ensemble, ils forment une défense en profondeur :
- delivery-gate : « La bibliothèque d'apprentissage a-t-elle été touchée aujourd'hui ? L'espace disque est-il sûr ? »
- self-audit : « Le contenu du fichier est-il correct, complet et honnête ? »
Ceci est le même modèle que les passerelles de pipeline CI — des vérifications automatisées et déterministes qui vérifient des faits lisibles par machine plutôt que de faire confiance à un état autodéclaré.
Ce qu'il vérifie
| Vérification | Mécanisme | En cas de succès |
|---|---|---|
| Schémas de rationalisation | Regex sur la fin de la transcription | Avertissement uniquement (ne bloque jamais) |
| Bibliothèques d'apprentissage obsolètes | mtime sur 5 chemins configurables | Avertissement si certaines sont obsolètes ; Blocage si >=3 obsolètes OU journal de croissance obsolète + tâche complexe |
| Espace disque < 50 Go | shutil.disk_usage | Avertissement |
| Espace disque < 15 Go | shutil.disk_usage | Blocage (exit 2) |
La détection de rationalisation avertit pour des motifs comme « ignorer les tests pour l'instant » et « bogue préexistant » — des signaux de surface que la réflexion a peut-être été écourtée. Elle ne bloque jamais seule, car les heuristiques regex peuvent produire des faux positifs. Les conditions de blocage sont : disque critique, >=3 bibliothèques d'apprentissage obsolètes, OU journal de croissance spécifiquement obsolète (toutes nécessitent une tâche complexe >=3 modifications).
Pourquoi
Les vérifications intégrées de Claude Code couvrent la qualité du code (construction → typage → lint → test). Mais il existe un mode de défaillance différent : l'agent produit du code fonctionnel alors que l'hygiène de session a été négligée — apprentissage non capturé, raccourcis rationalisés, disque se remplissant silencieusement.
Au fil de nombreuses sessions de « livrer et oublier », l'humain n'a pas progressé. Ce crochet impose l'habitude : tâche complexe → doit toucher aux bibliothèques d'apprentissage.
Installation
cp quality-gate.py ~/.claude/scripts/
Ajoutez à ~/.claude/settings.json :
{
"hooks": {
"Stop": [{
"hooks": [{
"type": "command",
"command": "python3 ~/.claude/scripts/quality-gate.py",
"timeout": 5000
}]
}]
}
}
Bibliothèques d'apprentissage
Créez ces fichiers dans le répertoire mémoire de votre projet. Le crochet vérifie si au moins un a été mis à jour aujourd'hui :
memory/
├── growth-log/ # Entrées d'apprentissage quotidiennes (répertoire)
├── decisions/log.md # Journal des décisions
├── output-index.md # Index des sorties de session
├── ratings-tracker.md # Suivi des évaluations de compétences au fil du temps
└── tooling_capabilities.md # Inventaire des outils connus
Personnalisez le dictionnaire LIBS pour correspondre à votre propre structure de fichiers.
Configuration
Modifiez quality-gate.py :
| Variable | Valeur par défaut | Objectif |
|---|---|---|
RATIONALIZE | 4 motifs | Motifs regex pour la détection de rationalisation |
LIBS | 5 bibliothèques | Fichiers/répertoires à vérifier pour les mises à jour d'aujourd'hui |
COMPLEX_THRESHOLD | 3 | Appels Edit/Write pour classer comme complexe |
DISK_WARN_GB | 50 | Avertir en dessous de ce seuil |
DISK_CRIT_GB | 15 | Bloquer en dessous de ce seuil |
Exemples
Session simple — autorisée :
edit_count=1 (< 3, pas complexe) → exit 0
Tâche complexe, apprentissage capturé — autorisée :
edit_count=5 (complexe) → vérifie LIBS → growth-log mis à jour aujourd'hui → exit 0
Tâche complexe, pas d'apprentissage — BLOQUÉE :
edit_count=4 (complexe) → vérifie LIBS → les 5 obsolètes → exit 2
stderr: "Bloqué : tâche complexe terminée mais aucun apprentissage capturé aujourd'hui."
Espace disque faible — BLOQUÉ :
disk_free=12Go < 15Go critique → exit 2
stderr: "Bloqué : espace disque à 12 Go (seuil : 15 Go)."
Limitations
Le crochet impose l'habitude de toucher aux bibliothèques d'apprentissage, pas la qualité de ce qui a été enregistré. Si output-index.md est mis à jour mais que growth-log est ignoré, le crochet réussit (1 bibliothèque sur 5 touchée). C'est voulu : les passerelles mécaniques vérifient des faits vérifiables par machine. Pour la vérification de la qualité du contenu, associez avec self-audit.
Compatibilité
- Python 3.8+ (utilise
from __future__ import annotations) - Multi-plateforme : Windows, macOS, Linux
- Zéro dépendance en dehors de la bibliothèque standard
Qualité
Ce code a subi 4 cycles de revue de code automatisée (CodeRabbit + Greptile) avec 9 bogues réels trouvés et corrigés.
Voir aussi
self-audit— Passerelle de qualité de raisonnement (exhaustivité/cohérence/fondement/honnêteté)verification-loop— Vérifications de qualité du code (construction/typage/lint/test)gateguard— Passerelle de sécurité PreToolUse