feat(episode): TRAZA_las-dos-capas-del-contrato-y-por-qu-nece_S20260610.R10_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: TESSERA | Type: reflection Summary: EPISODIO 10 — MNEMO Pipeline: Las dos capas del contrato (y por qué necesitas am
This commit is contained in:
parent
2cac9bd23e
commit
8b191b5120
1 changed files with 35 additions and 0 deletions
|
|
@ -0,0 +1,35 @@
|
|||
---
|
||||
episode_id: "87c87697-9e75-41f1-9f6d-e872d78ba9d6"
|
||||
puente_flat: "TRAZA_las-dos-capas-del-contrato-y-por-qu-nece_S20260610.R10_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
|
||||
session_code: "S20260610.SELFAWARENESS_MISION_CRITICA"
|
||||
acto_dialogico: "informar"
|
||||
actor_flujo: "multi_actor"
|
||||
criticidad_aegis: "low"
|
||||
skill_dominante: "TESSERA"
|
||||
fase_proyecto: "operations"
|
||||
tipo_semantico: "reflection"
|
||||
summary_one_line: "EPISODIO 10 — MNEMO Pipeline: Las dos capas del contrato (y por qué necesitas ambas)"
|
||||
source_type: "claude_code"
|
||||
trust_boundary: "internal"
|
||||
created_at: "2026-06-11T23:54:47.322988+00:00"
|
||||
relectura_tagged: false
|
||||
forgejo_commit_sha: "pending"
|
||||
---
|
||||
|
||||
**Sí, John — exactamente así. Y tu formulación añade la pieza que completa el diseño.** Te lo confirmo con una precisión que lo hace aún más fuerte:
|
||||
|
||||
## Las dos capas del contrato (y por qué necesitas ambas)
|
||||
|
||||
**Tu tesis es correcta:** si los escritores fueran perfectos, sus contratos coincidirían 100% con el de las bases. Pero ahí está la trampa que vivimos hoy: Qdrant y Neo4j son schema-less — **no pueden verificar casi nada por sí mismas** — así que cuando el contrato vive solo "en la intención" de cada escritor, nada detecta el drift. Cada escritor fue "correcto en su tarea" según SU copia del contrato… y las tres copias divergieron en silencio (`content` vs `body` vs `content_text`, modelo 001 vs 2-preview). Nadie se equivocó localmente; el sistema se equivocó globalmente.
|
||||
|
||||
**La solución tiene dos capas, defense-in-depth:**
|
||||
|
||||
1. **El contrato ÚNICO de los escritores — pero no como documento: como CÓDIGO compartido.** La forma más fuerte de tu idea no es que los 3 escritores "respeten el mismo contrato" (eso son 3 copias que pueden volver a divergir), sino que los 3 **llamen a la misma librería de escritura** — un único módulo `memory_writer` con el schema canónico (Pydantic: campos, tipos, key `content`, `embedding_model_id`, sha) y la única función que sabe grabar en los 3 stores. Tres invocadores, **un solo escritor real**. Es exactamente lo que hacen los proyectos que admiras (Mem0, Zep): una sola API de ingesta — es imposible des-sincronizar lo que no está duplicado.
|
||||
|
||||
2. **El contrato de las bases — la red de seguridad.** Lo que las bases SÍ pueden imponer (dim 3072, `UNIQUE(content_sha256)`, `NOT NULL embedding_model_id`, constraints Neo4j) atrapa cualquier bug que se escape de la capa 1. Por eso el formateo: que la red exista desde el nacimiento.
|
||||
|
||||
Esto ya quedó parcialmente capturado en el [CONSEJO](docs/CONSEJO_S20260611_ember_antes_de_continuar_necesito_de.md) (non-negotiables CRISOL #1-3: una config, un escritor, payload canónico) — pero tu formulación eleva el paso 7 del script de "el outbox deja de escribir Qdrant" a su versión completa: **fabricar el `memory_writer` único** que mcp, crisol y cualquier escritor futuro invoquen. Lo registro así en la PILA como el norte arquitectónico de los pasos MANUAL 7-8, para ejecutarlo con ese diseño cuando coordinen las categorías.
|
||||
|
||||
En una frase: **el contrato único en código compartido produce la coherencia; el schema de las bases la garantiza cuando algo falla.** Memorias coherentes y sincronizadas salen de ahí.
|
||||
|
||||
📌 **PILA-PENDIENTES (R11):** 🔴 2do GO `--execute --yes-formateo` (sesión fresca) · 🟠 pasos 7-8 ELEVADOS a diseño `memory_writer` único (contrato Pydantic compartido, 3 invocadores → 1 escritor) [formulación John R11] · 🟡 B15 COSECHA + heredados
|
||||
Loading…
Reference in a new issue