chore(metodo): reparto — el criterio no previene el conflicto, y un rojo prestado entrena

Dos railes de poniente. Y arreglado el gate del reparto: si la matriz tiene
trabajo sin commitear es NOTA, no rojo. Las dos ramas ejercitadas.

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

Sesion: superadmin

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
sirxavor 2026-09-03 14:09:42 +02:00
parent 444063b499
commit 4a9e34129a
4 changed files with 158 additions and 2 deletions

View File

@ -1,5 +1,5 @@
41997a7e81b1178a3ecfd643b56d8dcb1e106ac75c36a099c4170612e46fd53b metodo.md
1e9242642ed009b993a9ca613b1f4d438748b91eadf5af1f6dab669c87a560cb bin/metodo
0b309b932d65419946a6e9bfd7e39d164693789a90b4be75a6655c146d3fce84 metodo.md
71b3e3ace88ef15f0f18b3c0d7a4c5b6a340414a881042d0cc2bd4e8f2583d58 bin/metodo
f89b71bdf31028b05075636c1763c964e379bc37a00e0357d1c23a4dd19c09aa workflows/README.md
cc241bbecf9647c747b8525b3a6b527455cd50ca0312caa44bc3544342c8ac41 workflows/comunicacion-entre-sesiones.md
2b9037f6dd57b5598c70a676cb728556654f05d1c5b024e7b716864659f7b884 workflows/sesion-ejecucion.md

View File

@ -260,9 +260,20 @@ check_reparto_al_dia() {
info "sin sello de reparto todavía — se escribe en el próximo 'metodo update'"
elif [ "$sello" = "$ahora" ]; then
ok "la matriz ($SELF_ROOT) está repartida: lo que hay en ella es lo que se estampó"
else
# ⛔ UN ROJO PRESTADO NO ES UNA DEUDA: puede ser que ALGUIEN ESTE EDITANDO LA MATRIZ AHORA.
# C11 carea contra la matriz VIVA, asi que el gate de CUALQUIER repo enrojece por algo que
# no esta en ese repo. Medido el 2026-09-03: rojo durante HORAS en los 27 mientras la
# superadmin escribia, y limpio solo al repartir. Un gate que enrojece por causa ajena
# ENTRENA A DESMENTIRLO, y quien se acostumbra deja de ver el rojo que si es suyo.
# ⇒ Dos casos distintos: matriz SUCIA = trabajo en vuelo, es NOTA. Matriz LIMPIA con el sello
# sin casar = deuda real, GATEA.
if [ -n "$(git -C "$SELF_ROOT" status --porcelain 2>/dev/null)" ]; then
warn "la matriz ($SELF_ROOT) tiene trabajo EN VUELO sin commitear — el desajuste es de otra sesión escribiendo AHORA, no deuda de este repo. Vuelve a mirar cuando cierre"
else
bad "la MATRIZ ($SELF_ROOT) ha cambiado desde el último reparto — corre 'metodo update' en los clientes, o su copia sellada (y cualquier puntero a ella) va por detrás"
fi
fi
}
check_semaforo_forma() {

View File

@ -1281,3 +1281,75 @@ comando correcto puesto**: publicó un commit ajeno al empujar su fila. **Corri
`sirxavor` de autor**, así que **`git log --format=%an` NO distingue lo tuyo de lo ajeno**. El autor
no es un discriminante: lo son **el mensaje y la fecha** — o, mejor, **no adivinar**.
### C-162
`kubernetes` (incidencia), 2026-09-03: su primera pasada dio **«0 consultas en los 9 minutos»** y
**estuvo a punto de reportar que el DNS de producción había estado MUERTO durante el corte**. Era
falso: **`kubectl logs --timestamps` emite hora LOCAL con offset (`+02:00`), no UTC**, así que su
`grep '^…T07:4'` **no casaba nada** mientras las líneas decían `09:4`.
⇒ ⭐ **Lo cazó la INCOHERENCIA INTERNA, no mirar más**: **6.146 líneas en la ventana y 0 en cada
minuto no pueden ser las dos verdad.**
### C-163
`securizacion` (ejecución), 2026-09-03: **`systemctl is-active ufw` devuelve `active` mientras
`ufw status` devuelve `inactive`.** **La unidad cargada no es el cortafuegos encendido.** Su primera
medida usó `systemctl` y decía *«ufw active»* — **con eso habría CONFIRMADO la hipótesis de que el
bastionado tumbó el DNS**, que era falsa. ⇒ El testigo falso empujaba **en la dirección peligrosa**:
creerse protegido, o creer que has encontrado al culpable.
ⓘ Lo real, medido: `nft list ruleset` **vacío, ni una tabla**; `DEFAULT_OUTPUT_POLICY=ACCEPT`;
`ctime` de los ficheros de `ufw` del **31-ago**; **cero líneas `UFW BLOCK`**; y ni una entrada de
journal de `systemd-resolved`/`networkd`/NetworkManager en la ventana.
### C-164
Superadmin y ejecución de `securizacion`, 2026-09-03: **tres lecturas seguidas del orden de commits,
las tres equivocadas.** Primero las dos creyeron que el commit de la ejecución estaba **encima**;
luego la superadmin, **habiendo corrido la puerta un minuto antes**, dijo que el remoto había quedado
**justo debajo** de él. La puerta, corrida otra vez, dijo otra cosa las tres veces. ⇒ **Entre que
corres la puerta y vuelves a mirar, otra sesión ha commiteado encima: el orden CADUCA EN MINUTOS.**
### C-165
`MOT`, 2026-09-03: encargo *«copiar la configuración de un switch a otro»*, **parado antes de tocar
nada** — y por dos razones independientes. **(a)** No hay acceso: `Find-NetRoute` a `172.19.128.3`
sale por la **ruta por defecto**, **no hay ruta a `172.19.128.0/26`**, ni VPN ni interfaz. *(El ping
sería testigo débil; **la tabla de rutas no**, y la confirmación de Xavier cierra.)* **(b)** Y aunque
lo hubiera: **los dos equipos no son réplicas** — difieren en IP de gestión (`.3` vs `.4`) y
hostname, y el `.4` está etiquetado **`SWITCH_CLIENTES`**, otro papel. **Un volcado pegado en crudo
duplica la IP de gestión y corta el acceso por el que estás entrando.**
⛔ Y una tercera, del prompt que escribió la superadmin: **le dio las trampas de CLI de los Dell
N4032F** —paginador, `enable`, `terminal length 0`— **sobre unos switches cuyo modelo el repo no
documenta**; la credencial que sí hay (`manager`/`friend`) es **el par de fábrica de Allied
Telesis**. **Suposición de modelo presentada como dato.**
### C-166
`MOT`, 2026-09-03: una sesión iba a commitear volcados de switch con **hash de contraseña y comunidad
SNMP RW**. **La decisión que lo impedía existía, estaba escrita y era de un día antes** —Xavier, sobre
los snapshots del cluster del trabajo, con el motivo literal *«enable secrets, communities SNMP»*— y
**estaba en el árbol que esa sesión tenía delante**. ⇒ **No se aplicó sola**: hizo falta que otra la
trajera al caso nuevo. Con el precedente delante, Xavier eligió **aplicarlo**, y los tres `.txt`
quedaron **locales e ignorados**; sólo se versiona el `README.md` sin secretos.
⭐ Y el motivo quedó en **tres sitios que sobreviven a la sesión** —el `.gitignore`, el `README` y el
mensaje del commit—, **más la excepción explícita** de que `CREDENCIALES.md` sí va a propósito. ⇒ El
que mire mañana **no ve dos reglas opuestas: ve dos casos con la misma razón**.
### C-167
`poniente` y `securizacion`, 2026-09-03: Xavier contestó **la misma pregunta en dos sesiones**
(*«creo que ya lo ha hecho ella porque he respondido donde no era»*), y las dos podían registrar el
mismo hecho. **No hubo choque — y no fue por el criterio de desempate.** Lo que lo evitó es que **una
lo llevaba como ÍTEM DE BACKLOG y la otra lo elevó a `D`**. Si las dos lo hubieran registrado como
`D`, **habría habido conflicto aunque el criterio estuviera clarísimo**.
ⓘ Y lo que sí funcionó del reparto ya escrito: **citar y no reescribir**, **puntero y no copia**, y
**trasladar en las dos direcciones lo que cada una tenía y la otra no**, con autoría.
### C-168
La superadmin, 2026-09-03: **el gate del reparto estuvo ROJO durante horas en los 27 repos** porque
`C11` carea la copia vendorizada contra la **matriz VIVA** — y ella llevaba toda la tarde editándola.
**Ninguno de esos rojos era del repo que los mostraba**, y se limpiaban solos al repartir. Lo
señaló `poniente`, que **lo decía en cada commit en vez de silenciarlo** — que es lo que impide
acostumbrarse.

View File

@ -139,6 +139,26 @@ cuando **algo EXTERNO a ella tiene que estar de acuerdo**; y *externo* no signif
vez con más cuidado»*: significa **que llegue por una RUTA DISTINTA de la que la produjo**. No
volver a leerla — **volver a derivarla por otro camino**.
⛔ **UN FILTRO TEMPORAL MAL ZONIFICADO NO DA ERROR: DA CERO — y el cero se lee como AUSENCIA DEL
HECHO.** No es que la herramienta calle: **contesta que no hubo nada**, que es la respuesta más
peligrosa de todas porque cierra la investigación. *(cicatriz `C-162`)*
⇒ **Antes de concluir «no pasó nada» desde un filtro por hora, comprueba la ZONA HORARIA DEL
INSTRUMENTO** — no la del sistema, **la de la salida que estás filtrando**. Herramientas del mismo
stack no coinciden: unas emiten UTC y otras hora local con offset.
⇒ ⭐ **Y el control que lo cazó no fue mirar mejor: fue la INCOHERENCIA INTERNA.** *«Miles de líneas
en la ventana y cero en cada minuto de esa ventana»* **no pueden ser las dos verdad** — y esa
contradicción **está dentro de tus propios datos**, no exige un instrumento nuevo. ⇒ **Cuando un
recuento te dé cero, busca otro recuento del MISMO dato que tenga que cuadrar con él.**
⇒ ⛔ **Y su forma más peligrosa: EL INSTRUMENTO CONTESTA A UNA PREGUNTA PARECIDA Y CONFIRMA LO QUE
BUSCABAS.** *(cicatriz `C-163`: `systemctl is-active ufw` dice **`active`** y `ufw status` dice
**`inactive`** — **la unidad cargada no es el cortafuegos encendido**. La primera medida usó
`systemctl` y **habría confirmado una hipótesis falsa** sobre la causa de un corte en producción.)*
⇒ ⭐ **Lo que lo hace distinto de un testigo falso corriente es la DIRECCIÓN**: no te deja sin
respuesta, te da **la que esperabas**. Un testigo que niega se investiga; **uno que confirma cierra
la investigación**. ⇒ **Cuando una medida confirme tu hipótesis a la primera, pregúntale a otro
instrumento la MISMA pregunta** — y si los dos vienen del mismo subsistema, **no son dos**.
⇒ **Esto explica por qué «ten cuidado» no funciona, y por qué todo lo que este Método pide ES
EXTERNO**: el mutante, el control negativo, la predicción escrita **antes**, el careo contra el
artefacto, pedir el crudo. **No son disciplina: son un referente que no eres tú.**
@ -1079,6 +1099,26 @@ 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.
**EL CRITERIO DE DESEMPATE RESUELVE UN CONFLICTO; NO LO PREVIENE.** Acordar *«quién manda si
chocamos»* no impide chocar: **impide discutir después.** Lo que de verdad evita el choque es que
**sólo UN frente eleve el hecho a decisión y el otro lo lleve como PLAN hasta que se sepa.**
*(cicatriz `C-167`)*
⇒ ⭐ **Porque un backlog se reescribe sin coste y una `D` compromete.** **Dos `D` sobre el mismo
hecho ya son un problema de corpus AUNQUE LAS DOS DIGAN LO MISMO**, porque a partir de ahí
**divergen solas**: cada frente la enmienda con lo suyo y nadie carea las dos.
**Y preguntar sale más barato que arbitrar**: *«¿cuál es tu caso? el mío es éste y mi criterio de
desempate es aquél»* cuesta un mensaje; deshacer dos `D` divergentes cuesta un frente.
⛔ **Y UN ROJO PRESTADO ENTRENA A DESMENTIRLO — quien se acostumbra deja de ver el que sí es suyo.**
Un gate que enrojece **por causa ajena** no está midiendo a quien lo corre. *(cicatriz `C-168`: el
gate del reparto estuvo rojo **horas en los 27 repos** porque la matriz se estaba editando; **ninguno
de esos rojos era del repo que lo mostraba**.)*
**Un gate que depende del estado VIVO de otro repositorio tiene que distinguir los dos casos**:
*«hay trabajo en vuelo ahí fuera»* es una **nota**; *«hay deuda real en este repo»* **gatea**. Si no
los distingue, **el rojo verdadero llega a una pantalla que ya tenía uno**.
⇒ ⭐ Y mientras no se arregle, lo correcto es **lo que hizo quien lo sufrió: decirlo en cada commit
en vez de silenciarlo.** Un rojo ajeno **anunciado** no entrena a nadie; **uno callado, sí.**
⛔⛔ **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.
@ -1624,6 +1664,31 @@ lo han usado» — es «no se puede usar». Búscala.
- Si es de **producción** (p. ej. el `gre-sync` de c2et), no lo arregles a lo loco: anótalo como
bomba latente y encájalo en el plan de release (ver `incidente-produccion.md`).
**«COPIAR X A Y» PRESUPONE QUE Y ES UNA RÉPLICA DE X — Y CASI NUNCA LO ES.** La frase del encargo
esconde la pregunta que importa: **qué NO se copia**. Identidad de gestión, nombre, papel, lo que el
destino ya sirve y el origen no contemplaba. *(cicatriz `C-165`)*
⇒ ⛔ **Y el modo de fallo tiene una firma reconocible: el gesto se lleva por delante EL CAMINO POR EL
QUE ESTÁS ENTRANDO.** Pegar en crudo la IP de gestión del origen sobre el destino **te deja fuera del
equipo que estabas configurando**, y a partir de ahí no hay reversión remota.
⇒ ⭐ **Segunda ocurrencia el mismo día**: la plantilla de red de un nodo nuevo **no se copia de su
gemelo** porque una decisión vigente le prohíbe la ruta por defecto que el gemelo sí tiene. **Copiar
habría violado una `D` sin que nada fallara.**
**Antes de copiar nada: escribe la lista de lo que NO viaja, y que la ratifique quien manda.** Si
esa lista sale vacía, **no estás copiando: estás clonando**, y eso es otra tarea con otro nombre.
⛔ **UN PRECEDENTE ESCRITO NO SE APLICA SOLO: hace falta alguien que sepa que existe y lo traiga.**
Un corpus contesta preguntas; **no las hace**. La decisión que impedía publicar unos secretos estaba
escrita, era **de un día antes**, y vivía **en el árbol que la sesión tenía delante** — y aun así
**no habría entrado en la decisión** si nadie la cita. *(cicatriz `C-166`)*
⇒ ⭐ **Y por eso la pregunta útil no es «¿los saco?» sino «ayer decidiste X por ESTE motivo; ¿aplica
aquí, o este caso es distinto por ESTO?»** — la primera pide una orden, la segunda **pone la decisión
anterior a competir con el caso nuevo**, y deja al que decide la salida de decir *«aquí no»* **con
motivo**.
⇒ ⛔ **Y cuando dos casos se resuelven igual, escribe LA RAZÓN en los dos**, no sólo la regla: si sólo
viaja la regla, el que llegue verá **dos reglas** y ninguna forma de saber si son la misma. Con el
motivo, ve **un criterio y dos aplicaciones** — y sabe reconocer el tercer caso, que no estará escrito.
## 11. El orden de lo irreversible: añadir antes de quitar · *C14 (4 fuentes), promovido 2026-08-08*
Todo lo verificable ocurre **antes** del paso que no se deshace. Se **añade antes de quitar**, se
@ -1927,6 +1992,14 @@ git commit
commitear y publica **exactamente eso** —`git push origin <tu-sha>:main`—: lo que haya llegado
después **no sube**, y **no dependes de reconocerlo**. Si el remoto rechaza, es que alguien empujó
en medio: **entonces miras, y entonces decides**.
⇒ ⛔ **Y EL SHA NO BASTA SOLO: `git push origin <mi-sha>:main` sólo es seguro si `<mi-sha>^ ==
origin/main`.** Si tu commit no cuelga **directo** del remoto, lo que haya en medio **sube con él**
— el sha acota el techo, **no el suelo**. ⇒ **Eso se comprueba, no se supone**, y si no casa, **el
de abajo no es tuyo: para de verdad.**
⇒ ⭐ **Y el orden CADUCA EN MINUTOS.** *(cicatriz `C-164`: **tres lecturas seguidas del mismo orden,
las tres equivocadas** — incluida una hecha **un minuto después** de correr la puerta.)* Entre que
la corres y vuelves a mirar, **otra sesión ha commiteado encima**. ⇒ **La lectura de hace un rato no
vale para el `push` de ahora: se corre CADA VEZ, pegada al gesto.**
⇒ ⛔ **Y el resumen de los tres, que hay que llevar junto o se elige mal**: `-A` **se lleva otros