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>
Semántico sayk'uy
Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.
1 qillqakuna · +15 −0
- scripts/farm/cosecha-cron.sh +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