feat(episode): DEPURA_para-john_S20260705.R99_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: troubleshooting
Summary: EPISODIO 144 — MNEMO_PRE_DIGEST: 📍 PARA JOHN
This commit is contained in:
Ember 2026-07-12 16:23:20 +00:00
parent 5c680e9186
commit 362312e91b

View file

@ -0,0 +1,34 @@
---
episode_id: "8df44259-dd1d-4c9a-971b-32444df431b1"
puente_flat: "DEPURA_para-john_S20260705.R99_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260705.EVAL_INSTRUMENT_FORGE_SKILL"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "NONE"
fase_proyecto: "operations"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 144 — MNEMO_PRE_DIGEST: 📍 PARA JOHN"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-07-12T16:17:05.961936+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
Y el cierre honesto: **mi error de medición (fuzz sin inf/nan) fue el mismo tipo de fallo de cobertura que RELOJERO cometió.** Ni la ceremonia advisory (yo) ni RELOJERO (el brazo C) evitamos el punto ciego. Solo el oráculo lo reveló. Corregí el registro con AVISO DLC-2 en el veredicto, declaré los confounds (B tuvo cómputo anómalo; `inf`/`nan` no estaban destacados en la spec), y parché el fuzz. Detalle: [docs/CORRECCION_CASO_04_INFNAN_S20260705.md](docs/CORRECCION_CASO_04_INFNAN_S20260705.md).
Listo. **Todo verde — Fase 7 cerrada.** El interruptor funciona y ya está **apagado**.
## 🔇 Sonidos de voz: silenciados (sin borrar nada)
Encontré el sistema — se llaman **"voice hooks"**. Un solo script (`safe_voice_hook.py`) registrado en los 30 eventos de Claude Code reproduce un `.wav` por cada uno (*"Claude está a punto de usar una herramienta"*, *"La herramienta terminó correctamente"*, etc.).
**Qué hice:** le añadí un **interruptor maestro** — antes no existía; la única forma de apagar era borrar listas. Ahora es un solo valor:
| Archivo | Cambio | Efecto |
|---|---|---|
| [voice_hooks_config.json](.claude/hooks/config/voice_hooks_config.json) | `"enabled": false` | 🔇 silencio total (**activo ahora**) |
| [safe_voice_hook.py:80](.claude/hooks/scripts/safe_voice_hook.py) | guard clause 3 líneas | lee el switch; ausente/`true`→suena, `false`→calla |
**Nada se borró:** el manifest (30 sonidos + textos), la doble allowlist y el registro en `settings.local.json` quedan **intactos**. Es reversible con un flip.