Files
comunidadhll/ai/tasks/done/TASK-030-historical-snapshot-quality-pass.md
devRaGonSa 87c1f4e8c3 sistema A2S
2026-03-20 14:38:57 +01:00

4.2 KiB

TASK-030-historical-snapshot-quality-pass

Goal

Revisar y ajustar la calidad de los snapshots persistidos tras la primera captura A2S real, asegurando consistencia de datos, timestamps, procedencia y utilidad de cara a historico y visualizacion.

Context

Una vez incorporado el target real y validada una primera captura, el siguiente paso es comprobar la calidad del dato persistido. No basta con guardar snapshots; deben ser consistentes y utiles para construir historico, estadisticas y visualizacion sin ruido innecesario.

Steps

  1. Revisar snapshots persistidos a partir de la captura real de Comunidad Hispana #01.
  2. Verificar consistencia de campos clave:
    • nombre del servidor
    • host o referencia de origen
    • timestamp
    • mapa actual
    • jugadores
    • capacidad
    • fuente efectiva
  3. Revisar si hay problemas de calidad como:
    • duplicados innecesarios
    • timestamps incoherentes
    • normalizacion deficiente
    • mezcla poco clara entre fallback y captura real
  4. Ajustar la capa de persistencia, normalizacion o payloads si fuera necesario para mejorar claridad.
  5. Revisar el impacto en endpoints historicos existentes:
    • /api/servers/latest
    • /api/servers/history
    • /api/servers/{id}/history
  6. Mantener el cambio centrado en calidad y coherencia del historico, no en nuevas visualizaciones.
  7. Actualizar documentacion minima si el modelo efectivo de snapshot cambia ligeramente.

Files to Read First

  • AGENTS.md
  • ai/repo-context.md
  • ai/architecture-index.md
  • backend/README.md
  • backend/app/collector.py
  • backend/app/normalizers.py
  • backend/app/storage.py
  • backend/app/routes.py
  • backend/app/payloads.py
  • datos persistidos generados en la task anterior

Expected Files to Modify

  • backend/app/normalizers.py
  • backend/app/storage.py
  • backend/app/routes.py
  • backend/app/payloads.py
  • backend/README.md
  • opcionalmente documentacion tecnica relacionada si la claridad del historico necesita ajuste

Constraints

  • No tocar frontend en esta task.
  • No anadir nuevas fuentes externas.
  • No introducir complejidad analitica alta.
  • No hacer cambios destructivos.
  • Mantener el resultado centrado en calidad de datos historicos.

Validation

  • Los snapshots reales persistidos son consistentes y utiles.
  • Los endpoints historicos reflejan correctamente el dato real almacenado.
  • La distincion entre captura real y fallback queda razonablemente clara.
  • El backend queda listo para una siguiente task de mejora visual o estadistica sobre datos reales.

Change Budget

  • Preferir menos de 5 archivos modificados.
  • Preferir menos de 180 lineas cambiadas.

Outcome

  • backend/app/normalizers.py anade snapshot_origin y source_ref al modelo normalizado para que la procedencia no se infiera de forma ambigua en historico.
  • backend/app/snapshots.py conserva esos campos en cada snapshot persistible.
  • backend/app/storage.py migra la tabla SQLite sin destruir datos, serializa ambos campos en las consultas historicas y backfilla referencias A2S registradas para snapshots ya existentes.
  • backend/README.md documenta los nuevos metadatos historicos y el valor esperado para la captura real de Comunidad Hispana #01.

Validation Result

  • Ejecutado: lectura de list_latest_snapshots(), list_snapshot_history() y list_server_history('comunidad-hispana-01') desde Python.
  • Resultado: los snapshots historicos exponen snapshot_origin con real-a2s o controlled-fallback y source_ref coherente.
  • Ejecutado fuera del sandbox: python -m app.collector --source a2s --no-fallback.
  • Resultado: nuevo snapshot real persistido con source_ref=a2s://152.114.195.174:7778, current_map=Remagen, players=0, max_players=100.
  • Endpoints verificados: /api/servers/latest, /api/servers/history y /api/servers/{id}/history devuelven el snapshot real mas reciente con la nueva metadata de procedencia.

Decision Notes

  • No se tocaron routes.py ni payloads.py porque ya reutilizan directamente los registros serializados de almacenamiento y heredaron la mejora sin cambios de contrato adicionales.
  • No se introdujo deduplicacion agresiva de snapshots porque dos capturas reales con distinto captured_at siguen siendo historico valido; el ajuste se centro en claridad y consistencia de procedencia.