chore(metodo): un latest es una bomba con temporizador de reinicio

Falla la proxima vez que el proceso arranque, meses despues y por una causa
ajena. Y cuanto mas estable es el proceso, mas grande es la divergencia
acumulada: la estabilidad no reduce el riesgo, lo carga.

Sesion: superadmin

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
sirxavor 2026-09-01 12:28:17 +02:00
parent d42191d615
commit b049cf25bc
2 changed files with 31 additions and 1 deletions

View File

@ -1,4 +1,4 @@
f97b970ed6f4d89af3e040938cb2f01f368db436905d0ae9bf1732b0083a9ec0 metodo.md 993b3b47d0b199cac89d32aea0d7cda0ef8c5c341c137f78586ea68fbce9b871 metodo.md
a2418f334e07ea47dee15db713f25bb619383e3ae41facb91ad07626fc440cec bin/metodo a2418f334e07ea47dee15db713f25bb619383e3ae41facb91ad07626fc440cec bin/metodo
f89b71bdf31028b05075636c1763c964e379bc37a00e0357d1c23a4dd19c09aa workflows/README.md f89b71bdf31028b05075636c1763c964e379bc37a00e0357d1c23a4dd19c09aa workflows/README.md
cc241bbecf9647c747b8525b3a6b527455cd50ca0312caa44bc3544342c8ac41 workflows/comunicacion-entre-sesiones.md cc241bbecf9647c747b8525b3a6b527455cd50ca0312caa44bc3544342c8ac41 workflows/comunicacion-entre-sesiones.md

View File

@ -525,6 +525,15 @@ deducir**. Si no lo miraba, el artefacto es un testigo de la avería, no del sis
COPIA que usa la gente está rota.** Son dos preguntas distintas —*«¿qué despliega ArgoCD?»* y COPIA que usa la gente está rota.** Son dos preguntas distintas —*«¿qué despliega ArgoCD?»* y
*«¿qué le pasa a quien clona esto?»*— y **ninguna receta contesta las dos**. *(Cicatriz *«¿qué le pasa a quien clona esto?»*— y **ninguna receta contesta las dos**. *(Cicatriz
2026-08-06: `pq-secret.sh` estaba en **CRLF en el worktree** y así ni arranca —`set -uo 2026-08-06: `pq-secret.sh` estaba en **CRLF en el worktree** y así ni arranca —`set -uo
⛔ **Y EL TESTIGO DE EOL HAY QUE VALIDARLO CON UN FICHERO QUE SEPAS QUE ES CRLF, porque el obvio
MIENTE.** `grep -c $'\r'` **es ciego al CR en algunos shells**: devuelve **0** sobre un fichero que
`od -c` demuestra lleno de `\r\n`. ⇒ Y lo peor: **acertó tres veces seguidas antes de fallar** — los
tres ficheros eran LF de verdad. *Lo que funciona por casualidad está roto*, aplicado a un testigo.
*(Cicatriz 2026-09-01. Se destapó porque un `git diff` marcaba **48 líneas cambiadas** donde el cambio
real eran **13**, con líneas idénticas en `-` y `+`. Y el segundo intento también mintió: daba **9733
CR en 268 líneas**, un número imposible **que sólo se ve si compruebas la aritmética**.)*
**Lo que discrimina**: `od -c`, o `tr -dc '\r' | wc -c`. **Nunca `grep $'\r'`.** Y **guarda un
fichero CRLF conocido** como control positivo del testigo.
pipefail\r`—, o sea que con `core.autocrlf=true` un clon en Windows deja **todos** los bancos pipefail\r`—, o sea que con `core.autocrlf=true` un clon en Windows deja **todos** los bancos
muertos. El censo no lo vio porque medía —bien— sobre un `git archive` en LF: **la receta correcta muertos. El censo no lo vio porque medía —bien— sobre un `git archive` en LF: **la receta correcta
tapó el defecto que la rodeaba**. Se cosió con un `.gitattributes`.)* ⇒ Cuando elijas dónde medir, tapó el defecto que la rodeaba**. Se cosió con un `.gitattributes`.)* ⇒ Cuando elijas dónde medir,
@ -905,6 +914,27 @@ rojo. No afirmes en verde algo que **dejó de ser cierto**.
El plan escrito puede partir de una foto obsoleta o de otro entorno. El plan escrito puede partir de una foto obsoleta o de otro entorno.
⛔⛔ **UN `latest` NO ES UNA VERSIÓN: ES UNA BOMBA CON TEMPORIZADOR DE REINICIO.** No falla cuando
alguien mueve el tag — **falla la próxima vez que el proceso arranque**, que puede ser **meses después
y por una causa ajena al sistema**.
*(Cicatriz 2026-09-01: un electricista mete un pico de tensión, salta un diferencial y reinicia **un**
servidor. Un motor de base de datos que llevaba **173 días** corriendo su versión vieja **en memoria**
tira la imagen nueva al rearrancar y muere: los datos en disco eran de la **9.6**, la imagen de hoy la
**26.7**. **El defecto se plantó el día que se movió el tag; el corte sólo lo reveló.**)*
⇒ ⭐ **Y el corolario, que invierte la intuición: CUANTO MÁS ESTABLE ES EL PROCESO, MÁS GRANDE ES LA
DIVERGENCIA ACUMULADA.** 173 días separaron una versión de otra. **La estabilidad no reduce el riesgo:
lo carga.** Un servicio que lleva medio año sin reiniciarse **no es el más seguro: es el que más lejos
está de lo que arrancaría hoy**.
⇒ Y añade algo que *«al encender un camino nunca recorrido salen defectos viejos»* no dice: **el
disparador puede ser AJENO** — nadie desplegó, nadie tocó nada, y aun así explotó.
**Por eso el censo no es opcional**: en el mismo cluster había **una gemela idéntica** —mismo
`latest`, **mismo digest**, misma base de datos— **viva sólo porque su nodo no se reinició**, más media
docena de tags móviles en producción. ⇒ **Cuando encuentres uno, cuenta los demás ANTES de celebrar el
arreglo**: la explosión te dice que hay un campo de minas, no que hubiera una.
**El gesto**: pinear a la versión **que los datos ya tienen** —sacada del sistema, no supuesta— y
**comprobar que ese tag existe** antes de aplicarlo, para no cambiar un fallo por otro. Y el porqué,
**dentro del propio manifiesto**, o alguien lo devuelve a `latest`.
⛔⛔ **UN ÁRBITRO QUE DEPENDE FÍSICAMENTE DE UNO DE LOS DOS LADOS NO ES UN ÁRBITRO.** Un diseño de ⛔⛔ **UN ÁRBITRO QUE DEPENDE FÍSICAMENTE DE UNO DE LOS DOS LADOS NO ES UN ÁRBITRO.** Un diseño de
tolerancia por sitios —dos y dos, más un tercero que decide— **puede ser correcto en la capa que lo tolerancia por sitios —dos y dos, más un tercero que decide— **puede ser correcto en la capa que lo
declara y no sostenerse, porque LA RED NO ACOMPAÑA AL DISEÑO.** declara y no sostenerse, porque LA RED NO ACOMPAÑA AL DISEÑO.**