Proyecto Supuestos y dependencias - MiraPdS/mira GitHub Wiki
Proyecto - Supuestos y dependencias
Condiciones que el equipo asumió al construir Mira y factores externos que
pueden afectar el proyecto. Cada uno tiene un ID estable para poder citarlo
desde las páginas de entrega ("aplica S-03") y una fuente verificable.
Los IDs no se reutilizan: si un supuesto deja de valer, se marca como
retirado y se explica por qué, sin borrar la fila.
Supuestos
Alcance
| ID |
Supuesto |
Riesgo si no se cumple / mitigación |
Fuente |
| S-01 |
Los Sprints, aunque los pide el enunciado, se difieren a la Entrega 2 (MIR-30). La Entrega 1 se centra en el CRUD y el tablero. |
Que se evalúe como requisito faltante. Mitigación: se declara aquí y en la página de la Entrega 1; WorkItem.sprintId ya existe como campo opcional, así que sumarlos no rompe datos. |
Tema 2, backlog |
| S-02 |
Las columnas del tablero son fijas en la Entrega 1 (BACKLOG, TODO, IN_PROGRESS, IN_REVIEW, DONE); hacerlas configurables es requerimiento de la Entrega 2 (MIR-31). |
Un equipo con otro flujo no puede adaptarlo aún. Mitigación: la migración de enum a tabla está prevista y aislada. |
D8 |
| S-03 |
No hay organizaciones ni multi-equipo: cada proyecto es independiente (MIR-32 en la Entrega 2). |
Proyectos de una misma empresa no se agrupan. Mitigación: Project.organizationId ya existe como campo opcional. |
backlog |
| S-04 |
Los roles son tres y fijos por proyecto: OWNER, MEMBER, VIEWER. No hay roles configurables ni rol global de administrador. |
Un permiso intermedio no se puede expresar. Mitigación: toda la autorización pasa por can(), así que agregar un rol es un cambio en un solo lugar, cubierto por la prueba de tabla. |
D7 |
Producto
| ID |
Supuesto |
Riesgo si no se cumple / mitigación |
Fuente |
| S-05 |
La interfaz es solo en español. |
Usuarios de otro idioma. Mitigación: los textos están en los componentes; internacionalizar es trabajo acotado si se pide. |
— |
| S-06 |
No hay verificación de correo ni recuperación de contraseña: no se envían correos. |
Un usuario que olvida su clave no puede recuperarla por sí mismo. Mitigación: aceptable para un MVP sin datos reales; se reevalúa si Mira se usa fuera del ramo. |
rutas de auth: solo register, login, logout, me |
| S-07 |
Para agregar a alguien a un proyecto, esa persona ya debe tener cuenta: la "invitación" es por correo de un usuario existente, sin enlace ni correo de invitación. |
Flujo menos natural que una invitación real. Mitigación: la API responde USER_NOT_FOUND y la UI lo explica. |
MIR-9, addMemberSchema |
| S-08 |
La sesión dura 7 días y no se renueva sola; no hay "cerrar sesión en todos los dispositivos". |
Un token robado vale hasta que expira. Mitigación: cookie httpOnly (no la lee JavaScript), Secure y SameSite=Lax. |
D3, lib/jwt.ts |
| S-09 |
Se usan navegadores modernos de escritorio y móvil (Chrome, Firefox, Safari, Edge recientes) con JavaScript habilitado. |
Navegadores antiguos no funcionan. Mitigación: ninguna, fuera de alcance. |
— |
Ambiente de demostración
| ID |
Supuesto |
Riesgo si no se cumple / mitigación |
Fuente |
| S-10 |
El ambiente desplegado es una demo, no producción: solo datos de prueba y credenciales públicas a propósito ([email protected] / demo1234). |
Que alguien cargue datos reales. Mitigación: se advierte en README y aquí. |
despliegue.md |
| S-11 |
La demo despliega solo la rama main, es decir, el último release. |
Lo que está en develop no se ve en la demo hasta el release. Mitigación: despliegue manual de una rama para probar antes de un release. |
despliegue.md |
| S-12 |
Las previews de Vercel usan la misma API y la misma base que la demo. |
Probar en una preview modifica los datos de la demo. Mitigación: las previews solo se usan para revisar cambios de frontend. |
D13 |
Equipo y proceso
| ID |
Supuesto |
Riesgo si no se cumple / mitigación |
Fuente |
| S-13 |
Cada integrante tiene Node ≥ 20.11, npm ≥ 10 y Docker Desktop. |
Sin Docker no corren las pruebas de integración en local. Mitigación: npm run test:unit funciona sin Docker, y CI corre todo. |
D6 |
| S-14 |
Todo cambio entra a develop por PR revisado por otro integrante, y a main solo por PR de release con CI verde. |
Cambios sin revisar. Mitigación: main protegida con checks obligatorios y una aprobación. |
CONTRIBUTING |
| S-15 |
La Wiki se edita solo desde docs/wiki/ por PR; un workflow la sincroniza. |
Una edición directa en GitHub se pierde en el siguiente sync. Mitigación: cada página lo advierte y está en CONTRIBUTING. |
.github/workflows/wiki.yml |
Dependencias externas
| ID |
Dependencia |
Para qué |
Riesgo / mitigación |
| D-EXT-01 |
Vercel (Hobby) |
Servir el frontend y reenviar /api a Render |
Cambio de condiciones del plan gratuito. Mitigación: SPA estática; se mueve a otro host cambiando solo el rewrite. |
| D-EXT-02 |
Render (Free) |
Ejecutar la API |
Arranque en frío de 30-60 s tras 15 min sin tráfico; 750 h/mes por cuenta. Mitigación: pinger cada 5 min y un solo servicio free en la cuenta. |
| D-EXT-03 |
Supabase (Free) |
PostgreSQL del ambiente desplegado |
Pausa del proyecto tras 7 días sin actividad. Mitigación: el pinger toca la base vía /api/health; si se pausa, "Restore project". |
| D-EXT-04 |
UptimeRobot (Free) |
Mantener despiertas la API y la base |
Si deja de pinguear vuelven el arranque en frío y la pausa. Mitigación: abrir /api/health antes de cada demo. |
| D-EXT-05 |
GitHub (repositorio, Actions, Wiki) |
Código, CI obligatorio para main, Wiki |
Caída o límite de minutos de Actions. Mitigación: repositorio público (minutos ilimitados); todo se puede correr en local. |
| D-EXT-06 |
Jira (Atlassian Cloud) |
Backlog, tablero Kanban y trazabilidad de items |
Pérdida del tablero. Mitigación: docs/backlog.md y jira-import.csv permiten reimportarlo. |
| D-EXT-07 |
npm y librerías clave: Prisma, Express, React, TanStack Query, dnd-kit, Zod, Vitest, React Testing Library, MSW, Supertest |
Todo el código de la aplicación y sus pruebas |
Cambio incompatible en una versión mayor. Mitigación: package-lock.json versionado y npm ci en CI y en los despliegues. |
| D-EXT-08 |
Docker (postgres:16) |
PostgreSQL local de desarrollo y pruebas, y servicio en CI |
Sin Docker no hay pruebas de integración. En la Entrega 2 el agente de Jenkins también lo necesita (D4). |
Limitaciones tecnológicas conocidas
- El arrastre de tarjetas es difícil de automatizar de forma estable con
Selenium; por eso existe el menú "Mover a…" como camino alternativo
(D9).
prisma migrate no funciona a través del pooler de Supabase y la conexión
directa es solo IPv6, que Render no soporta: se usa el session pooler
(despliegue.md).
- Las migraciones corren mientras la versión anterior sigue atendiendo: borrar
o renombrar columnas se hace en dos releases.