feat(episode): EXPLORA_el-fix-una-causa-se-volvi-tres_S20260801.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: chronicle
Summary: EPISODIO 1 — MNEMO_PRE_DIGEST: El fix: una causa se volvió tres
This commit is contained in:
Ember 2026-08-02 01:07:58 +00:00
parent 2c855333d7
commit 8d7351c608

View file

@ -0,0 +1,46 @@
---
episode_id: "bf1f03be-96ee-47f1-87da-a77792794d4c"
puente_flat: "EXPLORA_el-fix-una-causa-se-volvi-tres_S20260801.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260801.PIPELINE_FIXES"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "NONE"
fase_proyecto: "operations"
tipo_semantico: "chronicle"
summary_one_line: "EPISODIO 1 — MNEMO_PRE_DIGEST: El fix: una causa se volvió tres"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-08-02T01:07:55.255633+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
Chip cerrado, John. El gate que me bloqueó tres veces anoche quedó curado — y la investigación refutó mi propia hipótesis por el camino.
## El fix: una causa se volvió tres
| causa | qué pasaba | fix mínimo |
|---|---|---|
| **Heredoc** | El fix de mayo cubría `python -c "..."` pero no su hermano `<<'PYEOF'` — el extractor pescaba rutas **dentro** del cuerpo del script | Strip del cuerpo; el target real de un redirect (que vive *antes* del cuerpo) se preserva |
| **Directorios** | El gate exigía "leer" un directorio, pero su propio comando dictado registraba **nada** (el extractor exige extensión) — *dictaba lo que su detector no reconocía* | Un directorio no es objetivo del gate; sus objetos son archivos |
| **Temp 8.3** | La exención listaba la forma larga del path; el incidente llegó con `ADMINI~1` — comparaba la **forma**, no el **hecho** | Sufijo genérico que cubre ambas formas |
**Mi hipótesis (2) del chip era falsa** — el tracker no se resetea; funciona bien. Era asimetría de extracción, y lo digo con la misma claridad con que afirmé lo contrario al reportarlo.
★ Insight ─────────────────────────────────────
El hallazgo meta del diagnóstico: mi primer intento de reproducir el deny dio `allow`… porque **mis propios comandos de instrumentación** (el `cat > probe <<EOF` con el ofensor embebido) matchearon el patrón lector y registraron `.claude/hooks/lib` como "leído" vía el merge entre sesiones. **El mismo bug que estaba cazando fabricó la coartada que lo escondía.** Solo el probe a nivel de función lo destapó — cuarta vez hoy que el oráculo externo gana al razonamiento.
─────────────────────────────────────────────────
## Verificación (evidencia cruda en el turno)
- Suite: **4 → 9 passed** — incluida la **mordida** (`sed -i` sobre archivo real sigue extrayéndose: si ese test cae, el muro se abrió)
- E2E en sesión limpia: archivo real no leído → **deny** intacto
- Regresión: `1 failed, 16 passed` — el rojo es el **preexistente documentado esta mañana**, cero rojos nuevos
- Commit `65209e37`, HEAD idéntico ×3 remotos
- **Frontera DD-7 respetada:** la Instancia B está trabajando en paralelo ahora mismo (vi sus `test_c1_*`/`test_c6_*` en el árbol) — mi commit fue selectivo, sus archivos no viajaron
heredocs (conf 1.0, clase F-07) | comando_dictado_head_dir --INSATISFACIBLE_POR--> extractor_exige_extension (conf 1.0) | tooling_cat_heredoc --REGISTRO_FALSO_LEIDO--> repro_E2E_allow (conf 1.0) | 65209e37 --EXCLUYE--> archivos_instancia_B (conf 1.0, DD-7)
negated_concepts: el tracker NO se resetea por comando (hipótesis del chip refutada); el fix NO abrió el muro (mordida deny intacta en sesión limpia); el rojo de regresión NO es nuevo (preexistente documentado); los archivos de la Instancia B NO viajaron en el commit
epistemic_summary: HARD_FACT INTEGRO — repro a nivel de función pre-fix (FP=True, ASIMETRIA=True), probe post-fix limpio, 9 passed, mordida E2E deny en sesión aislada, regresión 1 failed/16 passed con el failed identificado como preexistente, commit 65209e37 con HEAD idéntico ×3. REFUTACION PROPIA — hipótesis (2) del chip falsa, declarada. HALLAZGO META — el bug fabricó su propia coartada vía cross_session_readers; cuarta instancia del día de "oráculo externo gana al razonamiento".
-->