From 9bd95cd30796ad6c68c0b226e6d75047736cfd53 Mon Sep 17 00:00:00 2001 From: Sergio Date: Wed, 9 Sep 2026 19:44:46 +0000 Subject: [PATCH] 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. --- docs/adr/0016-renombre-takana.md | 43 ++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/docs/adr/0016-renombre-takana.md b/docs/adr/0016-renombre-takana.md index 657cd787..355cce33 100644 --- a/docs/adr/0016-renombre-takana.md +++ b/docs/adr/0016-renombre-takana.md @@ -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 2–6 no arrancan hasta que la 1 esté pusheada, y ninguna se mezcla con otra en un commit.