feat(episode): DEPURA_a-la-ley-se-carga-sola_S20260726.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: chronicle
Summary: EPISODIO 2 — MNEMO_PRE_DIGEST: A — La ley se carga sola
This commit is contained in:
Ember 2026-07-27 03:23:47 +00:00
parent 0e9fb335c3
commit 2500e13d09

View file

@ -0,0 +1,60 @@
---
episode_id: "d1852a45-7b6a-4c69-a3ba-c6a2c6fc966d"
puente_flat: "DEPURA_a-la-ley-se-carga-sola_S20260726.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260726.ARCO_CICLO4_AUTOMEJORA"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "NONE"
fase_proyecto: "operations"
tipo_semantico: "chronicle"
summary_one_line: "EPISODIO 2 — MNEMO_PRE_DIGEST: A — La ley se carga sola"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-07-27T03:23:33.402859+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
Commit `7a1732e8`, push 3/3. **A y B completados.**
—
## A — La ley se carga sola
`@rules/mini/dos-vias-memoria.md` está en la línea 74 de `CLAUDE.md` (36 imports totales). **A partir del próximo arranque, ninguna instancia tendrá que acordarse de buscarla: llega ya cargada.**
Detalle que me hizo gracia: el permiso temporal **caducó** mientras yo cumplía otros guardrails (leer dos mapas). El TTL de 5 minutos hizo exactamente su trabajo — tuve que renovarlo y editar en el acto.
## B — El muro
`pre-tool-dos-vias-guard.py` **deniega** tocar el sustrato de ingestión sin haber leído la ley en ese turno.
**Qué protege:** `ember-outbox.service` · `outbox_dispatcher` · `qdrant_worker` · `crisol_run`, y los comandos `--only …qdrant|neo4j`, `systemctl …ember-outbox`, `INSERT …episode_outbox`, `UPDATE …qdrant_state`.
**11/11 pruebas verde**, con el caso del incidente incluido:
★ Insight — por qué un muro y no una regla ─────────
El árbol de decisión del ecosistema pregunta primero: *"¿debe ser imposible de saltarse?"*. Aquí la respuesta es sí, y la prueba es incómoda: **ayer la regla YA EXISTÍA**, declarada en un docstring, a **dos líneas** del código que estaba editando. Tenía toda la información necesaria y aun así introduje un segundo escritor en producción.
Una regla depende de que yo me acuerde de leerla. Un muro no depende de mí. Eso es exactamente lo que pediste cuando dijiste *"sin importar el modelo de LLM"*.
─────────────────────────────────────────────────
**Y lo que NO hice:** no lo registré en `settings.json`. Ese archivo es intocable sin tu GO explícito (tu directiva de julio). El muro está **fabricado, probado y desactivado**. Para activarlo, la línea va en el bloque `PreToolUse`:
*(ese comando solo **muestra** cómo están registrados los actuales, para que decidas con el formato a la vista — no modifica nada)*
—
**Hice** — **A**: la ley DV se carga en cada arranque (`CLAUDE.md:74`, con respaldo y presencia declarada). **B**: fabriqué el muro mecánico con 11 pruebas verde, tras confirmar el gap con **dos fuentes** del grafo de hooks (`AR-AP7`). Commit `7a1732e8`, push 3/3.
**Falta** — 🔴 **tu GO para registrar el muro en `settings.json`**: hasta entonces está inerte · 🟠 `ember_inner` sigue esperando tu shell · 🟠 los 17 de pérdida real · ⏰ writer v1.2.
**Mi consejo** — activarlo. Un muro sin registrar es documentación cara: tiene todo el coste de fabricación y cero efecto. Y su diseño es conservador — *fail-open* absoluto, solo dispara sobre nombres inequívocos, y trae override de emergencia con caducidad. El riesgo de activarlo es bajo; el de no hacerlo ya lo medimos ayer.
**Para avanzar, elige:**
- 🟢 **A** *(recomendado)* — dame el GO y registro el muro en `settings.json` (con respaldo y verificación)
- 🟡 **B** — lo dejas inerte y lo revisas tú antes de decidir
- ⚪ **C** — cerramos aquí; hoy fue una jornada larga y todo quedó documentado
—