3.7 KiB
3.7 KiB
TASK-106-rcon-primary-summary-and-recent-runtime-fix
Goal
Corregir la frontera runtime para que historical server summary y recent historical matches usen realmente la capa RCON-backed como fuente primaria cuando haya cobertura suficiente, dejando public-scoreboard solo como fallback explicito.
Context
Las pruebas reales iniciales del sistema habian mostrado que:
build_historical_server_summary_payload(...)build_recent_historical_matches_payload(...)
seguian devolviendo en runtime:
selected_source = "public-scoreboard"fallback_used = true
cuando el objetivo de producto era que, si existe cobertura RCON suficiente, esas rutas fueran realmente RCON-first efectivas y no solo nominales.
Scope
Backend solamente. Sin cambios en frontend.
Steps
- Auditar:
backend/app/payloads.pybackend/app/rcon_historical_read_model.pybackend/app/rcon_historical_storage.pybackend/app/historical_snapshots.pybackend/app/data_sources.py
- Identificar por que
summaryyrecent-matchesseguian seleccionandopublic-scoreboarden las pruebas reales. - Corregir la seleccion runtime para que:
- si hay cobertura/capability RCON suficiente ->
selected_source = "rcon" - si no la hay -> fallback explicito a
public-scoreboard
- si hay cobertura/capability RCON suficiente ->
- Mantener trazabilidad clara:
primary_sourceselected_sourcefallback_usedfallback_reasonsource_attempts
- Alinear snapshots o materializaciones si hace falta para que no obliguen a caer innecesariamente al historico clasico.
- Actualizar README/runbook explicando la frontera exacta de summary/recent.
Constraints
- No fingir cobertura RCON si no existe.
- No romper endpoints existentes.
- No eliminar
public-scoreboardcomo red de seguridad. - No tocar frontend.
Validation
historical server summaryusa RCON como primario real cuando hay cobertura.recent historical matchesusa RCON como primario real cuando hay cobertura.- Cuando no haya cobertura, el fallback a
public-scoreboardsigue siendo explicito y observable. - La repo queda consistente.
Expected Files
backend/app/payloads.pybackend/app/rcon_historical_read_model.pybackend/app/rcon_historical_storage.pybackend/app/historical_snapshots.pybackend/app/data_sources.pybackend/README.md- otros archivos backend solo si son estrictamente necesarios
Outcome
- Ya existe evidencia runtime real suficiente para considerar cumplido el objetivo funcional de la task.
- Para
server_slug = "comunidad-hispana-01":build_historical_server_summary_payload(...)devuelve:selected_source = "rcon"fallback_used = falsesummary_basis = "rcon-competitive-windows"
build_recent_historical_matches_payload(..., limit=2)devuelve:selected_source = "rcon"fallback_used = false
- Esto demuestra que la frontera runtime RCON-first ya funciona con cobertura real para al menos un servidor y que
summaryyrecent-matchesya no quedan solo en una intencion nominal. - El fallback a
public-scoreboardsigue intacto y sigue siendo la degradacion correcta cuando:- no hay cobertura RCON suficiente
- un target falla
- la capability concreta no puede servirse de forma fiable desde RCON
comunidad-hispana-03sigue teniendo una incidencia separada deauth/login, pero eso no invalida el cierre funcional de esta task porque la frontera runtime pedida aqui ya quedo validada con datos reales en al menos un servidor con cobertura.
Validation Notes
- Cierre administrativo basado en evidencia runtime ya validada y aportada fuera de esta actualizacion.
- No se rehacen pruebas ni se introducen cambios funcionales adicionales para este cierre.