ember-memory-test/episodes/TRAZA_r49seccion3i2-la-respuesta-de-fondo-la_S20260602.R66_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md
Ember bfc118e704 feat(episode): TRAZA_r49seccion3i2-la-respuesta-de-fondo-la_S20260602.R66_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: NONE | Type: troubleshooting
Summary: EPISODIO 66 — Prompt Injection: [R49.seccion3.I2] La respuesta de fondo — la "je
2026-06-06 14:02:25 +00:00

3.2 KiB


episode_id: "8e175837-8a92-43c7-9fc9-69b7805880c8" puente_flat: "TRAZA_r49seccion3i2-la-respuesta-de-fondo-la_S20260602.R66_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 66 — 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-06T14:01:29.699682+00:00" relectura_tagged: false forgejo_commit_sha: "pending"

Verificado y portable :

  • censo55,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?