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…

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>

d2ed68bccf88365408a9c3af17debe4a0822224e · by Sergio · (2 d ago) · parent 5e3613713 · browse the tree at this commit

Semantic delta

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

1 files · +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:"