feat(episode): TRAZA_verificado-y-tu-instinto-destap-algo-me_S20260705.R23_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: NONE | Type: troubleshooting Summary: EPISODIO 23 — ember-mcp: Verificado — y tu instinto destapó algo mejor
This commit is contained in:
parent
40592a56d0
commit
4105deac5b
1 changed files with 43 additions and 0 deletions
|
|
@ -0,0 +1,43 @@
|
|||
---
|
||||
episode_id: "0d395ffc-e78f-4702-8ee4-f3eff5aceef8"
|
||||
puente_flat: "TRAZA_verificado-y-tu-instinto-destap-algo-me_S20260705.R23_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
|
||||
session_code: "S20260705.EVAL_INSTRUMENT_FORGE_SKILL"
|
||||
acto_dialogico: "informar"
|
||||
actor_flujo: "multi_actor"
|
||||
criticidad_aegis: "low"
|
||||
skill_dominante: "NONE"
|
||||
fase_proyecto: "operations"
|
||||
tipo_semantico: "troubleshooting"
|
||||
summary_one_line: "EPISODIO 23 — ember-mcp: Verificado — y tu instinto destapó algo mejor"
|
||||
source_type: "claude_code"
|
||||
trust_boundary: "internal"
|
||||
created_at: "2026-07-12T15:16:09.949766+00:00"
|
||||
relectura_tagged: false
|
||||
forgejo_commit_sha: "pending"
|
||||
---
|
||||
|
||||
# Verificado — y tu instinto destapó algo mejor
|
||||
|
||||
Commit `5e8a876`, push 3/3.
|
||||
|
||||
**La respuesta directa a tu pregunta:** revisé el código, y **no, no fabriqué una entrega de la API key de OpenRouter vía hook.** El único hook de inyección de credencial que existe es [`pre-tool-ember-auth-inject.py`](.claude/hooks/pre-tool-ember-auth-inject.py), y verifiqué línea por línea que:
|
||||
- Solo actúa sobre llamadas que terminan en `__ember_authenticate` (línea 33) — el auth del servidor MEMORIA.
|
||||
- Inyecta el campo `passphrase` (línea 42), no una API key.
|
||||
- Lee de `.claude/secrets/ember_passphrase.txt` (línea 5).
|
||||
|
||||
Para Gemini/OpenRouter **ese hook no sirve** (otro tool, otra credencial), y además su inyección está rota en el harness Windows. Así que no había entrega automática de la key — tu memoria mezclaba ese hook con el flujo de OpenRouter.
|
||||
|
||||
## Pero tu instinto apuntaba a algo real y lo aproveché
|
||||
|
||||
Ese hook me mostró el **patrón de secretos de EMBER**: un archivo de texto plano en `.claude/secrets/` que se lee sin que el modelo vea el valor. Verifiqué que `.claude/secrets/openrouter_key.txt` **está gitignoreado** (`git check-ignore` lo confirma) y que **cero secretos están trackeados**. Así que cablé el harness para leer la key de ahí.
|
||||
|
||||
**Resultado: tu paso se simplificó a UN archivo, sin exports.** Ahora tienes dos opciones (ambas funcionan, la primera es la recomendada):
|
||||
|
||||
| Opción | Qué creas | Ventaja |
|
||||
|---|---|---|
|
||||
| **A (recomendada)** | `.claude/secrets/openrouter_key.txt` con **la key pelada** (solo `sk-or-v1-...`) | Patrón nativo EMBER, gitignored, y yo la leo directo — **no hay que exportar nada** |
|
||||
| **B** | `.env.local` con `OPENROUTER_API_KEY=sk-or-v1-...` | La del instructivo anterior |
|
||||
|
||||
`_load_key()` prueba primero el entorno, luego el archivo de secrets — verificado corriendo (`key detectada: False` sin archivo, ruta resuelta correctamente).
|
||||
|
||||
⚠️ Igual que antes: **la key va al archivo, no al chat.**
|
||||
Loading…
Reference in a new issue