"¿Quién está con qué?" only listed people with open tickets. The tracking page now shows the whole team: every member with their role and open tickets (0 included), busiest first, plus former members who still have tickets and the unassigned count. Each person links to the board filtered by them: the board accepts ?assignee= like ?release=. Role colours move to ui/copy.ts (shared with the members page). Docs and Word/PDF updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4.8 KiB
4.8 KiB
1. Visión general
Qué resuelve
| Necesidad | Cómo se resuelve |
|---|---|
| 🐛 Bugs | Tickets de tipo BUG con prioridad, área y etiquetas |
| 🎨 Cambios de UI | Tipo UI_CHANGE con enlace al frame de Figma (validado contra figma.com) |
| ⚙️ Features | Tipo FEATURE siguiendo el workflow completo |
| 🧪 QA | Estados READY_FOR_QA → IN_QA → DONE / QA_FAILED; fallar QA exige un motivo |
| 🚀 Releases | Versiones a las que se asignan tickets; no se publican con tickets sin terminar (salvo forzando) |
| 👥 Asignaciones | Solo a miembros del proyecto; panel de carga por persona |
| 💬 Comentarios | Decisiones y explicaciones dentro del ticket; el autor edita, el admin modera |
| 🔗 Relaciones | BLOCKS, DEPENDS_ON, TESTS, DUPLICATES, RELATES_TO, también entre proyectos (FE ↔ BE ↔ QA) |
| 📊 Seguimiento | Panel con contadores, flujo por estado, el equipo con sus tickets abiertos (enlaza a su tablero), feed de actividad e historial por ticket |
| ⚡ Tiempo real | Tablero, comentarios, actividad, releases y membresías se actualizan solos (GraphQL subscriptions) |
Los usuarios no se gestionan aquí: vienen del servidor de identidad Pireon
(Swagger). TaskStream gestiona proyectos, membresías y roles por
proyecto (OWNER, ADMIN, MEMBER, VIEWER).
Stack
| Pieza | Tecnología |
|---|---|
| Monorepo | Nx 23 |
| API | NestJS 11, @nestjs/cqrs, GraphQL (Apollo Server 5, code-first) con subscriptions graphql-ws |
| Escritura | PostgreSQL 17: event store + tablas de lookup (TypeORM) |
| Escritura → lectura | Redis 7: Redis Stream (eventos) y pub/sub (tiempo real); también caché de sesiones |
| Lectura | MongoDB 8: vistas desnormalizadas (Mongoose) |
| Identidad | Pireon (OAuth2 / Laravel Passport) |
| Cliente | Angular 22 (standalone, zoneless, Signal Forms), NgRx Signals (plugin de eventos), Apollo Angular, @pi/ui |
| Tests | Jest (API), Vitest (web), e2e de la API contra Docker |
| Despliegue | Docker: imagen Node de la API y nginx para la web |
Estructura del monorepo
apps/
api/ composición de la API (NestJS): config, GraphQL, conexiones, e2e
web/ composición del cliente (Angular): rutas, providers, estilos, nginx
libs/
api/{shared,identity,tracker}/{domain,application,infrastructure,presenters}
web/{shared,identity,tracker}/{domain,application,infrastructure,presenters} (+ web/shared/ui)
docs/ esta documentación
codegen.ts tipos GraphQL del cliente generados desde apps/api/schema.gql
Dockerfile dos destinos: api y web
docker-compose.yml
API y web comparten la misma estructura: contexto (shared, identity, tracker) × capa (domain,
application, infrastructure, presenters). Los imports siguen el mismo patrón:
@task-stream/api/tracker/domain, @task-stream/web/tracker/application…
Contextos
- shared: piezas comunes. En la API, event store, Redis,
VersionedAggregateRoot, errores de dominio. En la web, el cliente GraphQL y la integración de@pi/ui. - identity: quién es el usuario (Pireon), sesiones, inicio de sesión y autorización global.
- tracker: el producto (proyectos, tickets, comentarios, releases, actividad).