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.
This commit is contained in:
Sergio
2026-09-09 19:29:40 +00:00
parent 476168bb07
commit 6623f80909
+43 -1
View File
@@ -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.