- The web pings the live connection, reconnects when it goes quiet and reloads what each screen shows after reconnecting. - Dropping a card on a column it cannot go to puts it back. - Owners and admins get a notice when a proposal arrives. - The proposal limit lives in Redis, so it holds across instances. - REST tells whether I voted; pasted images leave the attachment list. - Deleting a project removes its Git integration; no lint warnings left. - Reactions and the blocked badge are components of their own. - Docs: what is done and what is left (chapter 10), Word and PDF. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
68 lines
7.1 KiB
Markdown
68 lines
7.1 KiB
Markdown
# 10. Lo que queda
|
|
|
|
Lo pendiente, ordenado de más a menos urgente: primero lo que hace falta para dar el producto por terminado en
|
|
producción, después los fallos y la deuda conocidos y al final las ideas. Cada punto dice qué es, por qué importa y,
|
|
cuando hay pistas, por dónde empezar.
|
|
|
|
## 10.1 Para dar el producto por terminado
|
|
|
|
| Qué | Por qué | Por dónde empezar |
|
|
| ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
| Comprobar en producción que el tiempo real ya no se pierde | Ya hay _ping_ cada 10 s, reconexión si no hay respuesta y recarga de cada pantalla al reconectar, pero no se ha probado allí | Dejar una pestaña abierta más que la vida del token y tras suspender el portátil, y mover tickets desde otra. Si aún falla, mirar el token de `connectionParams`, que solo se manda al conectar |
|
|
| Pruebas de navegador en la integración continua | Los fallos del tablero (no se podía arrastrar entre columnas) y de la ficha (no se refrescaba) solo se vieron usándolo | Ya existe la receta: API real con usuarios simulados (`IdentityProvider` sustituido), `nx serve web` y Playwright con la sesión en `localStorage` (`task-stream.session`). Convertirla en `apps/web-e2e` |
|
|
| Copias de seguridad de Postgres y Mongo | Postgres guarda el event store, la fuente de verdad; Mongo se puede reconstruir desde él, Postgres no | Copias programadas en Dokploy y **una restauración de prueba** |
|
|
| Limpiar los datos de prueba de producción | DEMO, TEST y los tickets de las pruebas del MCP | Borrar los proyectos desde Configuración (borrado definitivo con su clave) |
|
|
| Registrar el webhook del cliente de contraseña en Pireon | Sin él, revocar un token de quien entra con contraseña no se nota hasta que caduca la caché | Solo si `PIREON_PASSWORD_CLIENT_ID` tiene valor: webhook en ese cliente y su secret en `PIREON_PASSWORD_WEBHOOK_SECRET` (ver [Autenticación](05-autenticacion.md)) |
|
|
| Una versión 1.0 | Un punto fijo al que volver | Desplegar todo, etiquetar `v1.0.0` y redactar la lista de cambios (las notas de versión de TaskStream dan el borrador) |
|
|
| Revisión de seguridad | Hay rutas sin sesión (proyectos públicos, escaparate, propuestas) y un MCP abierto a Internet | Permisos por rol, qué ve un anónimo, límites de peticiones (solo las propuestas tienen), CORS, cabeceras |
|
|
| Registro de errores en producción | Hoy un fallo solo se conoce si alguien avisa | Sentry (o similar) en la API, la web y el MCP |
|
|
|
|
## 10.2 Fallos y deuda conocidos
|
|
|
|
- **Error al crear subtareas en producción**: lo reportó el usuario y no se reprodujo en local; con el arreglo de la
|
|
ficha la lista ya se refresca, pero falta el mensaje exacto si vuelve a salir.
|
|
- **Tamaño de la web**: el paquete inicial supera en ~130 kB el aviso de 2 MB. La causa es `@pi/ui`: su paquete
|
|
(un solo `fesm`) importa `chart.js` al cargar, aunque solo lo usan las gráficas de analítica. Se arregla en la
|
|
librería, con un punto de entrada aparte para las gráficas (`@pi/ui/charts`) o cargando `chart.js` bajo demanda.
|
|
- **Imágenes pegadas**: ya no salen en la lista de adjuntos, pero si se borran del texto el adjunto sigue guardado.
|
|
- **Seguimiento**: los tickets que ya existían no se apuntan a quien los creó o los tiene asignados (solo los nuevos).
|
|
- **El MCP no hace el flujo OAuth del protocolo**: el cliente tiene que llevar un token de Pireon en la cabecera y
|
|
renovarlo a mano cuando caduca.
|
|
|
|
## 10.3 Siguientes funcionalidades
|
|
|
|
En orden de lo que más aportaría:
|
|
|
|
1. **Asistente en la web** (la base ya está en el MCP):
|
|
- resumir un ticket largo con sus comentarios;
|
|
- al crear un ticket, sugerir tipo, prioridad y área, y avisar si se parece a otro que ya existe;
|
|
- redactar las notas de versión en lenguaje natural a partir del borrador.
|
|
2. **Propuestas y votos en la web pública** (la landing): el escaparate ya trae `proposals` (si acepta, dónde está el
|
|
formulario y las más votadas) y los votos de la hoja de ruta; falta mostrarlos.
|
|
3. **Avisos a Discord, Slack o Telegram**: los webhooks salientes mandan JSON en bruto, que esos chats no muestran
|
|
bien. Una integración por canal (o un formato por destino en los webhooks) mandaría mensajes ya legibles: «Ana
|
|
movió WEB-12 a En revisión», con enlace.
|
|
4. **Conector de claude.ai**: el MCP necesitaría el flujo OAuth del protocolo, y Pireon publicar su metadata de
|
|
autorización y admitir el registro dinámico de clientes.
|
|
5. **Proyectos de la landing que ya existen**: hoy el tablero en TaskStream solo se abre al crear el proyecto; poder
|
|
abrirlo después desde el panel.
|
|
|
|
## 10.4 Descartado por ahora
|
|
|
|
Mucho trabajo para lo que aportan hoy; se pueden recuperar si alguien los necesita:
|
|
|
|
- **Registro de horas** dedicadas a cada ticket.
|
|
- **Objetivos u OKR** por encima de las épicas.
|
|
- **App móvil**: la web ya se adapta a pantallas estrechas.
|
|
|
|
## 10.5 Hecho desde la primera versión de esta lista
|
|
|
|
- Tiempo real: _ping_ y reconexión del WebSocket, y recarga de lo que se ve al reconectar.
|
|
- Arrastrar a una columna prohibida devuelve la tarjeta a su sitio.
|
|
- Reacciones y «Bloqueado» en componentes propios (los estilos de la ficha vuelven a caber en 8 kB).
|
|
- Límite de propuestas en Redis, válido con varias instancias.
|
|
- Aviso `PROPOSED` a propietarios y admins cuando llega una propuesta.
|
|
- `voted` también por REST.
|
|
- Borrar un proyecto borra su integración con Git.
|
|
- Sin avisos de lint.
|