ADR 0016: estado de la etapa 6 y las 7 etiquetas que casi se rompen

La etapa 6 no es un barrido: son seis despliegues coordinados. Dos hechos
(--takana-bin, y la unit del worker fijando las dos variables, que era lo que
bloqueaba retirar las caidas), dos que conviene esperar, uno atado al baseline
del selfhost, y el directorio del repo que necesita decision porque hay otro
agente trabajando adentro ahora mismo.

Y queda anotada la tabla de las 7 etiquetas de separacion de dominio que el
barrido ancho habria reescrito, con hammer-tree-v1 a la cabeza: es el prefijo
de ArtifactHash::of_tree, o sea los 4750 hashes del store.
This commit is contained in:
Sergio
2026-09-09 19:44:46 +00:00
parent e20a5f44d8
commit 9bd95cd307
+41 -2
View File
@@ -204,8 +204,47 @@ simplemente deja de cosechar. El directorio es lo **último** que se toca, y con
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.
5 bis. **El texto que faltaba** (comentarios de `crates/`, `CLAUDE.md`, el skill de granja).
*hecho*. 205 líneas. **Y el barrido ancho estuvo a un commit de romper el corpus entero**: el
primer intento reescribía los `.rs` completos y entre las líneas de código que tocaba había
**siete etiquetas de separación de dominio, que son entrada de hash**:
| literal | qué es |
|---|---|
| `b"hammer-tree-v1"` | **el prefijo de `ArtifactHash::of_tree`** (`takana-core/src/hash.rs:60`) — la función que hashea TODOS los artefactos. Cambiarlo mueve los 4750 hashes del store |
| `b"hammer-seed-v1"`, `b"hammer-stage1-rootfs-v2"`, `b"hammer-product-rootfs-v3"`, `b"hammer-product-attested-v2"`, `b"hammer-builder-rootfs-v1"` | entradas de hash de la cadena de bootstrap |
| `b"hammer-attest-dev-rootkey-0001!!"` | clave raíz de atestación, `[u8; 32]` |
Se revirtió y se rehízo sólo sobre comentarios, esquivando además las cadenas crudas de Rust
(`r#"…"#`), porque el `SYSTEM_PROMPT` del traductor tiene líneas que empiezan como comentario.
**La lección de toda la etapa 5: un literal que parece prosa puede ser entrada de hash, y la
única forma de saberlo es mirar dónde se usa.**
6. **Retirar las compatibilidades.** ← *no es un barrido: son seis despliegues coordinados, y tres
no se hacen sin decidirlo.* Estado al 2026-09-09:
-**`--takana-bin`** con `--hammer-bin` de alias. Era la última superficie de CLI con el
nombre viejo.
-**Destrabado el retiro de las caídas de entorno.** Se midió que la unit del worker era el
**único** sitio fuera del repo que traía una variable vieja puesta
(`Environment=HAMMER_DIR=/opt/hammer`); ahora fija las dos, desplegada y verificada.
-**Retirar el binario `hammer`** — quedan 0 llamadores en el repo y el worker usa `takana`.
Es la red de seguridad de lo que no se encontró: conviene esperar un ciclo completo de granja
y una corrida de selfhost antes de sacarla.
-**Retirar las caídas `HAMMER_X`** — posible ya para `HAMMER_DIR`; el resto espera a
confirmar que ningún entorno las trae puestas.
- 🔒 **`/usr/bin/hammer` dentro del rootfs del producto** — está **dentro de un árbol que se
hashea**. Moverlo cambia el hash del producto y obliga a rehacer el baseline del selfhost.
Va junto con esa deuda, no antes.
-**`hammer-farm.service` y `/opt/hammer`** — despliegue coordinado en el worker: parar,
renombrar, `daemon-reload`, arrancar. Reversible, pero es hacia afuera.
-**`/mnt/vvv/hammer`, el directorio del repo** — **necesita decisión y coordinación.** El
cron lo referencia por ruta absoluta, y sobre todo: **hay otro agente trabajando en este
directorio ahora mismo** (se le vieron ficheros sin commitear y commits entrando durante esta
sesión). Moverlo le rompe la sesión en el medio, que es exactamente lo que el preámbulo de
`CLAUDE.md` existe para evitar.
**Deuda que sigue abierta desde la etapa 4:** rehacer el baseline `of_tree` del selfhost.
Etapas 26 no arrancan hasta que la 1 esté pusheada, y ninguna se mezcla con otra en un commit.