chore(metodo): reparto — C26 ya lee EXCEPCIONES (valvula que le faltaba)

C26 nacio sin la consulta a .metodo/EXCEPCIONES que C25 tiene desde el
29-ago: el primero que empujara un commit sin trailer dejaba su repo en
rojo permanente. Lo encontro poniente en carne propia.

Y la correccion obvia (copiar las dos lineas de C25) no habria valido: el
sha de C26 es LARGO y el de C25 CORTO, asi que la consulta copiada no casa
nunca y deja el gate rojo en silencio. Se compara por prefijo.

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-02 13:04:54 +02:00
parent 3c1cbee9bf
commit ff24977713
2 changed files with 7 additions and 2 deletions

View File

@ -1,5 +1,5 @@
4cc8cf392fa0d4811058bf2013137f082c53e195ff5200d21d4992a7493e66c8 metodo.md 4cc8cf392fa0d4811058bf2013137f082c53e195ff5200d21d4992a7493e66c8 metodo.md
de8ecd52846a0b0e6bf8a83b983116e3b9796a57fe7e6b4931b2b79978f8b48c bin/metodo fb7e88324524184b9f685c49c0bbcc6c9a55beb07bb5c0b1b31cd29c51c4117f bin/metodo
f89b71bdf31028b05075636c1763c964e379bc37a00e0357d1c23a4dd19c09aa workflows/README.md f89b71bdf31028b05075636c1763c964e379bc37a00e0357d1c23a4dd19c09aa workflows/README.md
cc241bbecf9647c747b8525b3a6b527455cd50ca0312caa44bc3544342c8ac41 workflows/comunicacion-entre-sesiones.md cc241bbecf9647c747b8525b3a6b527455cd50ca0312caa44bc3544342c8ac41 workflows/comunicacion-entre-sesiones.md
2b9037f6dd57b5598c70a676cb728556654f05d1c5b024e7b716864659f7b884 workflows/sesion-ejecucion.md 2b9037f6dd57b5598c70a676cb728556654f05d1c5b024e7b716864659f7b884 workflows/sesion-ejecucion.md

View File

@ -127,7 +127,7 @@ check_sesion_trailer() {
desde=$(grep -E '^sesion_desde:' "$md/VERSION" 2>/dev/null | sed 's/sesion_desde:[[:space:]]*//') desde=$(grep -E '^sesion_desde:' "$md/VERSION" 2>/dev/null | sed 's/sesion_desde:[[:space:]]*//')
[ -n "$desde" ] || { info "sin punto de adopción todavía — se sella en el próximo 'metodo update'"; return 0; } [ -n "$desde" ] || { info "sin punto de adopción todavía — se sella en el próximo 'metodo update'"; return 0; }
git -C "$ROOT" cat-file -e "$desde^{commit}" 2>/dev/null || { skip "el punto de adopción $desde no existe en este repo"; return 0; } git -C "$ROOT" cat-file -e "$desde^{commit}" 2>/dev/null || { skip "el punto de adopción $desde no existe en este repo"; return 0; }
n=0; mal=0 n=0; mal=0; local exc=0 excf="$ROOT/.metodo/EXCEPCIONES"
# ⛔ Un punto de adopción por SHA NO acota en una historia DIVERGENTE: `X..HEAD` incluye # ⛔ Un punto de adopción por SHA NO acota en una historia DIVERGENTE: `X..HEAD` incluye
# todo lo no alcanzable desde X — incluido trabajo ANTERIOR a X hecho en otra rama, que # todo lo no alcanzable desde X — incluido trabajo ANTERIOR a X hecho en otra rama, que
# entra al hacer merge. Medido: un repo con 14 commits ajenos por delante quedó con esos # entra al hacer merge. Medido: un repo con 14 commits ajenos por delante quedó con esos
@ -142,10 +142,15 @@ check_sesion_trailer() {
[ -n "$_fecha" ] && [ "$(git -C "$ROOT" log -1 --format=%ct "$sha")" -lt "$_fecha" ] && continue [ -n "$_fecha" ] && [ "$(git -C "$ROOT" log -1 --format=%ct "$sha")" -lt "$_fecha" ] && continue
n=$((n+1)) n=$((n+1))
git -C "$ROOT" log -1 --format='%B' "$sha" | grep -qE '^Sesion:[[:space:]]*\S' || { git -C "$ROOT" log -1 --format='%B' "$sha" | grep -qE '^Sesion:[[:space:]]*\S' || {
# ⛔ El sha de C26 viene de `rev-list` y es LARGO; el de C25 de `--format=%h` y es CORTO.
# Copiar la consulta de C25 tal cual NO casa NUNCA y el gate se queda rojo en silencio.
# ⇒ se compara por PREFIJO (>=7) para admitir las dos formas. Medido con control negativo.
if [ -f "$excf" ] && awk -v s="$sha" '$1=="C26" && length($2)>=7 && index(s,$2)==1 {f=1} END{exit !f}' "$excf"; then exc=$((exc+1)); continue; fi
bad "commit sin 'Sesion:' — $(git -C "$ROOT" log -1 --format='%h %s' "$sha" | cut -c1-60) (C26) — si lo hiciste A MANO, vale 'Sesion: xavier'; si aún no está empujado, un 'git commit --amend' sobre TU commit lo cierra sin excepciones"; mal=$((mal+1)); } bad "commit sin 'Sesion:' — $(git -C "$ROOT" log -1 --format='%h %s' "$sha" | cut -c1-60) (C26) — si lo hiciste A MANO, vale 'Sesion: xavier'; si aún no está empujado, un 'git commit --amend' sobre TU commit lo cierra sin excepciones"; mal=$((mal+1)); }
done <<EOF done <<EOF
$(git -C "$ROOT" rev-list --no-merges "$desde..HEAD" 2>/dev/null) $(git -C "$ROOT" rev-list --no-merges "$desde..HEAD" 2>/dev/null)
EOF EOF
[ "$exc" -gt 0 ] && warn "C26: ${exc} commit(s) con EXCEPCIÓN DECLARADA en .metodo/EXCEPCIONES (historia ya empujada; NO perdona lo que venga después)"
[ "$mal" -eq 0 ] && ok "$n commit(s) desde la adopción, todos dicen quién los hizo" [ "$mal" -eq 0 ] && ok "$n commit(s) desde la adopción, todos dicen quién los hizo"
} }