Skill: NONE | Type: troubleshooting Summary: EPISODIO 34 — Prompt Injection: [R49.seccion3.I2] La respuesta de fondo — la "je
3.2 KiB
episode_id: "854334e7-d0c8-4baa-8f1c-268a063662ca" puente_flat: "TRAZA_r49seccion3i2-la-respuesta-de-fondo-la_S20260602.R34_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 34 — 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-03T03:26:22.263279+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.grepde hardcode →0y0: 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?