feat(episode): TRAZA_el-fix-en-tabla_S20260801.R3_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: NONE | Type: troubleshooting Summary: EPISODIO 3 — MNEMO_PRE_DIGEST: El fix, en tabla
This commit is contained in:
parent
fb65eb620b
commit
1aac8bfd33
1 changed files with 59 additions and 0 deletions
|
|
@ -0,0 +1,59 @@
|
||||||
|
---
|
||||||
|
episode_id: "3e836792-840d-47b4-b034-8c0c57320eb2"
|
||||||
|
puente_flat: "TRAZA_el-fix-en-tabla_S20260801.R3_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
|
||||||
|
session_code: "S20260801.ZERO_DEUDA_CIERRE_TOTAL"
|
||||||
|
acto_dialogico: "informar"
|
||||||
|
actor_flujo: "multi_actor"
|
||||||
|
criticidad_aegis: "low"
|
||||||
|
skill_dominante: "NONE"
|
||||||
|
fase_proyecto: "operations"
|
||||||
|
tipo_semantico: "troubleshooting"
|
||||||
|
summary_one_line: "EPISODIO 3 — MNEMO_PRE_DIGEST: El fix, en tabla"
|
||||||
|
source_type: "claude_code"
|
||||||
|
trust_boundary: "internal"
|
||||||
|
created_at: "2026-08-01T07:48:32.114900+00:00"
|
||||||
|
relectura_tagged: false
|
||||||
|
forgejo_commit_sha: "pending"
|
||||||
|
---
|
||||||
|
|
||||||
|
Todo verificado. Cierro con el resumen.
|
||||||
|
|
||||||
|
## El fix, en tabla
|
||||||
|
|
||||||
|
| | antes | después |
|
||||||
|
|---|---|---|
|
||||||
|
| Conteo del sensor | 14 vencidos / 4 vigentes | **12 / 2** |
|
||||||
|
| Oráculo (resumen del registro) | 12 / 2 | 12 / 2 |
|
||||||
|
| ¿Coinciden? | **NO** | **SÍ** |
|
||||||
|
| Score gobernanza | 22.2 | **14.3** |
|
||||||
|
| Rúbrica global | 78.4 | **75.1** |
|
||||||
|
| Tests | 5 | **8 verdes** |
|
||||||
|
|
||||||
|
**La nota bajó, y eso es el éxito, no el fracaso.** El 78.4 estaba inflado. Un instrumento veraz que empeora la puntuación está haciendo exactamente su trabajo.
|
||||||
|
|
||||||
|
## Lo que el bug tenía de peligroso
|
||||||
|
|
||||||
|
No era un error de magnitud fija. Ayer **deprimía** la nota (55.6 contra 57.1 real); hoy la **inflaba** (22.2 contra 14.3). Porque las 2 menciones espurias pesan 100% sobre una base de 2 vigentes y solo 17% sobre 12 vencidos. **Mentía más fuerte justo cuando la gobernanza se degradaba** — que es precisamente cuando el sensor hace falta. Un sesgo constante lo corriges de cabeza; este no.
|
||||||
|
|
||||||
|
## Cómo verifiqué que el test sirve
|
||||||
|
|
||||||
|
No basta con que esté verde. Lo **neutralicé** y comprobé que enrojece:
|
||||||
|
|
||||||
|
| escenario | resultado | veredicto |
|
||||||
|
|---|---|---|
|
||||||
|
| Sensor sano | (12, 2) = oráculo | verde |
|
||||||
|
| Discriminador anulado | (14, 4) ≠ oráculo | **rojo → muerde** |
|
||||||
|
| Bug original reintroducido | (14, 4) ≠ oráculo | **rojo → muerde** |
|
||||||
|
| Prosa sin filas (control negativo) | (0, 0) | correcto |
|
||||||
|
|
||||||
|
Y el test **no cablea ninguna cifra**. Menos mal: el registro pasó de 6 a 12 vencidos **entre ayer y hoy**. Haber escrito `assert vencidos == 6` habría roto el test el mismo día de crearlo. El invariante es la *coincidencia* sensor↔oráculo, no un número.
|
||||||
|
|
||||||
|
## Sobre los 3 tests rojos que verás
|
||||||
|
|
||||||
|
Son **preexistentes**. Lo verifiqué retirando mi fix con `git stash`: fallan igual sin él. Regresión limpia — 373 passed.
|
||||||
|
|
||||||
|
Uno merece atención: `test_verify_blindada_enforcement` falla con *"esperaba 30 BLINDADAS, dio 31"*. Es **otro test-vs-oráculo cazando un drift real** — el archivo de doctrina se titula "26 reglas" y contiene 31. El sensor correcto lleva tiempo gritando sin que nadie lo escuche. Es la clase *veredicto sin consumidor* en vivo, dentro del ecosistema que quiere ser un guardrail perfecto.
|
||||||
|
|
||||||
|
—
|
||||||
|
|
||||||
|
**Hice:** el fix con TDD real (test en rojo primero, luego código), 3 tests-vs-oráculo como exige la BLINDADA-30, prueba de mutación demostrando que muerden, regresión verificada, y propagué las cifras corregidas al briefing de Fable. 2 commits, push verificado idéntico en los 3 remotos (`a2334a3d`).
|
||||||
Loading…
Reference in a new issue