smtp-relay/.metodo/cicatrices.md
sirxavor 8c5e0865f3 chore(metodo): reparto + trackea cicatrices.md, que llevaba un dia en disco sin versionar
Mi reparto de anoche commiteaba con pathspec, que SOLO recoge cambios de
ficheros ya trackeados: cicatrices.md llego a los 27 y ninguno lo versionaba.
Estaba en disco y C40 salia verde sobre un fichero que el repo no tiene.

Va con el rail escrito, los otros dos limites medidos esta manana, y el
PROTOCOLO DE ARRANQUE.

Solo .metodo/ — byte a byte desde la matriz.

Sesion: superadmin

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 09:17:06 +02:00

63 KiB

Cicatrices del Metodo

La EVIDENCIA de cada rail de metodo.md, sacada aparte el 2026-09-02 para que el documento que se lee SIEMPRE quepa en contexto. Este viaja a los 27 repos igual que metodo.md -- el disco es gratis y el contexto no -- pero no se lee por defecto: se abre cuando alguien discute una regla o necesita el dato crudo que la produjo.

ID PLANO Y PARA SIEMPRE: C-001, C-002... Se asigna UNA VEZ y no se renumera, igual que las decisiones D. Motivo, de Xavier: es mucho mas resiliente -- un id que codificara la seccion caducaria al primer movimiento, y este documento se reestructura constantemente (el 2026-09-02 se fundieron tres familias en un dia). Precedente medido: la numeracion de la §9 se rompio exactamente asi.

C-001

Cutover 2026-08-19: hasta ese día la fuente

era la copia del árbol de trabajo y esta constitución llevaba los 10 raíles base en una línea, con un puntero a una ruta que en un clon ajeno no existe. Coste medido: el raíl nuevo de §8 —«un fallo benigno solo protege si alguien LEE la línea»— nació el 2026-08-19 y no estaba en ninguna de las 18 copias. Ahora los raíles viajan COMPLETOS y las adiciones que estaban «pendientes de inlinar» viven dentro de su raíl.

C-002

Familia de A20: la colisión de loopbacks era 1,9 % a 50 nodos y 26 % a 200; lo que a escala de banco es una anécdota, a escala de flota es el trabajo de una tarde.

C-003

Xavier, ordenando: «no estoy diciendo que no valore la captura de un hub — lo pondremos en el backlog por detrás, con su apartado. Ahora estamos en el apartado de “y si capturan un edge”, y para eso hay una CRL y unos procedimientos que mis equipos de hoy ni tienen».

C-004

Xavier, D7, 2026-08-22. Estrenada el mismo día: I11.11 salió de su ficha a una épica propia con su valor declarado — cero, porque no hay nadie esperándola, que es justo el dato que una casilla escondida dentro de otra ficha no da.

C-005

Cicatriz 2026-09-01: un censo de dependencias filtraba por pod, y descartaba la línea entera si el pod tenía una imagen ya pineada junto a las móviles ⇒ dejó fuera el motor de la propia sesión que lo estaba midiendo. Lo cazó sólo porque sabía que ese motor tenía que salir. El mismo día, un censo de tags móviles dio 4 y el bueno era 20.

C-006

Medido 2026-08-31, y con recurrencia en dos frentes independientes. Un frente censó sus once errores del día y cómo se cazó cada uno: 4 porque otro no estuvo de acuerdo · 2 por una predicción escrita antes de medir · 2 por una anomalía del instrumento · 1 al re-derivar una referencia justo antes de commitear · 1 por accidente. Cero releyendo su propio trabajo. El mismo día, quien lleva el Método contó catorce en su bitácora —un awk que no insertó nada, un --amend que reescribió el commit de otra, un aviso falso dado en consola, un gate publicado roto— y también cero: los cazaron contar la aparición, el push rechazado, otra sesión midiendo y el --stat del commit. Todos externos.

C-007

F11.13: meter una LAN en la malla «toca el firewall, como en F9.2 que tiró el acceso de gestión». En vez de ir con cuidado, se predijo que el md5 de uci show firewall no cambiaría —solo ospfd.conf gana una línea network— y se midió antes y después: idéntico. El miedo pasó a ser un invariante verificado.

C-008

Cicatriz 2026-07-27: un segundo hub daba 401 en toda la administración y parecía protegida. No lo estaba: estaba rota. Su Ingress reclamaba /api, que una imagen pre-F1 no sirve, así que el catch-all autenticado se tragaba también /links/pair — el mismo accidente que cerraba /admin/pair impedía que ningún device pudiera emparejarse. Se vio al medir la cara abierta: /links/pair pasó de 401 a 422 con cuerpo de la aplicación.

C-009

Cicatriz R10, 2026-07-28: la orquestadora afirmó «los espacios no chocan» mirando el enrutador —el panel usa /, /pending, /devices/…; la API /links/*— y era cierto para el enrutador y falso para el guard: POST /devices/enroll casa con la plantilla GET /devices/{device_id}, que es una página del panel. Una lista pública por prefijo habría abierto esa página a internet — el accidente del otro hub, en espejo: allí el catch-all cerró de más, aquí habría abierto de más.

C-010

Cicatriz 2026-08-18: la orquestadora puso como testigo estrella de un despliegue que GET /crl/afirmar pasara de 404 a 302/401, y escribió que sin esa comprobación «un “desplegado” no distingue nada». Medido antes de usarlo: la ruta no daba 404 ni antes —daba 303 → /login— y /zzz-inventada daba exactamente lo mismo. El testigo habría tomado el mismo valor con la pantalla puesta y sin ella.

C-011

F11.11b: en vez de concluir que nadie llamaba al endpoint viejo, se enseñó que el mismo device, minutos después de instalarse la versión nueva, pidió el endpoint nuevo con token y no volvió a tocar el viejo.

C-012

Cicatriz 2026-07-27: al ir a borrar el duplicado /api/admin/* apareció que las dos copias habían derivado, y la correcta era la que no llamaba nadie. Desde el panel —la única puerta que usa un humano— aprobar un nodo no lo publicaba hasta el barrido siguiente, y revocar una sede dejaba resolviendo sus nombres hasta 24 h. Los tests iban por /api/admin, así que todo salía verde.

C-013

Cicatriz H35, 2026-08-04, y salió bien porque el build se puso ROJO: el censo de la superficie pública se escribió en doc/, fuera del contexto src/api ⇒ dentro de la imagen no existía, IndexError, artefacto no pusheado. Se mudó a src/api/tests/ y en doc/ quedó un puntero.

C-014

Cicatriz 2026-07-28, barrido de la colección MCP: la MISMA clase apareció en los CUATRO — la rotación del MCP de secretos daba verde por una señal pegajosa + kv_exists [el path ya existía]; el version_matches del MCP del edge comparaba el .ipk con su propio control; el mint_token(git) no probaba que el token AUTENTICARA; el verified-ok del MCP de build daba verde con los pods VIEJOS sirviendo 200; su gate A3 admitía ungated por ausencia de gates. Dos se cazaron por casualidad mirando otra cosa; el barrido encontró el resto. Dos de cuatro habría sido casualidad; cuatro de cuatro es un raíl.

C-015

Cicatriz I8, 2026-07-29: la ficha estimaba —leyendo wg_hub.py— que un re-alta anónimo dejaba el peer WG en pie y que la pérdida llegaría «en el siguiente reinicio de wg-hub». Son 36 segundos: la API reescribe wg0.conf sin ese peer, y gre-syncun script del chart, en OTRO repo— borra el grehub y con él la adyacencia OSPF. El peer sí sobrevivía; moría todo lo construido encima, y eso convertía una bomba latente en una denegación de servicio en vivo.

C-016

Cicatriz Fase 14, 2026-07-28: transport-spec.md daba la derivación v2 de la loopback por «congelado » y describía la v1 —«la teclea el operador; el hub la asigna por peer_index»— con las dos mitades falsas. Su espejo decía lo mismo, así que leyendo docs era indetectable: solo el hardware llevaba la contraria, con 10.100.203.26 en el router de campo y 10.100.255.154 en el hub. De la misma tirada cayó un problema que la spec inventaba: el puerto WG no es «443 RUTOS / 51820 OpenWrt» sino 51234 de escucha en ambas, así que el conflicto de despliegues mixtos que describía no existe.

C-017

Cicatriz P9c, 2026-07-28: el panel comprobaba si zebra corría buscándolo en ps — y la contraseña del VTY de quagga es zebra, así que cada sonda dejaba en ps un proceso propio que casaba. El módulo se veía a sí mismo: cuanto más se miraba el panel, más imposible era que arrancara.

C-018

Cicatriz engine, 2026-07-30, cazada antes de armarla: el verify del MCP de build sale por internet y el Ingress de engine tiene whitelist de IP ⇒ devuelve 403 pase lo que pase. Un expect_status:200 habría fallado siempre → auto- rollback → re-pin del digest anterior, que daba 404engine muerto y sin vuelta atrás: el mecanismo de seguridad era el asesino. Y expect_status:403 es peor: el ingress-controller devuelve 403 aunque el pod esté en ImagePullBackOff — verde eterno sobre un servicio caído.

C-019

Cicatriz A16, 2026-08-01: el MCP del edge leía la versión con head -1por posición— y /api/settings tenía dos claves version; se quedaba con la del install-report, un fichero que escribe el postinst del propio .ipk. Resultado: installed 2.1.58 · served 2.1.58 · HTTP 200 · 4/4 enabled, verde entero, con el panel ejecutando 2.1.57. El arreglo no fue reintentar: fue esperar a la marca de fin del instalador, que es un observable distinto del que gatea.

C-020

Cicatriz 2026-08-13, y la cometió la orquestadora: midió el panel del hub del trabajo con urllib.request.urlopen —que sigue los 3xx por defecto y no lo dice— y concluyó «la aplicación no comprueba nada, el panel está abierto dentro del cluster». Era falso: contestaba 303 → /login. Encima tumbó un hallazgo correcto de la sesión de ejecución —que sí había medido con wget -S, que enseña la traza entera— y estuvo a punto de cambiar el motivo de una decisión por uno inventado.

C-021

Cicatriz H12, 2026-08-02: harbor.manabo.org es Valhalla desde el constructor y Athena desde los nodos que tiran. Una sonda de «¿ya está la imagen?» lanzada desde el pod habría preguntado al registro que acababa de recibir el push200 siempre. Por eso el destino de la sonda tiene que ser un endpoint explícito, no el nombre.

C-022

Cicatriz evitada el 2026-08-02 construyendo la poda de allowed-ips: el peer yomi lo pone wg-setup desde un Secret y el API nunca lo escribe en la conf. Una poda de «borro todo lo que no reconozco» se lo habría llevado — que es el error de H13 con el lo del nodo, y por eso hizo falta una lista PRESERVE_PEERS explícita.

C-023

Cicatriz 2026-08-02: un kubectl delete ns karmada-system lanzado con el plano de control revuelto por los reinicios de esa misma sesión —connection refused contra el apiserver a la misma hora— se llevó el objeto Namespace y dejó vivos los 18 objetos de dentro, listables y sin deletionTimestamp, en un namespace que ya no existía. El namespace-controller enumera por discovery lo que debe borrar; una enumeración vacía se leyó como «no queda nada», retiró el finalizador y el Namespace desapareció antes que su contenido.

C-024

Cicatriz 2026-08-02, cazada por Xavier antes de ejecutarse: un aviso describía un wg0 con RX 0 y TX 56 MiB como «un túnel muerto que nadie usa», y la orquestadora ofreció «levantarlo o quitarlo» como dos opciones equivalentes. Xavier: «ese túnel es con el que me conecto yo a casa» — y estaba fuera de casa en ese momento. Quitarlo le habría cortado el acceso.

C-025

El mismo A16: se propuso «comprobar que el PID cambió» como prueba de reemplazo — y el respawn de procd también estrena PID, así que habría salido verde sobre el árbol viejo. El testigo bueno era la versión que el panel SIRVE, que es lo único que solo puede decir el árbol que corre.

C-026

Cicatriz 2026-08-02, cluster home: dos reglas —etcdMembersDown y etcdInsufficientMembers— contaban targets de scrape y los llamaban «miembros». Llevaban 56 días en rojo porque los cuatro componentes del plano de control escuchaban sus métricas en 127.0.0.1, con los cuatro perfectamente sanos.

C-027

Cicatriz 2026-08-02, y la cometió la orquestadora: dedujo que Vault llevaba «29 días corriendo sin el hostAliases» porque currentRevision ≠ updateRevision, y recomendó revertirlo en git para que la alerta se apagara sola. Medido en el aparato: hay 12 ControllerRevisions, el pod corre la 10, currentRevision apunta a la 4 y el deseado es la 12. Con updateStrategy: OnDelete ese campo no describe nada real, y el pod llevaba el hostAliases — en su /etc/hosts.

C-028

Cicatriz 2026-08-12: repuesto el token de ESO de hermes, 20 de 30 ExternalSecret seguían en SecretSyncedError y la lectura obvia era «no funcionó»; se estuvo a un paso de reiniciar ESO y de reescribir la política. Lo que lo desmintió fue la HORA del último error en el log: siete minutos de silencio. El campo contaba el ciclo anterior — su refreshInterval es de una hora. Forzando el refresco de los treinta: 30/30 verdes.

C-029

Cicatriz al revés, 2026-08-01, hecho BIEN: vaciando de texto las pantallas de dos paneles, el peligro era llevarse estado junto con los comentarios. En vez de capturas —que no se pueden diffear— se volcó el texto de todas las pantallas antes y después en los dos aparatos, con un clasificador prosa/medida: 0 medidas cambiadas, y los únicos cambios fueron los seis textos que se querían mover.

C-030

Cicatriz 2026-08-13, y salió BIEN: una sesión documentó el porqué de una perilla con comentarios #dentro de spec:, o sea que salen en el render. El gate de bytes se puso rojo en los tres hubs vivos sin que cambiara un solo valor. Pasaron a {{/* */}} y volvieron los bytes exactos. Sus palabras: «el gate se ganó el sueldo en el cambio que yo habría llamado cosmético».

C-031

Cicatriz F12.1, 2026-08-02: se eligió el md5 de ospfd.conf como testigo de «esto no ha cambiado», y el fichero lo escribe un bucle sobre pairs() de Lua, que no ordena. El hash bailaba sin que cambiara una sola línea ⇒ el testigo habría gritado en cada medida, y a la tercera nadie se lo cree.

C-032

Cicatriz E9, 2026-08-03, y es la segunda vez en dos días: el md5 de un ospfd.conf se movió, la sesión pudo demostrar por reconstrucción que no era suya… pero no pudo diffearlo, porque había guardado el hash y no el contenido normalizado.

C-033

Cicatriz H24, 2026-07-31: la ventana del zombi no era de 10 s fijos, iba de ~0 a ~10 s según dónde cayera el revoke dentro del sleep 10 de pq-sync; con la rotación de Rosenpass en 131 s, acertar era un ~8%. Tres intentos fallaron por 50 s, 3 s y 1 s.

C-034

Cicatriz H16, 2026-07-30, y es la tercera reincidencia de H6 — casillas rancias— tras el 26 y el 27 de julio. El modo de fallo nuevo: la casilla no se podía contradecir leyendo los docs; hubo que entrar en el contenedor a comparar sha256sum contra git show HEAD:.

C-035

Cicatriz 2026-08-03, y la cometió la orquestadora: dedujo que una LAN estaba en la malla porque el fichero de opciones DHCP existía. Cierto con el código de hoy —que solo lo escribe para las LAN de la malla— y falso con el que corría cuando lo midió, que lo escribía incondicionalmente y sin consultar el eje. La existencia del fichero probaba justo lo contrario: que el eje se ignoraba.

C-036

Cicatriz 2026-08-06: pq-secret.sh estaba en CRLF en el worktree y así ni arranca —set -uo 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.

C-037

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.

C-038

Cicatriz H23, 2026-07-31: I1 decidió —bien— que re-admitir a un nodo revocado es «una autorización NUEVA del operador»… y construyó solo la negativa. Medido en el pod que corre: POST /links/pair da 403 permanente, approve_pair exige pending, y ninguna pantalla pinta una fila revocadano hay botón que pulsar. Hubo que tocar status en la base de datos. Y lo que lo vuelve grave: el procedimiento documentado de H21 dice «revoca los edges antes de renombrar un hub» — seguirlo en el cliente dejaría sus sedes fuera sin marcha atrás.

C-039

Cicatriz 2026-07-31, cazada antes de aplicar: hubName gobernaba también los paths de Vault — con hermes.hub el trimSuffix "-hub" no recortaba nada y el hub habría ido a buscar su clave WireGuard y su clave Rosenpass —la que la D100 del hub prohíbe regenerar; era F13·D10 hasta que el 2026-08-22 se renumeró al contador del hub, precisamente porque el id chocaba con el del edge— a rutas inexistentes. La sesión partió identidad de nombre público antes de tocar nada.

C-040

Cicatriz 2026-07-30: el catálogo del MCP de build llevaba un CAVEAT diciendo que la suite del hub estaba obsoleta —12/28 en rojo— y que por eso «el deploy se valida con skip_tests, bypass auditado». Había dejado de ser cierto el 2026-07-24: las 12 aserciones se reescribieron y la suite va a 90 passed. Seis días en los que la razón ya no existía y el permiso seguía escrito.

C-041

Cicatriz 2026-08-04: bajo una cabecera marcada sobrevivía un pendiente sobre una carrera revoke + enroll que I1 había vuelto inconstruible —los dos db.delete ya no existen—, y su arreglo propuesto era «un SELECT+DELETE atómico». Quien lo hubiera cogido de buena fe habría reintroducido exactamente lo que I1 quitó, que era el borrado de la fila y toda la vulnerabilidad con él.

C-042

Cicatriz 2026-08-03, y la cazó la propia sesión al aplicar su propuesta, no la propuesta: al retirar BACKLOG-HERMES.md —826 líneas, con el invariante de ids comprobado y cuadrado— quedaban cuatro ítems abiertos de la red del trabajo que el borrado se habría llevado en silencio: excluir una IP de la pool de MetalLB, identificar físicamente al okupa de un puerto de switch, renombrar un address-object del firewall y un puerto de destino. Nada de eso tenía id; eran casillas.

C-043

Cicatriz A20, 2026-08-01: la /32 que un hub se inventó al resolver una colisión no se quedó ahí — el edge la adoptó (A17), la re-declaró al otro hub (A18), que la aceptó, y el nombre del router acabó resolviendo a la dirección equivocada por los dos caminos. Cuanto mejor funcionaba la réplica, más lejos llegaba el error.

C-044

Cicatriz 2026-08-28, y es la única del día que llegó a mover el orden de trabajo del usuario: un aviso reclamaba un gesto urgente sobre la BIOS de un servidor —«la carga está armada»— y desplazó cuatro asuntos. Un frente había medido la conducta del SERVICIO —un host declarado se sirve sin menú, y el arranque por red instala solo a los 30 s— y era cierto. Nadie midió la precondición, que es de otro sujeto: el orden de arranque de la MÁQUINA. Lo refutó el usuario en una frase: para arrancar por red hay que pulsar una tecla; el disco ya era el primero. La conclusión compuesta había viajado con fecha, contra-medidas y hasta un User-Agenttodos los signos externos de una medida— y tres registros la aceptaron sin pedirle la precondición.

C-045

Dos frentes independientes el 2026-08-28, con casos distintos. Uno: dos sesiones afirmaban cosas opuestas sobre «el log del motor» — y no era un objeto, eran dos, uno por stdout sin User-Agent y otro dentro del mismo pod en formato combinado; ninguna se equivocaba sobre su fuente, faltaba nombrarla, y lo destapó que una intentara reproducir el testigo de la otra y no pudiera.

C-046

(a) un bloque de 14 líneas insertado con sed a\ entró colapsado en UNA sola línea; el testigo era grep -c <marcador>1, verde, con la forma destruida. El bueno era git diff --numstat (15) junto a grep -c '^+>' (14). (b) filtrar un diff con grep "^[+-][^+-]" oculta toda línea de lista Markdown —una viñeta empieza por - y da +-/--—: salió diff vacío sobre un fichero que sí había cambiado. En un corpus que es casi todo viñetas, ese filtro borra la mayoría de lo que buscas.

C-047

Cuatro mutantes sobre el netplan real de un host. El autoinstall_schema del controlador de red de subiquity pone ethernets: {properties: {match: MATCH}} con MATCH llevando additionalProperties: false, y de ahí se afirmó que un match con una clave de más sería rechazado. Falso: ese match cuelga directamente de ethernets, profundidad donde netplan no lo pone jamás; el de verdad vive en ethernets.<iface>.match, y ahí el esquema no mira, porque ethernets no lleva additionalProperties: false.

C-048

proyectos-3c, sobre el arranque por red: predijo 1 rojo en su mutante y salió 0. Su comprobación decía medir «el servidor que ignora el Range» y en realidad pasaba por el magic CD001 ausente en unos bytes de relleno. La arregló con un fichero que parece correcto a la profundidad equivocada — literalmente A13 en otro traje.

C-049

Cicatriz 2026-09-02: tres sesiones a la vez leyeron «el nodo conserva la ranura de recuperación de LUKS» como un agujero de seguridad, lo escalaron y llegó a la mesa de Xavier. Es la definición del estado previo: esa ranura la retira el día 1, y a ese equipo el día 1 no se le ha aplicado. Lo deshizo él en dos líneas: «no se puede pretender que esté securizado antes de que se le aplique la securización». Y el caso puro estaba delante: la máquina que la conservaba está sin bastionar a propósito, porque es la línea base contra la que enrojece la mitad roja de los gates — pedirle que no la tenga es pedirle que deje de servir para lo que existe.

C-050

Cicatriz 2026-09-02: se corrigió la ficha que decía .50 = ESXi / .51 = iLO —al revés— y se dio por cerrado. Quedaba un tercer fichero diciéndolo mal dos veces más, y la peor no era una descripción sino un PROCEDIMIENTO: «asignar .50 al VMKNIC y .51 al iLO». ⇒ Un dato malo en una descripción se LEE; en un procedimiento se EJECUTA. Lo cazó una pregunta de otra sesión — «¿cuál corregiste?»—, que es comprobar el sujeto de un arreglo, no su existencia.

C-051

Cicatriz 2026-09-02: el banco de subiquity del motor de hermes-infra estaba commiteado con rutas absolutas al scratchpad de OTRA sesión —un directorio con el UUID de una conversación que ya no existe— más un /mnt/c/.../sp2 de relleno. Tenía casa en el repo y no arrancaba.

C-052

Cicatriz 2026-09-02: al nodo IA le faltaba la ruta por defecto tras un corte. Se propuso reponerla apuntando al firewall nuestro, que da salida a internet — y la máquina es de otro equipo, con su gateway propia sin internet real. Lo paró Xavier diciendo por qué no la quería, y sólo entonces se leyó el documento que lo explicaba. ⇒ La ausencia era real y la causa también, y aun así el arreglo habría sido un cambio no autorizado en la máquina de un tercero.

C-053

Cicatriz del motor de aprovisionamiento, cosecha 2026-08-15: day1.mode — dos modos producían el mismo artefacto; y así llegó day0.luks a existir declarado y sin consumir, sin que nada se pusiera rojo.

C-054

Cicatriz F11.11b, 2026-07-27: el test de cableado recorría app.routes en plano, pero en esa versión de FastAPI los routers incluidos van anidados → el recorrido veía 8 rutas y ninguna /api/…, así que pasaba con el endpoint abierto de par en par. Se delató porque la mutación dio 1 rojo donde tenían que ser 2. Ahora las rutas se descubren por el esquema OpenAPI.

C-055

F11.12, 2026-07-27: tal cual estaban, la primera mutación reventaba el bloque entero y escondía cuántas aserciones habría tumbado — el número dejaba de ser medible justo cuando lo necesitabas.

C-056

2026-07-27: una quinta mutación dio 0 donde se esperaban 2 — el arnés avisó de que el sed no había casado, así que el cero quedó explicado en vez de pasar por bueno.

C-057

2026-08-13: una mutación apuntaba a values-hermes.yaml para tocar la clase de Ingress — y esa instancia no la declara, la toma del default ⇒ no había nada que mutar. El arnés dijo «mutación no aplicada» en vez de un 0 rojos que se habría leído como «esto no está cubierto», y la mutación se reapuntó al default, donde sí enrojece las tres.

C-058

2026-07-28, hub I6: la mutación quitaba un {% if %} y dejaba su {% endif %} → la plantilla no compilaba, la suite moría en el fixture y salían 31 errors y 0 failed; el arnés leía solo N failed0 rojos, indistinguible de «este test no cubre nada», y por poco se tira una comprobación buena.

C-059

Misma sesión: la mutación puso 10.99.0.2 a pelo… que era exactamente el valor contra el que afirmaba el test → verde por coincidencia, con el número de rojos acertado y la identidad equivocada. Con 10.99.0.77 salieron 3.

C-060

Cicatriz 2026-08-05, construyendo el gate de R14, y lo cazó la mutación —no el gate en verde— que es la única razón por la que se sabe:*

  • casar por SUBCADENA y no por LÍNEA: grep -q 'port: 444' salía verde contra port: 4440, o sea que la guarda del puerto decía que sí a un valor que no era. Es el head -1 de A16 en otra sintaxis: leer por posición o por trozo, nunca por identidad. ⇒ Y su forma PEOR, medida el 2026-08-13: cuando las dos cadenas son valores LEGÍTIMOS del sistema, la subcadena engaña en las DOS direcciones. nginx-inet contiene nginx, y las dos son clases de Ingress reales de instancias distintas ⇒ una guarda sin ancla $ decía ok [hermes] … emiten nginx sobre un render que ponía nginx-inet. Aquí el falso positivo no es ruido: es el valor de otro hub. ⇒ Ancla siempre, y si puedes compara la cadena exacta en vez de buscarla — el pytest de esa misma sesión aguantó justo por eso.
  • cmd | grep -q bajo set -o pipefail: grep -q sale al primer acierto y cierra la tubería ⇒ SIGPIPE al productor ⇒ la tubería devuelve distinto de cero ⇒ rojos intermitentes. Y lo grave no fue el caso nuevo: estaba latente en cinco comprobaciones preexistentes cuyo «ok» es la rama else — o sea que llevaban tiempo pudiendo aprobar por el motivo equivocado.*

C-061

Misma sesión: un helper quiere_linea definido 300 líneas después de su primer uso ⇒ la cara positiva de esas comprobaciones no se ejecutaba y nadie se enteraba.

C-062

Cicatriz H19, 2026-08-05: el banco de pq-sync.sh llevaba ocho días con la base en 17 ok / 4 fallos, porque 62707e1 retiró del chart la semilla PQ legacy —tocó cinco ficheros y no tocó el banco— y cuatro casos quedaron afirmando sobre algo que ya no existe. Con esa base, los «más rojos de los previstos» no eran una cascada: N2 hacía pasar un rancio y N4 otro. Y el aviso que lo describía prescribía re-derivar los conteos, o sea maquillar la avería — §6, un pendiente rancio trae el arreglo equivocado.

C-063

Misma cicatriz, y es la mitad que asusta: N1 era la única mutación en verde del banco… y lo era por coincidencia. Sus dos rojos eran dos rancios, y las dos aserciones que esa mutación existe para romper salían VERDES — el aviso colado por stdout subía el conjunto de 1 a 2, justo lo que se esperaba. El número acertaba y la identidad estaba entera equivocada: no eran 4 de 5 mal, eran 5 de 5.

C-064

Cicatriz 2026-08-06, y salió bien porque la predicción iba por nombre: al coser seis comprobaciones de guards.sh se esperaban 6 ok y salieron 37. Los 31 de sobra eran quiere_fallo —otra familia: lee stderr y afirma en positivo—. Con la predicción hecha solo con el número, la conclusión habría sido «me faltan 31» y se habrían «arreglado» 31 comprobaciones sanas.

C-065

Cicatriz 2026-08-06, y apareció al poner la base en verde, no antes: la mutación 4 de pq-secret.sh llevaba desde R14 sin casar, porque R14 movió los volúmenes a _helpers.tpl y en deployment.yaml ya no queda ningún items:. Dos días de censo no la vieron porque los dos rojos de la base la tapaban.

C-066

Cicatriz 2026-07-26: comprobar si PUT /api/config/global pedía credencial con {"__probe__":1} vació la Global Config del hub y disparó el write_zones() — el hub dejó de servir sus tres estáticos durante ~45 s.

C-067

Cicatriz F11.7, 2026-07-26: «Guardar cambios» no guardaba… y sí guardaba. apply_default hacía ifup lan incondicional, y la br-lan es la interfaz por la que se administra el panel → el ifup se llevaba el socket de su propia respuesta. El backend aplicaba y persistía, y se quedaba sin poder contestar; en el navegador, r.json() reventaba y la promesa del handler moría sin dueño. Silencio absoluto.

C-068

Cicatriz 2026-09-01: se recomienda no tocar el quórum de almacenamiento esa noche, con números. El usuario decide tocar, y da su razón: «el sitio caído no depende de mí, no tengo control sobre él». ⇒ Eso desmontó la premisa de la recomendación —que trataba la vuelta del sitio como una certeza— y cambió el modelo de riesgo, no la conclusión. Sin la razón se habría aplicado lo mismo creyendo otra cosa.

C-069

Ejemplo del mismo día: se decide soltar un filtro de un control, y la razón es «puedo responder por mí, no por lo que hagan las demás personas» ⇒ el sujeto del control no son las cuentas de hoy: son las que otro cree mañana. Sin esa frase, el gesto es correcto y apunta a la cosa equivocada.

C-070

Cicatriz 2026-09-01: con el quórum de almacenamiento a 2 de 3, se relaja la regla que impide colocar un tercer testigo. El orquestador, para aplicar la colocación nueva, intenta parar uno de los dos que quedan — y el sistema se lo deniega con «no quedarían suficientes». Como actualiza los existentes antes de crear el tercero, la operación se impide a sí misma: cuatro reintentos, el failover parado. Se desatascó reiniciando el orquestador, que al arrancar limpio pudo actualizar primero el testigo caído —que no dispara la guarda porque ya está parado—.

C-071

Misma noche: la recomendación de no tocar se apoyaba en «mañana se recompone solo» — que presupone como CIERTO que el sitio caído vuelve mañana. No lo era: no dependía de quien decidía, no había acceso fuera de banda, y dependía de poder desplazarse. Se puso en la balanza un riesgo improbable contra algo tratado como certeza sin haberlo comprobado: la comparación estaba viciada de origen. Y el otro platillo decía «de noche y al final de un día largo»cuando el usuario estaba despierto y delante.

C-072

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ó.

C-073

Cicatriz 2026-09-01: un cluster con 2+2+árbitro, el árbitro en un tercer emplazamiento con switch propio ⇒ sobre el papel, impecable. Medido por el Designated Bridge del root port: ese tercer sitio cuelga físicamente del switch del sitio A, y su enlace redundante lleva los dos puertos caídos y sin transceptor —diseñado y nunca completado—. ⇒ Apagar el sitio A no se lleva 2 nodos: se lleva 3, y el quórum pasa de 3 de 5 a 2 de 5: se pierde, en el plano de control y en el almacenamiento. No se degrada: se para.

C-074

La misma operación se había hecho una semana antes y salió bien — pero sobre el lado contrario, que era del que no colgaba el árbitro. La asimetría era invisible desde el éxito.

C-075

Cicatriz 2026-08-30: una sesión de ejecución pregunta si puede quitar un campo de una plantilla para implantar una decisión. La medida dice que ese campo es obligatorio en el instalador ⇒ quitarlo rompe TODAS las instalaciones, en la validación, antes de tocar el disco. Se le contesta a ella y sólo a ella — pero eso invalida media decisión, y la decisión la llevaba su orquestadora, que siguió planificando horas sobre una premisa ya sabida falsa. Salió porque el usuario preguntó «¿esto se lo reportaste a la orquestadora?».

C-076

Cicatriz del mismo día: un frente reporta que una plantilla de ejemplo enseñaba una capa contra una decisión del usuario, y cede el sujeto. Se arregla y se empuja… y no se avisa. El que lo reportó se queda con su aviso abierto, persiguiendo lo que ya estaba resuelto.

C-077

Cicatriz 2026-08-30, dos veces el mismo día y en direcciones opuestas: un frente avisa al relevo de que cierta decisión seguía apoyada en una premisa falsa… y ya estaba corregida y sustituida, por él mismo, la víspera. Y la superadmin repite ese mismo aviso al día siguiente sin volver a mirar. Las dos veces lo cazó la sesión nueva, que era la única que no daba el estado por sabido.

C-078

Medido 2026-08-31: en un frente que entrega a un tercero, el entregable tenía medidas de las familias construidas hasta el 27-ago y ninguna posterior. No eran diez olvidos: una familia se daba por cerrada cuando el rol la aplicaba y el auditor la veía verde, y el entregable no estaba en ese ciclo ⇒ cada familia nueva abría un hueco nuevo. Y en el mismo día, otro frente: la mitad de una tarea construida y su backlog sin saberlo.

C-079

Medido el mismo día, en tres frentes y en el propio gobierno del árbol: un aviso decía que un banco vivía en un scratchpad del que ya había salido; un pendiente declaraba certificados RSA que llevaban dos días siendo ECDSA; y cuatro premisas del corpus raíz quedaron falsas el día que el árbol pasó a ser un repo git — las cuatro por una mejora, ninguna por un fallo.

C-080

Y no es teórico: el propio linter mide la copia sellada, no lo que cada repo tiene de más ⇒ hoy un incremento es indistinguible de una deriva para el instrumento del árbol.

C-081

Cicatriz 2026-08-31: una orquestadora escribió cuatro raíles en su propio corpus creyéndolos suyos; tres eran generales y uno no, y ella no podía distinguirlos — sólo ve su frente. Además, de los tres, uno se paró por un motivo que ella no habría dado: una ocurrencia no hace un raíl. Y quien la paró no fue un gate: fue el usuario.

C-082

Medido 2026-08-31: tres instancias en una sola jornada, en el mismo frente y todas ciertas —un sujeto de prueba documentado en un directorio de evidencias y un script de banco · una deuda escrita en el mensaje de un commit · una versión de herramienta medida cinco días antes, en un aviso, un comentario del rol y la cabecera de una comprobación—. Las tres las destapó otra sesión leyendo por casualidad. Ninguna la cazó un gate. Y en las tres, quien decidía llegó a proponer trabajo ya hecho o a operar con un riesgo que no existía.

C-083

Cicatriz 2026-08-31: clevis luks list no puede desmentir la existencia de una ranura de contraseña — devuelve 1: tpm2 con una ranura y con dos. Se comprobaba justamente si esa frase seguía abriendo el disco. La respuesta la dio otro instrumento, luksDump, que sí enumera todas las ranuras.

C-084

Cicatriz 2026-08-25→31: un aviso decía «el instalador no baja el seed» y nombraba a subiquity. Quien pide las cuatro rutas y valida la cadena TLS es cloud-init; subiquity consume lo que cloud-init ya le entregó. El aviso era útil y accionable durante seis días —el síntoma que describía es el que se ve— y aun así habría mandado a depurar el componente equivocado. Lo escribió un frente, lo heredó otro al citarlo, y lo corrigió el segundo al medirlo.

C-085

Cicatriz 2026-08-03, y es A1 en versión nueva: dns-malla.md corrigió el 2026-08-01 su modelo de resolución en un bloque « CORREGIDO»… y dejó vivo el diagrama de arriba, que dibujaba la cadena vieja. Nadie lee el párrafo de enmienda: se lee el diagrama. Dos días después ese diagrama era lo que Xavier tenía en la cabeza al describir el diseño, lo que la orquestadora escribió como premisa autoritativa de un encargo, y lo que obligó a la sesión receptora a parar. El modelo derogado sobrevivió a su propia derogación y volvió a entrar por la puerta grande.

C-086

Cicatriz 2026-07-27: dos sesiones concluyeron «esta máquina no tiene credenciales para git.manabo.org» y dejaron un chart de producción sin aterrizar. Era falso — cinco pushes ese mismo día desde ese mismo PC. El mismo día, un push a git.c2et.com falló con Recv failure: Connection was reset y entró al segundo intento.

C-087

Cicatriz cosecha 2026-08-15: «el camino Rocky» eran dos caminos y solo se había medido uno; la frase viajó por tres documentos antes de que alguien la careara.

C-088

Cicatriz 2026-08-18: la orquestadora editó así la ficha I11 durante toda una sesión y la rompió dos veces — un borrado se llevó la línea «que nadie construya un des-aplicar» (el raíl que su propio encargo repetía) y una inserción metió I11.9 dentro de la viñeta de I11.8, cuya cola quedó leyéndose como suya. Lo cazó la sesión siguiente al ir a trabajar sobre la ficha; la orquestadora había «verificado» cada edición con un grep del marcador nuevo, que siempre casa aunque el resto haya quedado hecho trizas.

C-089

Censo 2026-09-02: cinco párrafos partidos en la matriz. El más viejo llevaba tres días repartido a los 27 repos —lo partió, con ironía perfecta, el commit que añadía «la puerta hay que escribirla de modo que ATE, no que informe»—; dos eran de esa misma tarde y de quien escribe esto; y uno estaba en la cabecera del documento, la primera frase que lee toda sesión. Nadie vio ninguno, porque una cola varada se lee como el principio de otro párrafo: el texto no se rompe, se recompone mal y sigue siendo texto.

C-090

Cicatriz 2026-08-06, censo de los bancos del chart del hub: aip-sync.sh y lo-reconcile.sh son dos drivers del mismo directorio que hacen lo mismo —extraer un bloque del render, mandarlo a un host y ejecutarlo como root—. El 2026-08-02 aip-sync.sh se comió una extracción rota y se cosió bien: awk, anclas afirmadas y una aserción negativa. A su hermano no lo miró nadie. Cuatro días después, en mode: loadBalancer el ancla de cierre de lo-reconcile.sh ya no existeR14 quitó el reconciliador a propósito— pero la de apertura sí, así que el rango del sed corre hasta el final del render: 893 líneas donde son 36, con los ExternalSecret dentro. Su única guarda es [ -s ], que 893 líneas pasan de sobra, y lo siguiente de ese script es scp + sudo bash.

C-091

Cicatriz Hermes 2026-07-26: el sidecar Rosenpass corriendo en el chart del hub y el backlog del hub dándolo por pendiente, con un plan que nunca ocurrió; y un fix del hub —F13.0-c— que solo existía en el backlog del edge.

C-092

Cicatriz 2026-08-30: un frente reporta a otro un testigo falso —correcto, aceptado— y añade una solución: que cierto endpoint publique la fecha además del identificador. La dueña lo mide: el endpoint devuelve el identificador pelado, la comparación del agente es de cadena completa, y una línea de más hace que no vuelva a coincidir nunca ⇒ cada nodo se re-descarga su árbol en cada disparo, para siempre.

C-093

Cicatriz 2026-08-18: la orquestadora documentó cada hallazgo de dos días en los dos sitios; la ficha I11 llegó a 464 líneas y Xavier dijo que había dejado de poder leer el backlog. La bitácora ya lo tenía todo: lo del backlog era una copia pura.

C-094

Cicatriz 2026-08-31: un aviso pedía que el testigo de sincronía apareciera donde mira quien depura. La línea se construyó, es correcta, nombra los dos identificadores y no miente… pero la escribe un script que va a un fichero de log distinto del que recibe el resumen de la ejecución. ⇒ El testigo existe y no viaja pegado a lo que se lee — o sea, el gesto que el aviso existía para quitar sigue ahí. Y lo destapó una sola pregunta: «¿dónde queda lo que imprime?».

C-095

Mismo caso: la sesión que construyó ya había medido que el testigo caía en otro log y lo dejó escrito, honesta y explícitamente… en el mensaje del commit. Una deuda medida, dicha y aun así invisible desde el sitio donde se decide. La encontró su relevo por casualidad, mirando el git log para copiar la convención de mensajes.

C-096

Cicatriz 2026-08-22, D6 de Xavier: 18 decisiones distintas llamadas D1 en un solo backlog.md — y cuatro fallos de una semana que salen de ahí: un resumen que gobernó en lugar de la decisión, un «precio aceptado» que Xavier nunca pensó, dos ids que colisionaban, y una sustitución con las dos versiones vivas a 90 líneas de distancia. En sus palabras, para qué sirve la capa: «así tienes todo lo peligroso en un único documento».

C-097

Tres ocurrencias en cuatro días, la misma forma y sitios distintos: un workflows/metodo.md que llevaba 6 días siendo máster de facto porque el repartidor no alcanzaba ese árbol y nadie era su dueño; una entrada de buzón escrita explícitamente como copia de seguridad «que se retira cuando su dueña la coloque» —y que sólo se retiró porque lo llevaba escrito dentro—; y un borrador de propuesta que su propia autora vio convertirse en derivada en el momento de aprobarse la entrega, con dos cambios pendientes en la mano. Las tres se vieron; la primera, seis días tarde.

C-098

Medido 2026-08-29: arrancar una sesión de un frente maduro cuesta 1,40 MB ≈ 400 k tokens antes de hacer nada —CLAUDE.md raíz + la constitución + su corpus—, o sea media ventana de contexto gastada en leer. Y ahí está la causa de que las sesiones se agoten y haya que relevarlas: el coste de arranque se paga en la moneda con la que se trabaja.

C-099

Cicatriz 2026-08-30: una sesión metió tres fechas, un mtime y una cita literal del usuario dentro de un anexo firmado — conociendo el principio, que se lo habían dicho horas antes. Y el usuario, al verlo: «me paso el día matando historiales» ⇒ no es un desliz de una sesión, es la norma del sitio.

C-100

Cicatriz 2026-08-29: el AVISOS.md de un frente activo tenía 1.905 caracteres de media por línea y una de 8.196 — y es el fichero que se lee primero.

C-101

En un solo frente había cuatro afirmando bloqueos sobre trabajo cerrado la semana anterior —y el propio corpus tenía escrito el patrón, aplicado a un fichero ajeno y nunca a sí mismo.

C-102

Medido el 2026-08-29 sobre el semáforo del árbol: 14 filas no empezaban por marca de cierre y sólo 3 estaban realmente vivas11 falsos positivos; y dos empezaban en «viva» y acababan en «CERRADA». Un censo por el principio las cuenta vivas para siempre; uno que busque «CERRADA», las cuenta cerradas.

C-103

Cicatriz 2026-08-29, verificando 22 filas antes de purgarlas: el primer barrido por ids —D12, A37, A41…— las dio las 22 por buenas. Sólo el careo por cifra102 s, 8 h 14 m, suite 1621— separó las que de verdad tenían su relato fuera.

C-104

Cicatriz 2026-08-29: una orquestadora leyó el workflow de ordenación entero, tomó las medidas y empezó a hacerlo ella. Lo correcto era pedir que se abriera esa sesión y pasarle el encargo. La paró el usuario: «estaba esperando a ver si me sacabas un mensaje para que te abriera una sesión».

C-105

Cicatriz 2026-07-27: el multi-hub existe para sobrevivir a la caída de un hub — y hasta v2.1.34, añadir el segundo tumbaba el túnel del primero ~40 s, porque el endpoint del hub nuevo es un nombre y, si no resolvía, netifd rehacía la interfaz WG entera. La propiedad que existía para dar resiliencia te costaba un hub al activarla. Llevaba ahí desde que existe el multi-hub, y solo apareció cuando por primera vez hubo dos hubs vivos en el mismo edge.

C-106

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.

C-107

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.

C-108

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.

C-109

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.

C-110

Cicatriz 2026-08-12, y la cadena empieza en una recomendación de la orquestadora: se propuso quitar el root permanente de Vault —correcto como higiene— y se ejecutó rotándolo con generate-root y revocando el viejo. En Vault los tokens son hijos de quien los crea, y revoke del padre borra el árbol: 14 minutos después el ClusterSecretStore del cluster hermes pasaba a InvalidProviderConfig y 30 ExternalSecret dejaban de refrescarse — entre ellos la base de datos, el SMTP y el Twilio de una aplicación en producción.

C-111

F11.14: chronyd moría con CAP_SYS_TIME not present. Añadir la capacidad era el reflejo —y le habría dado a un servicio en red la potestad de mover el reloj del NODO, y con ella TLS, certificados y etcd. La respuesta era -x: un contenedor que SIRVE hora no es uno que PONE hora.

C-112

Cicatriz E6, 2026-08-01: el reconciliador decidía la política de resolución a partir de lease_rows() —la proyección para publicar, que no lleva nat—. «No viene nat» se leyó como «ninguna LAN tiene salida», así que la negativa se encendía en cada vuelta, con el NAT puesto. Y el test propio lo consagraba.

C-113

Cicatriz F11.14, 2026-07-27, cazada en el render, antes de existir: el bindaddress de chrony salía vacío porque serviceLoopback lo inyecta el ApplicationSet y no está en ningún values. Un bindaddress a secas no da error — chronyd vuelve a su default y escucha en todas las direcciones, IP pública incluida: un reflector de amplificación NTP abierto a internet.

C-114

Cicatriz del motor de aprovisionamiento, cosecha 2026-08-15: un hueco de identidad rellenado con «lo de siempre» sirvió un kickstart destructivo con un HTTP 200 impecable.

C-115

Cicatriz V11b: el careo routes-*.txtsuperficie.md del chart del hub buscaba repos/infrarouter/…, carpeta renombrada la 2026-08-15. Se saltó en todas las corridas de cuatro días, y no en silencio: llevaba un warnings.warn además del pytest.skip, puesto a propósito citando este §8, con el comentario «esto no se salta en silencio — se salta diciéndolo». Y lo decía. Y nadie lo leyó. Mientras tanto las cuatro capturas se quedaron atrás de una capa entera —la CRL— sin que el gate pudiera enrojecer.

C-116

Cicatriz 2026-08-30: un frente llevaba 16 avisos C25 —mensajes de commit— en rojo varios días, y ninguna de las cuatro sesiones que pasaron por él lo dijo, teniendo el propio Método escrito delante: «si sale rojo, no lo apagues: arréglalo o dilo». Lo cazó la quinta, el día de llegar, precisamente porque no estaba acostumbrada a verlo.

C-117

Mismo censo: probe-guard-hub.js llevaba los mismos cuatro días roto —falla ruidoso, MODULE_NOT_FOUND— y nadie vio el rojo porque no lo corre ningún gate; y pq-sync.sh lleva escrito de su puño que su línea base estuvo ocho días en rojo «porque este banco no lo corre ningún gate». Un banco mudo y un banco muerto se leen igual desde fuera.

C-118

Cicatriz 2026-07-26: la orquestadora de redes escribió toda una racha de prompts sin decirlo — se asumían fríos porque empezaban con el ritual de lecturas, y nadie lo había hecho explícito.

C-119

Cicatriz 2026-08-29: se re-estampó el Método en el repo de un frente que trabaja otra persona, sin mirar antes qué había hecho. No rompió nada —la copia quedó íntegra y su trabajo intacto— pero se le cambió el ritual de arranque sin decírselo, y su frente no tiene sesión en el canal a la que avisar. ⇒ El corpus manda, pero alguien tiene que avisar de que cambió: un cambio de método que llega por git pull y nadie anuncia es exactamente lo que este mismo raíl dice que no funciona.

C-120

Lo procedimental —cómo se abre un mensaje, qué viaja por el canal y qué no, quién avisa a quién al acabar— es procedimiento, no principio: vive en la capa workflows/, como el resto de la estructura de sesión.

C-121

Cicatriz 2026-08-28, y son cuatro el mismo día, en tres frentes: «E2.1 está bloqueado esperando un hierro prestado» —falso—; «esas dos filas son de sesiones muertas» —una era de una sesión viva y escribiendo en ella—; «tiene 5 commits sin empujar» —ya estaban empujados—; y una alarma de hierro que movió el orden de la cola del usuario. Los cuatro iban en el bloque afirmativo, ninguno marcado como inferencia.

C-122

Cicatriz 2026-08-29/30, y va en los dos sentidos, que es lo que la hace raíl: una sesión mandó a otra dos datos marcados como medidos y los dos eran falsos —un recuento de líneas de una sección del que se afirmó el contenido, y un encaje de workflow que la medida desmentía—; la receptora los comprobó a pesar de la marca y los corrigió. Al día siguiente, en sentido contrario, la receptora entregó un conteo propio que sí era falso —una ruta relativa sin resolver— y lo cazó la otra por no reproducirlo. Un corte entero se habría apoyado en él.

C-123

Cicatriz 2026-08-28: la superadmin informó todo el día citando nombres de sesión, todos correctos, hasta que él dijo «yo no veo eso». Es §1la herramienta de diagnóstico no ve lo mismo que el consumidor— aplicada a hablar con quien te dirige: darle el identificador que TÚ usas y él no puede resolver es información inútil con aspecto de precisión, y es peor que omitirla.

C-124

Cicatriz 2026-08-28: la superadmin mandó un encargo, recibió a continuación un «sigo esperando el encargo», concluyó que no había llegado y lo reenvió. Sí había llegado: entró mientras la otra sesión ejecutaba el turno en el que escribía su aviso. Lo corrigió la propia destinataria, con su transcripción delante, y evitó que una hipótesis no demostrada —«una sesión parada no drena su cola»— entrara en esta constitución. Esa hipótesis sigue sin medir y por eso no se escribe aquí.

C-125

(a) la sesión del incidente midió «srvfkvm02/03: no reiniciar ni drenar, desplegar encima es seguro»; se retransmitió como tres tajantes y otro frente descartó trabajo por ellas. (b) dijo de pasada «un arranque tras 18 h es cuando esas bombas explotan»; se retransmitió como «lo más importante del día». Medido después: cero. La alarma la retiró su propia autora.

C-126

Un parte decía «A10 NO bloquea, probado» refiriéndose al del motor; el A10 de poniente es la bomba de la PKI, viva y 🟠. Quien leyera el parte junto a ese corpus daría por descartada una bomba abierta — y el parte iba a tres frentes a la vez. Lo cazó la dueña del otro A10, no un gate.

C-127

Escrita por separado por las dos partes tras morderla cada una por su lado, que es lo que la manda aquí: se difundió un congelado de Ceph, se corrigió su redacción y no se avisó cuando murió; la orquestadora que lo recibió construyó encima un plan entero sobre un muro levantado hacía dos horas. Corregir la redacción de una restricción no es retirarla cuando muere.

C-128

Cicatriz F11.9, 2026-07-26: la Global Config del hub estaba muerta río abajo —su payload alimentaba a un agente borrado tres semanas antes— y al ir a arreglarla apareció que también lo estaba río arriba: el handler POST estaba registrado como GET, así que el formulario devolvía 405 y «Guardar» no había guardado nunca. Cada mitad tapaba a la otra: nadie echaba en falta un dato que nadie podía introducir.

C-129

Cicatriz 2026-08-29: una sesión de ordenación reportó como una contraseña en claro en tres documentos, con razón por lo que veía — y era del banco de pruebas. Nada que arreglar salvo lo que el corpus no decía.

C-130

Los dos casos, el 2026-09-02: un satélite midió que su pull no traía nada porque ya lo tenía; y MOT rechazó un push porque un compañero había empujado tres commits desde otro sitio.

C-131

Cicatriz 2026-08-29, y la encontró la sesión de ejecución que purgaba el semáforo mientras la superadmin le editaba la cabecera: paró antes de commitear porque vio en el diff 21 líneas que no eran suyas.

C-132

Cicatriz 2026-08-30: la orquestadora de un frente corre exactamente esta puerta, con el raíl escrito el día anterior y citándola a ella. Le sale filas tocadas: 3 · ¿mía?: 1 esperando 1 y 1y sigue adelante. El commit se lleva dentro la fila de otra sesión, bajo un mensaje que hablaba de otra cosa. Nada se perdió; la atribución, sí.

C-133

Cicatriz 2026-09-01: un gate de la matriz corrido desde otro repo avisaba «la MATRIZ ha cambiado» sin nombrarla, justo después de listar los incrementos de ese otro repo. Una sesión lo leyó como suyo y estuvo a punto de revertir trabajo bueno; se salvó yendo a leer el código del gate para ver qué entra en la huella.

C-134

Cicatriz 2026-08-30, y con la puerta puesta: una sesión encadena la comprobación y el git commit en la misma orden. Sale 4 filas tocadas · 2 de 4 mías —debía parar— pero para cuando lee la salida el commit ya está hecho, y publica el bloque a medio escribir de otra sesión bajo un mensaje que hablaba de otra cosa.

C-135

Caso 2026-08-30, dos prescripciones hermanas y sólo una atable: «una fila viva lleva bloque EN VUELO» es puramente sintáctico —está el marcador o no está—, así que se ata y pasa de «acuérdate» a «no puedes empujar sin ponerlo». Su hermana, «ninguna sesión se cierra con fila viva», NO se ata a propósito: el fichero no puede saber si el dueño respira —medido: ListAgents pasó de 13 sesiones a 6 en dos minutos, y una de 12 h apareció como recién arrancada—, así que un gate que lo adivinara daría rojos crónicos, o sea la cara (b) de la familia de arriba. Queda como criterio humano, deliberadamente.

C-136

Corrección de la propia sesión que lo frenó, 2026-08-29, y lo dijo contra su propio mérito: «no fue virtud, fue orden — medí el fichero dos veces porque los números de la primera no cuadraban con los de la segunda, y por eso miré el diff; no porque tuviera presente el raíl».

C-137

Cicatriz 2026-08-29, y la cometió la superadmin el mismo día que escribió este raíl: al re-estampar el Método en nueve repos, uno de los push arrastró un commit ajeno que esperaba una decisión. Tenía tres avisos delante —el de otra orquestadora esa mañana, su propia fila del semáforo, y su palabra dada— y corrió la puerta en su repo pero no en los ajenos: aplicó el control donde no hacía falta y lo omitió donde sí. Un raíl recién escrito no protege a quien acaba de escribirlo.

C-138

y se escribe así a propósito: en este árbol ya se borró un workflow por llevar «los commits van siempre, automáticos, sin confirmar» — una autorización sin fecha ni motivo es un agujero, no un permiso

C-139

Estaban escritos como «un segundo agujero», «un cuarto», «un sexto», «un tercer filo»… numerados por acumulación y contradiciéndose entre sí; renumerados el 2026-09-02. Ninguno se ha quitado: cada uno es un modo de fallo distinto con su cicatriz.

C-140

2026-08-30: se commitean dos ficheros nombrados uno a uno; entran tres. El tercero era el trabajo staged de otra sesión, que sobrevivió íntegro pero quedó publicado bajo un mensaje que hablaba de otra cosa, perdiendo la explicación que esa sesión estaba escribiendo. El asunto de ese commit era, literalmente, «en este árbol git no distingue sesiones». Lo cometió mientras lo escribía, con su propia puerta imprimiendo ficheros=3 habiendo nombrado 2.

C-141

2026-08-31: una sesión corre la puerta del índice —limpia—, empuja un fichero suyo y publica tres commits ajenos que esperaban entre el remoto y HEAD. Lo dio por hecho porque veinte minutos antes estaba a cero: un árbol compartido cambia por debajo entre dos pushes tuyos porque el otro está trabajando, que es lo normal y no la excepción.

C-142

2026-08-31: un --amend --no-edit reescribió el commit de otra sesión ya empujado. Su único testigo fue un push rechazado por no-fast-forward — o sea un fallo que puede no llegar a producirse; sin él, la reescritura se habría publicado.

C-143

2026-09-02: la superadmin avisó a un satélite de «haz pull, que hay commits de hace minutos». Eran ciertos y ya los tenía. Lo midió el satélite: los tres rangos, vacíos.

C-144

2026-09-01: una sesión anexó 168 líneas de su bitácora al repo de otro frente; y el mismo desliz le hizo leer los avisos del repo equivocado, numerando su hallazgo A12 donde iban por A5: un identificador inventado que habría quedado escrito.

C-145

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ó; al commitear, «nothing to commit»: ya lo había publicado un tercero. Cero pérdidas y la atribución cruzada cuatro veces.

C-146

Medido: el gate de los mensajes de commit selló en el punto de adopción del Método con historia mala por detrás, y necesitó excepciones nominales; el del trailer sella el día que llegacero excepciones, por construcción.

C-147

securizacion, 2026-09-02: cinco comprobaciones publicaban un dictamen correcto con sh: 1: raiz: not found dentro del dato crudo, y ya commiteado. El gate miraba el dictamen; el crudo no lo miraba nadie. El veredicto era cierto y su evidencia estaba rota.

C-148

securizacion, 2026-09-02: la misma sesión que por la mañana arregló el clasificador de credenciales lo reescribió mal a mano ocho horas después, al medir otra familia. La función existía, era correcta y estaba a mano. El hueco no estaba en el código: estaba en el criterio que uno lleva en la cabeza.

C-149

proyectos-3c, 2026-09-02, refutando un raíl escrito ese mismo día: «se localiza por contenido, nunca por número de línea» no basta. Su localizador estaba anclado a contenido y aun así su perl a medida casó de más y siguió en silencio. (Y otra sesión editó el mismo fichero con un awk anclado y funcionó por suerte, no por diseño.)

C-150

hermes-infra, 2026-09-03, medido en TRES repos a la vez: la orquestadora corre git log origin/main..HEAD, ve un commit ajeno sin empujar y lo declara en su mensaje, como manda el raíl. Commitea. Vuelve a mirar: el commit ajeno ya no está — alguien lo empujó entre sus dos comprobaciones. Su push responde «Everything up-to-date» y ls-remote confirma que sus commits ya estaban publicados sin que ella los subiera; en un tercer repo el remoto tenía su commit PRE---amend, publicado mientras ella corregía el mensaje. ⇒ Su aviso «me llevo un commit ajeno» era cierto al escribirlo y falso al publicarse. Y lo detectó por un síntoma raro —un push que no subía nada— no por un control: si el push hubiera tenido algo que subir, no se entera. Quien empujaba era el bucle de reparto de la superadmin, que empuja todo repo con commits pendientes, sean suyos o no.

C-151

hermes-infra, 2026-09-03: systemd-networkd-wait-online consumía el timeout entero de 120 s en cada arranque, para siempre — seis SFP en el bond y cable en dos. No deja failed, no da error, el nodo arranca y la red funciona: sólo tarda. Lo vio Xavier mirando la consola, no una sonda. ⚠️ Y ya estaba resuelto y escritooptional: true, de su puño, en el netplan de styx (asgard/doc/styx-integracion.md:126)—: vivía en un ejemplo, no en el mecanismo, así que no llegó a la plantilla y se pagó entero otra vez.

C-152

securizacion (ejecución), 2026-09-03, sobre su propio caso: git commit -- <ruta> publica el contenido del árbol de trabajo EN EL MOMENTO DEL COMMIT, no el que verificaste antes. Su ventana fue de 90 segundos, y se la fabricó ella misma escribiendo el mensaje del commit entre la verificación y el commit. ⇒ El pathspec la protege del índice; no la protege del árbol.

C-153

Este PC, medido por securizacion (ejecución) el 2026-09-03: grep -c $'\r' miente en las DOS direcciones sobre ficheros CRLF, y el sed de Git Bash y el de WSL no dan el mismo resultado sobre el mismo fichero — uno traduce el fin de línea y el otro no. Lo destapó un gate de longitud que midió 15 donde había 13, o sea sesgado en la dirección que aprueba. El árbitro que sí declara su semántica es git ls-files --eol.

C-154

La superadmin, 2026-09-03, y lo destapó la orquestadora de securizacion en el barrido de la mañana: cicatrices.mdel artefacto nuevo más importante del día— llegó a los 27 repos y ninguno lo versionaba. La causa: el reparto commiteaba con git commit -m … -- .metodo/, y un 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.