Commit Graph
3020 Commits
Author SHA1 Message Date
SergioandClaude Opus 5 b985570788 respaldo: un parcial de SÓLO LECTURA envenena esa ruta para siempre — y el bucle lo llamaba «red»
La primera corrida completa desde la caja (puerta 7) se cayó 40 veces seguidas con el MISMO fichero:

  open ".../fonts/dejavu/.rsync-partial/DejaVuSans-Oblique.ttf" failed: No such file… (2)
  ..  store: corte de red (rsync 23). Intento 39; reanudo en 60s.
  !!  store: 40 intentos y sigue cayéndose. Dejo lo subido y paro.

No era red. Una transferencia interrumpida el 11-sep dejó ese PARCIAL en el destino con modo
-r--r--r-- (el del origen: el store es de sólo lectura por diseño), y ningún intento posterior puede
reescribirlo. El fallo es ETERNO, y el bucle reintentaba cada 60 s contra esa pared — exactamente lo
que la cabecera de la función de reintento dice que no hay que hacer.

Dos arreglos:

1. `--chmod=Fu+w`: los ficheros del respaldo quedan escribibles por su dueño, así que un corte a
   mitad se RETOMA en vez de trabarse. El precio es no conservar el bit de sólo-lectura en la copia;
   es bajo: el contenido es lo que se respalda y los permisos los reconstruye el store.

2. Al rsync 23 se le dan TRES intentos, no cuarenta, y al tercero se NOMBRA la causa probable (un
   parcial de sólo lectura en el destino) en vez de llamarlo corte de red. El 23 es «some files were
   not transferred», que tanto puede ser un cable como una pared.

Comprobado: borrado el parcial envenenado, ese fichero sube a la primera.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 16:55:01 +00:00
Sergio bd81af9a18 estado: cosecha granja 2026-09-17T16:31:10Z — avance del árbol KDE 2026-09-17 16:31:11 +00:00
SergioandClaude Opus 5 c79c7aa9be las ocho puertas al cierre del día: siete en verde y una corriendo
2 store entero           1320 artefactos, 0 vacíos, /store al 62 % tras el gc
  4 la granja late allá    §6.43 — con el lab pineado, y la caja gana por uno en los dos grafos
  5 el host se instala de su repo  §6.46 — 171 publicados, install --require-signed en verde
  7 el respaldo desde la caja  primera corrida completa en marcha
  1,3,6,8 

Lo que separa esto del borrado de gioser ya no es técnico: es la corrida de respaldo terminando y la
decisión del usuario — a mano, con las ocho en verde, nunca por automatización. Y lo que queda vivo
en gioser es trabajo de la mudanza, no servicios: los ~10 G de árboles personales sin decidir.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 16:09:04 +00:00
SergioandClaude Opus 5 615cc2f839 git-sincronizar: un cherry-pick VACÍO no es un fallo, es que el contenido ya estaba
Estrenando el guión con su propio commit saltó el caso: la comprobación por mensaje dio negativo,
el cherry-pick de recuperación salió con «the previous cherry-pick is now empty» y el guión abortó
con error… teniendo el contenido ya en el árbol.

Ahora distingue los dos casos: vacío ⇒ falso positivo de la comprobación, se aborta el cherry-pick y
se sigue; cualquier otro error ⇒ se aborta, se imprime el reflog y se sale ≠0 para que lo mire un
humano. Lo que importa es que el CONTENIDO esté, no que el sha coincida.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 16:07:25 +00:00
SergioandClaude Opus 5 17b6ea1a4f git-sincronizar.sh: la regla 2 ter automatizada — porque hoy hizo falta cinco veces
En dos días, `git pull --rebase` se llevó por delante CINCO commits propios en este árbol
compartido, siempre con el mismo reflog: `commit:` mío, `(start): checkout <otro>`, `(finish):
returning to main`, y ni un `pick` en el medio. El comando no es el culpable —en un repo de juguete
reaplica bien— sino que alguien mueve `refs/heads/main` mientras el rebase está en vuelo.

La receta manual (CLAUDE.md regla 2 ter) funciona: mirar el log y recuperar con reflog +
cherry-pick. Esto es esa receta automatizada, porque **una regla que hay que acordarse de aplicar en
cada push es una regla que un día no se aplica**.

Hace, en orden: anota su HEAD · rebasa · COMPRUEBA que el commit sigue en la rama —por su mensaje,
no por el sha, que el rebase reescribe— · si no está lo recupera del reflog · empuja · verifica que
gitea quedó donde tiene que quedar · y si el espejo de GitHub quedó divergente lo realinea con
`--force-with-lease` (nunca `--force` a secas) y sólo tras comprobar que su contenido ya está en
nuestra historia.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 16:06:44 +00:00
SergioandClaude Opus 5 ef2f9391d9 puerta 5 verde: la caja publica su repo firmado y se instala de él
Estaba a medias desde el §5.4 por el lab. Con el lab instalado (§6.43), cerrada en dos movimientos,
los dos en la caja:

  publicar: 171 paquetes con expected_hash anclado, 3 sin ancla, índice verificado contra ./trust,
            firmado con la clave de release que se mudó el 16-sep. Falló uno: os-release.
  instalar: `takana install duf --require-signed --trust ./trust` ⇒ «release: trusted (by release)»,
            deps resueltas, apply OK, registrado. Bajo --prefix y --db propios, sin tocar el sistema.

⚠ El matiz honesto vale más que el verde: el artefacto YA ESTABA en el store, así que se ejercitó
resolver + verificar firma + hidratar, NO reproducir desde fuente. Lo que el lab destrabó y sí quedó
probado aparte es el HASH (§6.43, cuatro de cuatro iguales a gioser), que es donde moría antes. Queda
sin ejercitar «paquete que no está en el store» — y en una caja de producción es discutible que se
quiera: un servidor no tiene por qué compilar.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 16:05:56 +00:00
Sergio 46f60b4bd2 estado: cosecha granja 2026-09-17T16:01:09Z — avance del árbol KDE 2026-09-17 16:01:09 +00:00
SergioandClaude Opus 5 449028f6cb la poda de fuentes ya corre en la caja: 5,4 G — y van 32,2 G recuperados hoy
El paso de poda del latido moría con `/dev/fd/63: No such file or directory` y un `viejos: unbound
variable` de consecuencia. La causa no era el script: la sustitución de procesos de bash necesita
/dev/fd y UNA CAJA TAKANA NO LO TIENE (gioser sí). O sea que ningún `<(...)` de ningún script del hub
funcionaba allá; éste fue el primero en toparse.

Arreglado en los dos lados: /dev/fd -> /proc/self/fd en la caja con Card OneShot en el genesis
(comprobado: `cat <(echo funciona)` responde), y en el script fuera `<(...)` y fuera `df -B1
--output=avail`, que es GNU — sin eso corría pero decía «libres 0.0 G», y un 0 se lee como disco
lleno.

Resultado: 2 árboles podados, 5,4 G. Con el store-gc del §6.44 son 32,2 G recuperados hoy en la
caja: /store al 62 %, /work al 29 %.

⇒ Van dos parches con forma de Card OneShot para cosas que debería hacer el init (hostname y ahora
/dev/fd). Es una lista que conviene no alargar.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 15:56:53 +00:00
SergioandClaude Opus 5 80e04872d7 poda-fuentes: no corría en takana — y la causa era que la caja NO TIENE /dev/fd
El latido, corrido desde la caja, moría así:

  poda-fuentes.sh: line 72: /dev/fd/63: No such file or directory
  poda-fuentes.sh: line 73: viejos: unbound variable
  ⚠ poda de fuentes falló (rc=1) — sigo

El segundo error es consecuencia del primero (el `mapfile` nunca corrió), y el primero no nombra la
causa: **la sustitución de procesos de bash necesita `/dev/fd`, y una caja takana no lo tiene**.
gioser sí: `/dev/fd -> /proc/self/fd`. O sea que NINGÚN `<(...)` de NINGÚN script del hub funcionaba
allá — esto era sólo el primero en toparse.

Dos arreglos, y los dos hacían falta:

1. En el script: `<(...)` fuera (fichero temporal, que anda en cualquier shell y con cualquier /dev)
   y `df -B1 --output=avail`, que es GNU, por `df -k` + awk. Es la poda de `work/sources`, justo lo
   que un hub necesita para no llenarse.

2. En la caja: `/dev/fd -> /proc/self/fd`, con una Card OneShot en el genesis para que sobreviva al
   reinicio (como la de `hostname`). Comprobado después: `bash -c "cat <(echo funciona)"` responde.
   Lo correcto a futuro es que lo haga el init o el product-rootfs, no una Card — queda anotado.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 15:56:04 +00:00
Sergio 42eb135328 estado: cosecha granja 2026-09-17T15:31:07Z — avance del árbol KDE 2026-09-17 15:31:07 +00:00
SergioandClaude Opus 5 6901beee93 el primer store-gc de la caja: 26,8 G liberados, y el patrón GNU-vs-busybox ya va por cinco
/store pasó de 84,7 G usados (91 %) a 57,9 G (62 %): 337 superados borrados y VERIFICADOS, 1657 →
1320 artefactos. Los 150 huérfanos (11,4 G) quedan intactos por diseño: son el único ejemplar de su
nombre.

EL CONTROL QUE NO ES OBVIO: 11 binarios de /usr/bin de esa caja son symlinks que apuntan DENTRO del
store — los daemons instalados estos dos días. Un gc que borre el artefacto equivocado no rompe el
store, rompe el /usr/bin de una máquina en producción. Comprobado antes (los 11 enlazan al hash
vigente) y después (los 11 resuelven, 21 entes corriendo).

Y el gc no sabía decir sus dos números: `du --files0-from=-` es GNU y busybox no lo tiene; `df -h
/home` estaba cableado cuando el store vive en /store (sin /home, `tail -1` devolvía la CABECERA: de
ahí «libres: Available → Available»). El primer arreglo también estaba mal —`xargs -d` es otra
extensión GNU— y eso imprimió «huérfanos ?»: ese `?` es deliberado, un cero inventado habría dicho
«no hay nada que ganar» con 11,4 G en huérfanos. Con `xargs -0` la caja ya contesta 11.4G.

⇒ Cinco tropiezos del mismo día con la misma forma (/dev/tcp, llaves, find -newermt, sustitución de
procesos, y estos dos): un script del hub escrito en una máquina GNU no corre en la caja hasta que se
prueba ahí.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 15:20:41 +00:00
SergioandClaude Opus 5 1ca210a311 store-gc: xargs -d tampoco existe en busybox — el arreglo anterior imprimía «huérfanos ?»
El primer intento cambió `du --files0-from=-` (GNU) por `xargs -d '\n' du -sk`… y `-d` también es
extensión GNU. En la caja quedó «espacio: superados 0 · huérfanos ?». Va con `tr '\n' '\0' | xargs
-0`, que busybox sí tiene, y se probó la función suelta en las dos máquinas.

Lo que SÍ funcionó del intento anterior es el `?`: cuando el total no se puede calcular, la función
lo DICE en vez de imprimir 0. Un cero inventado habría dicho «no hay nada que ganar» justo cuando
había 150 huérfanos.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 15:19:59 +00:00
SergioandClaude Opus 5 4fe6046200 store-gc: decía «espacio: superados ·» y «libres: Available → Available» — dos bugs que salen en takana
Corrido por primera vez en la caja (una máquina busybox, no GNU), el recolector funcionó —337
artefactos borrados y verificados, 26,8 G liberados— pero sus dos NÚMEROS salieron vacíos:

  ==> espacio: superados  · huérfanos
  ==> 337 artefactos borrados y VERIFICADOS (0 sobrevivientes) · libres: Available → Available

1. `du -sch --files0-from=-` es de GNU coreutils y busybox NO lo tiene ⇒ `espacio()` devolvía vacío.
   Un número que falta se lee como un número chico: sin él nadie puede decidir si vale la pena
   correrlo, que es justo para lo que está el dry-run. Ahora `xargs du -sk` + awk, que anda en los
   dos mundos.

2. `df -h /home` estaba CABLEADO, y el store casi nunca vive ahí: en gioser es un bind-mount del
   volumen y en una caja takana es `/store`, su propia partición. En la caja no hay `/home`, así que
   `tail -1` se quedó con la CABECERA y el resultado fue «Available → Available». Se mide `$STORE`.

Medido de verdad con `df` a mano: /store pasó de 84,7 G usados (91 %) a 57,9 G (62 %) — 26,8 G
liberados, 1657 → 1320 artefactos. Y el control que importa después de un gc: los 11 enlaces de
`/usr/bin` que apuntan DENTRO del store siguen resolviendo y los 21 entes siguen corriendo.

⚠ Vale anotar la advertencia que el propio gc imprime y que en esa caja no se puede satisfacer: «sin
.config legible ⇒ NO se protege ningún kernel por esta vía». El default (sólo superados) no toca lo
vigente, pero `--huerfanos` en una máquina que arranca de su store hay que pensarlo dos veces.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 15:19:22 +00:00
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 61bf2cfd98 regla 2 ter: el comando NO es el culpable — probado en un repo de juguete
Pasó dos veces el mismo día, con el mismo reflog: commit propio, `(start): checkout <otro>`,
`(finish): returning to main`, y ni un `pick` en el medio.

Antes de escribir otra hipótesis, se probó: dos clones de juguete, el otro empuja, yo commiteo local,
`git pull --rebase -q origin main` ⇒ mi commit SE REAPLICA y mi fichero sigue. O sea que `pull
--rebase` hace lo suyo, y lo que falla es que este árbol lo comparten varios agentes y alguien mueve
`refs/heads/main` mientras el rebase está en vuelo.

La receta práctica no cambia (mirar `git log -1` después de cada pull; recuperar con reflog +
cherry-pick), pero el diagnóstico sí: evita ir a buscar el bug al lugar equivocado.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 14:59:02 +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 2271cc3c10 el latido se pone al día antes de commitear — si no, late y no publica, para siempre
`cosecha-cron.sh` commitea el estado y lo empuja, pero nunca hacía `pull`. En el hub no se notaba:
el árbol lo mantiene al día el agente que trabaja ahí. Al mover el latido a una caja donde NO hay
nadie trabajando —que es justo lo que pide la puerta 4— el repo se queda atrás en el primer push
ajeno y a partir de ahí TODOS los ciclos fallan el push, cada uno anotando «reintenta próximo
ciclo». Un latido que late y no publica.

`git pull --ff-only`, y nunca `--rebase`: este script corre en un árbol COMPARTIDO con otros agentes
y ahí un `pull --rebase` ya se llevó un commit por delante (regla 2 ter). Fast-forward no reescribe
nada: o adelanta limpio, o falla sin tocar el árbol y se anota en el log.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 14:52:00 +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