Worklog: timeline unificado de sesiones y actividad
Worklog: timeline unificado de sesiones y actividad
Resumen
Antes de esta feature (PR #55, 2026-05-20), el Workspace tenía dos vistas desconectadas:
| Vista | Qué mostraba | Problema |
|---|---|---|
/worklog | Sesiones técnicas del WORKLOG.md | No incluía eventos automáticos del activity_log |
/history | Eventos automáticos (activity_log) | Duplicado funcional; no incluía sesiones técnicas |
El widget Actividad reciente del dashboard apuntaba a /worklog pero los eventos automáticos nunca aparecían allí.
Esta feature unifica ambas fuentes en /worklog como un timeline cronológico único, ordenado DESC con headers de día (Hoy / Ayer / día de la semana).
Componentes introducidos
WorklogTimeline.tsx
Ruta: src/components/worklog/WorklogTimeline.tsx
Timeline React con dos tipos de entrada renderizados en la misma vista:
- Sesiones técnicas — cards con borde de color por autor, resumen visible y botón expandible Ver detalle técnico (renderiza markdown via
marked). - Actividades automáticas — filas compactas con badge de acción + entidad + avatar de actor + fuente (
source).
Capacidades de filtrado:
- Toggle Todo / Sesiones / Actividades
- Filtros: persona, acción (solo actividades), rango de fecha, búsqueda full-text
- Paginación lazy de actividades (200 entradas iniciales + Cargar más)
worklog-parser.ts
Ruta: src/lib/worklog-parser.ts
Parser del fichero WORKLOG.md con soporte de dos formatos:
| Formato | Descripción |
|---|---|
| s64+ (actual) | Autor + Resumen + Detalle técnico separados por secciones |
| legacy pre-s64 | ### Autor (tool) seguido de bullets |
Características adicionales:
- Maneja CRLF (
\r\n) explícitamente. - Detecta y parsea 71 sesiones en el
WORKLOG.mdal momento del merge.
worklog.astro (actualizado)
Ruta: src/pages/worklog.astro
Integrado en el shell estándar SecondaryLayout. Header con tono coloquial. Carga WorklogTimeline como isla React.
Eliminaciones
| Artefacto eliminado | Motivo |
|---|---|
src/components/activity/ActivityLog.tsx | Componente duplicado — su funcionalidad queda absorbida por WorklogTimeline |
src/pages/history.astro | Ruta duplicada — /history devuelve 404 tras el merge |
Entrada “Historial” en navigation.ts | Ya no existe la ruta |
Integraciones existentes que NO cambian
/api/activity— endpoint que alimenta el widget Actividad reciente del dashboard. Sin cambios; el widget sigue funcionando igual.- La URL canónica
/worklogse mantiene. Los enlaces previos al worklog siguen siendo válidos.
Comportamiento esperado post-merge
/worklogcarga timeline mezclado con header de día.- Botón Ver detalle técnico expande la sesión y renderiza markdown.
- Filtros funcionan: toggle Todo/Sesiones/Actividades, persona, fechas, búsqueda.
- Widget Actividad reciente del dashboard sigue funcionando vía
/api/activity. /historydevuelve 404 y desaparece del sidebar.
Incidencia corregida (27-09-2026, PR #197)
Desde el 16-09-2026 (s329) las sesiones nuevas escriben el autor dentro de la propia cabecera (## fecha · sNNN · Autor (modelo) — título, con variantes: orden fecha/sNNN, con o sin modelo, con día de la semana, con horquilla de sesiones). El HEADER_RE original nunca contempló esas formas: reconocía 315 de las 347 cabeceras reales de WORKLOG.md y las 32 restantes quedaban pegadas como texto dentro de la sesión anterior — la página /worklog dejó de mostrar las sesiones nuevas desde esa fecha.
Fix: worklog-parser.ts añade una cascada de 7 patrones de respaldo (FALLBACK_HEADER_PATTERNS), probados solo cuando HEADER_RE no casa, más una red final que convierte cualquier cabecera con fecha en sesión propia aunque no case ningún patrón conocido. Cobertura verificada: 347/347 cabeceras del fichero real (test/worklog-parser.test.ts).
Commit: 7227c07f (PR #197).
Véase también
- [[workspace—dashboard]]
- [[workspace—que-es-workspace]]