7.8 KiB
7.8 KiB
id, title, status, type, team, supporting_teams, roadmap_item, priority
| id | title | status | type | team | supporting_teams | roadmap_item | priority | |||
|---|---|---|---|---|---|---|---|---|---|---|
| TASK-178 | Review Stats Implementation After Hardening | done | documentation | Analista |
|
foundation | medium |
TASK-178 - Review Stats Implementation After Hardening
Goal
Realizar una revisión técnica del bloque Stats tras TASK-175, TASK-176 y TASK-177, sin implementar nuevas funcionalidades, para verificar coherencia funcional, robustez y consistencia entre documentación, contratos y comportamiento real.
Context
La revisión debe cubrir el estado actual de Stats en frontend y backend con enfoque en comportamiento funcional estable, confiabilidad operativa y ausencia de regresiones en restricciones previas (sin Elo/MMR, sin reintroducir Comunidad Hispana #03).
Se debe preservar la identidad del repositorio y no ampliar alcance fuera del bloque Stats.
Steps
- Leer los archivos listados en “Files to Read First” para ubicar el estado base de la revisión.
- Auditar los archivos objetivo y verificar los 9 puntos solicitados por el alcance de la task.
- Ejecutar las validaciones técnicas solicitadas (
node --check, scripts de stats y de integración). - Documentar hallazgos por severidad y marcar follow-up tasks para gaps no triviales.
Files to Read First
ai/task-template.mdai/tasks/done/TASK-175-add-stats-regression-validation-script.mdai/tasks/done/TASK-176-add-stats-player-comparison-cards.mdai/tasks/done/TASK-177-harden-annual-ranking-snapshot-operations.mdfrontend/stats.htmlfrontend/assets/js/stats.js
Expected Files to Modify
ai/tasks/pending/TASK-178-review-stats-implementation-after-hardening.md
Scope
Revisar técnicamente los siguientes archivos:
frontend/stats.htmlfrontend/assets/js/stats.jsfrontend/assets/css/styles.cssbackend/app/rcon_historical_player_stats.pybackend/app/rcon_annual_rankings.pybackend/app/payloads.pybackend/app/routes.pyscripts/run-stats-validation.ps1scripts/run-integration-tests.ps1docs/stats-section-functional-plan.mddocs/annual-ranking-snapshot-runbook.md
La revisión debe cubrir explícitamente:
- Consistencia entre contratos documentados y payloads reales.
- Confirmación de que Stats no depende de Elo/MMR.
- Confirmación de que no se reintroduce Comunidad Hispana #03.
- Validación del manejo frontend para:
- backend offline
- búsqueda sin resultados
- jugador sin stats
- ranking anual missing
- ranking anual ready vacío
- métrica inválida
- Revisión de fetch semanal + mensual en paralelo y análisis de fallo parcial.
- Revisión de documentación y validación de los nuevos metadatos
requested_limit,effective_limit,snapshot_limit,item_count. - Revisión de fragilidad de
scripts/run-stats-validation.ps1por comparaciones de strings exactos. - Ejecutar validaciones técnicas:
node --check frontend/assets/js/stats.jspowershell -ExecutionPolicy Bypass -File scripts/run-stats-validation.ps1powershell -ExecutionPolicy Bypass -File scripts/run-integration-tests.ps1
- Documentar hallazgos, clasificarlos y, si hay gaps no triviales, crear tareas de seguimiento en vez de ampliar esta task.
Constraints
- No implementar nuevas funcionalidades.
- No modificar backend salvo bug menor evidente y estrictamente necesario para permitir una revisión correcta.
- No modificar frontend salvo bug menor evidente y estrictamente necesario.
- No crear migraciones.
- No cambiar lógica de ranking.
- No reactivar Elo/MMR.
- No reintroducir Comunidad Hispana #03.
Validation
node --check frontend/assets/js/stats.jspowershell -ExecutionPolicy Bypass -File scripts/run-stats-validation.ps1powershell -ExecutionPolicy Bypass -File scripts/run-integration-tests.ps1
Antes de completar, verificar:
- alcance evaluado solo en los archivos de esta task;
- hallazgos priorizados por severidad;
git diff --name-onlydebe incluir únicamente este archivo de task.- no se ejecuta ningún cambio de código fuera del objetivo de revisión.
Outcome
Outcome
- Hallazgos de calidad funcional y consistencia:
- [SEVERIDAD BAJA] Documentación funcional (
docs/stats-section-functional-plan.md) incluyetimeframe=weekly|monthly|allen la sección de perfil jugador, pero el contrato real expuesto enbackend/app/routes.pyacepta soloweekly|monthly(/api/stats/players/{id}?timeframe=). Esto limita la superficie a lo realmente probado. - [SEVERIDAD BAJA] El flujo de perfil en
frontend/assets/js/stats.jsconsulta semanal y mensual en paralelo conPromise.all. Si una de esas dos peticiones falla (timeout o error puntual), se marca el backend offline y se pierde información parcial del otro periodo. Se recomienda separación conPromise.allSettledpara degradación parcial.
- [SEVERIDAD BAJA] Documentación funcional (
- Validación de consistencia de contratos vs payloads:
frontend/assets/js/stats.jsconsume exactamente los contratos actuales definidos enbackend/app/payloads.py:- búsqueda en
build_stats_player_search_payload(/api/stats/players/search) condata.query,data.server_id,data.items - perfil en
build_stats_player_profile_payload(/api/stats/players/{id}) condata.matches_considered,weekly_ranking,monthly_ranking, metadatos desource - ranking anual en
build_annual_ranking_snapshot_payload(/api/stats/rankings/annual) consnapshot_status,requested_limit,effective_limit,snapshot_limit,item_count
- búsqueda en
- Los nuevos metadatos de snapshot (
requested_limit,effective_limit,snapshot_limit,item_count) están documentados endocs/annual-ranking-snapshot-runbook.mdy aparecen en los payloads.
- Restricciones de producto verificadas:
- No hay dependencia de Elo/MMR en el bloque Stats revisado (endpoints de Elo/MMR son rutas separadas en
routes.py). - No se detectó reintroducción de
Comunidad Hispana #03enfrontend/stats.html,frontend/assets/js/stats.js,docs/stats-section-functional-plan.md,docs/annual-ranking-snapshot-runbook.mdni en los endpoints de Stats revisados. - El manejo de estados solicitados en frontend se encuentra cubierto:
- backend offline -> mensajes de estado y estado de paneles configurados en
markAsBackendUnavailable - búsqueda sin resultados ->
search_emptycon "Sin resultados" - jugador sin stats -> aviso
profileNoStatscon bloque de identidad/counters en 0 - ranking anual
missing->annualMissing - ranking anual
readypero vacío ->annualReadyEmpty - métrica inválida anual ->
annualMetricInvalid
- backend offline -> mensajes de estado y estado de paneles configurados en
- No hay dependencia de Elo/MMR en el bloque Stats revisado (endpoints de Elo/MMR son rutas separadas en
- Fragilidad de validación script:
scripts/run-stats-validation.ps1usa múltiplesAssert-Containscon cadenas exactas para comprobar assets/endpoints/mensajes.- Es útil como regresión, pero es sensible a cambios de copy/UI no funcionales; recomendado considerar validación semántica adicional (
toLowerCase, patrones de forma/falla HTTP) en un follow-up.
- Evidencia de validaciones ejecutadas:
node --check frontend/assets/js/stats.jspowershell -ExecutionPolicy Bypass -File scripts/run-stats-validation.ps1powershell -ExecutionPolicy Bypass -File scripts/run-integration-tests.ps1
- Riesgos/acciones:
- No se observan bloqueos funcionales críticos en el estado actual.
- Riesgo residual de degradación parcial del perfil semanal/mensual por fallo parcial en cargas paralelas.
Tareas de seguimiento:
- Alinear
docs/stats-section-functional-plan.mdcon el contrato real detimeframe(o ampliar explícitamente ruta para aceptarall) como decisión de producto. - Implementar degradación parcial en carga de perfil (semana/mensual) para no degradar ambas tablas por un fallo aislado.
- Endurecer
scripts/run-stats-validation.ps1para validar semántica de estados además de string-matches exactos.