Commit Graph
1876 Commits
Author SHA1 Message Date
SergioandClaude Opus 5 ba3ed16169 la caja ya es un HUB: el lab viajó pineado, hashea igual, y el latido late desde allá
El §6.42 dijo qué faltaba y el usuario eligió darle el lab a la caja. Hecho.

EL LAB NO SE COPIA, SE PINEA Y SE TRAE. `lab-image.sh` lo empaqueta determinista (--sort=name
--mtime=@1 --owner=0, excluyendo var/log/apk.log), lo publica al Storage Box con el sha en el nombre,
y `--traer` VERIFICA EL SHA ANTES DE EXTRAER. El empaquetado de hoy devolvió exactamente el sha que
el repo ya pineaba (d1e341d5…): o sea que el lab de gioser nunca derivó Y que el empaquetado es
reproducible de verdad, no una promesa del comentario.

LA PRUEBA QUE DECIDE no es que arranque: la caja calcula los MISMOS ArtifactHash que gioser en las
cuatro recetas de control (zlib, busybox, caddy, shuma-daemon). Con otro lab serían otros números y
el store no lo notaría.

⚠ Y UNA TRAMPA QUE ME TENDÍ SOLO: al copiar los 24 artefactos que le faltaban al store de la caja,
`rsync -a --files-from=<lista de DIRECTORIOS>` mandó 2.281 bytes y «total size is 0» — pero creó los
24 DIRECTORIOS VACÍOS. `--files-from` no recursa sin `-r`, y un directorio vacío en el store ES UN
CACHE-HIT (§3 de CLAUDE.md): `build` lo habría dado por sellado sin construir. Detectado contando,
borrados los 24, repetido con `-r`: 3,18 GB y 0 vacíos de 1655.

Stores convergidos (copiados también obs-studio y spectacle, justo los dos que el worker no logra
construir). La caja no empata, gana por uno: corpus 930 selladas / 1 deuda contra 929 / 2; KDE
1106 / 1 contra 1105 / 2.

Latido mudado: cron apagado en gioser, encendido en la caja, y un ciclo corrido a mano mirando lo que
publica — `repo al día (ff)` → `estado commiteado+pusheado` con los números buenos.

⚠ Lo que queda apretado es el disco: /store de la caja al 91%, 8,2 G libres. Un hub sella y cosecha:
ése es el próximo muro, y `store-gc.sh` no se corrió nunca allá.

⇒ PUERTA 4 EN VERDE. De las ocho quedan dos a medias (5 y 7) y ninguna en rojo.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 15:14:26 +00:00
Sergio 5b5b1aad1e estado: cosecha granja 2026-09-17T15:12:28Z — avance del árbol KDE 2026-09-17 15:12:28 +00:00
Sergio 4d9a0e1e6c estado: cosecha granja 2026-09-17T15:01:28Z — avance del árbol KDE 2026-09-17 15:01:28 +00:00
SergioandClaude Opus 5 cb9cf291b9 reparado el grafo que la caja publicó en cero: 936 recetas «unhashable» vuelven a ser 929 selladas
El ciclo que corrió desde la caja (commit 45b5685a) dejó en `main` un `build-state*.json` diciendo
`unhashable: 936` y `unhashable: 1112` — o sea, que NO SE PUDO CALCULAR el hash de ninguna receta,
porque el lab entra en el ArtifactHash y esa máquina no lo tiene (§6.42).

Regenerado desde gioser, que sí lo tiene: 929 selladas de 936 · KDE 1105 de 1112. El grafo CIERRA y
el topo-sort pasa en los dos.

⚠ Lo que esto enseña sobre el propio fichero: un `build-state` con `unhashable` en el total no es
«el corpus está mal», es «quien lo generó no podía mirarlo». Los dos se leen igual en un tablero.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 14:57:56 +00:00
SergioandClaude Opus 5 644be2645b el latido NO se puede mudar todavía: un hub no es el que tiene el repo, es el que tiene el LAB
Se intentó el último intercambio —cron de cosecha de gioser a la caja— y salió mal en el primer
ciclo. Vuelta atrás hecha en minutos; queda escrito porque el motivo no era ninguno de los previstos.

Funcionó todo lo mecánico: la caja sembró al worker, leyó su manifiesto, regeneró los ocho ficheros
de estado, pasó los vigías, se puso al día por fast-forward y commiteó+empujó. Lo que publicó es el
problema:

  caja  : {recipes: 1112, nodes: 1115, unhashable: 1112, ajeno: 3}
  gioser: {recipes: 1112, nodes: 1115, sealed: 1105, never: 5, debt: 2}

`unhashable: 1112` no es «sin sellar»: es que NO SE PUDO CALCULAR el hash de ninguna receta, porque
EL LAB ENTRA EN EL ArtifactHash y una caja de producción no lo tiene — a propósito. El commit
45b5685a dejó en main un build-state que dice que el corpus entero no existe.

⇒ La puerta 4 NO era una línea de crontab, aunque todas las piezas que se miraron (git, python3,
rsync, ssh, takana, flock, .fleet, la llave) estuvieran. Un hub es la máquina que tiene el LAB: el
tercer paso del latido no es copiar, es PENSAR sobre el corpus. Tres salidas, y ninguna es «poner el
cron»: darle el lab a la caja · partir el latido (siembra/cosecha allá, grafo donde haya lab) · que
el hub sea otra máquina (el LXC ya tiene lab y muele 24/7). Es decisión del usuario, y es lo único
que queda entre esto y borrar gioser.

El latido de gioser, reactivado, repara el daño solo en su siguiente ciclo.

Y el ciclo destapó tres cosas en la caja: `poda-fuentes.sh` NO corre en takana (usa sustitución de
procesos, que busybox ash no tiene — cuarto tropiezo del día con la misma forma); los vigías
reportaron 1 ofensor nuevo de raíces (bzip2), 3 herramientas selladas no invocables y 7 errores en
servicios.txt; y `arjectl status | head -2` hace paniquear a arjectl con un EPIPE sin manejar.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 14:57:05 +00:00
Sergio 45b5685ade estado: cosecha granja 2026-09-17T14:54:31Z — avance del árbol KDE 2026-09-17 14:54:31 +00:00
SergioandClaude Opus 5 897b4eaf28 INTERCAMBIO de tejido hecho: la identidad cambió de máquina, no de dueño
Apagados en gioser (relay, serve y willay-crosscheck), encendidos en la caja: `tejido` en :4102 y
`willay-crosscheck` en :4103, los dos alcanzables desde fuera.

La prueba de que la identidad VIAJÓ no es que el servicio arranque —eso pasaría igual con semillas
nuevas, que es el fallo silencioso que esto existe para evitar— sino que la semilla sea la misma:
`device.seed` y `roster.postcard` con sha256 IDÉNTICO a los dos lados. El PeerId sale de ahí, así
que sigue siendo 12D3KooWBw2u….

⚠ LO QUE SÍ CAMBIA: el multiaddr que los clientes tienen configurado lleva la IP.
  antes /ip4/204.168.193.248/tcp/4102/p2p/12D3KooWBw2u…
  ahora /ip4/2.29.29.217/tcp/4102/p2p/12D3KooWBw2u…     (mismo PeerId, otra IP)

🧱 SIN EL CORTAFUEGOS HABRÍA SIDO UN VERDE FALSO: el reglaset abría 80/443/1137/2345/22022 y nada
más. Con el relay encendido y el 4102 filtrado, `status` diría «corriendo · 0 reinicios» y la flota
no llegaría. Abiertos 4102 y 4103 con su ban por tasa; NO el 33097, que era el puerto efímero de un
`tejido serve` cliente. Y el fichero quedó IDEMPOTENTE (crear+borrar la tabla antes de definirla),
que era deuda del §6.33: 15 reglas dport antes, 21 después — no 36.

⚠ La política que genera ese reglaset NO EXISTE en ningún disco: ni la ruta que su cabecera nombra
ni el binario `cortafuegos`. El generado sobrevivió a su fuente, así que hoy se edita a mano.

🆔 Y takana acepta ULIDs que arje-zero RECHAZA: la card no encarnaba por `invalid character`, y era
la `L` de «RELAY» — carácter excluido del alfabeto Crockford. `service-cards` lo dio por bueno («26
alfanuméricos») y el consumidor lo tiró. El validador del productor más laxo que el del consumidor
siempre termina en un fallo lejos de donde se escribió.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 14:47:47 +00:00
Sergio 318c0a858b estado: cosecha granja 2026-09-17T14:32:00Z — avance del árbol KDE 2026-09-17 14:32:00 +00:00
Sergio 5db7dc66f5 estado: cosecha granja 2026-09-17T14:01:26Z — avance del árbol KDE 2026-09-17 14:01:26 +00:00
Sergio 559218f643 estado: cosecha granja 2026-09-17T13:31:25Z — avance del árbol KDE 2026-09-17 13:31:25 +00:00
Sergio 70b18d26d6 estado: cosecha granja 2026-09-17T13:01:20Z — avance del árbol KDE 2026-09-17 13:01:20 +00:00
Sergio 9477c23746 estado: cosecha granja 2026-09-17T12:31:27Z — avance del árbol KDE 2026-09-17 12:31:27 +00:00
Sergio 814c541af8 estado: cosecha granja 2026-09-17T12:01:22Z — avance del árbol KDE 2026-09-17 12:01:22 +00:00
Sergio 2c8600be58 estado: cosecha granja 2026-09-17T11:31:55Z — avance del árbol KDE 2026-09-17 11:31:55 +00:00
Sergio 6c63dc61d6 estado: cosecha granja 2026-09-17T11:01:18Z — avance del árbol KDE 2026-09-17 11:01:18 +00:00
Sergio f3f286a8e4 estado: cosecha granja 2026-09-17T10:31:19Z — avance del árbol KDE 2026-09-17 10:31:19 +00:00
Sergio 28a0bd98bd estado: cosecha granja 2026-09-17T10:01:21Z — avance del árbol KDE 2026-09-17 10:01:22 +00:00
Sergio b02c27e13e estado: cosecha granja 2026-09-17T09:31:28Z — avance del árbol KDE 2026-09-17 09:31:28 +00:00
Sergio 209ac1a840 estado: cosecha granja 2026-09-17T09:01:23Z — avance del árbol KDE 2026-09-17 09:01:23 +00:00
Sergio 5455240c1b estado: cosecha granja 2026-09-17T08:31:20Z — avance del árbol KDE 2026-09-17 08:31:20 +00:00
Sergio 3a7ee9ad25 estado: cosecha granja 2026-09-17T08:01:28Z — avance del árbol KDE 2026-09-17 08:01:28 +00:00
Sergio edfa603dad estado: cosecha granja 2026-09-17T07:31:40Z — avance del árbol KDE 2026-09-17 07:31:40 +00:00
Sergio af6ae94b4d estado: cosecha granja 2026-09-17T07:01:39Z — avance del árbol KDE 2026-09-17 07:01:39 +00:00
Sergio eb2754551e estado: cosecha granja 2026-09-17T06:31:33Z — avance del árbol KDE 2026-09-17 06:31:33 +00:00
Sergio d72e504904 estado: cosecha granja 2026-09-17T06:01:19Z — avance del árbol KDE 2026-09-17 06:01:20 +00:00
Sergio 0fe6ba6a7a estado: cosecha granja 2026-09-17T05:31:18Z — avance del árbol KDE 2026-09-17 05:31:19 +00:00
Sergio 9db7353db0 estado: cosecha granja 2026-09-17T05:01:19Z — avance del árbol KDE 2026-09-17 05:01:19 +00:00
Sergio 816b843ee2 estado: cosecha granja 2026-09-17T04:31:17Z — avance del árbol KDE 2026-09-17 04:31:17 +00:00
Sergio d5c1102132 estado: cosecha granja 2026-09-17T04:01:22Z — avance del árbol KDE 2026-09-17 04:01:22 +00:00
Sergio 7aff7f496c estado: cosecha granja 2026-09-17T03:31:22Z — avance del árbol KDE 2026-09-17 03:31:22 +00:00
Sergio 533eb5b600 estado: cosecha granja 2026-09-17T03:01:22Z — avance del árbol KDE 2026-09-17 03:01:22 +00:00
Sergio 81c9a88b8f estado: cosecha granja 2026-09-17T02:31:27Z — avance del árbol KDE 2026-09-17 02:31:27 +00:00
Sergio 64d40f95d0 estado: cosecha granja 2026-09-17T02:01:22Z — avance del árbol KDE 2026-09-17 02:01:22 +00:00
Sergio 8d7c5db496 estado: cosecha granja 2026-09-17T01:31:28Z — avance del árbol KDE 2026-09-17 01:31:28 +00:00
Sergio 77f057f2c5 estado: cosecha granja 2026-09-17T01:01:37Z — avance del árbol KDE 2026-09-17 01:01:37 +00:00
Sergio b5ffa33d04 estado: cosecha granja 2026-09-17T00:31:20Z — avance del árbol KDE 2026-09-17 00:31:20 +00:00
Sergio a8981dbe5b estado: cosecha granja 2026-09-17T00:01:30Z — avance del árbol KDE 2026-09-17 00:01:30 +00:00
Sergio 2070916d2f estado: cosecha granja 2026-09-16T23:31:19Z — avance del árbol KDE 2026-09-16 23:31:20 +00:00
Sergio cba6a4e0fe estado: cosecha granja 2026-09-16T23:03:54Z — avance del árbol KDE 2026-09-16 23:03:54 +00:00
SergioandClaude Opus 5 d0a65ad1ca las ocho puertas re-medidas: siete en verde o a medias, UNA en rojo — y es un corte, no trabajo
La tabla del §6.3 era del 10 de septiembre. Hoy, entera:

  2 store entero         1632 artefactos, 0 vacíos (eran 1362) · ⚠ /store al 88%
  4 la granja late allá  el latido SIGUE en gioser
  6 dominios vivos 200   los 8 contra 2.29.29.217, `sergio` incluido
  7 respaldo desde allá ⬖ el script corre y LISTA el Storage Box desde la caja
  1,3,8  · 5 ⬖ (sirve, no consume: reproducir exige el lab entero)

La puerta 4 es ahora UNA LÍNEA DE CRONTAB. La caja ya tiene git, python3, rsync, ssh, takana, flock,
la llave del worker y el `.fleet`; le faltaban dos costuras y están hechas: `store -> /store` (el
script espera ./store, acá es partición) y `target/release/takana -> /usr/bin/takana` (no hay árbol
de build en una caja instalada). Prueba de sólo lectura: `estado-granja.sh` desde la caja ve al
worker, lee el grafo KDE y dice «CRON DE COSECHA: NO instalado».

NO lo instalé, por el mismo motivo que tejido: con el cron en las dos máquinas, las dos harían
`rsync --delete` al worker y las dos cosecharían y commitearían. El latido se INTERCAMBIA, no se
duplica, y es el último movimiento antes del borrado.

De paso, el repo de /opt/takana estaba 5 días atrasado y quedó en origin/main exacto (0 diferencias),
con tar de respaldo de los 92 ficheros previos. ⚠ Esos 92 no eran trabajo local: era contenido que
YA estaba río arriba metido en el árbol sin commitear — un árbol que parece sucio y está atrasado.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 23:02:40 +00:00
Sergio 92f7916b6b estado: cosecha granja 2026-09-16T22:31:27Z — avance del árbol KDE 2026-09-16 22:31:27 +00:00
Sergio aa3de89fd6 estado: cosecha granja 2026-09-16T22:02:03Z — avance del árbol KDE 2026-09-16 22:02:04 +00:00
Sergio b5c2260e0d estado: cosecha granja 2026-09-16T21:31:21Z — avance del árbol KDE 2026-09-16 21:31:21 +00:00
Sergio c88ce2a12c estado: cosecha granja 2026-09-16T21:01:36Z — avance del árbol KDE 2026-09-16 21:01:36 +00:00
SergioandClaude Opus 5 980839ab95 anotado el secreto en claro de la card de openclaw, comprobado sin imprimirlo
`/etc/arje/cards.d/openrc-openclaw.json` de gioser tiene una credencial en claro adentro del JSON —
2 coincidencias con patrón de api_key/token. Ese directorio está en `fuera_de_git`, así que la
mudanza lo copia y un respaldo lo multiplica.

No lo toco: rotar una credencial es del dueño. Queda anotado con las dos salidas (rotarla y moverla
a un fichero 600 que la Card EXIJA, como hace thasnuna; o que openclaw muera y se revoque igual), y
con la que no es opción: copiarla tal cual.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 20:58:47 +00:00
SergioandClaude Opus 5 ec469aef6b los nueve daemons propios declarados — y la línea entre «se muda» y «se INTERCAMBIA»
Nueve de las diez sellaron y están promovidas. Cinco corren en la caja (matilda, tupu, pacha,
pacha-secretos, willay-daemon, más el par de shuma de ayer); cuatro quedan instaladas y FRENADAS a
propósito, cada una con su guarda diciendo qué falta.

⚠ LA PAUTA DE LOS VHOSTS NO SIRVE PARA UNA IDENTIDAD. Con los sitios la regla fue «mudá el DNS y
dejá el origen encendido, así volver cuesta un minuto» (§6.26). Con `tejido` es justo lo contrario:
su README dice que la clave que el roster atesta ES la identidad de transporte libp2p
(`~/.tejido/device.seed`), así que dos máquinas con la misma semilla no son dos réplicas — son el
MISMO PeerId en dos sitios, dos impostores mutuos para la flota. `tejido` se INTERCAMBIA: se apaga
allá, se enciende acá, en ese orden. Todo listo para el intercambio (binario, cuenta 964, identidad
700 instalada) y su Card en `cards.d` pero NO en el `genesis`, para que un reinicio no lo encienda.

Y arrastra a `willay-crosscheck`, que no es independiente: corriendo su línea a mano dice «no hay
roster en /root/.tejido/roster.postcard — emparejá primero». Vive dentro de la red de tejido.

`thasnuna` tampoco puede: su INSTALAR.md —escrito hoy por el frente tawasuyu para esta mudanza—
pide `sandokan-mcp` y `claude` AUTENTICADO, y el CLI de claude es glibc de ~300 M (jaula qorpa).
De ahí sale un hallazgo que vale para el respaldo entero: la Card `openrc-openclaw` de gioser lleva
la API key de su proveedor EN CLARO dentro del JSON de /etc/arje/cards.d/, que se respalda y se
copia. Un secreto dentro de una Card viaja a todas partes.

`--label` de willay-crosscheck NOMBRA A LA MÁQUINA: en gioser decía `momento`. Ahora sale de
`hostname` y la guarda frena si no hay.

Y tres veredictos FALSOS en una tarde, los tres por probar con lo que la caja no tiene: `/dev/tcp`
(busybox ash no lo tiene) dio los 5 puertos de gioser «cerrados»; la expansión de llaves dijo que
los artefactos no habían llegado; y `find -newermt "-2 minutes"` dijo que tupu no escribía. Tupu SÍ
escribe: su fichero tiene tamaño CONSTANTE —es una serie fija— así que ni los bytes ni ese find
prueban nada; lo que decide es el mtime, medido dos veces con 40 s de por medio.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 20:57:44 +00:00
Sergio 42b53d4fdb estado: cosecha granja 2026-09-16T20:31:35Z — avance del árbol KDE 2026-09-16 20:31:35 +00:00
SergioandClaude Opus 5 98cd672a10 cuatro daemons propios corriendo en la caja — y la máquina se llamaba «(none)»
Sellaron `matilda`, `pacha`, `pacha-secretos` y `sandokan-watch`; las cuatro promovidas a canónicas
(hash idéntico antes y después de moverlas) y las tres primeras ya supervisadas por arje.
`matilda` archivó 78 ficheros leyendo el access log de caddy; `pacha` corre con SUS reglas y no con
las de fábrica; `pacha-secretos` vuelve a existir como binario — en gioser era un inodo borrado.

TRES CORREN COMO ROOT, declarado en vez de heredado. No es descuido: `matilda` lee
`/var/log/caddy/requests.json`, que caddy crea `-rw------- root root` y recrea igual en cada
rotación; y los tres del trío escriben en el MISMO `/var/lib/tupu`, cuyos 322 ficheros en gioser son
root:root — bajar a uno solo deja mezcla de dueños en un árbol compartido. O los tres, o ninguno. La
salida limpia (caddy con `mode 640` + cuenta propia del árbol) queda anotada en la receta. `pacha` y
`pacha-secretos` sí bajan a cuenta propia: en gioser tampoco corrían como root.

🕳️ LA CAJA NO TENÍA HOSTNAME. `hostname` decía `(none)` y `/etc/hostname` no existía — NINGUNA caja
takana lo fija: ni netup, ni el product-rootfs. Nunca importó porque nada archivaba por nombre,
hasta que llegó matilda: sus primeros 72 ficheros fueron a `/var/lib/tupu/none/`, y dos máquinas
distintas archivarían en la misma carpeta sin que nada falle. Puesto `/etc/hostname` + una Card
OneShot en el genesis para que sobreviva al reinicio. Lo correcto es que lo haga `netup`.

🛡️ Y `sandokan-watch` quedaba VERDE SIN VIGILAR: en takana no hay `auth.log` ni journalctl, así que
arrancaba, decía «sin fuente de accesos: no se guarda nada» y se quedaba «corriendo · 0 reinicios».
Su Card ahora sale 78 nombrando el problema y NO entra al genesis: un vigía que no vigila es peor
que uno caído, porque el caído se ve.

De paso, dos veredictos FALSOS en una tarde por probar con algo que la caja no tiene: `/dev/tcp` no
existe en busybox ash (dio «cerrado» para los cinco puertos de gioser, incluidos :80 y :443, que
sirven) y la expansión de llaves tampoco (dijo que los artefactos no habían llegado; habían
llegado). Misma familia que el §6.23.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 20:25:05 +00:00
Sergio 96d27a8ed7 estado: cosecha granja 2026-09-16T20:01:39Z — avance del árbol KDE 2026-09-16 20:01:39 +00:00
SergioandClaude Opus 5 cec3c06ace las decisiones de la mudanza pasan al repo, y el corral de respaldo queda armado
`work/` está en .gitignore, así que el fichero donde vive lo que el usuario decidió —con el motivo de
cada línea— no sobrevivía a la máquina que la mudanza borra. Ahora es `docs/state/`.

Nueve entradas marcadas `respalda`: terapeuta.ec (279 M, sin DNS hace tiempo), los cuatro «valens»,
`los-grandes-mensajes.pdf`, `kkk` (46 B, credencial en claro) y los tres clones de terceros CON
cambios sin commitear — lo commiteado se vuelve a clonar, lo de encima existe sólo en este disco.

Juntas en `/mnt/cosecha/respaldo-mudanza` (475 M) con LEEME y SHA256SUMS de 5472 ficheros. El
control se hizo ANTES del manifiesto: ficheros contados en origen y en corral, las nueve coinciden
(3805, 1243, 183, 1, 164, 1, 1, 72, 1).

⚠ NO entraron `~/hammer`, `~/takana` ni `~/tawasuyu`: son SYMLINKS a /mnt/vvv. El censo los veía
como entradas de 0 bytes CON remoto git —porque `git -C` sigue el enlace— y la recomendación
automática decía «respalda» por tener cambios sin commitear. Respaldarlos habría guardado tres
enlaces rotos. Un dato que parece del objeto y es del enlace.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 19:49:08 +00:00