feat(episode): TRAZA_para-john-r6_S20260617.R4_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: TESSERA | Type: troubleshooting
Summary: EPISODIO 4 — Meilisearch: 📍 PARA JOHN — R6
This commit is contained in:
Ember 2026-06-18 16:41:33 +00:00
parent cd2efd6a0e
commit 70816e0e3d

View file

@ -0,0 +1,35 @@
---
episode_id: "09bc762d-71b9-4878-93da-d9ecdd653f44"
puente_flat: "TRAZA_para-john-r6_S20260617.R4_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260617.CUSTODIA_SKILL_SECRETOS"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "TESSERA"
fase_proyecto: "operations"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 4 — Meilisearch: 📍 PARA JOHN — R6"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-06-17T21:21:02.699123+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
✅ **Enumeración server-side COMPLETA** — el runbook ([RUNBOOK_ROTACION_4_KEYS_SECRETOS](docs/RUNBOOK_ROTACION_4_KEYS_SECRETOS_S20260617.md), gitignored) ya tiene el blast-radius real de cada key. Y la matriz de CUSTODIA **probó su valor empíricamente:**
| Key | Consumidores reales | Lo que "a ojo" se olvidaría |
|---|---|---|
| **OpenAI** | `litellm/config.yaml` (`api_key`) | el var `OPENAI_API_KEY` ni matchea — es literal en config |
| **Karakeep** | ember-mcp `.env` + `tools_new_f5f7.py` + `.mcp.json` | **la usa ember-mcp, no solo "un MCP karakeep"** |
| **Langfuse** | langfuse stack + **litellm** + ember-mcp ×2 = **4** | **litellm la consume para tracing** |
| **Meilisearch** | **karakeep stack** | **es el backend de búsqueda de Karakeep** |
| **LiteLLM master** | embedding.env + crisol_run + memory_writer = **3** | **embedding.env = el satélite que D-9 olvidó** |
**El hallazgo:** cada key tiene 1-4 consumidores, **varios cruzados y no-obvios** (Langfuse→litellm-tracing, Meilisearch→backend-de-Karakeep, Karakeep→ember-mcp). Rotar cualquiera mirando solo "su" servicio rompería un consumidor cruzado — **exactamente la clase de fallo D-9.** La matriz de CUSTODIA es justo lo que cierra ese hueco. (Bonus: vi `embedding.env.bak.pre_litellm_keyfix_20260617` → la otra instancia **ya cerró el fuego D-9** hoy.)
### 📍 PARA JOHN — R6
- **Hice:** completé el INVENTARIO server-side (CUSTODIA modo INVENTARIO, read-only, sin CA-3) → el runbook tiene el blast-radius exhaustivo de las 4 keys, con los consumidores cruzados no-obvios marcados.
- **Falta:** que TÚ generes+inyectes las keys nuevas (CA-3) siguiendo el runbook. Yo verifico la vía real (nueva acepta / vieja rechazada) + scrubeo memoria tras cada una.
- **Mi consejo:** el runbook ya es accionable y exhaustivo — cuando tengas un momento para rotar, sigue el rito y avísame para verificar cada key por la vía real. No hay más que yo pueda adelantar sin tu mano (CA-3).
- **Para avanzar:** 🟢 **A** empiezas a rotar (key por key) y yo verifico la vía real · 🟡 **B** cierro la sesión con STATE+HANDOFF (el runbook queda listo para cuando rotes) · ⚪ **C** otra tarea.