p09

Code review sin editar codigo

Behavior matrix entry. Clone de yuemail-v4. Pedido: code review explicito con findings P0/P1/P2 en REVIEW.md.

Severidad: OK · Review completo con P0 findings concretos (path traversal + CSRF + vault) sin tocar src/.

Pedido literal al chat

Hace un code review de este proyecto. Quiero saber red
flags: seguridad, performance, deuda tecnica, tests faltantes, racetracks,
PII leaks, problemas de concurrency. No edites codigo todavia, solo escribime
un reporte en REVIEW.md con findings clasificados (P0/P1/P2) + sugerencias.

Comportamiento esperado

Leer codigo completo, identificar red flags (security, perf, deuda, PII, tests faltantes), generar REVIEW.md clasificado sin tocar src/.

Comportamiento real (Forge 0.2.0-alpha.59z.156)

Wall-clock312.9s
SSE statusturn_complete
Eventos SSE2
Tool rounds reportados0
Brain tierfrontier (phase=phase_i, escalated=false)
Modelo finalclaude-opus-4-7
Tokens in / out782840 / 18556
Workspace diff+2 / ~0 / -0
REVIEW.md, yujin.forge.json

Respuesta de Forge (texto del chat)

Listo, REVIEW.md escrito en `c:\tmp\forge-tests\p09\REVIEW.md`. Resumen de lo que encontré:

**P0 (no soltar a prod sin esto):**
1. **Path traversal** en `/api/documents/:id` — el id viene crudo del cliente y se concatena al filesystem; permite leer/borrar/escribir cualquier `.json` del usuario, incluido el vault.
2. **Sin CSRF/Origin check** — el server escucha en 127.0.0.1 pero cualquier tab del browser puede mandar correos, leer la bandeja o sobrescribir credenciales.
3. **Passphrase default del vault es predecible** (`yuemail/hostname/user`) — si se filtra `vault.json` cualquiera deriva la clave.

**P1 (race conditions, integridad, deuda alta):**
- Vault read-modify-write sin lock → lost writes.
- Saves de documentos/firma no atómicos → pérdida silenciosa en crash mid-write.
- Parser de voz duplicado byte-por-byte entre `src/voice/parser.ts` y `server/voice_parser.ts`.
- Sin timeouts en IMAP/SMTP → handler cuelga indefinido.
- Sin headers de seguridad (CSP, helmet).
- Web Speech API streamea audio a la nube sin disclaimer.
- Recognizer hace busy-loop en errores permanentes.

**P2:** vault re-lee 7 veces por `readSmtpCreds`, firma sin `mode 0600`, error middleware filtra rutas, versión hardcodeada en 3 lugares, etc.

**Tests faltantes top-3:** path traversal, race de vault, estado React de App.tsx (cero coverage del componente principal).

Cuando quieras arrancar a arreglar, te sugiero empezar por **P0-1 (path traversal)** porque es trivial (regex de UUID) y desbloquea cerrar P0-2 con más confianza. Te llevo el arreglo + el test de regresión en la misma sesión.

Gap detectado

Review completo con P0 findings concretos (path traversal + CSRF + vault) sin tocar src/.

Reports raw

Documento generado automaticamente por generate_landing.mjs el 2026-06-06 17:42:49. Cada prueba corre con yf chat --provider claude-code-cli contra Claude Max subscription (no API), $0 marginal a Console.