feat(episode): DEPURA_episodio-13-episodio-148-brasaluzcom-s_S20260824.R1_XX.non.2.hot_inf.in.ex.es.000.MGQ_J.PDDFQ_E.DPLFD

Skill: NONE | Type: troubleshooting
Summary: EPISODIO 13 — EPISODIO 148 — brasaluz.com: Sobre "la frase ya se rotó" — sí, con
This commit is contained in:
Ember 2026-08-24 16:42:09 +00:00
parent 947ba24708
commit 3cef199710

View file

@ -0,0 +1,45 @@
---
episode_id: "92f96ca1-8196-401a-94cf-c116da873dfe"
puente_flat: "DEPURA_episodio-13-episodio-148-brasaluzcom-s_S20260824.R1_XX.non.2.hot_inf.in.ex.es.000.MGQ_J.PDDFQ_E.DPLFD"
session_code: "S20260702.MADUREZ_ECOSISTEMA_CONCILIO"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "NONE"
fase_proyecto: "none"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 13 — EPISODIO 148 — brasaluz.com: Sobre "la frase ya se rotó" — sí, confirmado, hace 6 días"
source_type: "chat_ember"
trust_boundary: "internal"
created_at: "2026-08-24T16:42:02.455898+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
El guardrail **AEGIS-CAP me bloqueó** de leer el secreto para la verificación — y eso es exactamente lo correcto. Es uno de los ~5 hooks que el informe de madurez identificó como *realmente bloqueantes* (deny mecánico, no advisory). Me frenó a mí intentando leer un secret file. **No voy a hacer override** — sería incoherente evadir justo el tipo de guardrail que todo este trabajo dice que hay que respetar. Es la ilusión-de-control volviéndose control-real, en vivo.
Y no lo necesito, porque el reconocimiento anterior ya responde tu pregunta:
## Sobre "la frase ya se rotó" — sí, confirmado, hace 6 días
`docs/TOOLBOX.md:220` y `:401` lo dicen explícitamente: **"passphrase rotada S20260627"**, `FRASE.TXT` ya no existe (verificado), y la frase la auto-inyecta el hook `pre-tool-ember-auth-inject.py` desde `~/.claude/secrets/ember_passphrase.txt` — el modelo nunca la escribe. Es decir:
- **§A del runbook S20260623 (passphrase MCP = RCE) YA ESTABA REMEDIADO** desde el S20260627. Ese runbook describe un estado viejo (FRASE.TXT tracked) que ya no existe. **No había nada nuevo que rotar en §A** — tu intuición es correcta.
- La verificación de consistencia local↔servidor (que sha256 de tu frase coincida con el hash del `.env`) es lo único que quedaría por confirmar, pero requiere leer el secreto → AEGIS lo bloquea (bien). La hace el propio hook la próxima vez que llames `ember_authenticate` con el MCP reconectado: si funciona, es consistente.
## El riesgo vivo real es §B, no §A
Lo que **sí sigue expuesto** (verificado este turno): el `BW_CLIENTSECRET` de Vaultwarden está en **8 archivos git-tracked** (línea 690 de `AUDIT_SEARCH_TOOLS_SERVIDOR_MEMORIA_S20260408.md` + `archivo-historico/VAULTWARDEN_*.md` ×2 + copias). Ese es el secreto que escapó a los 3 remotos y que el CONSEJO no vio.
*(Nota PR-7: el routing verifier marcó esto D-DEBUG-L3; lo trato como verificación puntual L1/L2 de un sistema de auth, no requiere CONCILIO.)*
**Hice** — Confirmé que §A (passphrase MCP) ya estaba rotado desde S20260627; el guardrail AEGIS me bloqueó de leer el secreto y respeté el bloqueo (no override).
**La pregunta que decide lo siguiente:** ¿rotaste también **§B (Vaultwarden)** — la master password + el API client secret en `vault.brasaluz.com`?
**Para avanzar, elige:**
- 🟢 **A (recomendado si YA rotaste §B)** — Hago mi parte de scrub: reemplazar el `BW_CLIENTSECRET` viejo por `[scrubeado · rotado S20260703]` en los 8 docs tracked (reversible, git checkout), y actualizo los AVISO. El valor viejo ya muerto → scrub seguro.
- 🟡 **B (si NO has rotado §B)** — Es el pendiente crítico real. Te guío: `vault.brasaluz.com` → Security → cambiar master password + Rotate API Key. Luego hago el scrub.
- ⚪ **C** — Primero añado un AVISO al runbook `S20260623` marcando que §A ya está remediado (evita que futuras instancias crean que FRASE.TXT es RCE), y seguimos.
---