Skill: TESSERA | Type: reflection Summary: EPISODIO 29 — Neo4j: CHAT-TEMA-RAÍZ: Camino C — fix `ember_shared` + criterios
3.1 KiB
| episode_id | puente_flat | session_code | acto_dialogico | actor_flujo | criticidad_aegis | skill_dominante | fase_proyecto | tipo_semantico | summary_one_line | source_type | trust_boundary | created_at | relectura_tagged | forgejo_commit_sha |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| f7e5b2d3-8931-4ff4-b5d7-9d70628774dd | TRAZA_chat-tema-raz-camino-c-fix-embershared_S20260610.R29_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD | S20260610.SELFAWARENESS_MISION_CRITICA | informar | multi_actor | low | TESSERA | operations | reflection | EPISODIO 29 — Neo4j: CHAT-TEMA-RAÍZ: Camino C — fix `ember_shared` + criterios | claude_code | internal | 2026-06-10T23:57:21.758463+00:00 | false | pending |
Hallazgo crítico confirmado [hard_fact — curl directo a Qdrant este turno]. Esto cambia el diagnóstico y es exactamente lo que el "medir antes de ampliar" debía cazar.
—
CHAT-TEMA-RAÍZ: Camino C — fix ember_shared + criterios
R1-SUB-TEMA: Bug del vector ARREGLADO + tercer bug descubierto + decisión de criterios
—
[R1.seccion1.I1] — Lo hecho y verificado (parte 1 de Camino C ✅)
| Acción | Estado | Evidencia |
|---|---|---|
Fix A vector carry-through (shared_promoter.py build_promoted_payload, v1.1) |
✅ aplicado | Edit confirmado |
Fix B fail-loud sin vector (shared_promoter_runtime.py store_fn) |
✅ aplicado | Edit confirmado |
| 2 property-tests Capa A (vector preservado / ausente) | ✅ escritos durante | Edit confirmado |
| Suite completa | ✅ 7/7 PASSED | 🧪 pytest este turno |
El bug del vector-cero (B-NEW01) — el de daño irreversible — está cerrado y verificado.
[R1.seccion2.I2] — Tercer bug descubierto al medir (B-NEW02, criteria-field-mismatch)
Inspeccioné los payloads reales de ember_experience. Las claves son:
content_text, summary_one_line, aroma_j, aroma_e, actor_flujo, has_decision, importance_score, mode_classifier, session_code, criticidad_aegis… [hard_fact]
Pero el promotor lee campos que NO existen en el corpus:
- lee
payload["title"]→ None (no existe) - lee
payload["content_preview"]ypayload["content"]→ None (el texto real está encontent_text) - lee
payload["turn_count"]ypayload["participants"]→ None (no existen)
Consecuencia: aun con el vector arreglado + el cron instalado, el promotor promovería CERO episodios — porque match_trigger_keywords recibe texto vacío (always None) y detect_coauthorship recibe turn_count=0/participants=[] (always False). Por eso ember_shared está realmente en 0. El vector-cero era el bug que corrompería si promoviera; este es el que explica que no promueva nada.
[R1.seccion3.Q1] — Decisión de criterios (paso 3) — con su prólogo
Aquí me detengo y te lo presento, John, porque redefinir los criterios es decidir qué cuenta como memoria relacional John↔Ember — y eso es una pregunta de valores, no de código.
Reframe. No es "arreglar un mapeo de campos". Es definir qué merece entrar a ember_shared — el store de "lo nuestro". El mapeo de campos es trivial (cambiar content_preview→content_text); lo no-trivial es el criterio de selección.