ember-memory-test/episodes/DEPURA_hallazgo-statefact-guard-es-posttooluse_S20260718.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md
Ember 428a5d6237 feat(episode): DEPURA_hallazgo-statefact-guard-es-posttooluse_S20260718.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: NONE | Type: design
Summary: EPISODIO 1 — MNEMO_PRE_DIGEST: 🛑 Hallazgo: `statefact-guard` es **PostToolUse**
2026-07-18 22:49:20 +00:00

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).