2.3 KiB
2.3 KiB
TASK-096-rcon-first-historical-runtime-selection
Goal
Hacer que el histórico backend funcione realmente en modo RCON-first en runtime, con fallback automático, observable y seguro a public-scoreboard/CRCON cuando RCON falle o no soporte una operación concreta.
Context
Hoy la repo ya tiene:
- live RCON-first con fallback a A2S
- captura prospectiva RCON
- read model histórico RCON parcial
- histórico clásico por public-scoreboard/CRCON Pero el runtime histórico aún no se comporta como una política RCON-first completa.
Steps
- Auditar la selección histórica actual en:
backend/app/data_sources.pybackend/app/payloads.pybackend/app/historical_ingestion.pybackend/app/historical_runner.pybackend/app/rcon_historical_read_model.py
- Introducir arbitraje histórico explícito:
- intento primario por RCON
- fallback a public-scoreboard/CRCON si:
- RCON falla
- RCON no tiene cobertura
- RCON no soporta esa operación concreta
- Asegurar trazabilidad en payloads:
primary_sourceselected_sourcefallback_usedfallback_reasonsource_attempts
- Ajustar el runtime y los defaults para que la política efectiva del stack sea coherente con histórico RCON-first.
- Mantener compatibilidad con el histórico clásico sin romper snapshots ni workers existentes.
- Actualizar
backend/README.mdy runbook para que el comportamiento real quede claro.
Constraints
- No romper live RCON-first ya existente.
- No eliminar public-scoreboard/CRCON.
- No degradar el request path HTTP en latencia o estabilidad de forma evitable.
- No fingir soporte RCON en operaciones que todavía no están cubiertas.
Validation
/healthy/o la metadata funcional relevante reflejan una política histórica RCON-first coherente.- Los endpoints históricos compatibles intentan RCON primero.
- Cuando RCON no sirve, el fallback a public-scoreboard/CRCON es observable y claro.
- La repo queda consistente.
Expected Files
backend/app/data_sources.pybackend/app/payloads.pybackend/app/historical_ingestion.pybackend/app/historical_runner.pybackend/app/rcon_historical_read_model.pybackend/app/config.pybackend/README.mddocker-compose.ymlsi hace falta