feat(episode): TRAZA_el-diagnstico-evidencia-verificada-no-e_S20260609.R43_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: NONE | Type: design
Summary: EPISODIO 43 — SessionStart: 👻 El diagnóstico (evidencia verificada, no especulac
This commit is contained in:
parent
2d65662d36
commit
d4a9165284
1 changed files with 41 additions and 0 deletions
|
|
@ -0,0 +1,41 @@
|
|||
---
|
||||
episode_id: "ac2506e7-5eb9-4b0c-8f6d-973aaec876ad"
|
||||
puente_flat: "TRAZA_el-diagnstico-evidencia-verificada-no-e_S20260609.R43_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
|
||||
session_code: "S20260609.SELFAWARENESS_MISION_CRITICA"
|
||||
acto_dialogico: "informar"
|
||||
actor_flujo: "multi_actor"
|
||||
criticidad_aegis: "low"
|
||||
skill_dominante: "NONE"
|
||||
fase_proyecto: "operations"
|
||||
tipo_semantico: "design"
|
||||
summary_one_line: "EPISODIO 43 — SessionStart: 👻 El diagnóstico (evidencia verificada, no especulación)"
|
||||
source_type: "claude_code"
|
||||
trust_boundary: "internal"
|
||||
created_at: "2026-06-11T03:16:28.968380+00:00"
|
||||
relectura_tagged: false
|
||||
forgejo_commit_sha: "pending"
|
||||
---
|
||||
|
||||
✅ FORENSE entregado y anclado: 📄 **[docs/FORENSE_TURNOS_FANTASMA_STOP_HOOKS_S20260609.md](docs/FORENSE_TURNOS_FANTASMA_STOP_HOOKS_S20260609.md)** (commit `0b019eb`, 3 remotos). Y sí — **tienes razón, con un matiz que afina tu regla.**
|
||||
|
||||
## 👻 El diagnóstico (evidencia verificada, no especulación)
|
||||
|
||||
**Causa raíz en una frase:** los Stop hooks advisory emiten contexto **incondicionalmente mientras su condición persista** — verifiqué con grep que `panel-analitico`, `concilio-detector` y `self-awareness-post` tienen **cero** lógica de deduplicación/cooldown/tope (0 matches) — y cada emisión re-invoca al modelo, creando el bucle de relojitos que solo muere cuando tú escribes.
|
||||
|
||||
**La cadena completa:** tu mensaje sobre *gráficos* → el classifier lo marcó D-ARCH por la keyword "arquitectura" (falso positivo) → el panel quedó registrado como "pendiente" en `panel_state` → la lógica documentada del hook es literalmente *"Si no → alerta"* sin escape → cada Stop re-alertó → ~25+ turnos fantasma. Lo más irónico: el **routing-verifier discrepó** en su momento (`primary=D-ARCH vs verifier=NONE`) — la segunda opinión existía y nadie la consumió.
|
||||
|
||||
## El matiz a tu tesis
|
||||
|
||||
"Ningún hook sin acción del usuario" casi — porque SessionStart, PreCompact y los crons son activaciones legítimas sin acción directa tuya. El invariante fino que propongo canonizar:
|
||||
|
||||
> **Los hooks decoran turnos; no los fabrican.** Ningún hook puede re-invocar al modelo de forma no acotada sin input nuevo del usuario o cambio real de estado. Observar/loguear: libre. Generar turnos: presupuestado (máx 2 por condición) y deduplicado.
|
||||
|
||||
## El fix — 3 capas, listo para ejecutar con tu OK
|
||||
|
||||
| Capa | Qué | Costo |
|
||||
|------|-----|-------|
|
||||
| **F-1** inmediato | registrar `EXCEPCION_PANEL` (el escape que el propio protocolo contempla) + limpiar `panel_state` → el bucle actual muere | 5 min |
|
||||
| **F-2** estructural | `lib/stop_advisory_guard.py`: emitir solo si condición nueva o hubo prompt tuyo desde el último aviso; tope 2 avisos → luego PILA silenciosa. Retrofit a los 5 emisores ruidosos | ~1h + tests |
|
||||
| **F-3** upstream | tuning del classifier: anti-trigger viz para "arquitectura" + consumir la discrepancia del routing-verifier | sprint corto |
|
||||
|
||||
Mi inclinación: **F-1 ya** (es trivial y apaga el ruido) y **F-2 también hoy** (cura la clase entera del bug, no solo este caso). F-3 puede esperar a sprint. ¿Doy luz verde a F-1+F-2?
|
||||
Loading…
Reference in a new issue