marca: takana — branding + ADR 0016 del renombre

El sistema pasa de hammer a takana (martillo en quechua/aimara): traducción
literal, conserva la metáfora de forja y mantiene el registro agentivo del
resto de la familia (khipu/yupana/harkaq/qorpa/churay).

Medido antes de tocar nada: hash_inputs es una LISTA DE CAMPOS, no el fichero
crudo (recipe.rs:535) ⇒ los comentarios de las 692 recetas importadas se pueden
renombrar GRATIS, sin mover un solo ArtifactHash. Pero las fases SÍ entran al
hash: las 10 recetas con .hammer-zig-cc dentro de una fase se congelan, igual
que los 5 cargo_vendor_dir (que ni siquiera están en hash_inputs y aun así
pueden cambiar bytes).

El renombre va por etapas con alias; el directorio /mnt/vvv/hammer es lo último
porque el cron de la cosecha lo referencia por ruta absoluta y moverlo mata el
latido en silencio.

No se adoptan dos ejemplos de la hoja de marca: 'takana forja' (viola la regla 4,
los verbos van en inglés) y .tkn (el formato es .swm, 266 menciones).
This commit is contained in:
Sergio
2026-09-09 18:10:11 +00:00
parent f08d729d8c
commit 7358a1054f
7 changed files with 515 additions and 0 deletions
+92
View File
@@ -0,0 +1,92 @@
# ADR 0016 — Renombre del sistema: `hammer` → `takana`
- **Estado:** ACEPTADO (decisión del usuario, 2026-09-09)
- **Reemplaza:** nada. **Afecta:** toda la superficie de CLI (regla 4 de `CLAUDE.md`).
## Contexto
Los nombres propios del proyecto se reparten por **rol**, no por estética: `khipu` registra
(`docs/state/build-state*.json`), `yupana` reckona sobre el khipu (`scripts/yupana.py`), `harkaq`
guarda (la jaula), `qorpa` hospeda (imágenes ajenas), `churay` pone (distribución multi-origen).
Cada uno dice qué hace su pieza. El único nombre que designa **el todo** es el del constructor.
`takana` (quechua y aimara: *martillo, mazo*) es la traducción literal de `hammer`. Conserva la
metáfora que el proyecto ya usa —forja, yunque, sellar— y mantiene el registro agentivo del resto de
la familia. Es hermana de `tawasuyu`: el territorio (apps, compositor) × la herramienta (la forja).
Se descartaron: `chani` (valor/precio — nombra el *hash*, no el motor; y "valor" es cosa, no rol),
`tocapu` (la marca inscripta — mismo hueco que `chani`), `anta` (cobre — es materia, no rol; y no
suena quechua: sin q, k, h, ll ni ñ).
## Decisión
1. El sistema se llama **takana**. La marca vive en `docs/marca/`.
2. El renombre va **por etapas con alias**, nunca de un saque. `hammer` sigue funcionando hasta que
el último llamador migre.
3. Dos cosas de la hoja de marca **no** se adoptan (ver §Choques).
## Lo medido (2026-09-09)
Nada de esto es estimación; sale de `git grep` y de leer `recipe.rs`.
| qué | cuánto | consecuencia |
|---|---|---|
| ficheros que nombran `hammer` | 1242 (5779 ocurrencias) | radio total |
| en `recipes/`, y son **comentarios** de importación | 692 | **gratis**: ver abajo |
| recetas con `.hammer-zig-cc` **dentro de una fase** | 10 | **caro**: re-hashea |
| recetas con `cargo_vendor_dir = ".hammer-cargo-vendor"` | 5 | **congelar**: ver abajo |
| ficheros que **invocan** la CLI | 124 | migración real |
| crates `hammer-*` (+ `hammerd`) | 12 | renombre de paquetes |
**El hallazgo que decide todo:** `Recipe::hash_inputs` (`crates/hammer-core/src/recipe.rs:535`) no
hashea el fichero crudo — construye una **lista de campos**: `source_id`, `compiler`, `target`,
`link`, huella del lab, `zig_version`/`strip_debug` si están fijados, los patches, los `flags`, las
**fases** (`configure`/`compile`/`install`) y los hashes de las deps.
-**Los comentarios no entran.** Renombrar «hammer» en los 692 comentarios de recetas importadas
**no mueve ni un ArtifactHash**. Es churn de diff, no de build.
-**Las fases sí entran**, con etiqueta (`phase:compile=…`). Las 10 recetas que escriben
`.hammer-zig-cc` lo hacen *dentro* de la fase: renombrar ese literal las re-hashea y obliga a
reconstruirlas **y a todo su cono descendente**. El literal es un temporal interno del árbol de
build, invisible al usuario. **Se congela como está.**
-`cargo_vendor_dir` **no** está en `hash_inputs`. Renombrar `.hammer-cargo-vendor` sería
invisible al hash **pero puede cambiar los bytes del artefacto** — la misma familia de problema
que «el lab está fuera de `hash_inputs`». **Se congela como está.**
**Y el cron apunta a una ruta absoluta:** `*/30 * * * * /mnt/vvv/hammer/scripts/farm/cosecha-cron.sh`.
Renombrar el **directorio** del repo mata el latido de la granja **en silencio** — no falla nada,
simplemente deja de cosechar. El directorio es lo **último** que se toca, y con el cron parado.
## Plan por etapas
1. **Marca + este ADR.** Aditivo, no rompe nada. ← *hecho*
2. **Alias.** El binario pasa a llamarse `takana`; `hammer` queda como symlink en `target/release/`.
A partir de acá los dos nombres funcionan y nada se rompe, ni acá ni en el worker (que arrastra
binario viejo: la siembra excluye `/target`).
3. **Llamadores** (124 ficheros): `scripts/`, `scripts/farm/`, runbooks, `CLAUDE.md`. En tandas
chicas, con `flock -o` cuando toque algo que construya.
4. **Crates** `hammer-*``takana-*` y `hammerd``takanad`.
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.
Etapas 26 no arrancan hasta que la 1 esté pusheada, y ninguna se mezcla con otra en un commit.
## Choques con la hoja de marca
La hoja (`docs/marca/README.md`) es la referencia de identidad visual y de voz. Dos ejemplos suyos
contradicen contratos ya vigentes y **no se adoptan**:
1. **`takana forja sistema.tkn`** — `forja` es un verbo en castellano y la **regla 4** manda la
superficie de CLI en inglés, sin excepción: el verbo es `build`. La voz de marca en castellano
rige lo que el usuario **lee** (ayuda, errores, logs), no lo que **teclea**. «Forjado en 41 s.»
es correcto; `takana forja` no.
2. **`.tkn`** — el formato de paquete es **`.swm`** (266 menciones; Etapa F completa: pack, repo,
install, deps, firma, DB, HTTP). Cambiar la extensión rompe repos e instalaciones existentes por
una razón puramente cosmética. Queda `.swm`.
## Nota sobre los ficheros de marca
Los dos SVG difieren correctamente (chispa `#FFF6DE` sobre oscuro, `#17130E` sobre claro) —
verificado por sha256 y por los colores presentes, no por el nombre del fichero. Ambos traen un
manifiesto **C2PA** de procedencia embebido; se conserva tal cual vino, sin limpiar.