feat(episode): TRAZA_lo-que-pas_S20260812.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: troubleshooting
Summary: EPISODIO 1 — schema_embedding: Lo que pasó
This commit is contained in:
Ember 2026-08-15 05:42:12 +00:00
parent 59a6c6ad79
commit 2d30899fa4

View file

@ -0,0 +1,47 @@
---
episode_id: "c7feb2a9-5489-4bbd-a45e-d783c61ad138"
puente_flat: "TRAZA_lo-que-pas_S20260812.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260812.PIPELINE_FIXES"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "NONE"
fase_proyecto: "operations"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 1 — schema_embedding: Lo que pasó"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-08-15T05:42:03.112754+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
**PAAV cerrado** — commit `00b45f1f`, en los tres remotos. Era lo que yo mismo señalé como lo que más rendía, y ya está.
## Lo que pasó
Ayer medí que PAAV llevaba **31.794 disparos sin un solo rechazo**, y el control positivo mostró por qué: su clasificador **sí reconocía** un borrado de raíz como catastrófico, y luego `aggregate_verdict` lo convertía en `PASS` igual que a un `ls`.
Hoy lo conecté. Ahora:
**Y verifiqué antes de tocar que esto no necesitaba tu firma:** `main()` imprime `allow` **incondicionalmente**, sin mirar el veredicto. PAAV es advisory puro. Implementarlo **no cambia lo que el sistema hace — cambia lo que sabe de sí mismo**. Promoverlo a bloqueante sigue siendo tuyo.
★ Insight ─────────────────────────────────────
**Mi propio test me frenó, que es exactamente para lo que lo escribí ayer.** Decía literalmente: *«el día que alguien implemente el veredicto, este test se pone rojo y obliga a actualizarlo»*. Ese día fue hoy y ese alguien fui yo — cinco casos en rojo. Un test que solo confirma lo que ya sabes es decoración; uno que te frena cuando cambias la premisa es infraestructura.
─────────────────────────────────────────────────
Al reescribirlo añadí el invariante que más importa: **`test_el_hook_sigue_permitiendo_todo`** ejecuta el hook por subproceso y verifica `allow`. Si PAAV pasara de advisory a bloqueante sin que nadie lo decida, ese test cae. Es la lección de B-26 convertida en guardia.
Y un bug mío que **cazó el test, no mi doble pasada**: usé `classification.rationale` cuando el campo es `reasoning`. Fallaba **solo** cuando el veredicto no era `PASS` — el camino que el stub nunca ejercitaba. El código muerto no tiene bugs; los tiene en cuanto revive.
**14/14** en su suite, **47/47** en las vecinas.
**Cerrado** — frentes A, B y C · **PAAV con veredicto real** · 13 commits en 3 remotos.
🟡 **Ejecutable aún** — conectar los 9 hooks con `.log` al helper · bug de `migration-manifest.py`.
**Tuyas** — promover PAAV a bloqueante (ahora sí tendría efecto) · los 18 perdidos · `sha` a Neo4j · D-4/D-5/D-6 · writer v1.2 · `APROBAR` VIGIL/AEGIS.
**Hice:** el guardián que veía el peligro y lo saludaba ya lo nombra. Sin tocar su comportamiento.
**Falta:** que decidas si además debe **actuar**. Ahora esa decisión sí tiene sentido, porque por primera vez tendrás datos reales de cuántas veces habría bloqueado.
**Mi consejo:** deja correr una semana y mira `paav_actions.jsonl`. Si la tasa de `BLOCKED` es baja (como el 2,1% de schema-embed), promoverlo es seguro. Si es alta, tendrás la evidencia para no hacerlo — que es igual de valioso.