Cierre completo
Effort: free — disciplina de orden sobre un arreglo que ya debes: los sondeos de la verdad en disco y el test que falla van primero, no son extra. Elimina: menús de opciones y confirmaciones paso a paso lanzadas al humano en plena caída.
Cuando el humano reporta algo roto o dice "arréglalo", hay exactamente una
respuesta correcta: un cierre completo, con entendimiento primero. Causa raíz con
evidencia, un test que falla primero, verde, prueba en vivo en el propio camino
del humano, y luego commit. Nunca un menú de opciones de vuelta, y nunca un aviso
de confirmación por paso — ya dijo arréglalo.
Donde las skills hermanas exigen un sí explícito para actos destructivos, esta
regla gana solo la mitad reversible: el "arréglalo" del humano ES el sí vigente
para escrituras de recuperación reversibles que dejan un rastro de respaldo;
cualquier cosa irreversible — destrucción de datos, gasto, envíos externos —
sigue cruzando la decision-bar, y la barra gana.
Pídele algo al humano solo cuando esté demostrablemente perdido en todos los
demás lugares y solo él pueda proveerlo. Todo otro insumo, lo vas a buscar tú.
El método
- Sondea la superficie normal — y luego deja de confiar en ella. Llama a la
API o al CLI una vez. Si responde normal, esto no es una situación de cierre de
incidente; pásala. Si devuelve 401/403, conexión rechazada, resultados vacíos
donde debería haber datos, o datos viejos, deja de tratar esa superficie como
autoridad.
- Establece la verdad de base desde el disco, no desde la API. Nunca confíes
en que un servicio roto describa su propio estado. Lee tú mismo los archivos de
datos, los listados de directorios y las fechas de modificación, y compáralos
con lo que la API afirma. La divergencia es la señal diagnóstica.
- Escanea el radio de impacto. Busca en cada directorio de datos de primer
nivel los archivos tocados dentro de la ventana de la falla (p. ej.
find /data/volumes -newermt "<start>" ! -newermt "<end>"). Apunta a una respuesta
de una pantalla para "qué fue tocado, qué no". Un radio angosto (un volumen,
una tabla) es recuperable aquí. Un radio amplio (muchos volúmenes, el
directorio de datos entero) es recuperación de desastre — escala, no
improvises.
- Inventaría sobrevivientes vs pérdidas. Clasifica cada activo afectado:
- intacto en disco — recupéralo tal cual
- reconstruible desde el repo — configs y respaldos versionados en git
- reconstruible desde archivos de env o credenciales — tokens, contraseñas
- perdido para siempre — cifrado con una clave ausente, estado que solo vivía en runtime
Solo el último grupo amerita preguntarle al humano. Todo lo demás lo reconstruyes.
- Causa raíz con evidencia, y luego un test en rojo. Nombra por qué se
rompió, con prueba desde el disco — no una conjetura. Donde el defecto es
código, escribe el test que falla y lo captura antes del arreglo, y llévalo a
verde. Mira red-first y
root-cause-first.
- Cae en cascada hacia abajo por las capas — nunca hacia arriba al humano.
Cuando el camino preferido está roto, baja una capa e intenta de nuevo:
API / SDK → CLI dentro del contenedor → escrituras directas a la DB → cirugía
de sistema de archivos. No molestes al humano mientras queden cascadas sin
probar. Cada peldaño hacia abajo es más barato que preguntar.
- Asume que las dependencias también están rotas. El código de recuperación
usa solo la librería estándar de tu lenguaje para HTTP y JSON — los clientes
de terceros pueden ser parte de lo que murió.
- Escribe de forma idempotente, con rastros de respaldo. Cada escritura a
disco deja una copia
.bak con marca de tiempo junto al objetivo. Lee,
verifica que tenga sentido, copia, escribe, re-verifica — nunca sobrescribas a
ciegas. Si intercambias temporalmente una credencial para acuñar una clave
nueva, respalda la original primero y restáurala antes de volver: el login
propio del humano sobrevive intacto.
- Verifica con llamadas en vivo en el propio camino del humano. Vuelve a
correr el sondeo del paso 1 y confirma que los números coinciden con el
inventario pre-incidente o con los respaldos del repo. Un estado verde en la
DB no es prueba; la superficie que el humano usa funcionando de nuevo sí lo es.
- Commitea y reporta. Commitea solo los archivos propios del arreglo.
Reporta: qué se sondeó, el radio de impacto, las acciones en orden, los
conteos restaurados, qué se perdió para siempre (vacío si nada), y cualquier
paso que falló sin ser fatal.
Banderas rojas — detente y vuelve a sondear
- "Déjame preguntarle al humano por qué se rompió" — no; averígualo primero desde el disco.
- "La API dice que aquí no hay nada" — la vista que una API rota tiene de sí misma no es verdad.
- "Mejor reinstalo limpio" — estás descartando estado recuperable.
- "La clave se perdió, así que las credenciales no sirven" — los valores en texto
plano muchas veces siguen viviendo en archivos de env o de credenciales;
recrea la credencial.
- "¿Confirmo antes de cada paso?" — el humano dijo arréglalo; corre la cascada y reporta al final.
Reglas duras — cualquiera de estas reprueba la skill
- Opciones presentadas de vuelta al humano cuando existe una solución clara.
- Una escritura destructiva sin rastro
.bak.
- Pedirle algo al humano antes de que la cascada y el inventario se agotaran.
- Un subsistema retirado restaurado "por ayudar" — un servicio dado de baja que
sigue abajo es el estado deseado, y volver a activarlo es una decisión
deliberada del humano.
- Recuperación declarada lista desde el estado interno en vez de un sondeo en
vivo en su camino.
- Arreglo dejado sin commit (salvo que el humano dijera explícitamente que no).
Combina bien con
1---2name: incident-closure-33description: Úsala cuando el humano reporta algo roto o dice "arréglalo" — sobre todo cuando el plano de control normal (API, CLI, servicio) está muerto y debes meterte por debajo. La respuesta es un cierre completo con entendimiento primero — causa raíz con evidencia, test que falla primero, verde, prueba en vivo en el propio camino del humano, commit — nunca un menú de opciones de vuelta. Trigger words: fix it, fix shit, full close, broken, wiped, down, it stopped working, recover, restore. Disparadores: arréglalo, cierre completo, roto, borrado, caído, dejó de funcionar, recuperar, restaurar.4license: MIT5---67# Cierre completo8**Effort:** free — disciplina de orden sobre un arreglo que ya debes: los sondeos de la verdad en disco y el test que falla van primero, no son extra. Elimina: menús de opciones y confirmaciones paso a paso lanzadas al humano en plena caída.910Cuando el humano reporta algo roto o dice "arréglalo", hay exactamente una11respuesta correcta: un cierre completo, con entendimiento primero. Causa raíz con12evidencia, un test que falla primero, verde, prueba en vivo en el propio camino13del humano, y luego commit. Nunca un menú de opciones de vuelta, y nunca un aviso14de confirmación por paso — ya dijo arréglalo.1516Donde las skills hermanas exigen un sí explícito para actos destructivos, esta17regla gana solo la mitad reversible: el "arréglalo" del humano ES el sí vigente18para escrituras de recuperación reversibles que dejan un rastro de respaldo;19cualquier cosa irreversible — destrucción de datos, gasto, envíos externos —20sigue cruzando la [decision-bar](../decision-bar/SKILL.md), y la barra gana.2122Pídele algo al humano solo cuando esté demostrablemente perdido en todos los23demás lugares y solo él pueda proveerlo. Todo otro insumo, lo vas a buscar tú.2425## El método26271. **Sondea la superficie normal — y luego deja de confiar en ella.** Llama a la28 API o al CLI una vez. Si responde normal, esto no es una situación de cierre de29 incidente; pásala. Si devuelve 401/403, conexión rechazada, resultados vacíos30 donde debería haber datos, o datos viejos, deja de tratar esa superficie como31 autoridad.322. **Establece la verdad de base desde el disco, no desde la API.** Nunca confíes33 en que un servicio roto describa su propio estado. Lee tú mismo los archivos de34 datos, los listados de directorios y las fechas de modificación, y compáralos35 con lo que la API afirma. La divergencia es la señal diagnóstica.363. **Escanea el radio de impacto.** Busca en cada directorio de datos de primer37 nivel los archivos tocados dentro de la ventana de la falla (p. ej. `find38 /data/volumes -newermt "<start>" ! -newermt "<end>"`). Apunta a una respuesta39 de una pantalla para "qué fue tocado, qué no". Un radio angosto (un volumen,40 una tabla) es recuperable aquí. Un radio amplio (muchos volúmenes, el41 directorio de datos entero) es recuperación de desastre — escala, no42 improvises.434. **Inventaría sobrevivientes vs pérdidas.** Clasifica cada activo afectado:44 - intacto en disco — recupéralo tal cual45 - reconstruible desde el repo — configs y respaldos versionados en git46 - reconstruible desde archivos de env o credenciales — tokens, contraseñas47 - perdido para siempre — cifrado con una clave ausente, estado que solo vivía en runtime48 Solo el último grupo amerita preguntarle al humano. Todo lo demás lo reconstruyes.495. **Causa raíz con evidencia, y luego un test en rojo.** Nombra por qué se50 rompió, con prueba desde el disco — no una conjetura. Donde el defecto es51 código, escribe el test que falla y lo captura antes del arreglo, y llévalo a52 verde. Mira [red-first](../red-first/SKILL.md) y53 [root-cause-first](../root-cause-first/SKILL.md).546. **Cae en cascada hacia abajo por las capas — nunca hacia arriba al humano.**55 Cuando el camino preferido está roto, baja una capa e intenta de nuevo:56 API / SDK → CLI dentro del contenedor → escrituras directas a la DB → cirugía57 de sistema de archivos. No molestes al humano mientras queden cascadas sin58 probar. Cada peldaño hacia abajo es más barato que preguntar.597. **Asume que las dependencias también están rotas.** El código de recuperación60 usa solo la librería estándar de tu lenguaje para HTTP y JSON — los clientes61 de terceros pueden ser parte de lo que murió.628. **Escribe de forma idempotente, con rastros de respaldo.** Cada escritura a63 disco deja una copia `.bak` con marca de tiempo junto al objetivo. Lee,64 verifica que tenga sentido, copia, escribe, re-verifica — nunca sobrescribas a65 ciegas. Si intercambias temporalmente una credencial para acuñar una clave66 nueva, respalda la original primero y restáurala antes de volver: el login67 propio del humano sobrevive intacto.689. **Verifica con llamadas en vivo en el propio camino del humano.** Vuelve a69 correr el sondeo del paso 1 y confirma que los números coinciden con el70 inventario pre-incidente o con los respaldos del repo. Un estado verde en la71 DB no es prueba; la superficie que el humano usa funcionando de nuevo sí lo es.7210. **Commitea y reporta.** Commitea solo los archivos propios del arreglo.73 Reporta: qué se sondeó, el radio de impacto, las acciones en orden, los74 conteos restaurados, qué se perdió para siempre (vacío si nada), y cualquier75 paso que falló sin ser fatal.7677## Banderas rojas — detente y vuelve a sondear7879- "Déjame preguntarle al humano por qué se rompió" — no; averígualo primero desde el disco.80- "La API dice que aquí no hay nada" — la vista que una API rota tiene de sí misma no es verdad.81- "Mejor reinstalo limpio" — estás descartando estado recuperable.82- "La clave se perdió, así que las credenciales no sirven" — los valores en texto83 plano muchas veces siguen viviendo en archivos de env o de credenciales;84 recrea la credencial.85- "¿Confirmo antes de cada paso?" — el humano dijo arréglalo; corre la cascada y reporta al final.8687## Reglas duras — cualquiera de estas reprueba la skill8889- Opciones presentadas de vuelta al humano cuando existe una solución clara.90- Una escritura destructiva sin rastro `.bak`.91- Pedirle algo al humano antes de que la cascada y el inventario se agotaran.92- Un subsistema retirado restaurado "por ayudar" — un servicio dado de baja que93 sigue abajo es el estado deseado, y volver a activarlo es una decisión94 deliberada del humano.95- Recuperación declarada lista desde el estado interno en vez de un sondeo en96 vivo en su camino.97- Arreglo dejado sin commit (salvo que el humano dijera explícitamente que no).9899## Combina bien con100101- [repair-loop](../repair-loop/SKILL.md) — el loop de arreglo de código que este cierre corre cuando el defecto está en código.102- [root-cause-first](../root-cause-first/SKILL.md) · [red-first](../red-first/SKILL.md)103- [decision-bar](../decision-bar/SKILL.md) — qué puede llegar al humano, y cómo.