tawasuyu

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1572Shell 203Rust 109Markdown 993728 Definiciones

ADR 0016: etapa 4 (crates) y por qué las variables de entorno son unidad aparte

Los 10 crates de librería + CLI renombrados, con los dos binarios congelados y
su razón. Anotada la consecuencia real: renombrar hammer-core mueve los bytes
de hammerd igual, así que el baseline of_tree del selfhost hay que rehacerlo.

Y la medición que cambia el plan: 'la variable HAMMER=' no existe como cosa
única — son 14 variables, ~260 apariciones, y el BINARIO las lee (HAMMER_LAB,
HAMMER_ZIG, HAMMER_WORK, HAMMER_ROOTFS, HAMMER_MIRROR_KEY, HAMMER_LLM_*). Con
knobs de instalador entre ellas y el entorno del worker trayéndolas puestas
desde fuera del repo. Eso es contrato de usuario, no churn: pide leer las dos
con caída a la vieja, que es código, no sed.

Sumada la evidencia del worker: tras reiniciar el servicio compiló los dos
binarios y cerró un ciclo real (dunst sellado, 1/1).

a35f4dcf1a27e2ab2f77369ddcbeac81c9bc9561 · por Sergio · (hace 1 mes) · padre 24bcf1783 · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

1 archivos · +40 −1

diff --git a/docs/adr/0016-renombre-takana.md b/docs/adr/0016-renombre-takana.md
index 69584579..057a8a6e 100644
--- a/docs/adr/0016-renombre-takana.md
+++ b/docs/adr/0016-renombre-takana.md
@@ -100,7 +100,46 @@ simplemente deja de cosechar. El directorio es lo **último** que se toca, y con
 
    La unit apunta a la RUTA DEL SCRIPT, no al binario, así que nada de la etapa 3 la toca. El
    nombre del fichero de unit y `/opt/hammer` son etapa 6.
-4. **Crates** `hammer-*` → `takana-*` y `hammerd` → `takanad`.
+
+   **Convergido y comprobado (2026-09-09 18:40–18:45Z).** Reiniciado `hammer-farm.service`, el
+   worker compiló los dos binarios y **cerró un ciclo de build real con el nombre nuevo**:
+   `✓ dunst b3:29a79859…`, BUILD-YIELD 1/1, 1 promovido. No es que «no se rompió nada visible»: el
+   camino de construir y sellar se ejercitó entero.
+4. **Crates.** ← *hecho parcialmente (2026-09-09)*. Los 10 de librería + CLI
+   (`hammer-{core,build,bootstrap,overlay,journal,mirror,upgrade,agent,recover,cli}`) son
+   `takana-*`. **Verificado que no mueve el corpus**: `takana hash recipes/zlib.toml` devuelve
+   `b3:dc363f26…`, idéntico a antes. 600 tests en verde.
+
+   **Dos binarios congelados, con razón medida:**
+   - `hammerd` — paquete **y** binario. Es componente de Stage 1 de la distro (musl, busybox,
+     hammerd, arje-zero), arje-zero lo supervisa en el sistema arrancado y `PRESEED=hammerd` lo
+     nombra en `selfhost-verify.sh`.
+   - `hammer-recover` — el paquete es `takana-recover`, **el binario sigue siendo
+     `hammer-recover`**: `hammer-live-install.sh` lo copia a `/usr/sbin/hammer-recover` en sistemas
+     **ya instalados** y hornea un hook de arranque que lo invoca por ese nombre. Renombrarlo no
+     rompe el repo: rompe máquinas instaladas.
+
+   **Consecuencia que hay que anotar igual:** al renombrar `hammer-core`, los bytes de `hammerd`
+   cambian de todos modos —linkea contra un crate con otro nombre y el nombre va en los símbolos—,
+   así que **el baseline `of_tree` del selfhost hay que rehacerlo**. Es efecto de la etapa 4, no de
+   un cambio en `hammerd`.
+
+4 bis. **Las variables de entorno son su propia unidad, no la cola de la 4.** Se midió antes de
+   tocarlas y el problema tiene otra forma que la que suponía el plan: no es «la variable
+   `HAMMER=`», son **14** (`HAMMER`, `HAMMER_DIR`, `HAMMER_BIN`, `HAMMER_STORE`, `HAMMER_MUSL`,
+   `HAMMER_MIRROR`, `HAMMER_TZ`, `HAMMER_KEYMAP`, `HAMMER_KERNEL`, `HAMMER_HOSTNAME`, `HAMMER_ZIG`,
+   `HAMMER_WORK`, `HAMMER_ROOTFS`, `HAMMER_LIVE`, `HAMMER_CACHE`), ~260 apariciones en 58 ficheros,
+   **y el binario las lee**: `HAMMER_LAB`, `HAMMER_ZIG`, `HAMMER_WORK`, `HAMMER_ROOTFS`,
+   `HAMMER_MIRROR_KEY`, `HAMMER_LLM_*`.
+
+   ⇒ **Son contrato de usuario, del mismo tipo que un verbo de CLI**, no churn interno: hay knobs
+   del instalador (`HAMMER_TZ`, `HAMMER_KEYMAP`, `HAMMER_HOSTNAME`), el entorno del worker las trae
+   puestas (`mirror-env.sh`) y quedan fuera del repo, en perfiles de shell y units. Un `sed` las
+   rompe en silencio.
+
+   El patrón correcto es el mismo que el resto del renombre: **leer las dos, preferir la nueva**
+   (`TAKANA_X` con caída a `HAMMER_X`), lo que es un cambio de código en Rust más un barrido de
+   scripts. Va como unidad propia, con su decisión.
 5. **Comentarios de recetas** (692). Gratis en hash, ruidoso en diff: va en un commit propio y solo.
 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.