takana: etapa 2 del renombre + los dos puntos de la hoja de marca

Etapa 2 (ADR 0016): el binario canónico es `takana` y `hammer` se sigue
emitiendo. Son DOS [[bin]] al mismo main.rs, no un symlink: la siembra de la
granja excluye /target (un symlink del hub no existiría en el worker) y
`cargo clean` lo borraría. Ningún llamador tocado; los 124 siguen andando.

Adoptados los dos puntos de la hoja de marca que chocaban con contratos:

- `forja` como ALIAS de clap sobre `build`, no como reemplazo. El canónico
  sigue siendo el inglés, que es lo que usan scripts, cron y runbooks. Y se
  enmienda la regla 4 de CLAUDE.md en el mismo commit: cambiar el
  comportamiento dejando escrito el contrato viejo es lo peor de las dos
  opciones, porque el otro agente del repo aplica lo que lee.

- `.tkn` como extensión de paquete. Salió barato y por una razón medida: la
  extensión no es lógica sino salida — se escribe en UN solo lugar
  (main.rs:1800) y el descubrimiento va por índice, no por glob
  (PackageEntry.file, repo.rs:75). Los repos con entradas .swm siguen
  resolviendo y un repo mixto es válido; cero ficheros .swm versionados.
  Los tipos Swm/SwmBuild/swm_bridge no se tocan: son internos, van en la
  etapa 4.

287 tests en verde (hammer-cli + hammer-core), incluidos los que fabrican
repos con nombres .swm a mano — que son justamente la prueba de que la
compatibilidad hacia atrás se sostiene.
This commit is contained in:
Sergio
2026-09-09 18:22:15 +00:00
parent 7358a1054f
commit 80319d9bab
4 changed files with 67 additions and 21 deletions
+37 -14
View File
@@ -23,7 +23,8 @@ suena quechua: sin q, k, h, ll ni ñ).
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).
3. Se adoptan los dos puntos de la hoja de marca que chocaban con contratos vigentes —el verbo
`forja` y la extensión `.tkn`—, implementados sin romper llamadores (ver §La hoja de marca).
## Lo medido (2026-09-09)
@@ -60,9 +61,11 @@ simplemente deja de cosechar. El directorio es lo **último** que se toca, y con
## 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`).
2. **Alias.** *hecho (2026-09-09)*. El binario canónico es `takana`; `hammer` se sigue emitiendo.
Son **dos `[[bin]]` apuntando al mismo `main.rs`**, no un symlink: la siembra de la granja excluye
`/target`, así que un symlink hecho en el hub no existiría en el worker, y `cargo clean` lo borra.
Cuesta una recompilación del `main.rs` y un warning de cargo («present in multiple build targets»)
que se va solo en la etapa 6. Los dos nombres funcionan; no se tocó ningún llamador.
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`.
@@ -72,18 +75,38 @@ simplemente deja de cosechar. El directorio es lo **último** que se toca, y con
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 de marca: los dos puntos que contradecían contratos vigentes
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**:
La hoja (`docs/marca/README.md`) trae dos ejemplos que chocan con contratos ya escritos. Se
plantearon como no adoptables; **el usuario los reafirmó el 2026-09-09 y se adoptaron**. Se
implementaron de forma que la decisión se cumpla sin romper a los llamadores existentes.
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`.
### 1. `forja` — verbo de marca en castellano
Choca con la **regla 4** de `CLAUDE.md` («la superficie de CLI va en inglés»). Adoptado como
**alias de clap sobre `build`**, no como reemplazo:
- `takana forja <receta>` funciona — la invocación de la hoja de marca es real.
- `takana build <receta>` sigue siendo el **canónico**: es lo que usan los 124 llamadores, el cron
y los runbooks, y ninguno se tocó.
- `CLAUDE.md` §4 quedó **enmendada** en el mismo movimiento. Cambiar el comportamiento y dejar
escrito el contrato viejo es peor que cualquiera de las dos opciones: el otro agente del repo
sigue aplicando lo que lee.
- La excepción es **cerrada**: un alias, el que está. Otro alias es decisión de ADR.
### 2. `.tkn` — extensión del paquete
Choca con `.swm` (266 menciones; Etapa F entera encima). Resultó **mucho más barato de lo
estimado**, y por una razón medida: la extensión no es lógica, es salida.
- Se escribe en **un solo lugar** (`crates/hammer-cli/src/main.rs:1800`).
- El descubrimiento de paquetes va por **índice**, no por glob: `PackageEntry.file`
(`crates/hammer-core/src/repo.rs:75`) guarda el nombre real de cada fichero.
-**Los repos existentes no se rompen y un repo mixto es válido**: un índice con entradas `.swm`
sigue resolviendo, y los paquetes nuevos se escriben `.tkn`. No hace falta migrar nada.
- Cero ficheros `.swm` versionados en el repo, así que no hubo qué renombrar.
- **`Swm`, `SwmBuild`, `swm_path`, `swm_bridge` NO se tocan.** Son nombres de tipo y de módulo, no
superficie de usuario; renombrarlos es churn puro dentro de la etapa 4.
## Nota sobre los ficheros de marca