Files
takana/CLAUDE.md
T
SergioandClaude Opus 5 370c4a7443 regla 4: la superficie de la CLI va en inglés, los mensajes en castellano
La regla existía —kernel_cmd.rs la cita como «Regla 7.bis»— pero no estaba
escrita en ningún sitio que un agente lea, así que nadie la respetó: el ADR
0015 nació proponiendo traer/crear/correr. Queda en CLAUDE.md, que es lo que
se carga en cada sesión.

Con la deuda declarada en vez de tapada: varios scripts/ exponen flags en
castellano y el barrido es su propia unidad de trabajo, porque tocarlos de
paso rompe cron y la granja. Código nuevo nace en inglés desde hoy.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U5cQtQrYNjWJVXVE6aEpQ2
2026-09-03 03:44:33 +00:00

58 lines
3.3 KiB
Markdown

# Reglas del repo compartido
Este repo lo trabajan **varios agentes a la vez** (hoy: frente granja/store y frente kernel). Lo de
aquí abajo no son preferencias de estilo: son las dos formas conocidas de que un agente destruya el
trabajo de otro sin enterarse. El resto del diseño está en `docs/`.
## 1. Todo `hammer build` va envuelto en `flock`
```sh
flock work/.farm-build.lock ./target/release/hammer --store ./store build <receta>
```
Para una tanda, tomar el lock una sola vez y no por receta:
```sh
flock work/.farm-build.lock bash -c 'for r in ...; do ./target/release/hammer --store ./store build "$r"; done'
```
**Por qué.** `hammer build` comparte `work/sources/<dep>-<sha>` entre todas las recetas. Dos builds
concurrentes que compartan una dependencia se pisan el árbol de fuentes: uno hace fetch y lo borra
mientras el otro lo usa, y **el árbol queda roto para siempre** — reintentar no lo arregla. Medido a
escala: al invalidar libdrm, ~93 de 205 recetas KDE murieron con `/src/.zwrap/cc is not a full path
to an existing compiler tool`, que es el wrapper de zig que la receta deja EN EL ÁRBOL, barrido por
el fetch concurrente de otra receta. Es el **ADR 0012**, sin decidir; hasta que se decida
(lock por árbol / árbol privado / caché inmutable + copia), serializar es la única mitigación
correcta. Por eso el worker corre con `JOBS=1`.
`scripts/farm/farm-worker-loop.sh` y `campana-deuda.sh` ya toman **ese mismo fichero de lock**, así
que usarlo nos serializa con la granja además de entre nosotros. **No está dentro de `hammer build`
a propósito**: esos scripts lo toman por fuera y hammer se bloquearía contra ellos.
## 2. Nunca `git add -A`
Sólo rutas explícitas. Un `add -A` arrastra al commit los ficheros a medias de otro agente. Commits
granulares, en español, directo sobre `main`, y `git push` tras cada unidad de trabajo (el `origin`
empuja a gitea **y** al espejo privado de GitHub; ver `scripts/espejo-setup.sh`).
## 3. Antes de dar un artefacto por presente, mirá que tenga contenido
Un directorio **vacío** en el store no es un artefacto: es un nombre. `Store::has` ya lo rechaza y
`respaldo-storagebox.sh --listar` los separa a `work/respaldo-vacios.txt`, pero la regla general
sigue valiendo para cualquier código nuevo — **un ausente falla ruidosamente; un vacío llega hasta
el final diciendo que todo fue bien**.
## 4. La superficie de la CLI va en INGLÉS; los mensajes, en castellano
Subcomandos, flags y nombres de opciones: **inglés**, sin excepción (`build`, `hash`, `hydrate`,
`mirror push`, `kernel closure`, `qorpa pull`). Lo que el usuario LEE —ayuda, errores, logs— va en
castellano, y los nombres propios del proyecto son quechua (`qorpa`, `harkaq`, `yupana`, `arje`).
**Por qué.** Un verbo de CLI es contrato: entra en scripts, cron y runbooks, y renombrarlo después
rompe llamadores que nadie recuerda. Media superficie en cada idioma obliga a adivinar en cada
comando nuevo, y ya pasó: el ADR 0015 nació con `traer/crear/correr` y hubo que corregirlo.
**Deuda conocida, NO barrida todavía:** varios scripts de `scripts/` exponen flags en castellano
(`--crear`, `--traer`, `--listar`, `--sha`). El barrido es su propia unidad de trabajo — tocarlos de
paso rompe cron y la granja. Código NUEVO nace en inglés desde hoy.