Runbook · cambios seguros del harness (claude-method)
Runbook · cambios seguros del harness
Cuándo usarlo: ANTES de cualquier commit a
claude-methodque toqueplugins/*/hooks/hooks.json, sus scripts Python, los checks deharness/*.py, o docs compartidos entre repos (CLAUDE.md). Nacido de la mañana del 05-08-2026: tres incidentes cruzados (sesión de Txell sin shell, drift de copias de 35 días, numeración de reglas divergente) que costaron una mañana entera de los tres perfiles.
Las 4 leyes del harness distribuido
- Los hooks se snapshotean al arranque de sesión. Una sesión viva (o la PRIMERA de un perfil que aún no ha pulleado) invoca las rutas del checkout con el que arrancó — y el pull del SessionStart puede borrarle un fichero bajo los pies a mitad de sesión. Exit ≠ 0 en PreToolUse = deny de Edit/Write/Bash = sesión sin shell. Mitigado desde el 05-08 (
claude-method 6aa2a45): los hooks entran porharness/run_hook.py, un entrypoint estable que hace fail-open (exit 0 + aviso stderr) si el script objetivo falta — la política (deny del gate, etc.) sigue intacta porque stdout y exit code del objetivo pasan sin tocar. - El rollout es progresivo, no atómico. 3 perfiles × varias máquinas × 3 repos convergen a destiempo vía pull. Todo cambio debe ser inocuo para quien aún no lo tiene.
- Los checks se ejecutan desde la fuente. Desde la fase 2 del Plan A (05-08-2026)
claude-method/harness/*.pyes la única copia que existe: elpre-commitde cada repo (hook v2) los invoca ahí mismo, con fail-open por fichero. Las copias<repo>/scripts/harness/se retiraron de Pro y del workspace — ya no hay nada que propagar ni que pueda desincronizarse. Lo que sí puede quedarse atrás es el hook instalado frente apre-commit.hook; de eso avisa/method-doctor. - La numeración de Reglas es la de
CreaRack-Pro/CLAUDE.md. Las tablas de otros repos son parciales con numeración canónica; citar siempre por el número canónico.
Checklist A · mover / renombrar / retirar un script de hook
Desde
run_hook.py(05-08-2026) un move ya NO brickea sesiones nuevas: el lanzador hace fail-open si el objetivo falta. Este checklist sigue vigente para (a) snapshots de sesiones/perfiles anteriores al lanzador, que aún invocan rutas directas, y (b) mover el propiorun_hook.py— que NO se hace nunca.
- Shim exit-0 en la ruta vieja EN EL MISMO COMMIT del move (
import sys; sys.exit(0)+ comentario con el criterio de retirada). - Probar el script NUEVO por stdin sintético:
printf '%s' "$json" | python <ruta-nueva>(el JSON como argumento, nunca dentro del format-string — los backslashes de rutas Windows generan JSON inválido y el test miente). “Probarlo en esta sesión” NO vale: observa el snapshot viejo. - Retirar el shim SOLO cuando
/method-statusmuestre a LOS 3 PERFILES con checkout ≥ el commit del move. Contar “sesiones vivas” NO vale — así se retiró mal el 04-08 y la primera sesión de Txell (perfil sin pullear) se quedó sin shell el 05-08.
Checklist B · cambiar un check del pre-commit (harness/*.py)
- Editar SOLO la fuente en
claude-method/harness/. No hay copias que propagar ni paridad de copias que verificar: eso murió con la fase 2 del Plan A (05-08-2026). - Verificar con un commit sintético en un repo real: tocar un fichero que dispare el check,
git commit, y comprobar que el veredicto es el esperado (bloquea cuando debe, deja pasar cuando debe). El commit de prueba se descarta después. - Ten presente que el efecto es inmediato: el hook lee la fuente en vivo, así que un check roto rompe el commit de los 3 perfiles en cuanto pulleen
claude-method. Un check nuevo, igual — no hace falta que nadie reinstale nada.
Nota de configuración: el gate de commit de la Biblioteca se arma con
.claude/bib-gate.jsondel repo (report_urlobligatoria;skip_log_urlopcional — sin ella se omite el skip-log). Proyectos del Iniciador creados entre el 03-08 y el 05-08-2026 (p.ej.demo-init) llevan marcador SINreport_url→ su gate de commit está inerte hasta añadir el campo a mano.
Checklist C · docs compartidos entre repos
- Regla nueva o renumerada → actualizar la tabla de Pro (canónica) y revisar las tablas parciales (workspace CLAUDE.md) y las memorias compartidas de
onboarding/shared-memory/que citen números.
Verificación final (siempre)
/method-doctoren el perfil propio → VERDE (incluye la paridad delpre-commitinstalado vspre-commit.hook)./method-status→ los 3 perfiles, commit y veredicto.- El vigía semanal de drift (cron OPS
harness-drift-check.sh, lunes 07:30 UTC) alerta en el dashboard si un perfil lleva >7 días sin converger con el método movido por delante — desde la fase 2 del Plan A ya no vigila copias, porque no existen. Pero no sustituye la verificación del ciclo: el vigía es la red, no el trapecio.
Historial de incidentes que motivan cada punto
- 03-08: move del gate Regla 0 sin shim → 2 sesiones vivas sin shell (Edu ×2). → Checklist A.1 (hoy mitigado por
run_hook.py). - 04-08: retirada del shim verificando “0 sesiones vivas” → primera sesión de Txell bricked el 05-08. → Checklist A.3.
- 04-08: sync de
pre_commit_check.pya Pro sin el gemelo del workspace → drift 35 días. → causa de fondo del Plan A. - 05-08: el ruff local del workspace reformateó la copia recién propagada → paridad rota en el mismo commit que la restauraba. → última gota: ese día se decidió matar las copias.
- 05-08: “Regla 14” citada con dos significados según el repo. → Ley 4 / Checklist C.
- 05-08 (fase 2 del Plan A): retiradas las copias
scripts/harness/de Pro y del workspace; la fuente pasa a ser también la ruta de ejecución. → Ley 3 reescrita y Checklist B simplificado.
Véase también
- [[ia-tech—metodo—claude-method-guide]]
- [[ia-tech—metodo—os-audit-y-backtrack]]