4.3 KiB
4.3 KiB
TASK-045-historical-ui-migrate-to-snapshots
Goal
Migrar la pagina historica para que lea snapshots precalculados de resumen, tops y partidas recientes, mejorando tiempos de carga y evitando esperas innecesarias al abrir la pagina o cambiar de pestana.
Context
La UI historica ya existe, pero el objetivo ahora es que no dependa de consultas pesadas en tiempo real. Debe leer snapshots ya preparados y actualizados en segundo plano, mostrando datos rapidos y estables.
Steps
- Revisar la API de snapshots ya implementada.
- Cambiar la UI historica para que:
- resumen
- tabs de tops
- partidas recientes se carguen desde snapshots y no desde agregados costosos on-demand.
- Mostrar de forma clara cuando se genero el snapshot.
- Mantener estados de loading, empty y error, pero reducir la espera perceptible.
- Asegurar que cambiar entre pestanas de tops sea rapido y estable.
- Mantener coherencia visual con el resto de la web.
- No crear paginas nuevas en esta task.
- Al completar la implementacion:
- dejar el repositorio consistente
- hacer commit
- hacer push al remoto si el entorno lo permite
Files to Read First
- AGENTS.md
- frontend/historico.html
- frontend/assets/js/historico.js
- frontend/assets/css/historico.css
- backend/app/routes.py
- backend/app/payloads.py
Expected Files to Modify
- frontend/historico.html
- frontend/assets/js/historico.js
- frontend/assets/css/historico.css
- opcionalmente backend docs minimas si cambia el flujo de consumo
Constraints
- No romper la UI historica existente.
- No introducir frameworks nuevos.
- No hacer cambios destructivos.
- Mantener el trabajo centrado en rendimiento percibido y consumo de snapshots.
Validation
- La UI historica carga resumen, tops y partidas recientes desde snapshots.
- Cambiar de pestana entre tops es rapido.
- El usuario ve una referencia clara de actualizacion.
- La pagina reduce la dependencia de calculos on-demand pesados.
- Los cambios quedan committeados y se hace push al remoto si el entorno lo permite.
Change Budget
- Preferir menos de 5 archivos modificados o creados.
- Preferir menos de 220 lineas cambiadas.
Outcome
frontend/assets/js/historico.jsdeja de depender de agregados historicos on-demand y pasa a leer snapshots precalculados para resumen, ranking semanal y partidas recientes.frontend/assets/js/historico.jsincorpora cache por servidor y metrica para que cambiar de pestana entre tops reutilice payloads ya leidos y reduzca la espera perceptible.frontend/historico.htmlyfrontend/assets/css/historico.cssmuestran una referencia explicita degenerated_aty del rango fuente de cada snapshot en las tres secciones principales.backend/app/routes.pyybackend/app/payloads.pyanaden la capa minima de lectura/api/historical/snapshots/*necesaria para servir snapshots precalculados sin recalcular agregados pesados.backend/README.mddocumenta los nuevos endpoints de snapshots y la metadata operativa que exponen.
Validation Result
- Validado con
node --check frontend/assets/js/historico.js. - Validado con
python -m py_compile backend/app/routes.py backend/app/payloads.py. - Validado con
resolve_get_payload(...)para:/api/historical/snapshots/server-summary/api/historical/snapshots/weekly-leaderboard/api/historical/snapshots/recent-matches
- Validado con builders Python: los nuevos payloads responden de forma estable incluso cuando todavia no existen snapshots persistidos y devuelven
found: Falseconitems: []oitem: None. - Revisado en diff: el alcance queda limitado a
backend/README.md,backend/app/routes.py,backend/app/payloads.py,frontend/historico.html,frontend/assets/css/historico.css,frontend/assets/js/historico.jsy este archivo de task.
Decision Notes
- La task estaba bloqueada por una dependencia no resuelta: la UI debia migrar a snapshots, pero la API ligera de lectura descrita en la task previa no estaba presente en
routes.pyni enpayloads.pydentro de este worktree. Se implemento solo la capa minima necesaria para completar la migracion sin ampliar el alcance a nueva UI ni a nuevos calculos backend. - Se mantuvieron los endpoints historicos legacy para no romper compatibilidad mientras la pagina historica migra al contrato basado en snapshots.