fix(granja): el guardián no veía lo que el .gitignore tapa — y ahí estaba el defecto
El guardián de la siembra listaba los ficheros sueltos dentro de un `[source] dir` con `git ls-files --others --exclude-standard`. Esa bandera oculta lo que el `.gitignore` tapa — y **takana hashea el árbol ENTERO, ignorado incluido** (`dir:<hash>`, `takana-core/recipe.rs:612`). ENCONTRADO EN VIVO hoy, no leyendo el código: al verificar la clausura con las fuentes nuevas, los cuatro escritorios salían «incompleto: atuq estado=debt». No eran las fuentes: era `recipes/atuq/tools/__pycache__/rebrand.cpython-312.pyc` en mi árbol de trabajo, que movía el hash de `atuq` de `fdb92aa3…` (el publicado) a `e42ccea7…`. Borrado, coincide exacto. Invisible por tres sitios a la vez, que es lo que lo hace caro: `git status` no lo muestra, el guardián lo excluía por la bandera, y el `.gitignore` es precisamente lo que lo esconde. Es el mismo apagón que el commit `0f46c097` ya documentó —«un `.pyc` invisible movía el hash: el hub sellaba algo que un clon limpio no reproduce»— repetido cinco días después por la otra puerta. ⇒ `--others` a secas, que lista también lo ignorado. Un fichero ignorado dentro de un `[source] dir` NO es inocuo, y es la única clase de basura que el repo no puede ver por sí mismo. Probado con la rotura puesta y retirada: con el `.pyc` lo nombra con ⚠⚠; sin él, calla. 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 · +10 −1
- scripts/farm/cosecha-cron.sh +10 −1
diff --git a/scripts/farm/cosecha-cron.sh b/scripts/farm/cosecha-cron.sh
index 48f04525..ad20d190 100755
--- a/scripts/farm/cosecha-cron.sh
+++ b/scripts/farm/cosecha-cron.sh
@@ -152,8 +152,17 @@ deriva_de_la_siembra() {
# 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.
+ # ⚠ SIN `--exclude-standard`, y es un agujero MEDIDO del guardián anterior (2026-10-19). Con esa
+ # bandera git oculta lo que el `.gitignore` tapa — y takana hashea el árbol ENTERO, ignorado
+ # incluido. Resultado: `recipes/atuq/tools/__pycache__/rebrand.cpython-312.pyc`, invisible para
+ # `git status` y para este guardián, movía el hash de `atuq` de `fdb92aa3…` a `e42ccea7…` y los
+ # cuatro escritorios salían «clausura incompleta: atuq estado=debt». Es el mismo apagón que el
+ # commit `0f46c097` ya documentó («el hub sellaba algo que un clon limpio no reproduce»), y lo
+ # que lo hace peor es justamente que está ignorado: nada lo nombra en ningún sitio.
+ # ⇒ `--others` a secas lista también lo ignorado. Un fichero ignorado dentro de un `[source] dir`
+ # NO es inocuo, y es la única clase de basura que el repo no puede ver por sí mismo.
local dentro
- dentro=$(git ls-files --others --exclude-standard -- recipes 2>/dev/null | awk -F/ 'NF>2' || true)
+ dentro=$(git ls-files --others -- 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:"