feat(episode): TRAZA_bitcora-s20260821pipelinememoriaselfawa_S20260821.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: TESSERA | Type: design
Summary: EPISODIO 2 — MEMORIA: 📁 BITÁCORA S20260821.PIPELINE_MEMORIA_SELFAWARENESS.R5
This commit is contained in:
Ember 2026-08-22 02:27:14 +00:00
parent bfac12f46d
commit b7fbbca743

View file

@ -0,0 +1,48 @@
---
episode_id: "cfb12fbb-afcf-4f89-981e-12cec8b596f2"
puente_flat: "TRAZA_bitcora-s20260821pipelinememoriaselfawa_S20260821.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260821.PIPELINE_MEMORIA_SELFAWARENESS"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "TESSERA"
fase_proyecto: "operations"
tipo_semantico: "design"
summary_one_line: "EPISODIO 2 — MEMORIA: 📁 BITÁCORA S20260821.PIPELINE_MEMORIA_SELFAWARENESS.R5"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-08-22T02:27:09.135231+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
**El antídoto que instalé tiene dos mitades.** La constante `CAMPO_TS` la comparten gate y test, así que un rename futuro rompe el test en vez de cegar la medición en silencio. Y el test nuevo no pregunta a una fixture: le pregunta a **Qdrant** cuántos puntos no tienen ese campo, con el propio filtro `is_empty` del store — otra ruta de código, no la del gate.
**Y lo verifiqué neutralizándolo.** Apunté la constante al campo roto y exigí que el test se pusiera rojo. Lo hizo, diciendo la verdad exacta: *"CAMPO_TS='timestamp' no existe en NINGUN punto (1735/1735 vacios): el gate esta ciego"*. Un test que no cambia de color cuando rompes el hecho que dice medir no está midiendo nada.
`─────────────────────────────────────────────────`
- ✅ **RESUELTA** · B-01 commit triple-remoto (`64d307fc`)
- ✅ **RESUELTA** · A-01 parte 1: gate de procedencia ve y da PASS (`c699b7a7`)
- 🟠 **HIGH** · A-01 partes 2-5: dedup de probes del canario, `dense_recall@1`, universos de facts
- 🟡 **MEDIUM** · A-02..A-11 (9 tareas restantes del Bloque A)
- 🟡 **MEDIUM** · Clave muerta `sk-ember-2ca4` en claro en `INFRA_MANIFEST.yaml` — scrub pendiente
- ⚪ **LOW** · 47 `.bak_*` huérfanos sin dueño ni fecha (deuda ZD-AP7)
### 📁 BITÁCORA S20260821.PIPELINE_MEMORIA_SELFAWARENESS.R5
—
**Hice:** el commit de los 164 (quedaron 131 tras filtrar el ruido) en los tres remotos, y la primera reparación real del Bloque A. El gate que custodiaba una de las tres condiciones de tu freeze llevaba semanas ciego por leer un campo que no existe; ahora mide, y dice PASS con 39 de 39 episodios sellados.
**Falta:** las otras 4 piezas de A-01 y las 9 tareas restantes del Bloque A. Todas legales bajo tu moratoria, ninguna necesita permiso nuevo.
**Mi consejo:** sigo con el mismo patrón — reparar, instalar la vacuna, neutralizarla para probar que discrimina, desplegar, commitear. Es lento por tarea pero es lo único que evita que dentro de un mes tengamos otro instrumento verde que no mide nada.
**Para avanzar, elige:**
- 🟢 **A** *(recomendado)* — sigo con A-01 partes 2-5 (los otros dos gates del criterio de salida) en este mismo turno.
- 🟡 **B** — salto a A-02, que es el que reconecta el lazo (gates vencidos → tu cola, tendencia del canario).
- ⚪ **C** — paras aquí; revisas lo hecho y decides el resto con calma.
campo_inexistente_timestamp (1.0) | fix_CAMPO_TS--desbloquea-->condicion_2_freeze (1.0) | test_contrato--verifica_contra-->Qdrant_is_empty (1.0) | neutralizacion--demuestra-->el_test_discrimina (1.0) | B-01--precondicion_de-->rollback_bloque_A (1.0)
epistemic_summary: todo verificado con herramientas en esta sesion (pytest 11/11, neutralizacion en rojo, md5 local==remoto, gate corrido en el servidor con salida literal); la clave sk-ember-2ca4 se clasifica como MUERTA por declaracion de estado_vivo.json, no por prueba criptografica propia — soft_fact en ese punto concreto.
-->