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…

TOML 1483Shell 181Rust 107Markdown 963619 Sutichaykuna

latido: regenerar keystones y duplicados — llevaban TRES DÍAS congelados

Cuarta vez que cae el mismo cable. Los comentarios del propio fichero ya lo cuentan para GNOME
(2026-07-27), COSMIC (2026-08-03) y wlr/sway (2026-08-26): un frente que el latido no regenera
envejece en silencio, y un grafo viejo miente con la misma cara que uno fresco.

keystones.json y duplicados.json estaban parados en 2026-09-05. Con un agravante que los otros
tres no tenían: keystones es el fichero que responde '¿qué construyo después?', así que rancio
no se limita a envejecer — DESINFORMA. Medido: decía '1 nudo en deuda, camino crítico
corpus/firefox → corpus/atuq' con los dos sellados hacía horas. Regenerado dice 0 nudos en
deuda, que es la verdad.

Van también al 'git add' Y al commit acotado por pathspec: regenerar sin publicar deja el
fichero fresco en el hub y viejo para todos los demás.

Probado con un ciclo real: 'keystones.json ✓  duplicados.json ✓  estado commiteado+pusheado'.

⚠ De paso, dos cosas que este rato dejó claras sobre mis propias comprobaciones: 'pgrep' y
'grep [c]osecha-cron' se autodetectan cuando MI comando menciona el fichero, así que la guarda
'¿está corriendo?' dio dos falsos positivos. La comprobación fiable mira /proc/*/cmdline y pide
que argv[0] sea un shell y argv[1] el script.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014QPJteswQvP1L7zSBrQQe2

29b0d99e9d0272efe52759155727184cca4321bb · ruwaq Sergio · (1 killa ñawpaq) · tayta 29cf7cc69 · kay commitpi sach'ata qhaway

Semántico sayk'uy

Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.

1 qillqakuna · +11 −2

diff --git a/scripts/farm/cosecha-cron.sh b/scripts/farm/cosecha-cron.sh
index 04cb61cb..ed68a4bf 100755
--- a/scripts/farm/cosecha-cron.sh
+++ b/scripts/farm/cosecha-cron.sh
@@ -267,6 +267,15 @@ if [ -x "$HAMMER" ]; then
   # Un grafo viejo miente con la misma cara que uno fresco — y el que nadie regenera miente MÁS,
   # porque envejece en la dirección optimista: sólo puede sobreestimar lo que hay sellado.
   scripts/build-state.py --wlr >/dev/null 2>&1 && echo "   build-state-wlr.json ✓" || echo "   ⚠ build-state.py --wlr falló"
+  # keystones y duplicados (2026-09-08). CUARTA vez que cae el mismo cable: los comentarios de
+  # arriba lo cuentan ya para GNOME (2026-07-27), COSMIC (2026-08-03) y wlr/sway (2026-08-26), y
+  # estos dos se habían quedado congelados el 2026-09-05 — TRES DÍAS. Con un agravante que los
+  # otros no tenían: `keystones` es el fichero que responde «¿qué construyo después?», así que
+  # rancio no se limita a envejecer, DESINFORMA. Medido: decía «1 nudo en deuda, camino crítico
+  # corpus/firefox → corpus/atuq» con los dos sellados hacía horas. Un grafo viejo miente con la
+  # misma cara que uno fresco, y éste además manda a trabajar en lo que ya está hecho.
+  scripts/yupana.py keystones  >/dev/null 2>&1 && echo "   keystones.json ✓"  || echo "   ⚠ yupana keystones falló"
+  scripts/yupana.py duplicados >/dev/null 2>&1 && echo "   duplicados.json ✓" || echo "   ⚠ yupana duplicados falló"
   # Cola DERIVADA del grafo (P4): el orden de masticado por imagen, en ondas topológicas. No lanza
   # ningún build — sólo deja escrito qué conviene moler primero, para que la cola deje de ser una
   # lista escrita a mano. Barato (lee JSON, no hashea).
@@ -373,13 +382,13 @@ fi
 # 4. Commitear SÓLO el estado firme (el avance que el humano sigue). Recetas nuevas que YO autoré se
 # commitean aparte, a mano, para no meter autoría a medias en un commit de cron.
 if [ "${NO_COMMIT:-}" != "1" ]; then
-  git add docs/state/sonames.txt docs/state/build-state.json docs/state/build-state-kde.json docs/state/build-state-gnome.json docs/state/build-state-cosmic.json docs/state/build-state-wlr.json docs/state/drenaje.json docs/state/fuentes-vigia.json docs/state/kernel-contract.txt docs/state/static-audit.txt 2>/dev/null || true
+  git add docs/state/sonames.txt docs/state/build-state.json docs/state/build-state-kde.json docs/state/build-state-gnome.json docs/state/build-state-cosmic.json docs/state/build-state-wlr.json docs/state/drenaje.json docs/state/fuentes-vigia.json docs/state/kernel-contract.txt docs/state/static-audit.txt docs/state/keystones.json docs/state/duplicados.json 2>/dev/null || true
   if ! git diff --cached --quiet 2>/dev/null; then
     # ⚠ ACOTADO POR PATHSPEC (`-- <rutas>`), no sólo por el `git add` de arriba: el índice es
     # estado COMPARTIDO y `git commit` a secas commitea el índice ENTERO, así que lo que otro
     # agente dejara en `git add` viajaría dentro del commit del cron. Es la regla 2 de CLAUDE.md,
     # y acá pesa más que en ningún lado: esto corre desatendido cada 30 min mientras se trabaja.
-    git commit -q -m "estado: cosecha granja $(ts) — avance del árbol KDE" -- docs/state/sonames.txt docs/state/build-state.json docs/state/build-state-kde.json docs/state/build-state-gnome.json docs/state/build-state-cosmic.json docs/state/build-state-wlr.json docs/state/drenaje.json docs/state/fuentes-vigia.json docs/state/kernel-contract.txt docs/state/static-audit.txt 2>/dev/null \
+    git commit -q -m "estado: cosecha granja $(ts) — avance del árbol KDE" -- docs/state/sonames.txt docs/state/build-state.json docs/state/build-state-kde.json docs/state/build-state-gnome.json docs/state/build-state-cosmic.json docs/state/build-state-wlr.json docs/state/drenaje.json docs/state/fuentes-vigia.json docs/state/kernel-contract.txt docs/state/static-audit.txt docs/state/keystones.json docs/state/duplicados.json 2>/dev/null \
       && { git push -q origin main 2>/dev/null && echo "==> estado commiteado+pusheado" \
            || echo "==> estado commiteado (push falló, reintenta próximo ciclo)"; }
   else