diff --git a/.metodo/CHECKSUMS b/.metodo/CHECKSUMS index 057561b..b20c9b8 100644 --- a/.metodo/CHECKSUMS +++ b/.metodo/CHECKSUMS @@ -1,4 +1,4 @@ -f97b970ed6f4d89af3e040938cb2f01f368db436905d0ae9bf1732b0083a9ec0 metodo.md +993b3b47d0b199cac89d32aea0d7cda0ef8c5c341c137f78586ea68fbce9b871 metodo.md a2418f334e07ea47dee15db713f25bb619383e3ae41facb91ad07626fc440cec bin/metodo f89b71bdf31028b05075636c1763c964e379bc37a00e0357d1c23a4dd19c09aa workflows/README.md cc241bbecf9647c747b8525b3a6b527455cd50ca0312caa44bc3544342c8ac41 workflows/comunicacion-entre-sesiones.md diff --git a/.metodo/metodo.md b/.metodo/metodo.md index 6dbde7e..0d768cd 100644 --- a/.metodo/metodo.md +++ b/.metodo/metodo.md @@ -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 *«¿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 +⛔ **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 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, @@ -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. +⛔⛔ **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 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.**