Previously sqKps = sumAllPlayerKills / games, inflating the value ~8x
since all 8 players' kills were summed before dividing by game count.
Now computed as the mean of each active player's individual kills/games.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
WT tags are always exactly one decorator char on each side, so a
simple s[1:-1] is clearer than a regex strip.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
squadron_raw from old saved replays still has raw tags (-DSPLA-) but
winning_team is now stripped (DSPLA) by _strip_tag in process_session.
squadron_short is set by per-team DB resolution so it matches for both
old and new replays.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The old regex [^A-Za-z0-9_-] whitelisted dashes and underscores, so
-DSPLA- and _APS_ passed through untouched. All downstream code that
reads team["squadron"] then saw the raw tag instead of the bare short
name, causing NULL clan_ids in player_games_hist/match_summary and
broken lookups throughout. Fixing at the source means every consumer
gets a clean name without individual patches.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
guild_squadron is the clean short name from SQUADRONS.json (e.g. DSPLA)
but winning_team_squadron in the replay is the raw tagged value (-DSPLA-).
They never matched for dash/underscore-tagged squads so bar_color was
always not_involved instead of win/loss on the guild's own scoreboard.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Squads with dash or underscore tags (e.g. -DSPLA-, _APS_) had their raw
replay team.squadron value written directly to COMPS filenames, producing
-DSPLA-.json / _APS_.json. The /comp autocomplete returns the clean DB
short_name (DSPLA) so the file lookup never matched.
Fix: strip leading/trailing non-alphanumeric characters and uppercase in
both the writer and the /comp command lookup. Also renamed the 8 existing
decorated COMPS files to their clean equivalents on disk.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
My earlier change to use squadron_short (resolved clean name, e.g. DSPLA)
for display broke the win/loss header colour: winning_team is the raw
replay value (e.g. -DSPLA-) so the comparison never matched, rendering
both teams as losers. Split into squadron_raw (comparison) vs
squadron_short (display text) so each uses the right value.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>