Delivery Gate — Barrera de Calidad Mecánica para Claude Code
Un hook de parada que verifica tres cosas antes de que Claude pueda finalizar una sesión, usando únicamente verificaciones deterministas — marcas de tiempo de modificación de archivos, uso de disco y patrones regex en el texto del transcript. Sin inferencia de IA.
Esto es diferente de las barreras de razonamiento (como self-audit): delivery-gate verifica hechos verificables por máquina; self-audit verifica la calidad del resultado en cuatro dimensiones de razonamiento. Juntos forman defensa en profundidad:
- delivery-gate: "¿Se tocó la biblioteca de aprendizaje hoy? ¿Está seguro el espacio en disco?"
- self-audit: "¿El contenido del archivo es correcto, completo y honesto?"
Este es el mismo patrón que las barreras de pipeline de CI — verificaciones automatizadas y deterministas que verifican hechos legibles por máquina en lugar de confiar en un estado auto-reportado.
Qué Verifica
| Verificación | Mecanismo | Al Acertar |
|---|---|---|
| Patrones de racionalización | Regex en la cola del transcript | Solo advertencia (nunca bloquea) |
| Bibliotecas de aprendizaje obsoletas | mtime en 5 rutas configurables | Advertencia si algunas están obsoletas; Bloqueo si >=3 están obsoletas O el registro de crecimiento está obsoleto + tarea compleja |
| Espacio en disco < 50 GB | shutil.disk_usage | Advertencia |
| Espacio en disco < 15 GB | shutil.disk_usage | Bloqueo (exit 2) |
La detección de racionalización advierte sobre patrones como "omitir pruebas por ahora" y "error preexistente" — señales superficiales de que el pensamiento pudo haberse acortado. Nunca bloquea por sí sola, porque las heurísticas regex pueden dar falsos positivos. Las condiciones de bloqueo son: disco crítico, >=3 bibliotecas de aprendizaje obsoletas, O growth-log específicamente obsoleto (ambos requieren tarea compleja >=3 ediciones).
Por Qué
Las verificaciones integradas de Claude Code cubren la calidad del código (compilación → tipo → lint → prueba). Pero hay un modo de fallo diferente: el agente produce código funcional mientras que la higiene de la sesión fue descuidada — aprendizaje no capturado, atajos racionalizados, disco agotándose silenciosamente.
A lo largo de muchas sesiones de "enviar y olvidar", el humano no ha crecido. Este hook impone el hábito: tarea compleja → debe tocar las bibliotecas de aprendizaje.
Instalación
cp quality-gate.py ~/.claude/scripts/
Agrega a ~/.claude/settings.json:
{
"hooks": {
"Stop": [{
"hooks": [{
"type": "command",
"command": "python3 ~/.claude/scripts/quality-gate.py",
"timeout": 5000
}]
}]
}
}
Bibliotecas de Aprendizaje
Crea estos archivos en el directorio de memoria de tu proyecto. El hook verifica si al menos uno fue actualizado hoy:
memory/
├── growth-log/ # Entradas de aprendizaje diarias (directorio)
├── decisions/log.md # Registro de decisiones
├── output-index.md # Índice de resultados de sesión
├── ratings-tracker.md # Seguimiento de calificaciones de habilidades a lo largo del tiempo
└── tooling_capabilities.md # Inventario de herramientas conocidas
Personaliza el diccionario LIBS para que coincida con tu propia estructura de archivos.
Configuración
Edita quality-gate.py:
| Variable | Valor por Defecto | Propósito |
|---|---|---|
RATIONALIZE | 4 patrones | Patrones regex para detección de racionalización |
LIBS | 5 bibliotecas | Archivos/directorios para verificar actualizaciones de hoy |
COMPLEX_THRESHOLD | 3 | Llamadas a Editar/Escribir para clasificar como complejo |
DISK_WARN_GB | 50 | Advertir por debajo de esto |
DISK_CRIT_GB | 15 | Bloquear por debajo de esto |
Ejemplos
Sesión simple — permitida:
edit_count=1 (< 3, no compleja) → exit 0
Tarea compleja, aprendizaje capturado — permitida:
edit_count=5 (compleja) → verifica LIBS → growth-log actualizado hoy → exit 0
Tarea compleja, sin aprendizaje — BLOQUEADA:
edit_count=4 (compleja) → verifica LIBS → las 5 obsoletas → exit 2
stderr: "Bloqueado: tarea compleja completada pero no se capturó aprendizaje hoy."
Poco espacio en disco — BLOQUEADO:
disk_free=12GB < 15GB crítico → exit 2
stderr: "Bloqueado: espacio en disco en 12GB (umbral: 15GB)."
Limitaciones
El hook impone el hábito de tocar las bibliotecas de aprendizaje, no la calidad de lo registrado. Si output-index.md se actualiza pero growth-log se omite, el hook pasa (1 de 5 bibliotecas tocadas). Esto es por diseño: las barreras mecánicas verifican hechos verificables por máquina. Para la verificación de la calidad del contenido, combínalo con self-audit.
Compatibilidad
- Python 3.8+ (usa
from __future__ import annotations) - Multiplataforma: Windows, macOS, Linux
- Cero dependencias más allá de la biblioteca estándar
Calidad
Este código pasó por 4 rondas de revisión de código automatizada (CodeRabbit + Greptile) con 9 errores reales encontrados y corregidos.
Ver También
self-audit— Barrera de calidad de razonamiento (exhaustividad/consistencia/fundamentación/honestidad)verification-loop— Verificaciones de calidad de código (compilación/tipo/lint/prueba)gateguard— Barrera de seguridad PreToolUse