diff --git a/episodes/TRAZA_qu-es-la-comunicacin-entre-instancias-l_S20260831.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md b/episodes/TRAZA_qu-es-la-comunicacin-entre-instancias-l_S20260831.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md new file mode 100644 index 00000000..00450c46 --- /dev/null +++ b/episodes/TRAZA_qu-es-la-comunicacin-entre-instancias-l_S20260831.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md @@ -0,0 +1,58 @@ +--- +episode_id: "aeb5025e-baf2-4350-8232-e5fa903e2dd6" +puente_flat: "TRAZA_qu-es-la-comunicacin-entre-instancias-l_S20260831.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD" +session_code: "S20260831.SIDB92171056337" +acto_dialogico: "informar" +actor_flujo: "multi_actor" +criticidad_aegis: "low" +skill_dominante: "NONE" +fase_proyecto: "operations" +tipo_semantico: "troubleshooting" +summary_one_line: "EPISODIO 1 — John: 🐝 Qué ES "la comunicación entre instancias" (la anatomía)" +source_type: "claude_code" +trust_boundary: "internal" +created_at: "2026-09-12T21:54:43.944978+00:00" +relectura_tagged: false +forgejo_commit_sha: "pending" +--- + +Medido en vivo, ahora mismo: + +Con eso aterrizado, te explico todo, John. + +— + +## 🐝 Qué ES "la comunicación entre instancias" (la anatomía) + +Imagina varias abejas (instancias de Claude Code) trabajando en la misma colmena (el repo) a la vez. Para no chocar ni pisarse, se hablan por **cinco canales** — cuatro caseros + uno nativo. Los cuatro caseros son **redundantes a propósito** (si uno falla, los otros cubren), que es justo lo que pediste: + +| Canal | Qué es (plastilina) | Mecanismo real | +|---|---|---| +| **1. Presencia** | El cartel "estoy aquí trabajando en X" | `ACTIVO.md` por categoría (`declare_presence`) | +| **2. Reclamos** | "Esta tarea es mía, no la toques" | `TASK_BOARD.md.claimed.json` | +| **3. Cerrojo** | Candado físico en los archivos críticos | `coordination_db.py` (SQLite: `leader_lease` + `file_locks`), cerrojo PF-22 | +| **4. Correo** | Cartas entre abejas | `correo_protocol.py` → carpetas `correos-entre-instancias/` | +| **5. Nativo** (el nuevo) | El panal ve quién respira de verdad | `ListAgents`/`notify_when_idle` del arnés + **transcripts frescos** como fuente de vida | + +El **latido** (heartbeat) es lo que mantiene vivo el cerrojo: cada instancia dice "sigo viva" y así el candado sabe si su dueño murió (para liberarlo). + +— + +## 🔧 Qué se HIZO (la misión panal — 8 arreglos, todos en git) + +Cuando empezó este chat, varios de esos canales estaban **rotos en silencio**. Los destapé y arreglé uno por uno: + +1. **Sensor de coordinación** (`coord_metrics.py`, T-01) — un termómetro read-only que mide las 4 cifras que viste arriba. Antes no había forma de *medir* la salud de la comunicación; ahora sí. +2. **Latido revivido** (T-05, `stop-enricher.py`) — **llevaba 86 días muerto** por un error (`os` sin importar). Sin latido, el cerrojo no sabía quién vivía. Revivido con una línea. +3. **Parser de presencia arreglado** (T-04) — buscaba el texto exacto `[ACTIVO]` pero las abejas se anuncian como `[ACTIVO_S]`; **no veía a nadie**. Ahora ve por prefijo → pasó de 0 a 8 fantasmas detectados (los 8 de hoy). +4. **Relojes en UTC** (T-06) — comparaciones de fecha que mezclaban hora local con UTC, corregidas. +5. **Canal honesto** (T-07) — cuando un envío entre abejas falla (red SSH caída), ahora lo **registra** en vez de fingir éxito o romperse. +6. **Comparativa nativa** (T-02) — medí que las herramientas nativas ven **6-7 instancias** mientras el `leader_lease` casero ve 1-2 (brecha 7×). Prueba dura de que lo nativo es mejor sensor de vida. +7. **Dashboard + arranque con liveness nativa** (T-03, `b8534d84`) — cada arranque ahora imprime `👁️ LIVENESS NATIVA: N vivas vs M vistas → gap`. **La ceguera dejó de estar oculta.** +8. **Piloto sin polling** (T-09) — confirmé que `notify_when_idle` (aviso nativo "ya terminé") funciona sin preguntar en bucle. + +Decisión de arquitectura clave: **NO se borró el `leader_lease`** aunque lo nativo sea mejor sensor — porque el cerrojo PF-22 lo necesita para proteger los archivos. "Adoptar nativo" fue *añadir* la vista nativa + reparar el latido, no demoler lo casero. + +— + +## 📊 Cómo está HOY (lectura honesta del sensor)