la cosecha decía «reintenta próximo ciclo» y no reintentaba nada

Si el push del estado se rechaza porque otro agente empujó primero, el ciclo siguiente se rechaza
IGUAL —nadie rebasa nunca— y el commit del cron se queda local para siempre. Se encontró en la caja:
rama divergente con un `estado: cosecha granja` atascado y la cosecha diciendo «reintenta» cada media
hora sin que nada cambiase. El mensaje tranquilizaba y no era cierto.

Ahora, cuando lo rechazan, llama a `git-sincronizar.sh`, que es la regla 2 ter automatizada: rebasa,
COMPRUEBA por parche que el commit sobrevivió, lo recupera del reflog si no, y empuja. Y si tampoco
puede, lo dice y deja el comando para verlo, en vez de prometer un reintento que no existe.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sergio
2026-09-17 21:33:58 +00:00
co-authored by Claude Opus 5
parent 3b5330b1cd
commit 54283b8a94
+11 -1
View File
@@ -452,7 +452,17 @@ if [ "${NO_COMMIT:-}" != "1" ]; then
# y acá pesa más que en ningún lado: esto corre desatendido cada 30 min mientras se trabaja. # 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/subcomandos.txt docs/state/raices.txt docs/state/sonames.txt docs/state/servicios.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 commit -q -m "estado: cosecha granja $(ts) — avance del árbol KDE" -- docs/state/subcomandos.txt docs/state/raices.txt docs/state/sonames.txt docs/state/servicios.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" \ && { git push -q origin main 2>/dev/null && echo "==> estado commiteado+pusheado" \
|| echo "==> estado commiteado (push falló, reintenta próximo ciclo)"; } || { # ⚠ «reintenta próximo ciclo» NO era cierto y costó descubrirlo (2026-09-17): si el
# push se rechaza porque otro empujó, el ciclo siguiente se rechaza IGUAL —nadie
# rebasa nunca— y el commit del cron se queda local para siempre. Se encontró así en
# la caja: una rama divergente con un `estado: cosecha granja` atascado, y la cosecha
# diciendo «reintenta» cada media hora sin que nada cambiara.
echo "==> el push fue rechazado (otro empujó primero) — sincronizo"
if "$ROOT/scripts/git-sincronizar.sh" >/dev/null 2>&1; then
echo "==> estado rebasado y pusheado"
else
echo "==> NO pude publicar el estado — queda local. Verlo con: git log origin/main..HEAD"
fi; }; }
else else
echo "==> sin cambios de estado este ciclo" echo "==> sin cambios de estado este ciclo"
fi fi