ADR 0016: etapa 5 cerrada, con los dos guardianes que dispararon
5a recetas (1427 comentarios, cero hashes movidos y medido), 5b docs (59), 5c scripts (250, sin tocar una sola linea que no empiece por #). Los dos guardianes que hicieron trabajo real: la linea base de hashes atrapo 3 recetas que se movian porque un comentario de SHELL dentro de una fase parece un comentario de TOML; y el salteo de heredocs atrapo 3 MOTD que son texto del producto, no comentarios. Y queda anotado el bug que introdujo la etapa 4: atribuir-fallos.py casaba contra el target de tracing, que es el module_path y por lo tanto el nombre del crate. Quedo casando nada sin fallar.
Delta semántico
Ninguna definición cambió: el cambio es de texto, documentación o datos.
1 archivos · +43 −1
diff --git a/docs/adr/0016-renombre-takana.md b/docs/adr/0016-renombre-takana.md
index 981ed977..657cd787 100644
--- a/docs/adr/0016-renombre-takana.md
+++ b/docs/adr/0016-renombre-takana.md
@@ -161,7 +161,49 @@ simplemente deja de cosechar. El directorio es lo **último** que se toca, y con
**No se tocan:** las rutas `/var/lib/hammer` de sistemas ya instalados, el `-volid HAMMER_LIVE`
del ISO (es identidad horneada en el medio) y el namespace `HARKAQ_*`, que es de otro subsistema.
-5. **Comentarios de recetas** (692). Gratis en hash, ruidoso en diff: va en un commit propio y solo.
+5. **Texto.** ← *hecho (2026-09-09)*, en tres commits.
+
+ - **5a — recetas (741, 1427 comentarios).** Cero ArtifactHash movidos, y está **medido**: se
+ hashearon las 741 antes y después y los ficheros de hashes son idénticos byte a byte.
+
+ **El guardián valió la pena.** El primer barrido filtraba por «la línea empieza con `#`» y
+ movió el hash de `helix`, `lsof` y `steam-runtime-sniper`. La causa: una fase se escribe como
+ `compile = …` y sus comentarios de **shell** también empiezan con `#`, pero viven
+ dentro del **valor** — y las fases sí entran en `hash_inputs`. El barrido definitivo calcula
+ los rangos de las cadenas multilínea de TOML y no entra ahí. Sin la línea base de hashes esto
+ se descubría meses después, en un rebuild.
+
+ - **5b — 59 docs de diseño, runbooks y ADR.** Los ADR entran porque en **este** repo son
+ documentos vivos, no registros: el 0013 tiene 5 commits y el 0009 dos. Se comprobó antes de
+ decidir. **Excluidos** `docs/evidencia/`, el HANDOFF de la noche de KDE y `docs/state/`
+ (generado). **Y este fichero**, que habla *sobre* el renombre: el barrido lo dejó titulado
+ «Renombre del sistema: takana → takana».
+
+ - **5c — 250 comentarios en 151 scripts,** con el control de que el diff no toca ni una línea
+ que no empiece por `#`. El barrido saltea heredocs, y ese guardián **disparó 3 veces**: eran
+ los `MOTD` que el script escribe **dentro de la imagen construida** — texto del producto, no
+ comentario. Se cambiaron aparte, como rebranding deliberado.
+
+ **El hallazgo caro de la etapa 5, que en realidad es un bug que introdujo la 4:**
+ `scripts/atribuir-fallos.py` casaba contra `hammer_build: fetch …`. Ese prefijo es el **target
+ de `tracing`**, que por defecto es `module_path!()` — o sea **el nombre del crate**. Al renombrar
+ `hammer-build` → `takana-build`, el target pasó a `takana_build` y el script quedó **casando
+ nada**: no fallaba, imprimía cero atribuciones, indistinguible de un log sin problemas.
+ Comprobado con el binario (`RUST_LOG=info` sobre zlib), no deducido. Ahora acepta las dos, y
+ **tiene que seguir aceptándolas**: los logs viejos que ya están en disco dicen la forma vieja.
+
+ *(El mensaje del commit de 5c perdió cuatro fragmentos por sustitución de comandos del shell con
+ comillas invertidas. No se enmendó: `main` es compartida y el cron empuja cada 30 min, así que
+ reescribir historia es peor que un mensaje incompleto. El detalle vive acá.)*
+
+ **Congelados y verificados con controles:** `/opt/hammer`, `/var/lib/hammer`, `/usr/bin/hammer`,
+ `/mnt/vvv/hammer`, la URL de gitea, `hammer-farm.service`, `hammer-live-install.sh`,
+ `BRIEFING-hammer.md`, `hammerd`, `hammer-recover`, `HAMMER_LIVE`, `.hammer-zig-cc`,
+ `.hammer-cargo-vendor` y dos identificadores más que aparecieron al barrer:
+ - `hammer-build-state/1` — el `schema` del estado generado. Nadie lo valida, pero el valor de un
+ identificador de esquema **es** ser estable; renombrarlo no gana nada.
+ - `hammer-edit` — es una **receta con artefacto sellado**: su `name` está en la ruta del store
+ (`store/cf075804…-hammer-edit`). Renombrarla huerfaniza el artefacto.
6. **Retirar el alias.** Y recién entonces, si se quiere, el directorio `/mnt/vvv/hammer` — parando
el cron y reescribiendo el crontab en el mismo movimiento.