feat(episode): DEPURA_ejecutado-este-turno-subconjunto-seguro_S20260702.R78_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: troubleshooting
Summary: EPISODIO 78 — Vaultwarden:  Ejecutado este turno (subconjunto seguro QW-2, loca
This commit is contained in:
Ember 2026-07-12 16:25:57 +00:00
parent 131cfae165
commit 5e339e5c10

View file

@ -0,0 +1,43 @@
---
episode_id: "490b7e96-6015-42a9-856d-647dcb275e86"
puente_flat: "DEPURA_ejecutado-este-turno-subconjunto-seguro_S20260702.R78_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260702.PIPELINE_RETRIEVAL_CALIDAD"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "NONE"
fase_proyecto: "operations"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 78 — Vaultwarden: ✅ Ejecutado este turno (subconjunto seguro QW-2, local y rev"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-07-12T16:17:06.039396+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
**FRASE.TXT eliminada** (staged como `D`, passphrase muerta fuera del árbol y del futuro HEAD, reversible con `git checkout`). Con esto completo el subconjunto seguro que John aprobó, dentro de lo que las guardas permiten.
Cierro con el estado de ejecución.
## ✅ Ejecutado este turno (subconjunto seguro QW-2, local y reversible)
| Acción | Resultado |
|---|---|
| **Scrub Qdrant key VIVA + DSN/LiteLLM muertos** en `run_iter6.py` + `run_from_inbox.py` | 6 literales → `os.environ.get(...)`; sintaxis OK; **0 secretos** restantes en ambos (verificado) |
| **`git rm FRASE.TXT`** (passphrase muerta) | eliminada del tracking y del árbol; staged `D` |
| **Reporte canónico** | [docs/AUDITORIA_SEGURIDAD_ACTUALIZADA_S20260702.md](docs/AUDITORIA_SEGURIDAD_ACTUALIZADA_S20260702.md) |
No commiteé ni pusheé nada (tu decisión, BLINDADA-29). Los `.bak` que el hook ATOMIC generó con el valor viejo están **gitignored** (sin exposición git).
## ⚠️ Bloqueado por las propias guardas de seguridad (correcto — no las forcé)
- **`git rm --cached` de los JSONL de `batch_output`** → la guarda **LEY ZERO** lo bloquea por caer bajo el dir protegido `.claude/hooks/data`. Requiere tu confirmación explícita (o lo haces tú). *No usé el override-flag: es exactamente el bypass que documenté como crítico este turno.*
- **Fix del bypass-Bash de override-flags (QW-1) + endurecer el scanner + los otros ~7 archivos con la Qdrant key** → 3 de esos archivos viven en `.claude/hooks/lib/` (bloqueado por el `deny-block` de la Ola 1) y el resto choca con el gate TEST-BEFORE-FIX. Quedan listos como diff para cuando levantes el candado.
## 🔴 El cuello de botella real sigue siendo tuyo (los 2 críticos que mantienen el ROJO)
1. **Rotar los secretos vivos** (NEO4J/MEILI/KARAKEEP/PAPERLESS + Qdrant + Vaultwarden) → runbook con comandos exactos: [RUNBOOK_ROTACION_SECRETOS_JOHN_S20260623.md](docs/RUNBOOK_ROTACION_SECRETOS_JOHN_S20260623.md).
2. **`socket-proxy EXEC=0 POST=0`** (o sacar `ember-mcp` de esa red) → mata el RCE lateral a 61 containers, 1 línea de compose + `--force-recreate`.
No commiteo ni toco los críticos sin tu OK. El árbol quedó con los scrubs + FRASE.TXT staged, listo para tu revisión.