ember-memory-test/episodes/TRAZA_fix-drift-embedding-searchv2-protocolo_S20260618.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md
Ember ed710f277b feat(episode): TRAZA_fix-drift-embedding-searchv2-protocolo_S20260618.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: TESSERA | Type: troubleshooting
Summary: EPISODIO 1 — LEXICON_COSECHA: Fix drift embedding search_v2 — protocolo 7 fases
2026-06-19 05:25:52 +00:00

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
b9a48af2-a8a6-49b1-a2bb-f68ea727b1a4 TRAZA_fix-drift-embedding-searchv2-protocolo_S20260618.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD S20260618.VERIFY_FIRST_PASSPORT_FIX informar multi_actor low TESSERA operations troubleshooting EPISODIO 1 — LEXICON_COSECHA: Fix drift embedding search_v2 — protocolo 7 fases claude_code internal 2026-06-19T05:25:48.668194+00:00 false pending

✅ Fix B completo y pusheado — commit 087468c a los 3 remotos. (El DLC advisory cita 5 docs archivados sobre otros bugs, no este drift — no requieren AVISO; advisory genérico por commit "fix".)

Fix drift embedding search_v2 — protocolo 7 fases

Causa raíz (una frase): search_v2.py (lado READ) embebía las queries con un modelo distinto (gemini-text-embedding-004, hardcoded, lib directa) al que el WRITE usa (text-embedding-3-large = alias de gemini-embedding-2, vía proxy LiteLLM) → los vectores de query no eran comparables con los almacenados → retrieval degradado silenciosamente.

Antes Después
EMBED_MODEL "gemini-text-embedding-004" hardcoded os.environ.get("EMBED_MODEL", "text-embedding-3-large") — idéntico al WRITE
Fallback litellm.embedding() lib directa (→ podría ir a OpenAI) proxy LiteLLM (LITELLM_URL/embeddings) — mismo mecanismo que el WRITE
Camino primario litellm_embed del crisol (canónico) intacto (no tocado)

Era un bug de consecuencia real (no cosmético): un mismatch read/write degrada la búsqueda semántica sin error visible. write==read ahora garantizado (verificado: search_v2:57 ≡ qdrant_worker:70). Suite 226/0, test_search_v2 17/17, docstring stale corregido (DLC-2).

📍 PARA JOHN — R9

Hice: alineé el embedding READ de search_v2.py al canónico del WRITE (commit 087468c, pusheado). Con esto cerré las dos deudas post-migración [C2 S20260613] que quedaban en FEAT-011 (los 4 tests + este drift).

Falta (deudas nuevas que detecté, no en alcance): 🟡 wiki-MEMORIA FROZEN (96% de 23 páginas stale >30d — el self-awareness lo destapó este turno); 🟡 cosecha LEXICON pendiente (3 archivos con PRE_DIGEST sin LEXICON_COSECHA de hoy).

Mi consejo: las dos deudas de FEAT-011 están cerradas y verdes. Buen momento para cerrar la sesión limpia (actualizar STATE.md/HANDOFF + cosecha LEXICON, BLINDADA-11). Si prefieres seguir, la wiki-MEMORIA stale es el siguiente candidato natural.

Para avanzar, elige: 🟢 A (recomendado) cerrar sesión (STATE + HANDOFF + cosecha) · 🟡 B atacar la wiki-MEMORIA stale · ⚪ C otra cosa.

📌 PILA-PENDIENTES (R9): ✅ RESUELTAS: drift embedding search_v2 (commit 087468c, write==read, suite 226/0) · 🟡 MED: wiki-MEMORIA FROZEN 96% stale, cosecha LEXICON pendiente · ❓ John: A/B/C.