diff --git a/episodes/TRAZA_todo-entregado-y-verificado-dos-veces-24_S20261016.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md b/episodes/TRAZA_todo-entregado-y-verificado-dos-veces-24_S20261016.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md new file mode 100644 index 00000000..5f00ecf4 --- /dev/null +++ b/episodes/TRAZA_todo-entregado-y-verificado-dos-veces-24_S20261016.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md @@ -0,0 +1,30 @@ +--- +episode_id: "ebc99a29-53de-46a3-afa7-1052c9f4b7d4" +puente_flat: "TRAZA_todo-entregado-y-verificado-dos-veces-24_S20261016.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD" +session_code: "S20261016.SID8028C506653F" +acto_dialogico: "informar" +actor_flujo: "multi_actor" +criticidad_aegis: "low" +skill_dominante: "NONE" +fase_proyecto: "operations" +tipo_semantico: "troubleshooting" +summary_one_line: "EPISODIO 1 — SENTINEL: Todo entregado y verificado dos veces (24/24 en..." +source_type: "claude_code" +trust_boundary: "internal" +created_at: "2026-10-16T06:16:46.118784+00:00" +relectura_tagged: false +forgejo_commit_sha: "pending" +--- + +Todo entregado y verificado dos veces (24/24 en verde también tras el formateo de los hooks). Nada commiteado: lo decides tú. + +> 🎯 **En una frase:** ya existe, con código y pruebas, la alternativa que la carta prometía: un "motor de decisión" donde ninguna regla se compila sin una medición que pueda refutarla. + +**✅ Hice** +- Schema v0.2 cerrado (`schemas/decision_spec_v0_2.schema.json`): un campo mal escrito ya no pasa en silencio; obliga a declarar la unidad de decisión (tarjeta, configuración, asignación…), cinco versiones, evidencia con fecha y reglas con ciclo de vida HYPOTHESIS → CALIBRATED → COMPILED → STALE. +- Validador y evaluador sin `eval` (`scripts/validar_decision_spec_v02.py`): recorre el árbol de la expresión con una lista blanca y la evalúa él mismo; el desconocido se propaga como estado (lógica de tres valores), nunca como cero ni como "cumple"; la frescura vencida emite `STALE_EVIDENCE` de verdad. +- 24 tests (`tests/test_validar_decision_spec_v02.py`): los 6 casos adversariales de la carta, 9 expresiones con efectos rechazadas sin tocar el disco, bordes nan/inf/cero, y el golden contra tu Spark real: con eficiencia 0,62 las mediciones de llama.cpp/Ollama caen dentro del ±10 %; con el 0,55 de Astra, no (control negativo, y falla como debe). +- Durante la construcción los tests cazaron dos huecos míos (exponente anidado que pasaba el validador; `nan > 0` que daba `False`) y los corregí antes de cerrar. +- Documento de la spec en `docs/`, copia para el consejo junto a la carta (carpeta `spec_competidora_ember/`), memoria actualizada. + +**⏳ Falta** (tuyo): GO para commitear a los 3 remotos; decidir si la unidad de decisión del caso GPU es "configuración" (mi inclinación) o "tarjeta"; enviar carta + spec a Astra. Mío con fecha: integrar el perfil en SILICIO (pasa por SENTINEL, 2026-10-30) y el transpilador a JSONLogic para Gemini/Grok (2026-11-15). No corrí la batería completa de tests del repo, solo la nueva: las piezas no tocan nada existente, pero eso está declarado, no medido.