tawasuyu

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 1569Shell 203Rust 109Markdown 993728 Definitions

siembra: anclar la exclusión de PNG — sin anclar rompe las recetas que traen PNG

La siembra excluía `*.png` sin anclar, o sea PNG en CUALQUIER sitio, incluido
recipes/. Dos consecuencias y las dos malas:

  a) rsync PROTEGE DE BORRADO lo que excluye. Un directorio cuyo único resto es
     un .png no se puede vaciar y por lo tanto no se puede borrar nunca, aunque
     el hub lo haya eliminado. Medido: recipes/atuq/extension/atuq128.png
     sobrevivió a un rename hecho en el hub, y el log del latido venía repitiendo
     `cannot delete non-empty directory: recipes/atuq/extension` sin que nadie lo
     leyera como un error.
  b) Un PNG NUEVO de una receta tampoco viaja. Y hay recetas cuyo `[source] dir`
     lleva PNG dentro: los 9 iconos de recipes/atuq/branding/icons/.

El efecto medido: `atuq` daba b3:f2960991 en el hub y b3:b33e81a5 en el worker,
por ESE único fichero de más. El worker no podía coincidir con el hub ni
construyendo bien.

Lo bueno es que no era silencioso, y por diseño: hammer SÍ hashea el árbol de un
`[source] dir` (recipe.rs, `dir:<hash>`), así que la divergencia sale como otro
ArtifactHash en vez de como dos bytes distintos en la misma dirección. Es
exactamente la propiedad que le falta al lab y a la versión de hammer.

Lo que se quería ahorrar eran las capturas: docs/evidencia/ (4,4 M) y el PNG
suelto de la raíz (1 M). Eso ahora se excluye POR RUTA. Los PNG de recipes/
viajan, que es lo correcto: ahí son fuente, no adorno.

Borrado el fichero rancio del worker; hub y worker vuelven a coincidir en
b3:f2960991.

dc1391e611163e0cc65cef12f795f98479a3eeb6 · by Sergio · (1 month ago) · parent 1578eb16f · browse the tree at this commit

Semantic delta

No definition changed: this change is text, documentation or data.

1 files · +18 −1

diff --git a/scripts/farm/cosecha-cron.sh b/scripts/farm/cosecha-cron.sh
index 716d421a..81790e3c 100755
--- a/scripts/farm/cosecha-cron.sh
+++ b/scripts/farm/cosecha-cron.sh
@@ -58,10 +58,27 @@ else
     [ -n "${name:-}" ] || continue
     echo "==> $name ($ip)"
     # 1. SIEMBRA: código + recetas laptop→worker (--delete: el laptop manda; nunca toca work/store/target).
+    # ⚠ LA EXCLUSIÓN DE PNG VA ANCLADA, Y NO ES ESTILO (2026-09-06). Antes decía `--exclude '*.png'`,
+    # sin anclar, o sea PNG en CUALQUIER sitio — incluido `recipes/`. Dos consecuencias, las dos malas:
+    #
+    #   a) rsync PROTEGE DE BORRADO lo que excluye. Un directorio cuyo único resto es un `.png` no se
+    #      puede vaciar y por lo tanto no se puede borrar NUNCA, aunque el hub lo haya eliminado.
+    #      Medido: `recipes/atuq/extension/atuq128.png` sobrevivió a un rename hecho en el hub y el
+    #      log de la siembra repetía `cannot delete non-empty directory: recipes/atuq/extension`.
+    #   b) Un PNG NUEVO de una receta tampoco viaja. Y hay recetas cuyo `[source] dir` tiene PNG
+    #      dentro: los 9 iconos de `recipes/atuq/branding/icons/`.
+    #
+    # Como hammer SÍ hashea el árbol de un `[source] dir` (`recipe.rs`, `dir:<hash>`), el efecto no es
+    # silencioso —bendito sea—: el worker calcula OTRO ArtifactHash. Medido el mismo día,
+    # `atuq` daba `b3:f2960991` en el hub y `b3:b33e81a5` en el worker por ESE único fichero de más.
+    # O sea que el worker no podía coincidir con el hub ni construyendo bien.
+    #
+    # Lo que se quería ahorrar eran las capturas: `docs/evidencia/` (4,4 M) y el PNG suelto de la raíz
+    # (1 M). Eso se excluye por RUTA. Los PNG de `recipes/` viajan, que es lo correcto: son fuente.
     if rsync -az --delete -e "$SSH" \
         --exclude /work --exclude /store --exclude '/store-*' --exclude /target \
         --exclude /dist --exclude /.dev-fs --exclude /.git --exclude /.scratch \
-        --exclude '*.png' --exclude '/content*' \
+        --exclude '/docs/evidencia/' --exclude '/*.png' --exclude '/content*' \
         ./ "root@$ip:$REMOTE/" 2>&1 | tail -2; then
       echo "   siembra ✓"
     else