--- episode_id: "69c88ea0-5ddf-41c3-82c5-4ef782b0f09a" puente_flat: "TRAZA_lo-que-constru_S20260726.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD" session_code: "S20260726.ARCO_CICLO4_AUTOMEJORA" acto_dialogico: "informar" actor_flujo: "multi_actor" criticidad_aegis: "low" skill_dominante: "NONE" fase_proyecto: "operations" tipo_semantico: "advisory" summary_one_line: "EPISODIO 1 — MNEMO_PRE_DIGEST: Lo que construí" source_type: "claude_code" trust_boundary: "internal" created_at: "2026-07-26T18:48:42.065692+00:00" relectura_tagged: false forgejo_commit_sha: "pending" --- **Funciona end-to-end con datos reales.** Un payload real de la cola, materializado, y lo importante: **El cotejo da verdadero.** Ese es el punto entero del camino C: el archivo no es una copia que haya que creerse — es cotejable contra el vector por su hash. Si mañana alguien pregunta "¿este `.md` y este vector son el mismo contenido?", hay una función que responde en vez de una declaración que confiar. ## Lo que construí **`lib/episodio_materializer.py`** — contrato de entrada/salida explícito, cinco micro-mecanismos por debajo de 40 líneas, cada uno con su patrón canónico citado (sanitización por lista blanca, clave compuesta ordenable, guard clause, escritura atómica, map con filtrado defensivo). **`test_episodio_materializer.py`** — 17 tests, con los bordes que suelen olvidarse: payload que no es diccionario, texto vacío, sin hash, y un título con `../../../etc/passwd` para confirmar que ningún nombre puede escribir fuera del directorio base. **Idempotente**: re-drenar la cola no reescribe archivos con el mismo hash. Sin eso, cada drenaje ensuciaría git con cambios falsos. ## Dos cosas que decides tú, no yo **Dónde viven los episodios.** Lo ejecuté en un directorio temporal a propósito. Crear `episodios/` en la raíz de tu repositorio es una decisión de estructura tuya. **El enganche.** No toqué `settings.json` — tu directiva sobre esos ficheros es explícita. La librería está lista; registrarla en el hook de cierre es acto deliberado tuyo. Y un detalle que prefiero señalar antes de que muerda: **el nombre generado conserva tildes** (`próxima`). Es más legible, pero los nombres con Unicode a veces dan guerra entre Windows, Linux y git. Si prefieres nombres solo ASCII, es una línea. — — **Hice** — El camino C construido y probado: 17 tests verdes y, sobre un episodio real de tu cola, el cotejo archivo-vector dando verdadero. Y de paso resolví por qué B13 llevaba meses incumplida: nunca tuvo mecanismo, era solo un recordatorio. El materializador no repite ese error — es determinista, no depende de que nadie se acuerde. **Falta** — Dos decisiones tuyas (dónde viven los episodios y el enganche) y, sobre todo, **versionar**. El arco entero sigue sin confirmar en git.