feat(episode): TRAZA_para-qu-sirve-episodeid_S20260621.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: NONE | Type: reflection Summary: EPISODIO 2 — PostgreSQL: Para qué sirve `episode_id`
This commit is contained in:
parent
4057702e2b
commit
12a370787b
1 changed files with 34 additions and 0 deletions
|
|
@ -0,0 +1,34 @@
|
||||||
|
---
|
||||||
|
episode_id: "ff9c28f6-6545-4093-b811-a0afe575944a"
|
||||||
|
puente_flat: "TRAZA_para-qu-sirve-episodeid_S20260621.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
|
||||||
|
session_code: "S20260621.CRONICA_SEMANAL_C15"
|
||||||
|
acto_dialogico: "informar"
|
||||||
|
actor_flujo: "multi_actor"
|
||||||
|
criticidad_aegis: "low"
|
||||||
|
skill_dominante: "NONE"
|
||||||
|
fase_proyecto: "operations"
|
||||||
|
tipo_semantico: "reflection"
|
||||||
|
summary_one_line: "EPISODIO 2 — PostgreSQL: Para qué sirve `episode_id`"
|
||||||
|
source_type: "claude_code"
|
||||||
|
trust_boundary: "internal"
|
||||||
|
created_at: "2026-06-21T18:56:57.322392+00:00"
|
||||||
|
relectura_tagged: false
|
||||||
|
forgejo_commit_sha: "pending"
|
||||||
|
---
|
||||||
|
|
||||||
|
Buena pregunta de fondo, John. Dos partes: **para qué sirve** y **por qué no se unifica**.
|
||||||
|
|
||||||
|
## Para qué sirve `episode_id`
|
||||||
|
Es el **identificador interno único de cada base** — cómo cada motor direcciona su propia "fila". No es la llave de cruce (esa es `puente_flat`); es la matrícula interna:
|
||||||
|
- **PostgreSQL:** es la **clave primaria** (primary key) de la tabla. Toda tabla relacional necesita una PK para referenciar filas (updates por id, foreign keys, joins internos).
|
||||||
|
- **Qdrant:** es el **point id** — Qdrant exige que cada punto (vector) tenga un id único para guardarlo/recuperarlo/sobrescribirlo.
|
||||||
|
- **Neo4j:** lo guarda como propiedad (copia del id de Qdrant) para apuntar de vuelta al punto.
|
||||||
|
|
||||||
|
## Por qué los valores DIFIEREN (y aquí está la razón técnica)
|
||||||
|
Cada base genera ese id con una **filosofía opuesta**, porque cada una quiere una propiedad distinta de su id interno:
|
||||||
|
|
||||||
|
- **PostgreSQL → uuid4 ALEATORIO.** Quiere un id **estable e independiente del contenido**. ¿Por qué estable? Porque es la clave primaria: si otras filas la referencian (foreign keys, lineage `depends_on`/`superseded_by`), el id NO debe cambiar nunca — ni siquiera si editas el texto del episodio. Un número al azar cumple eso perfecto.
|
||||||
|
|
||||||
|
- **Qdrant → uuid5 DERIVADO DEL CONTENIDO** (calculado del `content_sha256`; lo confirmé: el id `500ea674-9d7a-5b4c-…` sale del hash `500ea6749d7a…`, con los bits de versión-5 marcados). ¿Por qué derivado del contenido? Por **idempotencia / anti-duplicados**: si el mismo episodio se re-ingiere, produce el MISMO id → Qdrant **sobrescribe** el punto en vez de crear un duplicado. Si Qdrant usara un id al azar, cada re-ingesta del mismo texto crearía un vector duplicado.
|
||||||
|
|
||||||
|
**El choque:** PostgreSQL quiere id **content-INdependiente** (estable como PK); Qdrant quiere id **content-DEpendiente** (para deduplicar). Son requisitos **incompatibles** para un mismo id. Cada base eligió el que le sirve.
|
||||||
Loading…
Reference in a new issue