feat(episode): TRAZA_lo-que-cerr-y-el-orden-que-eleg_S20260726.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: ATLAS | Type: advisory Summary: EPISODIO 1 — HANDOFF_PROMPT.md: Lo que cerré, y el orden que elegí
This commit is contained in:
parent
5b7a59df02
commit
8a0f65233a
1 changed files with 35 additions and 0 deletions
|
|
@ -0,0 +1,35 @@
|
|||
---
|
||||
episode_id: "325dda00-9dda-4f67-aed5-734f4eff502e"
|
||||
puente_flat: "TRAZA_lo-que-cerr-y-el-orden-que-eleg_S20260726.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
|
||||
session_code: "S20260726.ARCO_CICLO4_AUTOMEJORA"
|
||||
acto_dialogico: "informar"
|
||||
actor_flujo: "multi_actor"
|
||||
criticidad_aegis: "low"
|
||||
skill_dominante: "ATLAS"
|
||||
fase_proyecto: "operations"
|
||||
tipo_semantico: "advisory"
|
||||
summary_one_line: "EPISODIO 1 — HANDOFF_PROMPT.md: Lo que cerré, y el orden que elegí"
|
||||
source_type: "claude_code"
|
||||
trust_boundary: "internal"
|
||||
created_at: "2026-07-27T05:13:50.906885+00:00"
|
||||
relectura_tagged: false
|
||||
forgejo_commit_sha: "pending"
|
||||
---
|
||||
|
||||
Terminado. **4/4 commits de la jornada en los tres remotos**, verificado por contención (`merge-base`), no por el mensaje del push.
|
||||
|
||||
## Lo que cerré, y el orden que elegí
|
||||
|
||||
Prioricé por **desbloqueo en cadena**, no por severidad — y resultó ser lo correcto porque los pendientes estaban encadenados sin que se notara: **D3 → tema EMBER → hints del gate → detector del gate → cierres formales**.
|
||||
|
||||
**#5 D3 protegía por sufijo de nombre.** `CRITICAL_PROJECT_FILES` lista `.claude/settings.json` y el match era `endswith`, así que tu settings **global** (fuera del repo) se trataba como infra del ecosistema. El daño no era el bloqueo falso: el guardián **confundía dos archivos distintos con el mismo nombre**, y el crítico es el del proyecto. Ahora el root se deriva de `__file__` —no del `cwd`, que en el proceso hook no siempre es la raíz— y sale si el path cae fuera, con fail-safe hacia "dentro" para que un error mío nunca abra el guard.
|
||||
|
||||
**Y eso desbloqueó el tema.** El mismo Edit que la sesión rechazó al empezar pasó al final: `theme = "custom:ember"` está activo, apuntando a tu `ember.json` con los 11 tokens de la paleta canónica. Al reiniciar verás el naranja brasa en el spinner.
|
||||
|
||||
**#6 y #7 — el gate pedía cosas que no verifican.** Tres defectos medidos: dictaba `ast.parse(open(X))`, que revienta con cp1252 sobre cualquier archivo con acentos; dictaba `python test_x.py` para suites pytest-only, donde da exit 0 sin ejecutar **nada** —y medí que **70 suites** del repo están así—; y su detector usaba `.*` greedy, capturando `d.py` en vez del path, de modo que **obedecerle no contaba como cumplimiento**. Eso explica los tres bloqueos que me comí tras dos ejecuciones válidas. Añadí también `json.tool`, que el gate dicta y su detector tampoco reconocía.
|
||||
|
||||
**El test es de invariante, no de casos.** [test_gate_dicta_lo_que_reconoce.py](.claude/hooks/test_gate_dicta_lo_que_reconoce.py) fija la propiedad: *todo comando que el gate dicta debe ser ejecutable y reconocido por su propio detector*. Cierra la clase, no los síntomas. Y encontró un error **en mi propio test**: supuse que `~` era entrada inválida cuando resuelve al home y está legítimamente fuera del repo. Lo dejé anotado ahí, porque ilustra para qué sirve de verdad un control positivo.
|
||||
|
||||
## Los dos que decidí no arreglar
|
||||
|
||||
No los dejé en el limbo: están cerrados con la razón escrita en [CIERRE_S20260727_jornada_guardianes.md](docs/CIERRE_S20260727_jornada_guardianes.md).
|
||||
Loading…
Reference in a new issue