Control negativo corrido: sobre un destino que si es repo git, el aviso sale 0
veces.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Re-estampado desde la matriz. Rail nuevo en §7: colocar una entrega convierte
el borrador en una copia derivada, y el borrador se borra en el mismo gesto.
Tres ocurrencias en cuatro dias. Testigo: no que el borrador este al dia — que
no exista.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Hasta hoy sólo viajaban la constitución y el linter. Un repo que se clona SOLO
no tiene la matriz al lado, así que el procedimiento del canal —el saludo
invertido y sus cinco líneas— no le llegaba por ningún camino.
Desde ahora `.metodo/workflows/` viaja con el repo, vigilado por CHECKSUMS y por
el check de deriva como el resto. Y el puntero del CLAUDE.md lleva a él.
⛔ El semáforo NO viaja: es un objeto vivo del árbol multi-repo, no un documento.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Re-estampado. Cambios del máster desde el reparto anterior:
- Entrega/Git: el límite del `git add` con ruta explícita (no protege si el
cambio ajeno está en el mismo fichero) · medir dos veces caza el arrastre.
- §7: el veredicto va en la PRIMERA PALABRA del campo · un `id` es ancla débil,
discrimina una cifra · la frontera «no ejecutes, delega» falla con el TEXTO, y
el criterio que sí para es «¿esto tiene un tipo de sesión propio?».
Sólo se toca .metodo/.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Re-estampado. El máster deja de citar repos concretos: 35 nombres propios
generalizados conservando el caso («el hub», «el edge», «el router de campo»,
«el MCP de build», «el motor de aprovisionamiento»). Ahora funciona de verdad
clonado en solitario, que es lo que su banner prometía desde el cutover.
Testigo: nombres 35→0, cicatrices 97→97, fechas 111→111, ids 52→52. Nada de
lo que enseña cada raíl se ha perdido; sólo el nombre que sólo significaba
algo en el árbol de origen.
Sólo se toca .metodo/.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Re-estampado. Cambios del máster:
- Entrega/Git: lo que caza un arrastre no es acordarse de mirar el diff, es
MEDIR DOS VECES y que los números no cuadren. El testigo es la discrepancia
entre dos medidas, que obliga a mirar sin depender de acordarse.
- (Y en el procedimiento del canal, fuera del máster: el testigo de cierre de
una sesión de ejecución se pide AL ENTREGAR, no después.)
Sólo se toca .metodo/.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Re-estampado. Tres raíles nuevos, los tres salidos de ejecutar una purga:
- Entrega/Git: `git add` con ruta explícita NO protege si el cambio ajeno está
en el MISMO fichero. Lo caza la puerta de los tres números, enrojeciendo por
causa ajena — y eso entrena a desmentir el gate.
- §7: el veredicto va en la PRIMERA PALABRA del campo, no al final. 14 filas no
empezaban por marca de cierre y sólo 3 estaban vivas.
- §7: un `id` es ancla DÉBIL; discrimina una cifra distintiva. Los falsos
negativos se ven; los falsos positivos aprueban un borrado y no se notan.
Sólo se toca .metodo/.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Re-estampado final de la jornada. Cambios del máster:
- §9: los principios de la comunicación entre sesiones.
- §1: la juntura entre dos sujetos · el testigo sin fuente nombrada · un
encuadre falso recluta los datos que lo contradicen.
- §7: capas de ARRANQUE y de CONSULTA (la bitácora sale del ritual) · la forma
del aviso · la unidad de medida es el TOKEN, no la línea.
- Entrega/Git: el push es un acto de ÁMBITO, con la autorización de Xavier
para cuando la orquestadora no está viva — y su límite: empujar no es decidir.
Cero raíles nuevos. Sólo se toca .metodo/.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Re-estampado de la copia vendorizada. Cambios del máster:
- §9: los principios de la comunicación entre sesiones.
- §1: la juntura entre dos sujetos, el testigo sin fuente nombrada, y que un
encuadre falso recluta los datos que lo contradicen.
- §7: capas de ARRANQUE y de CONSULTA (la bitácora sale del ritual), la forma
del aviso, y que la unidad de medida del corpus es el TOKEN, no la línea.
- Entrega/Git: el push es un acto de ÁMBITO.
Cero raíles nuevos. Sólo se toca .metodo/ — el corpus de este repo no.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Cambio del máster: `bin/metodo` admite `semaforo` como tipo Conventional. Nombra
las escrituras en el semáforo del árbol, que desde el 2026-08-28 vive en la
matriz y lo editan sesiones de todos los frentes.
metodo.md NO cambia en este re-estampado; sólo el linter y sus CHECKSUMS.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copia vendorizada al día con la matriz (metodo.md + linter, byte a byte).
Cambio del máster: dos enmiendas DENTRO de §9 (el canal entre sesiones cambia
el TRANSPORTE, no el CRITERIO; y la tensión nueva: la sesión más barata de
alcanzar es la que §9 prohíbe usar para verificar). 0 raíles nuevos.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
check_decisiones_en_backlog consume _id_scan (modo defnr) en vez de llevar su
propia copia del patrón, así que ya obedece a D101 (un D9b no cuenta como D9).
Las definiciones entran por -v y no como segundo fichero: con el truco NR==FNR y
la lista vacía la regla se tragaba el fichero entero y el check medía sobre la
nada, en silencio. Copia vendorizada: aquí NO se edita.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
_IDPFX gana B y M (medusa numera Mn, hermes-sitad Bn: el linter era ciego a los
dos corpus enteros) y la extracción de ids gana límite por la derecha: P9b no es
P9, E8.a no es E8, R5-bis no es R5, E2E no es un id. El reconocedor pasa a awk,
porque el límite no se puede expresar en un grep -oE sin lookahead. Y el censo
dice ahora lo que TIRA (sub-ids) y lo que NO ADMITE, en vez de callarlo.
Copia vendorizada: aquí NO se edita.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
check_ids admite la comilla invertida (veía 0 ids donde hay 130/118), parte el
veredicto en rojo-de-esquema-nuevo vs nota-con-conteo-legacy, y DICE cuántos ids
vio por fichero (anti-ceguera, con detector agnóstico de prefijo). El veredicto
final deriva palabra y rc del mismo número y IMPRIME el rc al lado de la palabra,
para que una tubería no se lo coma. Copia vendorizada: aquí NO se edita.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
metodo.md describe las CUATRO capas (backlog · decisiones · AVISOS · bitácora)
y la regla de refinement de D7; el linter estampa doc/decisiones.md en los init
nuevos y gana tres checks de la capa de decisiones.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
El Método ya viajaba completo a este repo desde el cutover del 2026-08-19, pero
se midió que en 9 de 18 repos NADA lo enrutaba: la copia llegaba y no la abría
nadie. Es el raíl §8 aplicado al propio Método — un fallo benigno solo protege
si alguien LEE la línea; una constitución solo gobierna si alguien la ABRE.
El puntero va a CLAUDE.md porque es el único fichero que el harness carga solo
en toda sesión sobre el repo; cualquier otro destino reproduce la enfermedad.
Bloque GESTIONADO entre marcadores (<!-- metodo:puntero -->): `metodo update`
sustituye sólo su interior y no toca un byte fuera — probado con diff contra
git en los dos CLAUDE.md ricos, e idempotente (3 updates, mismo md5).
Y su gate: `metodo check` gana `check_pointer` — el bloque existe y su destino
resuelve. Probado EN ROJO en los tres estados (sin CLAUDE.md, sin bloque,
destino inexistente) y con el código de salida moviéndose, que es lo que
separa un gate de un aviso que nadie lee.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
La fuente del Método pasa del árbol de trabajo a la matriz (repo `metodo`).
Esta copia deja de llevar los 10 raíles base EN UNA LÍNEA con un puntero a
`redes/workflows/metodo.md` — nombre viejo, ruta que en un clon ajeno no existe.
Ahora los raíles viajan COMPLETOS, con sus cicatrices, más el §0 «si no escala
no vale para nada» y el raíl de §8 del 2026-08-19 («un fallo benigno solo
protege si alguien LEE la línea»). Las 6 adiciones que estaban «pendientes de
inlinar» viven ya dentro de su raíl.
Estampado con `metodo update`: byte a byte idéntico al máster.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Estampada por 'metodo init' el 2026-08-12 (master 2026-08-08); sin commit no viaja al clonar (D1).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
El README describia un flujo que no existe: ./build.sh con Kaniko y un workflow de
Gitea Actions. Kaniko y Gitea Actions se estan retirando, y ademas este workflow
llevaba roto desde mayo -- era el unico del arbol que usaba actions/checkout@v4,
que necesita node, y el runner :host no lo tiene. Fallaba en 70 s en cada push sin
que nadie lo mirara: la imagen que sostuvo el correo 70 dias era del 20 de mayo.
Un CI que falla siempre y en silencio es peor que no tener CI, asi que se borra en
vez de dejarlo de adorno.
Se documenta el build con mcp-build (con el gotcha del image_name sin host, que
duplica el registro y muere con 401) y, sobre todo, POR QUE cada linea de la config
es la que es. Las cuatro que no se pueden tocar sin reabrir el incidente llevan su
sintoma exacto al lado, para que el siguiente que las vea raras sepa lo que cuesta
"limpiarlas": tlsmgr, el grupo sasl, el realm desde RELAY_AUTH_DOMAIN y chroot=n.
Y queda escrito como se prueba un cambio de esta imagen ANTES de desplegarlo, que
aqui no es opcional: desplegar es reiniciar el unico pod que sostiene el correo, y
si falla no hay alerta que lo diga porque la alerta ES el correo.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
El correo saliente de manabo.org lo sostenian cuatro cambios aplicados con
postconf/adduser sobre el contenedor vivo. Llevaban 70 dias fuera de git: el
primer rollout restart, reschedule o actualizacion del Image Updater los borraba
y el relay volvia a quedar mudo -- sin aviso posible, porque la alerta ES el
correo.
La lista no se copio del README: se midio. Se arranco un contenedor de la imagen
que corre hoy (digest 38ebbe1d) y se diffeo su postconf -n/-M contra el pod vivo.
Son SEIS cambios, no cuatro:
master.cf falta el daemon tlsmgr -> smtpd ANUNCIA STARTTLS en el EHLO y luego
no puede hacerlo: 454 4.7.0 TLS not available due to local problem
master.cf falta postlog/postlogd -> Postfix escribe a syslog, aqui no hay
ninguno y kubectl logs sale VACIO (el incidente se diagnostico a
ciegas)
master.cf chroot y->n en los 20 servicios
main.cf falta maillog_file = /var/log/postfix.log
main.cf smtpd_sasl_local_domain: $myhostname -> el dominio real
Dockerfile postfix no estaba en el grupo sasl -> /etc/sasldb2 es root:sasl 0640
y smtpd no puede abrirlo: 454 Temporary authentication failure
Dos matices sobre lo que estaba anotado:
El chroot no se "pobla desde el build", se DESACTIVA. En el pod vivo
/var/spool/postfix/etc sigue vacio con fecha Mar 6 2024: nadie lo poblo nunca.
Poblarlo habria metido un mecanismo jamas ejercitado y dejado fuera el que
sostiene el correo. En un contenedor el chroot no aporta nada: el contenedor ES
el jail.
El realm no se fija a pelo en main.cf sino desde RELAY_AUTH_DOMAIN en el
entrypoint, que es la misma variable con la que saslpasswd2 crea la entrada del
sasldb. Declarados aparte pudieron divergir en silencio, y eso es exactamente lo
que causo el fallo de autenticacion.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Manual chmod 1730 on maildrop caused postsuper scan_dir_push failures
because the group (postdrop) lacked read permission. Let Postfix set
the exact permissions it expects via set-permissions.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Move build.sh to scripts/build.sh (convention from project-template)
- Add .gitea/workflows/build.yml: triggers on push to main when
Dockerfile or config files change, builds :dev tag via Kaniko
- Every push → CI builds harbor.manabo.org/library/smtp-relay:dev
→ ArgoCD Image Updater detects new digest → deploys to hermes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Postfix relay image with Cyrus SASL (sasldb2) authentication.
Replaces mwader/postfix-relay with a controlled image built via Kaniko and
stored in Harbor. Credentials injected from Vault ExternalSecret at startup.