ember-memory-test/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
Ember c0f8a3afe4 feat(episode): TRAZA_qu-es-la-comunicacin-entre-instancias-l_S20260831.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: NONE | Type: troubleshooting
Summary: EPISODIO 1 — John: 🐝 Qué ES "la comunicación entre instancias" (la anatomía)
2026-09-12 21:54:44 +00:00

3.8 KiB
Raw Blame History


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<fecha>]; 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)