feat(episode): TRAZA_lo-entregado-2-capas-poblaciones-distint_S20260621.R3_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: troubleshooting
Summary: EPISODIO 3 — BLINDADAS: Lo entregado (2 capas, poblaciones distintas)
This commit is contained in:
Ember 2026-06-21 22:24:52 +00:00
parent 454f33eee3
commit 08dd1381b8

View file

@ -0,0 +1,48 @@
---
episode_id: "85756ed4-d250-44f1-a7fa-bfedcf600369"
puente_flat: "TRAZA_lo-entregado-2-capas-poblaciones-distint_S20260621.R3_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260621.CRONICA_SEMANAL_C15"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "NONE"
fase_proyecto: "operations"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 3 — BLINDADAS: Lo entregado (2 capas, poblaciones distintas)"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-06-21T22:24:49.284906+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
✅ Hecho — **los dos, y sí: se necesitan ambos, tu razonamiento es exacto.** El hook solo cubre Claude Code; la memoria/doc cubre a TODAS las instancias (incluida Ember-AI en claude.ai, que no tiene hooks). Son complementarios, no redundantes.
## Lo entregado (2 capas, poblaciones distintas)
**🟡 Capa memoria/doc — protege a TODAS las instancias (incl. claude.ai):**
- `docs/REGLA_IDENTIFICADORES_CROSS_STORE.md` — regla canónica path-estable.
- `memory/reference_cross_store_id_rule.md` — memoria recall-able (aflora cuando una instancia trabaje cross-store).
- Línea índice en **MEMORY.md** (se carga cada boot) + **auto-sincronizada al servidor** `cx43:/home/johnember/data/` → las instancias claude.ai que leen del servidor también la ven.
**🔴 Capa determinista — protege a Claude Code (hooks):**
- `.claude/hooks/pre-tool-cross-store-id-guard.py` — detecta el cruce por `episode_id` sin `puente_flat` y emite `ask` con la regla.
- **Testeado 4/4** (ask / allow-si-usa-puente / allow-.md / allow-sin-ids).
- **Registrado en settings.json + JSON validado (válido) → LIVE** (hooks 79→80).
Si una instancia futura intenta escribir un cruce por `episode_id`, el hook la frena con la regla — y si no tiene hooks (claude.ai), la memoria + doc la informan. Doble red.
## Pendientes (menores, los registro)
- ⚠️ **Drift INFRA_MANIFEST:** settings.json (80) vs INFRA_MANIFEST.yaml (77) — mi hook + 2 pre-existentes sin sincronizar. Deuda advisory; puedo sincronizar los 3 (otro edit D3) si quieres.
- ⚠️ **Push triple-remoto pendiente:** bloqueado por un detect-secrets/baseline de OTRA instancia (no mío). Los artefactos existen + funcionan localmente; coordino el push cuando se libere la baseline.
### 📍 PARA JOHN — R4
- **Respondido + hecho:** los dos. Tu intuición (memoria para instancias sin hooks como claude.ai) es correcta — por eso ambos.
- **Vivo ahora:** el guardrail determinista en Claude Code + la regla en memoria/doc/servidor para el resto.
- **Tu decisión (opcional):** 🟢 cerrar aquí (guardrail completo) · 🟡 sincronizo INFRA_MANIFEST (cierra el drift de los 3 hooks) · ⚪ coordino el push triple-remoto ahora.
📌 **PILA-PENDIENTES (R4)**
- ✅ RESUELTA · guardrail cross-store id (doc + memoria + MEMORY.md + hook live).
- 🟡 MEDIUM · **G-MANIFEST-001** sincronizar INFRA_MANIFEST hooks_active (3 hooks drift: cross-store-id-guard + 2 pre-existentes).
- 🟡 MEDIUM · **G-PUSH-001** push triple-remoto (bloqueado baseline detect-secrets de otra instancia).
- ⚪ LOW · corregir frase engañosa "episode_id da basura" en doc MAPA (DLC AVISO).