✔
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-clock | 312.9s |
|---|---|
| SSE status | turn_complete |
| Eventos SSE | 2 |
| Tool rounds reportados | 0 |
| Brain tier | frontier (phase=phase_i, escalated=false) |
| Modelo final | claude-opus-4-7 |
| Tokens in / out | 782840 / 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
c:/tmp/forge-tests/reports/p09.report.json-- snapshot before/after + diffc:/tmp/forge-tests/reports/p09.sse.log-- raw SSE event streamc:/tmp/forge-tests/reports/p09.fs.log-- filesystem write logc:/tmp/forge-tests/p09/-- workspace post-Forge
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.