8.3 KiB
id, title, status, type, team, supporting_teams, roadmap_item, priority
| id | title | status | type | team | supporting_teams | roadmap_item | priority | ||
|---|---|---|---|---|---|---|---|---|---|
| TASK-133 | Polish RCON match detail timestamps and labels | done | frontend | Frontend Senior |
|
rcon-full-data | medium |
TASK-133 - Polish RCON Match Detail Timestamps And Labels
Goal
Fix the small but confusing presentation issues in the internal match detail page for materialized RCON matches: misleading equal start/end timestamps, a raw technical match id in the main header, and overly technical visible labels.
Background
HLL Vietnam now has a RCON-first materialized match pipeline. AdminLog events are parsed, stored, deduplicated and materialized; recent matches prefer materialized RCON AdminLog results; and the internal match detail page renders simplified scoreboard-style data.
The known detail URL works:
historico-partida.html?server=comunidad-hispana-02&match=comunidad-hispana-02%3A1779178461%3A1779183861%3Acarentanwarfare
The current page shows the expected match content, including map, server, score, winner, duration, player stats, weapons, victim/death_by rows and event counts. However, the page currently shows identical Inicio and Fin timestamps even when duration_seconds is correct, and the main header exposes the internal match id.
Constraints
- Keep the change small and focused.
- Preserve RCON as the source of truth.
- Prefer backend/read-model correctness where possible.
- Do not change the data model more than necessary.
- Do not reactivate Elo/MMR.
- Do not touch Elo/MVP blocks.
- Do not reintroduce Comunidad Hispana #03.
- Do not show
snapshotwording. - Do not implement charts.
- Do not break recent match cards.
- Do not break match detail.
- Keep public scoreboard optional enrichment/fallback only.
- Preserve frontend compatibility with direct browser opening where applicable.
Allowed Changes
- Backend read-model/API code needed to avoid misleading match timestamps or expose timestamp confidence.
- Frontend match detail code needed to render safer timestamp states and friendlier labels.
- Recent-match frontend code only if needed to preserve existing cards after read-model changes.
- This task file when moving it through the workflow.
Files to Read First
AGENTS.mdai/architecture-index.mdai/repo-context.mdai/orchestrator/frontend-senior.mdai/orchestrator/backend-senior.mdfrontend/historico-partida.htmlfrontend/assets/js/historico-partida.jsfrontend/assets/js/historico-recent-live.js- relevant backend historical/read-model modules serving recent matches and match detail
Implementation Requirements
- Work from a dedicated branch:
codex/task-133-polish-rcon-match-detail. - Inspect the existing materialized RCON match detail response and frontend rendering before changing behavior.
- Fix or gracefully handle misleading identical
started_at/ended_atvalues for materialized RCON matches. - Prefer deriving sensible backend/read-model values from reliable
server_timerange andduration_secondswhen possible. - If real absolute timestamps cannot be reliably reconstructed, expose and/or use timestamp confidence so the UI shows a controlled partial state such as
No disponibleorEstimado, instead of equal start/end times. - Keep
duration_secondsvisible because the duration is reliable from the server_time range. - Update the match detail hero/header so it no longer displays the raw technical match id as the main subtitle.
- Replace the raw id with a user-friendly subtitle such as
Comunidad Hispana #02 - Partida RCON materializada, or an equivalent Spanish label. - Optionally expose the technical match id in a small debug/technical section only if useful and visually secondary.
- Polish visible labels around source, basis and confidence so they are consistent and understandable for end users.
- Polish RCON materialized wording, including labels like
cierre de partida RCONandRegistro RCON materializado, without exposing implementation terms too prominently. - Ensure recent match cards still work after any backend/read-model adjustment.
- Ensure the known Carentan match detail still renders.
- Ensure AntonioPruna still renders with 1 kill, 0 deaths and
M1 GARAND. - Ensure the victim row still shows 1 death and
death_byAntonioPruna.
Validation Commands
python -m compileall backend/appnode --check frontend/assets/js/historico.jsnode --check frontend/assets/js/historico-partida.jsnode --check frontend/assets/js/historico-recent-live.jsdocker compose up -d --build backend frontendInvoke-WebRequest "http://localhost:8000/health" | Select-Object -ExpandProperty ContentInvoke-WebRequest "http://localhost:8000/api/historical/recent-matches?server=all-servers&limit=10" | Select-Object -ExpandProperty Content
Use encoded match id:
comunidad-hispana-02%3A1779178461%3A1779183861%3Acarentanwarfare
Open:
http://localhost:8080/historico-partida.html?server=comunidad-hispana-02&match=comunidad-hispana-02%3A1779178461%3A1779183861%3Acarentanwarfare
Manual Verification Steps
- Detail page no longer shows the raw technical match id in the hero/header.
- Start/end values are not misleading.
- If exact timestamps are unavailable, the UI says
No disponibleorEstimado. - Duration remains visible as
1 h 30 min. - Score remains
3 - 2. - Winner remains
Aliados. - AntonioPruna still shows 1 kill, 0 deaths and
M1 GARAND. - Victim row still shows 1 death and
death_byAntonioPruna. - Recent match cards still render.
- No
snapshotwording appears. - No Elo/MVP blocks appear.
- No server #03 appears.
git diff --name-onlymatches the scoped implementation.
Git Requirements
- Create a dedicated branch:
codex/task-133-polish-rcon-match-detail. - Run all validation listed above.
- Stage only intended files.
- Commit the completed implementation.
- Push the branch to origin.
- Final git status must be clean.
Outcome
- Added
timestamp_confidencefor materialized RCON read-model rows. - When materialized AdminLog start/end absolute timestamps are identical while server-time duration is positive, the read model exposes
started_at/ended_atas unavailable and keepsclosed_atonly for ordering/recent-card continuity. - The detail UI now hides the raw technical match id from the hero subtitle and shows a friendly RCON materialized subtitle.
- The detail UI shows unreliable start/end values as
No disponiblewhile preserving reliable duration. - Polished source/action wording, including
cierre RCON confirmadoandAbrir en scoreboard. - Kept recent match cards rendering and restored the static
Ver partidaexternal-action label expected by the UI regression check. - Browser plugin note: Browser was available, but the required browser-control execution tool was not exposed in this session; Playwright fallback via
npxwas blocked by npm certificate verification. Rendered validation used local headless Chrome instead. - Validation passed:
python -m compileall backend/app. - Validation passed:
node --check frontend/assets/js/historico.js. - Validation passed:
node --check frontend/assets/js/historico-partida.js. - Validation passed:
node --check frontend/assets/js/historico-recent-live.js. - Validation passed:
$env:PYTHONPATH='backend'; python -m unittest backend.tests.test_rcon_materialization_pipeline. - Validation blocked:
python -m pytest backend/tests/test_rcon_materialization_pipeline.pybecausepytestis not installed. - Validation passed:
docker compose up -d --build backend frontend. - Validation passed:
/healthand/api/historical/recent-matches?server=all-servers&limit=10. - Manual/API verification passed for known Carentan match: duration
5400, score3 - 2, winnerallied, AntonioPruna1/0withM1 GARAND, victim death_by AntonioPruna. - Rendered Chrome validation passed for detail and recent pages at desktop/mobile screenshot sizes; visible text contains no
snapshot, Elo/MMR block or Comunidad Hispana #03. - Operational note: an already-running advanced
rcon-historical-workercaused transient SQLite open errors during Docker validation; it was stopped because the default deployment for this repo isbackend+frontend.
Change Budget
- Prefer fewer than 5 modified files.
- Prefer changes under 200 lines when feasible.
- Split the work into follow-up tasks if limits are exceeded.