gioser

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 815Rust 56Shell 37Markdown 291229 Definiciones

el informe del agente de adentro: los cinco defectos y las tres trampas

Primer informe hecho DESDE la jaula, y vale más que cualquier inspección desde el anfitrión porque
son las cosas con las que se choca al usarla. Queda registrado qué se arregló y —lo importante—
DÓNDE vive cada arreglo: 1 y 2 en el upper, que es caché descartable, y por eso hay un guion que los
repone tras cada recreate; 3 y 5 en el manifiesto; 4 en el worker.

Del 4: se autorizó la clave de la caja, no la de root — credencial distinta y revocable. Del 5:
takana NO se compila adentro; el binario es el musl del store, y lo que fallaba es que el
target/release del anfitrión enlaza a /usr/bin/takana, que adentro es el de Arch.

Y las tres trampas de orientación que el agente reportó: el store real es /store y los runbooks dicen
./store porque están escritos para el hub; hay dos checkouts y no son intercambiables; y el .fleet
ausente no es defecto, lo repone la cosecha.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

c7c233755906f41d36c319886430edc8459185ee · por Sergio · (hace 1 mes) · padre e5e723b67 · ver el árbol en este commit

Delta semántico

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

1 archivos · +41 −0

diff --git a/docs/28-servidor-de-produccion.md b/docs/28-servidor-de-produccion.md
index 30e0a053..f1f024cc 100644
--- a/docs/28-servidor-de-produccion.md
+++ b/docs/28-servidor-de-produccion.md
@@ -3268,6 +3268,47 @@ y `groups` apuntan a `../../bin/busybox`— y se comprobó con `id` de root, de
 > que abre al agente. Es la misma familia que el `/etc/shadow` del §6.51: **la caja no avisa cuando
 > le falta algo esencial — se entera el que lo usa**.
 
+### 6.54 🧭 Trabajar DESDE la jaula: lo que el agente de adentro reportó *(2026-09-18)*
+
+El agente enjaulado pasó un informe de defectos —el primero hecho **desde adentro**— y vale más que
+cualquier inspección desde el anfitrión, porque son las cosas con las que se choca al usarla.
+
+#### Lo que se arregló, y dónde vive cada arreglo
+
+| # | defecto | dónde queda el arreglo |
+|---|---|---|
+| 1 | sin entrada en `/etc/passwd` para el uid de adentro ⇒ `ssh`/`git` mueren con *No user exists for uid 1001* | `jaula-preparar.sh` (upper) |
+| 2 | `/etc/ssh/ssh_config.d` es de la capa inferior, dueño fuera del mapa ⇒ `ssh` **aborta**, no degrada | `jaula-preparar.sh` (upper) |
+| 3 | `~/.ssh` en `ro` ⇒ `ssh` no puede escribir `known_hosts` | **manifiesto**: pasa a `rw` + semilla desde el anfitrión |
+| 4 | sin clave para el worker ⇒ `Permission denied (publickey)`, cero granja | clave **propia** de la caja autorizada en el worker |
+| 5 | sin `rsync`/`python`/`jq`/`b3sum`, y sin `takana` ejecutable | **manifiesto**: `packages`; y un `takana` que sale del store |
+
+El **1 y el 2 viven en el `upper`**, que por el D3 es caché descartable: al primer `recreate` se
+pierden. Por eso existe `scripts/servidor/jaula-preparar.sh`, que los repone —escribiendo como la
+persona, no como root, para no dejarle ficheros que después no puede tocar—.
+
+Sobre el **4**: se autorizó en el worker la clave **de la caja** (`sergio@caja`), no la de root. Es
+una credencial distinta y revocable: quitarla del `authorized_keys` del worker corta ese acceso sin
+tocar ningún otro. Comprobado: `ssh root@dev.gioser.net hostname` desde la caja contesta `PruebasIA`.
+
+Sobre el **5**: `takana` **no se compila adentro**. El binario es el musl estático del store y corre
+igual dentro de una imagen glibc; lo que fallaba es que
+`/opt/takana/target/release/takana` del anfitrión es un enlace a `/usr/bin/takana`, y **adentro
+`/usr/bin` es el de Arch**. Queda `/work/sergio/bin/takana`, que elige el más reciente del store —no
+un hash cableado, para que sobreviva a un re-sellado— y el `target/release/takana` del clon apunta
+ahí.
+
+#### Las tres trampas de orientación, que no son defectos pero cuestan una hora
+
+- **El store real es `/store`**, 61 G y 1333 artefactos. Los runbooks y el `CLAUDE.md` dicen
+  `takana build --store ./store` porque están escritos para el HUB; copiado literal en la caja, eso
+  apunta a un store vacío dentro del clon. Desde la caja va `--store /store`.
+- **Hay dos checkouts y no son intercambiables**: `/work/sergio/takana` es el de trabajo —suyo, con
+  push propio—, y `/opt/takana` es el del sistema: el que usan el cron, la granja y los servicios.
+  Editar el segundo por costumbre es pisarle el árbol al latido.
+- **`scripts/farm/.fleet` ausente NO es un defecto** —el propio informe lo retiró—: `flota-permanente`
+  está versionado y `cosecha-cron` lo repone.
+
 ### 6.51 🔥 Me dejé afuera de la caja — 20 minutos caída, y tres causas encadenadas *(2026-09-17)*
 
 Crear una cuenta de usuario tiró el servidor de producción. Queda escrito entero porque **ninguna de