From e2c54dd3764427a5328c11b2fb487b03f21d42e5 Mon Sep 17 00:00:00 2001 From: sirxavor Date: Mon, 31 Aug 2026 19:59:59 +0200 Subject: [PATCH] chore(metodo): los merges no se juzgan, y C26 acota tambien por fecha Un punto de adopcion por SHA no acota en una historia divergente. Y el mensaje de un merge lo escribe git, no una sesion: excluido de C25 y C26. Sesion: superadmin Co-Authored-By: Claude Opus 5 (1M context) --- .metodo/CHECKSUMS | 2 +- .metodo/bin/metodo | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/.metodo/CHECKSUMS b/.metodo/CHECKSUMS index 6867805..3c45424 100644 --- a/.metodo/CHECKSUMS +++ b/.metodo/CHECKSUMS @@ -1,5 +1,5 @@ 4dc0daf48bbd6b7d1272de64411d33f777f5a78f9e41640db61a47d5aa3e5683 metodo.md -648a9dacc40d3649ef2e7a93b4227b74eff9479bd03ccab1c3dd6b0f757793bf bin/metodo +a2418f334e07ea47dee15db713f25bb619383e3ae41facb91ad07626fc440cec bin/metodo f89b71bdf31028b05075636c1763c964e379bc37a00e0357d1c23a4dd19c09aa workflows/README.md cc241bbecf9647c747b8525b3a6b527455cd50ca0312caa44bc3544342c8ac41 workflows/comunicacion-entre-sesiones.md 2b9037f6dd57b5598c70a676cb728556654f05d1c5b024e7b716864659f7b884 workflows/sesion-ejecucion.md diff --git a/.metodo/bin/metodo b/.metodo/bin/metodo index cd3117a..cd94edf 100644 --- a/.metodo/bin/metodo +++ b/.metodo/bin/metodo @@ -128,13 +128,23 @@ check_sesion_trailer() { [ -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; } n=0; mal=0 + # ⛔ 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 + # entra al hacer merge. Medido: un repo con 14 commits ajenos por delante quedó con esos + # 14 dentro del rango, y el gate rojo por trabajo de la víspera de otra persona. + # ⇒ Se filtra además por FECHA del commit sello: sólo se juzga lo posterior. + # ⛔ Y se excluyen los MERGES: su mensaje lo escribe `git`, no una sesión. Juzgarlos sería medir + # la salida de la herramienta y pedirle un dato que nadie tecleó. + local _fecha + _fecha=$(git -C "$ROOT" log -1 --format=%ct "$desde" 2>/dev/null) while read -r sha; do [ -z "$sha" ] && continue + [ -n "$_fecha" ] && [ "$(git -C "$ROOT" log -1 --format=%ct "$sha")" -lt "$_fecha" ] && continue n=$((n+1)) git -C "$ROOT" log -1 --format='%B' "$sha" | grep -qE '^Sesion:[[:space:]]*\S' || { 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 </dev/null) +$(git -C "$ROOT" rev-list --no-merges "$desde..HEAD" 2>/dev/null) EOF [ "$mal" -eq 0 ] && ok "$n commit(s) desde la adopción, todos dicen quién los hizo" } @@ -452,7 +462,10 @@ check_commits() { else range="HEAD"; since="" # sin marcador: repo nuevo → se juzga todo el historial fi - n=$(git -C "$ROOT" rev-list --count $range 2>/dev/null || echo 0) + # ⛔ Sin merges: su mensaje lo escribe `git`, no una persona ni una sesión. Juzgarlo es medir la + # salida de la herramienta y exigirle una forma que nadie tecleó. (2026-08-31: nueve rojos en un + # repo, todos merges automáticos.) + n=$(git -C "$ROOT" rev-list --no-merges --count $range 2>/dev/null || echo 0) [ "${n:-0}" -eq 0 ] && { skip "sin commits nuevos desde la adopción (nada que revisar)"; return; } # `semaforo` es un tipo PROPIO de esta casa, añadido el 2026-08-28 (`D109`, Xavier). No es # Vocabulario ampliado el 2026-08-30 con LAS CUATRO CAPAS del corpus (`avisos`, `bitacora`, @@ -492,7 +505,7 @@ check_commits() { fi bad "commit no-Conventional: \"$subj\" ($sha) (C25) — arréglalo, o decláralo en .metodo/EXCEPCIONES si ya está empujado" bad_c=$((bad_c+1)) - done < <(git -C "$ROOT" log --format="%h%x09%s" $range 2>/dev/null) + done < <(git -C "$ROOT" log --no-merges --format="%h%x09%s" $range 2>/dev/null) [ "$exc_c" -gt 0 ] && warn "C25: ${exc_c} commit(s) con EXCEPCIÓN DECLARADA en .metodo/EXCEPCIONES (historia ya empujada; NO perdona lo que venga después)" [ "$bad_c" -eq 0 ] && ok "los ${n} commit(s) desde la adopción siguen Conventional$([ "$exc_c" -gt 0 ] && printf ' (%s con excepción declarada)' "$exc_c")" }