Skill: NONE | Type: design
Summary: EPISODIO 1 — MNEMO_PRE_DIGEST: 🛑 Hallazgo: `statefact-guard` es **PostToolUse**
2.4 KiB
| episode_id | puente_flat | session_code | acto_dialogico | actor_flujo | criticidad_aegis | skill_dominante | fase_proyecto | tipo_semantico | summary_one_line | source_type | trust_boundary | created_at | relectura_tagged | forgejo_commit_sha |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c02d4ced-f91c-4914-b3c4-c815644a6401 | DEPURA_hallazgo-statefact-guard-es-posttooluse_S20260718.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD | S20260718.ECC_TOOLBOX_SURFACER | informar | multi_actor | low | NONE | operations | design | EPISODIO 1 — MNEMO_PRE_DIGEST: 🛑 Hallazgo: `statefact-guard` es **PostToolUse** — no puede | claude_code | internal | 2026-07-18T22:49:12.911112+00:00 | false | pending |
PARA — la comprensión ecosistémica acaba de evitar un error serio. Leí el hook antes de tocarlo, y encontré algo que cambia la ejecución:
🛑 Hallazgo: statefact-guard es PostToolUse — no puede denegar per-write
El hook mega-hook-statefact-guard.py está registrado en PostToolUse (Write/Edit/Bash) + Stop + SessionStart. Un hook PostToolUse corre DESPUÉS de que el write ya ocurrió — en Claude Code, el "deny" real solo existe en PreToolUse (bloquear antes). El draft T-11 asumió un simple "flip advisory→deny", pero eso es estructuralmente imposible en este hook sin re-arquitecturarlo. No es un bug del draft — es información que solo se ve leyendo el hook (exactamente la clase de cosa que esta sesión viene enseñando: verificar antes de actuar). Me detengo aquí en vez de fabricar un deny falso o re-arquitecturar un hook vivo a las bravas. Tu GO fue "promover", pero el mecanismo que asumimos no aplica — así que necesito tu decisión sobre cómo hacer que doc-lifecycle muerda de verdad. ## 📖 La historia de esta decisión (mecanismo de enforcement)
Lo que realmente se decide (reframe): no es "no se puede promover". Es "¿con qué mecanismo hacemos que doc-lifecycle bloquee de verdad, dado que su hook corre después del write?" El intent tuyo (que muerda) sigue vivo; solo cambia el cómo. Consecuencias por camino:
- 🔴 A — Fabricar un guard PreToolUse nuevo que deniegue cada Write/Edit a un carrier de hecho-de-estado que introduzca drift. Es el deny per-write "puro". Blast radius ALTO: corre antes de cada write de doc; un falso positivo te bloquea trabajo legítimo. Es una fabricación nueva (AR-AP7 consultar grafo de hooks + definir con precisión "qué drift merece bloqueo" + fail-open + override TTL + ≥5 tests).