# Codex Suite · auto-auditoría y handoff a agente reparador

> **Corte:** 9 de agosto de 2026, ~22:00 Europe/Madrid  
> **Autor:** agente Cursor (motor SDK) sobre `cursor-mobile-bridge`  
> **Método:** inspección directa del workspace, tail de logs, `npm test`, smoke IDE↔Suite, event log durable, lectura de docs canónicos y código ya identificado en el hilo IDE.  
> **No se modificó código de producto** en esta pasada; solo verificación y documentación.

---

## 1. Veredicto ejecutivo

**Codex Suite está operativa como plataforma local** (bridge `:8095` OK, 163/163 tests, sync IDE JSONL OK), pero **no está lista para operación sin supervisión** por tres bloqueadores P0 verificados hoy:

| ID | Severidad | Hallazgo |
|----|-----------|----------|
| **P0-GIT** | Crítico | Repositorio Git inutilizable (`.git` vacío) |
| **P0-SEC16** | Crítico | Vault heredado expone valores `.env` a sesión autenticada |
| **P0-FM** | Alto | Motor Codex App Server (`freemodel`) falla con saldo insuficiente; turnos quedan `interrupted` |

El resto son deudas P1/P2 (MCP ruidoso, watchdog bandeja, drift documental, migración `.16`, límites de replay).

---

## 2. Evidencia verificada hoy

### 2.1 Salud del sistema

| Comprobación | Resultado | Evidencia |
|--------------|-----------|-----------|
| `GET /health` | **200** | `curl` local 9 ago 22:00 |
| `npm test` | **163/163 OK** (~3.1 s) | salida Node test runner |
| `tools/smoke-ide-suite-sync.mjs` | **OK** (6/6) | JSONL UUID, append, binding, composer read-only |
| Bridge startup log (tail 80) | Arranques OK; watchdog bandeja recurrente | `data/bridge-startup.log` |
| PWA cache | `codex-suite-shell-v50` | `static/codex-suite/service-worker.js` |
| Módulos `lib/codex-*.js` | **41** | conteo directo (STATUS corte 8 ago decía 39) |
| `server.js` | **~83.8 KB** | anfitrión aún monolítico |

### 2.2 Event log durable (tail)

Último turno Codex App Server en workspace bridge (`threadId` `019fe810-…`):

```
401 Unauthorized: {"error":"Insufficient balance"}
url: https://api.freemodel.dev/responses
→ Reconnecting 1/5 … 4/5
→ bridge/turnRecovered
→ turn/completed status: "interrupted" (57 s)
```

**Interpretación:** el proveedor `freemodel` rechaza inferencia; la UI puede mostrar recuperación pero el turno no produce respuesta útil. No hay mapeo explícito a español para `"Insufficient balance"` en `lib/` (grep sin coincidencias).

### 2.3 MCP ruidoso (no bloqueante pero recurrente)

En el mismo tramo del event log:

- `github` → `GITHUB_PAT_TOKEN` no definido
- `the-cloud-445dcd` → MCP no logueado (`codex mcp login …`)

Cada nuevo thread reintenta y emite eventos `mcpServer/startupStatus/updated` con `failed`.

### 2.4 Router automático / evals

`storage/codex-model-evals/workspace-quality.json` (workspace CaptaJaus, no bridge):

- Modo automático **enabled**
- `huggingface/Qwen/Qwen3-Coder-Next`: circuito **`degraded`** (`lastFailureAt` 2026-08-09T19:38:32Z)
- Varios modelos en `failed` (groq, cohere, nvidia_nim)

**Riesgo:** selección automática puede degradarse sin aviso claro al operador si el workspace activo depende de esos modelos.

### 2.5 Sync IDE ↔ Suite

Smoke confirma canal canónico operativo:

- Transcript creado: `2e8104e0-2213-4fdd-96eb-b2b1f7b54732`
- Path: `%USERPROFILE%\.cursor\projects\c-xampp-htdocs-cursor-mobile-bridge\agent-transcripts\…`
- Composer privado: `overlap=0`, `total=200` headers (lectura OK; sin solapamiento UUID en este workspace)

Análisis previo implementado: [CODEX-SUITE-IDE-COMPOSER-SYNC-ANALYSIS-2026-08-09.md](CODEX-SUITE-IDE-COMPOSER-SYNC-ANALYSIS-2026-08-09.md).

### 2.6 Git

```text
.git/          → existe como directorio
.git/*         → vacío (sin HEAD, config, objects)
git status     → fatal: not a git repository
```

Imposible: commits, rollback por Git, ramas, recuperación documentada en roadmap §0.5.

### 2.7 SEC-16 · Vault heredado

Código activo en `server.js`:

```701:712:server.js
app.get('/api/credentials/vault', authMiddleware, (_req, res) => {
  try {
    res.json(buildCredentialsVault(HTDOCS_ROOT, workspaceIndex));
  } catch (err) {
    res.status(500).json({ ok: false, message: err?.message || String(err) });
  }
});
app.get('/api/credentials/project/:key', authMiddleware, (req, res) => {
  const project = getProjectCredentials(req.params.key, HTDOCS_ROOT, workspaceIndex);
  if (!project) return res.status(404).json({ ok: false, message: 'Proyecto sin .env' });
  res.json({ ok: true, project });
});
```

Contradice diseño write-only de Codex Suite y amplía blast radius de sesión comprometida. Registrado en STATUS §Resincronización 3 ago y ROADMAP §Legacy Guardrails.

---

## 3. Matriz de hallazgos completa

### P0 · Reparar antes de confiar en producción

| ID | Área | Descripción | Impacto |
|----|------|-------------|---------|
| P0-GIT | Infra | `.git` vacío | Sin historial, sin rollback Git, roadmap §0.5 bloqueado |
| P0-SEC16 | Seguridad | `/vault` + `/api/credentials/*` devuelven `.env` | Exposición de secretos a cualquier sesión bridge válida |
| P0-FM | Runtime | `freemodel` → 401 Insufficient balance | Turnos Codex App Server interrumpidos; motor por defecto inutilizable |
| P0-UX-FM | UX | Sin mensaje español claro para saldo agotado | Operador ve "Reconnecting…" / turno interrumpido sin acción clara |

### P1 · Degradación operativa

| ID | Área | Descripción |
|----|------|-------------|
| P1-MCP | Integraciones | GitHub MCP y the-cloud fallan en cada thread por credenciales |
| P1-WDG | Ops Windows | Watchdog: `icono bandeja ausente — relanzando` (múltiples entradas 6–9 ago) |
| P1-DOC | Documentación | STATUS mezcla cortes v27–v50; cabecera "corte 8 ago" vs realidad v50/163 tests/41 módulos |
| P1-EVAL | Model router | Circuito degradado en Qwen3-Coder-Next; auto-mode sin evals en workspace bridge |
| P1-SRV | Arquitectura | `server.js` ~84 KB con vault, hub, launcher, chat jobs fuera de módulos Codex |

### P2 · Límites conocidos / roadmap

| ID | Área | Descripción |
|----|------|-------------|
| P2-REPLAY | SSE | Buffer memoria 1000 eventos; replay completo no durable |
| P2-CHK | Checkpoints | Pending snapshot puede perderse en crash abrupto del proceso |
| P2-M16 | Migración | Evolution/Baileys timeout; FCC remoto no desplegado (STATUS §8 ago noche) |
| P2-CMP | Composer | `overlap=0` en smoke bridge — puede ser normal o mapeo slug; investigar si se necesita join |
| P2-PRJ | Producto | Creación proyecto bajo `htdocs` y vault multi-clave aún no implementados |

---

## 4. Lo que funciona bien (no tocar sin motivo)

- Modular Foundation backend 0.1–0.3 y frontend 0.2 cerrados.
- Persistencia versionada (`codex-persistence.js`), Event Log durable 1.2, Pending Checkpoints 1.1.
- Sync IDE v1 premium: bindings, newChat JSONL, append enriquecido, picker, tests 154+.
- Fixes recientes 9 ago: listado threads, multi-create mutex, sesiones Cursor SSE, shell sin rollout.
- Seguridad v1: bootstrap sin secretos, cookie HttpOnly, CORS restringido (tests 159–163).
- Cursor SDK como motor alternativo: job `cs-1786305313328-…` **running** con herramientas en vivo.

---

## 5. Decisiones pendientes (elegir antes de implementar)

### 5.1 Git (P0-GIT)

| Opción | Acción | Pros | Contras |
|--------|--------|------|---------|
| **A** | `git init` + commit baseline | Rápido, desbloquea roadmap | Pierde historial previo |
| **B** | Restaurar `.git` desde backup externo | Recupera historial si existe | Requiere copia no verificada hoy |
| **C** | Clonar a repo remoto nuevo | CI/CD futuro | Migración manual de secretos ignorados |

**Recomendación:** A + `.gitignore` auditado + commit inicial hoy, si no hay backup local.

### 5.2 Vault SEC-16

| Opción | Acción | Pros | Contras |
|--------|--------|------|---------|
| **A** | Retirar rutas; 410 + doc migración a Control | Máxima seguridad | Rompe clientes `/vault` legacy |
| **B** | Metadata-only (nombres de keys, sin valores) | Compat parcial | Sigue filtrando estructura |
| **C** | Deprecate + banner; corte en 30 días | Transición suave | Ventana de riesgo |

**Recomendación:** A en bridge + redirección UI a Codex Suite Control (write-only).

### 5.3 Motor por defecto freemodel (P0-FM)

| Opción | Acción |
|--------|--------|
| **A** | Recargar cuenta / cambiar API freemodel en `~/.codex` |
| **B** | Cambiar default workspace bridge a motor **Cursor SDK** en Suite |
| **C** | Implementar fallback automático App Server → Cursor SDK cuando HTTP 401 balance |
| **D** | Mapear error a banner español + enlace Control → Modelos |

**Recomendación:** D inmediato (UX) + B o C según preferencia operativa.

---

## 6. Prompt para otro agente (copiar y pegar)

```markdown
# Misión: reparación P0 Codex Suite / cursor-mobile-bridge

## Contexto
Proyecto: `C:\xampp\htdocs\cursor-mobile-bridge`
Documento auditoría: `docs/CODEX-SUITE-SELF-AUDIT-2026-08-09.md`
Estado canónico: `docs/CODEX-SUITE-STATUS.md`
Roadmap: `docs/CODEX-SUITE-ROADMAP.md`

Bridge operativo en :8095. Tests: 163/163 OK. PWA v50.
NO hacer grep/glob recursivos en vendor/node_modules.
Logs: solo tail 50–100 líneas.

## Objetivo
Cerrar los hallazgos P0 verificados el 9 ago 2026, en este orden:

### Tarea 1 · SEC-16 Vault heredado (crítico)
- Archivos: `server.js` (~L698–712), posible `static/vault/`, helpers de credentials.
- Retirar o redactar `/api/credentials/vault` y `/api/credentials/project/:key` para que NO devuelvan valores de `.env`.
- Preferencia producto: metadata-only o 410 Gone + mensaje español apuntando a Codex Suite Control (write-only).
- Añadir/actualizar test en `test/security-hardening.test.js` o nuevo test de regresión.
- Verificar que `/codex-suite` Control sigue permitiendo escritura de API key sin lectura posterior.

### Tarea 2 · UX freemodel saldo agotado (alto)
- Evidencia: `storage/codex-event-log/events.jsonl` tail — 401 `Insufficient balance` en `api.freemodel.dev`.
- Archivos probables: `lib/codex-chat.js`, `static/codex-suite/modules/chat.js`, manejo errores SSE/App Server.
- Mostrar banner/toast en español claro: saldo agotado, cambiar modelo/proveedor o usar motor Cursor.
- NO auto-reintentar 5 veces sin feedback al usuario.
- Test unitario del formateador de error si existe (`formatAgentError` pattern).

### Tarea 3 · Git baseline (crítico infra)
- `.git/` existe pero está vacío; `git status` falla.
- Tras confirmar con operador (o asumir sin backup): `git init`, revisar `.gitignore`, commit baseline.
- NO commitear `.env`, `storage/` con secretos, ni auth.
- Documentar en STATUS §0.5 el cierre o la opción elegida.

## Restricciones
- Cambios mínimos; seguir convenciones existentes.
- Ejecutar `npm test` al final; debe seguir 163+ pass.
- Opcional: `node tools/smoke-ide-suite-sync.mjs`.
- Responder en español; actualizar solo docs tocados por los cambios.

## Entregables
1. PR/commit(s) con fixes P0.
2. Entrada breve en `docs/CODEX-SUITE-STATUS.md` (corte 9 ago noche) con evidencia de verificación.
3. Lista de P1 diferidos (MCP ruidoso, watchdog bandeja, drift doc).

## P1 diferido (solo si queda tiempo)
- Silenciar o degradar MCP github/the-cloud cuando falten credenciales (menos ruido en event log).
- Sincronizar números en STATUS (41 módulos, 163 tests, v50).
- Investigar watchdog `icono bandeja ausente` en scripts de arranque Windows.
```

---

## 7. Checklist de verificación post-reparación

Oleada reparadora 9 ago noche (PWA v51):

- [x] `GET /api/credentials/vault` → **410** `credentials_vault_retired` (sin valores `.env`)
- [x] Turno freemodel sin saldo: mapeo español (`explainProviderBalanceError` / `formatAgentError` + notice en chat)
- [x] `git status` funciona tras `git init`; **commit baseline pendiente** (operador)
- [x] `npm test` ≥ 163 pass → **166/166**
- [x] `node tools/smoke-ide-suite-sync.mjs` OK
- [x] STATUS actualizado con corte P0 audit + sesiones

---

## 8. Referencias cruzadas

| Documento | Relación |
|-----------|----------|
| [CODEX-SUITE-STATUS.md](CODEX-SUITE-STATUS.md) | Fuente canónica estado producto |
| [CODEX-SUITE-ROADMAP.md](CODEX-SUITE-ROADMAP.md) | Fases 0.5 Git, 0.4 guardrails, 1.3 Evidence Graph |
| [CODEX-SUITE-IDE-COMPOSER-SYNC-ANALYSIS-2026-08-09.md](CODEX-SUITE-IDE-COMPOSER-SYNC-ANALYSIS-2026-08-09.md) | Sync IDE v1 (OK) |
| [CODEX-SUITE-AUDIT-BRAINSTORM-2026-08-08.md](CODEX-SUITE-AUDIT-BRAINSTORM-2026-08-08.md) | Auditoría previa; varios ítems ya cerrados (0.3, v50) |
| [CODEX-SUITE-CONTROL-GUIDE.md](CODEX-SUITE-CONTROL-GUIDE.md) | Destino write-only para credenciales |

---

## 9. Meta · esta conversación

La petición original pedía **analizar la propia aplicación como IA avanzada, detectar fallos y preparar prompt para otro agente**. Este documento cumple ese mandato:

1. **Análisis** → §2–3 con evidencia ejecutada, no supuestos.
2. **Fallos** → P0/P1/P2 priorizados.
3. **Prompt otro agente** → §6 listo para copiar.
4. **Decisiones** → §5 con opciones concretas antes de modificar.

El turno Codex App Server que originó esta petición quedó **`interrupted`** por freemodel; el análisis se completó vía **motor Cursor SDK** (job activo en `data/chat-jobs/cs-1786305313328-1a6xqvkb.json`).
