feat(episode): TRAZA_r49seccion3i2-la-respuesta-de-fondo-la_S20260602.R51_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: troubleshooting
Summary: EPISODIO 51 — Prompt Injection: [R49.seccion3.I2] La respuesta de fondo — la "je
This commit is contained in:
Ember 2026-06-06 03:00:59 +00:00
parent 7b1267bbdc
commit 3f5bc948d0

View file

@ -0,0 +1,55 @@
---
episode_id: "512071d3-5d54-4617-866c-bdb9855c9804"
puente_flat: "TRAZA_r49seccion3i2-la-respuesta-de-fondo-la_S20260602.R51_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260602.GRAFO_GRAPHIFY_CURADURIA"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "NONE"
fase_proyecto: "operations"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 51 — Prompt Injection: [R49.seccion3.I2] La respuesta de fondo — la "jerarquía de o"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-06-06T03:00:12.611527+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
**Verificado y portable** ✅:
- `censo`**55,095 archivos** (subió de 55,070: los 25 nuevos son los `.bak`, flags y docs que creé hoy — coherente).
- `graficar` → cargó 55,095, galería regenerada.
- **`grep` de hardcode → `0` y `0`**: cero rutas absolutas. Mismo resultado, ahora corre en cualquier máquina.
🧪 TEST_POST: ambos verde + 0 hardcode = CRITERIO_ÉXITO cumplido.
## [R49.seccion3.I2] La respuesta de fondo — la "jerarquía de oro" para EMBER
Esto es lo que acabo de demostrar, formulado como regla reutilizable (PROCEDENCIA: síntesis de la investigación web + el `paths.py` que ya teníamos):
| Necesidad | Herramienta canónica |
|-----------|----------------------|
| Posición del propio archivo | `Path(__file__).resolve().parent` |
| Raíz del proyecto | `project_root()` marker-based + `EMBER_ROOT` |
| Worktree-aware (hooks) | `git rev-parse --git-common-dir` (ya en `paths.py`) |
| Config/secretos | `.env` + `pydantic-settings` (separar config del código) |
| Dirs de usuario OS | `platformdirs` (cache/config/data cross-OS) |
## [R49.seccion4.Q1] La recomendación de ecosistema (decisión para ti)
El hallazgo grande: **`.claude/hooks/lib/paths.py` ya es el "single source of truth"** — pero solo lo usan los hooks. Hay **10 archivos más con hardcode** fuera de ese alcance.
La jugada limpia es **generalizar ese módulo**: añadirle el `project_root()` que acabo de probar, para que *cualquier* script del ecosistema importe `from paths import project_root` en vez de repetir el patrón. Eso convierte la deuda dispersa en una sola pieza canónica.
Pero `paths.py` es infra compartida (lo consumen muchos hooks) → tocarlo es de **blast radius medio**. Mi inclinación: (a) generalizar `paths.py` con `project_root()` + (b) barrer los 10 archivos restantes, en un mini-sprint con verificación. Lo que lo cambiaría: si prefieres dejar `paths.py` intacto y solo arreglar scripts nuevos de aquí en adelante.
**¿Avanzo con (a)+(b), o lo dejamos documentado como pendiente?**
## 📌 PILA (R49) — COMPACT
🟠 T-004 [R49] Generalizar paths.py con project_root() + barrer 10 archivos hardcoded — blast medio, espera John [hard]
🟡 T-001 [R48] Ejecución F5 reorganización docs/ — D-ARCH, espera John [hard]
🟡 T-002 [R48] Retrofit frontmatter doc 28%→80% [hard]
🟡 T-003 [R48] Backup/commit triple-remoto (BLINDADA-29) — 1233 edits pending [hard]
⚪ housekeeping [boot] 85 episodios push Qdrant + cosechas B15 [soft]
❓ Q-001 [R49] ¿generalizar paths.py + barrer 10 hardcoded (a+b), o solo documentar pendiente?