2.5 KiB
Teamkills Ranking Audit
Scope
This document explains why annual public teamkills ranking currently returns no usable rows in the audited dataset.
What Was Checked
Sources reviewed:
rcon_admin_log_eventsrcon_match_player_statsrcon_annual_ranking_snapshotsrcon_annual_ranking_snapshot_itemsrcon_player_profile_snapshots
Code reviewed:
backend/app/rcon_admin_log_parser.pybackend/app/rcon_admin_log_storage.pybackend/app/rcon_admin_log_materialization.pybackend/app/rcon_annual_rankings.pybackend/app/routes.pybackend/tests/test_rcon_materialization_pipeline.py
What Works Already
The parser and materialization pipeline already support teamkills when the source event is explicit enough.
The key condition is:
killer_team == victim_team
When that is true, the materializer increments:
teamkillson the killerdeaths_by_teamkillon the victim
This behavior is covered by regression tests.
What The Local Dataset Shows
Read-only checks on backend/data/hll_vietnam_dev.sqlite3 show:
- many
killevents exist - zero
rcon_match_player_statsrows withteamkills > 0 - zero annual ranking snapshot items with
teamkills > 0 - zero parsed
killevents wherekiller_team == victim_team
That means the annual ranking source facts never receive positive teamkill values.
What The Profile Snapshots Show
rcon_player_profile_snapshots does contain positive:
teamkills_doneteamkills_received
So the broader data ecosystem knows teamkills somewhere, but those values are:
- cumulative
- profile-oriented
- not scoped to exact closed match windows
Using them directly for annual ranking would be semantically wrong.
Public Endpoint Check
The current public endpoint returns empty annual teamkill ranking items for:
allcomunidad-hispana-01comunidad-hispana-02
So the problem is not a frontend-only rendering issue.
Conclusion
The current annual teamkills ranking depends on:
rcon_match_player_stats.teamkills
In the audited dataset, that field remains zero because the match-level kill stream does not contain same-team kill events that the materializer can classify as teamkills.
Safe Next Step
Do not fake teamkills from unrelated counters.
The next implementation task should first decide whether:
- the event stream is incomplete and needs parser/source correction, or
- teamkills need a dedicated ranking source different from match-level kill events.