diff --git a/.metodo/CHECKSUMS b/.metodo/CHECKSUMS index d53ad5d..19c3a6f 100644 --- a/.metodo/CHECKSUMS +++ b/.metodo/CHECKSUMS @@ -1,4 +1,4 @@ -411e75dd254ed1555a6091cf9c99ee15c889b320707fcf9caabd11d7cffc9082 metodo.md +c33430904d508a6398ddba6388d9968268da2e46e35509120aafb1723c268b11 metodo.md fb7e88324524184b9f685c49c0bbcc6c9a55beb07bb5c0b1b31cd29c51c4117f bin/metodo f89b71bdf31028b05075636c1763c964e379bc37a00e0357d1c23a4dd19c09aa workflows/README.md cc241bbecf9647c747b8525b3a6b527455cd50ca0312caa44bc3544342c8ac41 workflows/comunicacion-entre-sesiones.md diff --git a/.metodo/metodo.md b/.metodo/metodo.md index 10bb444..e54fe1c 100644 --- a/.metodo/metodo.md +++ b/.metodo/metodo.md @@ -1660,49 +1660,41 @@ edge**.)* hipótesis. Ejercítalo **antes** de necesitarlo: el día que haga falta, ya es tarde para descubrir que el remedio quita lo que venía a proteger. -⛔ **La REDUNDANCIA oculta el fallo que la va a necesitar.** Un defecto tapado por el camino -alternativo no se ve mientras el camino alternativo esté — y aparece **exactamente** el día que ya no -está, o sea en el peor momento y sin historial. *(Cicatriz `A18`, 2026-07-31: con la identidad del -edge divergiendo entre los dos hubs, el nombre **seguía respondiendo 3/3** porque el tráfico rodeaba -por el otro router de campo —`G8` funde los dominios de inundación—. Con ese aparato apagado, el hub habría -perdido al edge **del todo**.)* -⇒ Para ver el fallo, **quita la redundancia y vuelve a medir**: apaga el camino alterno, tira el -segundo hub, desconecta el vecino. Un verde obtenido con todas las rutas vivas **no dice si el -servicio funciona: dice que alguna de ellas funciona.** +⛔ **TODO AMORTIGUADOR ESCONDE EL FALLO QUE AMORTIGUA — y lo enseña el día que ya no está: en el peor +momento y sin historial.** El defecto **no está latente: está ocurriendo**, sólo que algo lo paga por +ti. Tres amortiguadores, tres cicatrices, un solo mecanismo: +- **REDUNDANCIA de caminos.** *(`A18`, 2026-07-31: con la identidad del edge divergiendo entre los dos + hubs, el nombre **seguía respondiendo 3/3** porque el tráfico rodeaba por el otro router de campo. + Con ese aparato apagado, el hub habría perdido al edge **del todo**.)* ⇒ Un verde con todas las + rutas vivas **no dice que el servicio funcione: dice que alguna de ellas funciona.** +- **ABUNDANCIA de recursos.** *(`P12`, 2026-08-02: un edge sin binario de Rosenpass se bajaba la + pubkey del hub —**524.160 B**— cada 20 s y por cada hub. En el router grande (6,8 GB) no se nota + **jamás**; en un GL-AR300M eran **1 MB sobre 212 KB libres**. Lo hizo visible el aparato pequeño, + no una búsqueda.)* ⇒ Disco, RAM, CPU y ancho de banda **convierten un fallo en una estadística que + nadie mira**. **La flota real se parece al más pobre, no al banco.** +- **UPTIME: el proceso vivo.** Sostiene en memoria cosas que ya no existen fuera, y **el reinicio no + rompe nada: es cuando se descubre lo que llevaba roto**. *(Cinco cicatrices en tres días, + 2026-07-27/30: los seis `postconf` del smtp-relay vivían en un contenedor · el + `argocd-image-updater` falla `unauthorized` con una **credencial cacheada**, y lo único que frenaba + que reescribiera un pin bueno era esa avería —**reiniciarlo ARMA el riesgo**— · `kernel-engine` + corre un digest **que ya no está en el registro**: 62 días arriba y un reinicio lo deja en + `ImagePullBackOff`.)* ⇒ **Un `uptime` largo es motivo de SOSPECHA, no de confianza.** -⛔ **Y su hermano, que es el que nadie busca: la ABUNDANCIA de recursos esconde el derroche.** Medir -siempre en el aparato más holgado no certifica nada del más apretado — y el defecto no está latente, -está **ocurriendo**, solo que sobra sitio para pagarlo. *(Cicatriz `P12`, 2026-08-02: con `F13·D10` -—la del **edge**, «PQ siempre que se pueda»— un edge **sin binario de Rosenpass** seguía bajándose -la pubkey del hub —**524.160 B**— en el bucle de 20 s **y por cada hub**. En el router grande (6,8 GB de -overlay) no se nota **jamás**; en un GL-AR300M eran **1 MB sobre 212 KB libres**. Se descubrió -porque el aparato pequeño lo hizo visible, no porque alguien lo buscara.)* -⇒ Pregunta cuando una medida salga limpia: **¿en qué aparato la he tomado, y qué le sobraba?** Disco, -RAM, CPU y ancho de banda son todos amortiguadores que convierten un fallo en una estadística que -nadie mira. La flota real se parece al más pobre, no al banco. - -⛔ **«0 reinicios» no es estabilidad: es un estado NO EJERCITADO.** Un proceso vivo sostiene en su -memoria cosas que ya no existen fuera — y mientras no reinicie, nadie se entera. El reinicio no -*rompe* nada: es el momento en que se descubre lo que llevaba roto. *(Cinco cicatrices en tres días, -2026-07-27/30: los seis `postconf` del smtp-relay vivían en un contenedor y se perdían al reiniciar · -el `argocd-image-updater` falla `unauthorized` en cada ciclo con una **credencial cacheada en -memoria**, y lo único que frenaba que reescribiera un pin bueno era esa avería — reiniciarlo **arma** -el riesgo · `kernel-engine` corre un digest que **ya no está en el registro**: lleva 62 días arriba y -un reinicio lo deja en `ImagePullBackOff` · `tang` y `tftp` son el mismo caso sin verificar.)* -⇒ Cuando midas algo que lleva mucho arriba, la pregunta **no** es «¿funciona?» — es **«¿sobrevive a -un reinicio?»**, y se contesta careando lo que el proceso usa contra lo que hay **hoy** en su origen -(el registro, el fichero, el secreto). Un `uptime` largo es motivo de **sospecha**, no de confianza. -⇒ Corolario para retiradas: antes de quitar un mecanismo, comprueba si algo vivo **depende de que no -se reinicie**. Quitar la última forma de reconstruir algo que hoy solo existe en una caché convierte -una limpieza en una pérdida. -⇒ **Y el mismo raíl al revés: un arreglo COMMITEADO no es un arreglo APLICADO.** Todo lo que se lee +⇒ ⭐ **El remedio es el mismo en los tres: QUITA EL AMORTIGUADOR Y VUELVE A MEDIR.** Apaga el camino +alterno · mide en el aparato más apretado, no en el más holgado · **reinicia, o carea lo que el +proceso cree contra lo que hay HOY en su origen** (el registro, el fichero, el secreto). +⇒ **Y las tres preguntas, cuando una medida salga limpia**: *¿qué la estaba tapando?* · *¿en qué +aparato la he tomado y qué le sobraba?* · *¿sobrevive a un reinicio?* +⇒ **Corolario para retiradas**: antes de quitar un mecanismo, comprueba si algo vivo **depende de que +no se reinicie**. Quitar la última forma de reconstruir algo que hoy sólo existe en una caché +convierte una limpieza en una pérdida. +⇒ ⛔ **Y el mismo raíl al revés: un arreglo COMMITEADO no es un arreglo APLICADO.** Todo lo que se lee **al arrancar** —ConfigMap, variables de entorno, fichero de configuración— sigue siendo el viejo -hasta que el proceso reinicie, y el `git log` dice que está arreglado. *(Cicatriz 2026-07-31: -el MCP de build llevaba **21 h** con el config anterior al renombrado de los hubs. El fix se commiteó a -las 00:49, pero **editar un ConfigMap no rueda el Deployment** ⇒ seguía sondeando un nombre que hoy -es `NXDOMAIN` ⇒ el `verify` no respondía nunca ⇒ **auto-rollback que deshizo un pin bueno**. Tercera -vez esta semana que **el mecanismo de seguridad es el asesino**.)* -⇒ Cierra el cambio **midiendo lo que el proceso vivo cree**, no lo que dice el repositorio. +hasta que el proceso reinicie, **y el `git log` dice que está arreglado**. *(Cicatriz 2026-07-31: el +MCP de build llevaba **21 h** con el config anterior al renombrado de los hubs; el fix se commiteó a +las 00:49, pero **editar un ConfigMap no rueda el Deployment** ⇒ sondeaba un nombre hoy `NXDOMAIN` ⇒ +el `verify` no respondía ⇒ **auto-rollback que deshizo un pin bueno**.)* ⇒ **Cierra el cambio midiendo +lo que el proceso vivo cree, no lo que dice el repositorio.** ⛔ **REVOCAR una credencial se lleva a sus HIJAS — así que «revocar el root» solo es seguro cuando todo lo que importa es HUÉRFANO, y eso se mide ANTES.** Una limpieza de credenciales no es una @@ -2256,6 +2248,30 @@ pega tal cual. fichero ajeno a su cambio. El `push` sale rechazado por no-fast-forward, que es **la única razón por la que se vio**. Sin ese rechazo, la reescritura se habría publicado.)* ⇒ **Regla: en un working tree compartido, `--amend` sólo sobre un commit que sabes que es tuyo Y que + ⛔⛔ **UNA INSPECCIÓN NO GANA UNA CARRERA — y todas las puertas de aquí arriba son inspección.** + `git status --porcelain` antes del primer `add`, `git diff --cached --name-only` justo antes de + commitear, predecir el diffstat: **los tres MIRAN**. Contra un competidor concurrente, mirar sólo + te dice **cómo iba la carrera cuando miraste** — y el resultado depende de **cuándo** mires, que es + precisamente lo que no controlas. + *(Cicatriz 2026-09-02: **cuatro colisiones sobre el mismo fichero en un día, LAS CUATRO CON LAS TRES + PUERTAS PUESTAS.** Una sesión publicó la fila de otra · un `awk` por número de línea borró una fila + viva **40 minutos** · otra partió una fila en dos · y a la cuarta, **entre dos comandos + consecutivos**, el índice se le llenó de un fichero ajeno **y su edición del working tree + desapareció**, sobrescrita; al ir a commitear, «nothing to commit»: **ya lo había publicado un + tercero** dentro de un commit que hablaba de otra cosa. **Cero pérdidas y la atribución cruzada + cuatro veces.**)* + ⇒ **Lo único que no depende de cuándo mires es lo que EXCLUYE en vez de inspeccionar**: + **`git commit -- `** (o `-o`) commitea esas rutas **pase lo que pase en el resto del índice**. + ⚠️ **Ojo a la sintaxis, que se falla a la primera**: el mensaje va **antes** del separador — + `git commit -m "…" -- `; poner el `-m` después lo convierte en un pathspec y el commit muere. + ⇒ ⛔ **Y lo que ningún gesto de git arregla: que otra sesión te sobrescriba el WORKING TREE.** + No hay dos copias. Mover la coordinación a git **compra historial, no aislamiento** — y la única + salida real es **que dos sesiones no escriban el mismo fichero**, no una puerta mejor. + ⇒ ⭐ La forma general, y vale fuera de git: **ante una carrera, una comprobación no es una + solución.** Sirve para *saber* que perdiste, no para ganar. Lo que resuelve una carrera es + **eliminarla** —partir el recurso, dar turnos, excluir por construcción—; todo lo demás es + contar accidentes con más detalle. + ⛔ **Y UN CUARTO FILO, QUE NO ES UN FILO SINO UN MODELO MENTAL EQUIVOCADO: NO HAY DOS CLONES.** Las sesiones de una misma máquina **comparten el mismo working tree y el mismo índice** — no son copias que haya que sincronizar. ⇒ **`git pull` entre ellas es un no-op**, y recomendarlo *«para no