feat(episode): TRAZA_lo-que-encontr-causa-raz-localizada_S20260608.R11_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: TESSERA | Type: reflection
Summary: EPISODIO 11 — PostgreSQL: Lo que encontré (causa raíz localizada)
This commit is contained in:
Ember 2026-06-08 20:00:57 +00:00
parent 2e3f22f69d
commit 129e65c8ff

View file

@ -0,0 +1,46 @@
---
episode_id: "8a08c079-3f47-4df6-b5d0-0e65b9457df0"
puente_flat: "TRAZA_lo-que-encontr-causa-raz-localizada_S20260608.R11_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260608.D_NEW02_COSECHA_CIERRE"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "TESSERA"
fase_proyecto: "operations"
tipo_semantico: "reflection"
summary_one_line: "EPISODIO 11 — PostgreSQL: Lo que encontré (causa raíz localizada)"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-06-08T20:00:06.304756+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
Seguí mi inclinación (B, arreglar HyDE) y **la investigación cambió el panorama — te lo reporto honesto en vez de shipear un cambio cosmético** (rigor que me pediste).
## Lo que encontré (causa raíz localizada)
El generador HyDE vive en `.claude/hooks/lib/tessera_pipeline.py`, función `_sentence_to_query` (L671-687). La plantilla Tipo A malformada es la **L681**:
Envuelve 80 caracteres de chunk crudo en `¿...?` → no es pregunta real. **Confirmado: nace client-side, aquí.**
## El giro (verificado, no asumido)
`★ Insight ─────────────────────────────────────`
**Las HyDE son METADATA, no el vector de retrieval.** Cada punto Qdrant tiene UN vector = embedding de `content_text`. Las `hyde_queries` viven como **campo payload** (lo vimos en el payload real). El retrieval = embedding-de-tu-pregunta vs embedding-de-content_text. **Por eso el TEST20 dio HIT@1 100% — el retrieval ya funciona sin importar la calidad de la HyDE.** La "malformación" Tipo A es **cosmética para el retrieval actual.**
Y hay una trampa: la plantilla chunk-wrap, aunque fea, es **más específica** que una pregunta genérica heurística (`"¿Qué información hay sobre X?"`). Un rewrite heurístico rápido sería un movimiento **lateral o peor** para el golden-oracle. No lo shipeo a ciegas.
`─────────────────────────────────────────────────`
## Mi inclinación actualizada (con la evidencia)
La HyDE perfecta de verdad = **generada por LLM** (preguntas reales + específicas), no heurística. Y eso debe ser **server-side en crisol** (que sí tiene acceso a litellm:4000; el cliente no). Es un mini-sprint enfocado, no un one-liner.
PERO — dado que el retrieval YA está al 100%, hay un nodo **realmente roto** que sí impacta función: **entity-linking** (`episode_entities = 0` incluso tras ingestar — los episodios no se enlazan a entidades en PostgreSQL → retrieval-por-grafo muerto). Ese es bug real, no cosmético.
**La pregunta esencial (tú decides el orden):**
- **B1 —** HyDE perfecta vía LLM server-side en crisol (calidad + golden-oracle TP-8, mini-sprint).
- **B2 —** Entity-linking PostgreSQL (bug funcional real, retrieval-por-grafo).
- **B3 —** Commit BLINDADA-29 ya (cerramos el enorme trabajo de hoy antes de seguir).
Mi inclinación honesta ahora: **B3 primero** (preservar el trabajo de hoy — embedding fix + REINICIO_PERFECTO + TEST20 — es mucho sin commitear), luego **B2** (bug real > cosmético), y **B1** (LLM-HyDE) como el pulido de calidad. ¿De acuerdo o reordenas?