feat(episode): TRAZA_lo-que-constru_S20260726.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: NONE | Type: advisory Summary: EPISODIO 1 — MNEMO_PRE_DIGEST: Lo que construí
This commit is contained in:
parent
70b062034a
commit
a6d38ac364
1 changed files with 45 additions and 0 deletions
|
|
@ -0,0 +1,45 @@
|
||||||
|
---
|
||||||
|
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.
|
||||||
Loading…
Reference in a new issue