feat(episode): TRAZA_lo-que-cac-en-esta-ronda_S20260823.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: troubleshooting
Summary: EPISODIO 1 — SessionStart: Lo que cacé en esta ronda
This commit is contained in:
Ember 2026-08-23 18:07:28 +00:00
parent 754ca75963
commit a9d427c235

View file

@ -0,0 +1,31 @@
---
episode_id: "bba6243d-1804-4a97-bd90-753f66ad938e"
puente_flat: "TRAZA_lo-que-cac-en-esta-ronda_S20260823.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260823.PIPELINE_FIXES"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "NONE"
fase_proyecto: "operations"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 1 — SessionStart: Lo que cacé en esta ronda"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-08-23T18:07:26.548821+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
Barrido cerrado. Todo en los tres remotos (`ad080ecc`).
## Lo que cacé en esta ronda
Fuiste directo al punto: los hooks que no cumplían el estándar. Los barrí **todos** — 306 archivos entre hooks y librerías — con análisis AST, no con vista.
**La clase cp1252: 42 puntos corregidos, cero restantes.** En Windows, `subprocess` con `text=True` sin `encoding=` decodifica la salida con cp1252, y una sola tilde tumba la corrida. Había 17 llamadas así, más 23 `open()` de texto en la misma situación, más los 2 últimos que dejé a mano al final. Los 6 `open()` binarios quedaron intactos, como debe ser.
**Pero el hallazgo que más vale es otro: el muro que debía haberlos cazado solo miraba media población.** Existía un tripwire para esta clase exacta de bug… que barría únicamente `lib/`. Los hooks quedaban fuera — y ahí vivían los 17. Lo amplié, y al ampliarlo **cazó de inmediato 2 que yo no había visto**: `session-start.py` los llamaba con alias (`_gr_sp`, `_cj_sp`) y mi búsqueda por texto no los detectaba. El AST alias-aware es más riguroso que mi ojo, y eso es exactamente por qué el muro se amplía en vez de confiar en el barrido manual.
**Y encontré el patrón B-30 dentro del propio medidor de telemetría.** La métrica que dice "30 hooks inyectan sin dejar rastro" contaba como cubierto a todo hook cuyo texto mencionara la palabra `jsonl` — un proxy, no el hecho. Lo medí contra un barrido de escritura real: **ambos dan 42, pero solo coinciden en 23**. Dos sesgos opuestos que se compensaban — 19 nombran `jsonl` sin escribir nada, y 19 escriben sin nombrarlo jamás. El total cuadraba por casualidad.
No sustituí un proxy por otro (mi barrido tampoco sigue la escritura a través de librerías importadas). Hice que el instrumento **declare su margen**: ahora reporta `±46 sobre 76`. Un margen así dice lo que hay que decir — *esta cifra no se lee al dígito*. Y lo propagué a la línea del arranque, porque calcular la incertidumbre y ocultarla al lector es peor que no calcularla: aparenta rigor.