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…

feat(granja): y el caso que rompe el HASH, no sólo la trazabilidad

Seis recetas traen `[source] dir` —`atuq`, `firmware-metal`, `firmware-tigerlake`,
`linux-firmware`, `os-release`, `wasi-sdk`— y takana hashea ese árbol ENTERO (`dir:<hash>`,
`takana-core/src/recipe.rs:612`). Un fichero de más ahí dentro —el típico respaldo
`X.toml.antes-de-algo` que todos dejamos al editar en el clon de la granja— hace que el worker
calcule OTRO `ArtifactHash` que el hub, y entonces **no puede coincidir con él ni construyendo
bien**.

MEDIDO con un fichero de prueba dentro de `recipes/firmware-metal/`:

    sin él   b3:51908c3658c90790dd326bee44f946503cd0a3aa7e6d0fde7d7127a53eccea94
    con él   b3:9541883298f4ccfd4bd488c9ed72fcc1a25df093b12edbaa981cd20fec4c83ef

Es exactamente el apagón del PNG de `atuq` del 2026-09-06 por la otra puerta: allá el fichero de
más llegaba por una exclusión de rsync sin anclar, acá lo deja a mano quien edita. Y ahora mismo el
clon de la granja acumula respaldos `*.antes-*` cada vez que un agente toca una receta: de los que
hay hoy ninguno cae dentro de un `[source] dir`, pero nada lo impedía y nada lo habría dicho.

Va como ⚠⚠ y no como nota al pie: a diferencia de una receta sin commitear —que es trazabilidad— esto
rompe el acuerdo de hashes entre las dos máquinas. Probado con la rotura puesta y retirada.

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

6adfadb0fb470278995731e93f8419fe31d3b3db · by Sergio · (6 d ago) · parent 4dd1d8265 · browse the tree at this commit

Semantic delta

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

1 files · +15 −0

diff --git a/scripts/farm/cosecha-cron.sh b/scripts/farm/cosecha-cron.sh
index 70c0810a..0ad19454 100755
--- a/scripts/farm/cosecha-cron.sh
+++ b/scripts/farm/cosecha-cron.sh
@@ -144,6 +144,21 @@ deriva_de_la_siembra() {
     echo "   · $(printf '%s\n' "$sueltas" | wc -l) receta(s) SIN COMMITEAR van a la granja — lo que sellen queda sin receta en el repo:"
     printf '        %s\n' $sueltas | head -5
   fi
+  # ── Y UN CASO QUE SÍ ROMPE EL HASH, no sólo la trazabilidad ─────────────────────────────────────
+  # Seis recetas traen `[source] dir` (atuq, firmware-metal, firmware-tigerlake, linux-firmware,
+  # os-release, wasi-sdk) y takana hashea ESE ÁRBOL ENTERO (`dir:<hash>` en takana-core/recipe.rs).
+  # ⇒ un fichero de más ahí dentro —el típico respaldo `X.antes-de-algo` que todos dejamos al editar
+  # en este clon— hace que el worker calcule OTRO ArtifactHash que el hub, y entonces no puede
+  # coincidir con él ni construyendo bien. Medido el 2026-10-15 con un dotfile vacío dentro de
+  # `recipes/firmware-metal/`: el hash pasó de `b3:51908c36…` a `b3:95418832…`. Es exactamente el
+  # apagón del PNG de `atuq` del 2026-09-06, por la otra puerta.
+  local dentro
+  dentro=$(git ls-files --others --exclude-standard -- recipes 2>/dev/null | awk -F/ 'NF>2' || true)
+  if [ -n "$dentro" ]; then
+    echo "   ⚠⚠ $(printf '%s\n' "$dentro" | wc -l) fichero(s) SIN SEGUIR dentro del árbol de una receta —"
+    echo "      eso cambia su ArtifactHash y el worker deja de poder coincidir con el hub:"
+    printf '        %s\n' $dentro | head -6
+  fi
 }
 deriva_de_la_siembra