diff --git a/.metodo/CHECKSUMS b/.metodo/CHECKSUMS index d3c0eb2..fff5cdd 100644 --- a/.metodo/CHECKSUMS +++ b/.metodo/CHECKSUMS @@ -1,4 +1,4 @@ -e8382b9a69d6a18d197ef84fb4a3c6c523e81b140714a2a579e09401685e6930 metodo.md +631c6f379af3599c31f9c109356f92d891b5154af5a335be2e8f5a7c4a0bde60 metodo.md a962d34e29ff9a45c508d06646d21fa02cc560c3bce98efe9a5d98d89919f661 bin/metodo f89b71bdf31028b05075636c1763c964e379bc37a00e0357d1c23a4dd19c09aa workflows/README.md cc241bbecf9647c747b8525b3a6b527455cd50ca0312caa44bc3544342c8ac41 workflows/comunicacion-entre-sesiones.md diff --git a/.metodo/cicatrices.md b/.metodo/cicatrices.md index 369b0ac..630b7ad 100644 --- a/.metodo/cicatrices.md +++ b/.metodo/cicatrices.md @@ -1202,3 +1202,42 @@ mañana: `cicatrices.md` —**el artefacto nuevo más importante del día**— l commit con pathspec sólo recoge cambios de ficheros YA TRACKEADOS**. El fichero estaba en disco, se leía, `C40` lo careaba **y salía verde en los 27** — comprobando un fichero que **el repo no tenía**. +### C-155 + +`kubernetes`, 2026-09-03. El corpus **ya avisaba**: *«parchear el DaemonSet directamente sólo +funciona en tres de los ocho. Donde manda un operador (rook CSI, KubeVirt), **el operador lo +revierte**»*. Por eso el arreglo del 25-ago se subió al **`Driver` CR**… **y rook posee también el +`Driver` CR** (`manager=rook` en los dos). Con `ROOK_USE_CSI_OPERATOR=true`, rook **crea y reescribe** +esos objetos desde `rook-ceph-operator-config`, que **no tiene `CSI_PLUGIN_TOLERATIONS`** — **0 +apariciones en todo el log**. Al reiniciarse rook (los tres reinicios del diagnóstico de los MON del +1-sep) **rerenderizó sin tolerations** y el DaemonSet volvió a su plantilla **de 2025**. +⇒ **Censo del mismo día**: los **seis** arreglos que **no** dependen de un operador **siguen en pie**; +los **dos** que sí **están caídos**. ⇒ Y **latente SIETE días**: `NoSchedule` **no desaloja** y los +mounts del host **sobreviven**, así que no rompió nada **hasta que hubo que RECREAR los pods** — lo +forzó el corte eléctrico. **El corte no es la causa: es el revelador.** + +### C-156 + +`kubernetes`, 2026-09-03, tres testigos falsos sobre el mismo fallo: **`kubectl get ds` daba `4/4 +READY`**, verde impecable · el **`CSINode`** del nodo **seguía listando el driver como registrado** +—objeto rancio: el kubelet habla de su registro **local**— · y el **`VolumeAttachment`** decía +`attached: true`, que **era cierto**: el *attach* (lado controlador) funcionaba y **sólo fallaba el +mount** (lado nodo). ⇒ *«El almacenamiento está conectado»* era verdad y engañaba. +⚠️ Y una cuarta, de la superadmin al retransmitir: dio los pods por *«`Unknown`, retienen las GPU, +inocuos»*. Medido: **`.status.phase: Failed`** —un pod `Failed` no retiene nada— y los reemplazos +**ya estaban BOUND al nodo**, que es la prueba de que las GPU estaban libres. **La columna `STATUS` y +el campo `phase` no son lo mismo.** + +### C-157 + +`securizacion` (ejecución), 2026-09-03, contándolo **en el minuto** y contra sí misma: empujó un +commit ajeno de la superadmin. **Y la puerta la había corrido**: hizo `git log origin/main..HEAD` +**y vio las dos líneas**. Lo que falló es que **encadenó la comprobación con el `push` en la misma +llamada**, así que la salida y el gesto ocurrieron **sin un instante en medio para decidir**. +⇒ Sus palabras: *«ver el dato no es la puerta; la puerta es leerlo y poder parar»*. +ⓘ Y dos de la misma jornada: **su arreglo de la fila, aplicado y verificado, desapareció del árbol +una hora después** —no lo había commiteado, y el árbol es compartido— ⇒ *un arreglo sin commitear en +un árbol que otras sesiones tocan no es un arreglo*. Y **el instrumento con el que se midió también +mentía**: contar `|` a secas **cuenta los escapados**, que el parser no ve — con esa cuenta declaró +rota una fila que estaba bien, y lo retiró. + diff --git a/.metodo/metodo.md b/.metodo/metodo.md index 0d68bdc..72f6b05 100644 --- a/.metodo/metodo.md +++ b/.metodo/metodo.md @@ -572,6 +572,14 @@ de fallo que **produce medidas coherentes y falsas**, y por eso no se nota. idéntica a una que funciona.** No es que no pueda enrojecer: **puede**, sólo que **por otra razón que la anunciada**. Y el verde que devuelve es cierto: contesta **otra pregunta**. Tres caras, las tres medidas el 2026-09-02: +⇒ ⛔ **Y una CUARTA cara, que es la más barata de cometer: LA COLUMNA QUE IMPRIME UNA HERRAMIENTA NO +ES EL CAMPO DEL OBJETO.** `STATUS: Unknown` y `.status.phase: Failed` **no son lo mismo**, y de la +diferencia cuelga la conclusión entera —un pod `Failed` **no retiene recursos**—. *(cicatriz +`C-156`, con tres testigos falsos más sobre el mismo fallo: un DaemonSet **`4/4 READY`** con el +plugin sin desplegar donde hacía falta · un objeto de registro **rancio** que seguía diciendo «sí» · +y un `attached: true` **cierto**, porque fallaba **la otra mitad** de la operación.)* +⇒ **Lee el objeto, no la tabla.** La tabla la formatea una herramienta **para leerla rápido**, y el +resumen que hace **es una decisión suya, no del objeto**. **① PRESENCIA en lugar de FORMA.** Comprobar que algo *está* no comprueba que esté *bien puesto*, y el testigo de presencia **sale verde en los dos casos**. *(cicatriz `C-046`)* @@ -1071,6 +1079,23 @@ cadena única) en vez de por número de línea; los números se recalculan solos Un artefacto compartido vive en **un** sitio; los consumidores llevan copia **commiteada** (build sin red/Node) y un `--check` detecta la deriva. Nunca se edita la copia. +⛔⛔ **SUBIR UN ARREGLO UN NIVEL NO BASTA SI EL OPERADOR POSEE TAMBIÉN ESE NIVEL: hay que subirlo +hasta DONDE EL OPERADOR LEE SU ENTRADA.** Un operador no revierte «el objeto de abajo»: revierte +**todo lo que rerenderiza**, y eso incluye los CR que parecen la capa de configuración. +*(cicatriz `C-155`)* +⇒ ⭐ **Y lo que hace este error casi inevitable es que el corpus TENÍA el aviso y el aviso era +correcto**: *«donde manda un operador, el operador lo revierte»*. Lo que faltaba era **hasta dónde**. +⇒ **La pregunta que lo cierra: ¿de qué fichero/CR sale lo que el operador ESCRIBE?** Si tu cambio no +está ahí, **estás editando una salida, no una entrada** — y la próxima vez que el operador arranque, +tu arreglo desaparece **sin que nada falle**. +⇒ ⛔ **Y el censo que lo mide es barato y hay que hacerlo**: separa los arreglos **por si dependen o +no de un operador**. En el caso medido, **los seis que no dependían seguían en pie y los dos que sí, +caídos** — la línea divisoria no era la antigüedad ni el autor: **era el dueño del objeto**. +⇒ ⚠️ **Y no rompe cuando lo haces: rompe cuando algo obliga a RECREAR.** `NoSchedule` no desaloja y +los montajes del host sobreviven ⇒ el defecto vive **latente**, y luego un corte de luz o un +`rollout` lo revela. **Lo que parece la causa suele ser sólo el revelador**, y buscarla ahí te lleva +al sitio equivocado. + ⛔ **UN CRITERIO QUE EXISTE COMO FUNCIÓN Y AUN ASÍ SE REESCRIBE A MANO NO ESTÁ CENTRALIZADO: ESTÁ DISPONIBLE.** Fuente única no es *«existe un sitio donde está bien»*: es **que no haya forma de hacerlo mal sin salirse del camino**. Mientras el criterio se pueda teclear otra vez, se teclea otra @@ -1802,6 +1827,18 @@ pega tal cual. `git diff --cached --name-only` **inmediatamente antes de commitear**, leído por ojos y **no encadenado con `&&`** *(la única que caza lo que entró DESPUÉS de tu `add`)* · `git log origin/main..HEAD` **antes de CADA push** *(la única que dice qué publicas)*. + ⛔⛔ **UN DATO IMPRESO EN LA MISMA LLAMADA QUE LA ACCIÓN NO ES UNA PUERTA: ES UN REGISTRO.** Correr + `git log origin/main..HEAD` **y el `push` encadenados** produce exactamente la misma salida que + hacerlo bien — **y no puede detener nada**, porque cuando el dato se lee la acción ya ocurrió. + *(cicatriz `C-157`)* + ⇒ ⭐ **Y por eso es tan fácil de cometer: el registro de haberlo hecho bien queda idéntico.** Quien + revise después ve la comprobación corrida, ve su salida, y **no puede distinguirla de una puerta + que funcionó.** + ⇒ **Dos formas válidas, y sólo dos**: **(a)** la comprobación **decide por programa** —un `if` que + se salta el `push`—, o **(b)** se corre en **una llamada aparte**, se lee, y **luego** se actúa. Lo + que no vale es imprimir y seguir. ⇒ Es la misma familia que *«predecir el diffstat no vale si lo + predices y commiteas en el mismo gesto»*: **la ventana entre mirar y actuar te la fabricas tú, y si + la haces de cero, no hay ventana.** ⛔⛔ **PERO UNA INSPECCIÓN NO GANA UNA CARRERA, Y LAS TRES SON INSPECCIÓN.** Miran. Contra un competidor concurrente sólo te dicen **cómo iba la carrera cuando miraste**, y eso depende de **cuándo** mires, que es lo que no controlas. *(cicatriz `C-145`)*