feat(telemetry): matchup and direction context in timelines; live error groups
CI/CD Pipeline / Build and Push PocketBase Docker Image (push) Successful in 9s
CI/CD Pipeline / i18n Catalog Check (push) Successful in 47s
CI/CD Pipeline / Build and Push App Docker Image (push) Successful in 2m18s
CI/CD Pipeline / Deploy to Kubernetes (push) Successful in 8m29s

- h2h_viewed carries who-v-who, stats_sorted carries asc/desc via a
  timeline-only context prop
- error browser aggregates raw rows so new groups appear immediately
- catalogs re-extracted for shifted line references
This commit is contained in:
2026-08-27 10:47:57 -07:00
parent 9b51d61519
commit 7bda138d69
11 changed files with 280 additions and 245 deletions
+49 -49
View File
@@ -13,7 +13,7 @@ msgstr ""
"Language-Team: \n"
"Plural-Forms: \n"
#: src/features/matches/components/match-card.tsx:80
#: src/features/matches/components/match-card.tsx:83
msgid " (Losers)"
msgstr " (Verlierer)"
@@ -228,7 +228,7 @@ msgstr "{namesList} und 1 weitere"
msgid "{size}-team knockout"
msgstr "{size}-Team-K.-o.-Runde"
#: src/features/players/components/player-stats-table.tsx:446
#: src/features/players/components/player-stats-table.tsx:445
msgid "* Confidence penalty applied for players with <15 matches"
msgstr "* Vertrauensabschlag für Spieler mit <15 Spielen"
@@ -241,7 +241,7 @@ msgstr "* Falls nötig"
msgid "* PICKS shows correct picks / total picks made"
msgstr "* PICKS zeigt richtige Picks / insgesamt abgegebene Picks"
#: src/features/players/components/player-stats-table.tsx:449
#: src/features/players/components/player-stats-table.tsx:448
msgid "** Not an official rating"
msgstr "** Keine offizielle Wertung"
@@ -254,19 +254,19 @@ msgstr "&"
msgid "#{0}"
msgstr "#{0}"
#: src/features/players/components/player-stats-table.tsx:416
#: src/features/players/components/player-stats-table.tsx:415
msgid "• <0>AC:</0> Average Cups Per Match"
msgstr "• <0>AC:</0> Durchschnittliche Becher pro Spiel"
#: src/features/players/components/player-stats-table.tsx:419
#: src/features/players/components/player-stats-table.tsx:418
msgid "• <0>ACA:</0> Average Cups Against"
msgstr "• <0>ACA:</0> Durchschnittlich kassierte Becher"
#: src/features/players/components/player-stats-table.tsx:413
#: src/features/players/components/player-stats-table.tsx:412
msgid "• <0>ALM:</0> Average Loss Margin"
msgstr "• <0>ALM:</0> Durchschnittlicher Rückstand bei Niederlage"
#: src/features/players/components/player-stats-table.tsx:410
#: src/features/players/components/player-stats-table.tsx:409
msgid "• <0>AWM:</0> Average Win Margin"
msgstr "• <0>AWM:</0> Durchschnittlicher Vorsprung bei Sieg"
@@ -274,15 +274,15 @@ msgstr "• <0>AWM:</0> Durchschnittlicher Vorsprung bei Sieg"
msgid "• <0>Bracket reset:</0> only picked if your bracket triggers it — worth double the Final"
msgstr "• <0>Bracket-Reset:</0> wird nur gewertet, wenn dein Bracket ihn auslöst — zählt doppelt so viel wie das Finale"
#: src/features/players/components/player-stats-table.tsx:425
#: src/features/players/components/player-stats-table.tsx:424
msgid "• <0>CA:</0> Cups Against"
msgstr "• <0>CA:</0> Kassierte Becher"
#: src/features/players/components/player-stats-table.tsx:422
#: src/features/players/components/player-stats-table.tsx:421
msgid "• <0>CF:</0> Cups For"
msgstr "• <0>CF:</0> Erzielte Becher"
#: src/features/players/components/player-stats-table.tsx:404
#: src/features/players/components/player-stats-table.tsx:403
msgid "• <0>L:</0> Losses"
msgstr "• <0>L:</0> Niederlagen"
@@ -290,23 +290,23 @@ msgstr "• <0>L:</0> Niederlagen"
msgid "• <0>Losers bracket:</0> 5, 10, 20, 40…"
msgstr "• <0>Verlierer-Bracket:</0> 5, 10, 20, 40…"
#: src/features/players/components/player-stats-table.tsx:392
#: src/features/players/components/player-stats-table.tsx:391
msgid "• <0>M:</0> Matches"
msgstr "• <0>M:</0> Spiele"
#: src/features/players/components/player-stats-table.tsx:398
#: src/features/players/components/player-stats-table.tsx:397
msgid "• <0>MMR:</0> Matchmaking Rating"
msgstr "• <0>MMR:</0> Matchmaking-Wertung"
#: src/features/players/components/player-stats-table.tsx:395
#: src/features/players/components/player-stats-table.tsx:394
msgid "• <0>T:</0> Tournaments"
msgstr "• <0>T:</0> Turniere"
#: src/features/players/components/player-stats-table.tsx:401
#: src/features/players/components/player-stats-table.tsx:400
msgid "• <0>W:</0> Wins"
msgstr "• <0>W:</0> Siege"
#: src/features/players/components/player-stats-table.tsx:407
#: src/features/players/components/player-stats-table.tsx:406
msgid "• <0>W%:</0> Win Percentage"
msgstr "• <0>W%:</0> Siegquote"
@@ -314,11 +314,11 @@ msgstr "• <0>W%:</0> Siegquote"
msgid "• <0>Winners bracket:</0> 10, 20, 40, 80…"
msgstr "• <0>Gewinner-Bracket:</0> 10, 20, 40, 80…"
#: src/features/players/components/player-stats-table.tsx:437
#: src/features/players/components/player-stats-table.tsx:436
msgid "• Average Cups/Match (25%)"
msgstr "• Durchschnittliche Becher/Spiel (25%)"
#: src/features/players/components/player-stats-table.tsx:440
#: src/features/players/components/player-stats-table.tsx:439
msgid "• Average Win Margin (15%)"
msgstr "• Durchschnittlicher Vorsprung bei Sieg (15%)"
@@ -326,11 +326,11 @@ msgstr "• Durchschnittlicher Vorsprung bei Sieg (15%)"
msgid "• Each correct pick earns points, doubling every round"
msgstr "• Jeder richtige Tipp bringt Punkte, die sich jede Runde verdoppeln"
#: src/features/players/components/player-stats-table.tsx:443
#: src/features/players/components/player-stats-table.tsx:442
msgid "• Match Volume Bonus (10%)"
msgstr "• Match-Volumen-Bonus (10%)"
#: src/features/players/components/player-stats-table.tsx:434
#: src/features/players/components/player-stats-table.tsx:433
msgid "• Win Rate (50%)"
msgstr "• Siegquote (50%)"
@@ -720,7 +720,7 @@ msgstr "Wähle einen Spieler"
msgid "Claymation"
msgstr "Knete"
#: src/features/players/components/league-head-to-head.tsx:102
#: src/features/players/components/league-head-to-head.tsx:107
msgid "Clear selected player"
msgstr "Ausgewählten Spieler entfernen"
@@ -1335,11 +1335,11 @@ msgstr "Hast du schon mal mitgespielt?"
#: src/app/routes/_authed/stats.tsx:56
#: src/features/bracket/components/match-dock.tsx:174
#: src/features/bracket/components/match-dock.tsx:219
#: src/features/matches/components/match-card.tsx:86
#: src/features/matches/components/match-card.tsx:230
#: src/features/players/components/league-head-to-head.tsx:193
#: src/features/players/components/profile/header.tsx:94
#: src/features/bracket/components/match-dock.tsx:224
#: src/features/matches/components/match-card.tsx:89
#: src/features/matches/components/match-card.tsx:233
#: src/features/players/components/league-head-to-head.tsx:198
#: src/features/players/components/profile/header.tsx:97
msgid "Head to Head"
msgstr "Direktvergleich"
@@ -1611,7 +1611,7 @@ msgstr "Match-Verlauf ({totalMatches})"
msgid "Match started!"
msgstr "Match gestartet!"
#: src/features/players/components/player-stats-table.tsx:376
#: src/features/players/components/player-stats-table.tsx:375
#: src/features/players/components/profile/index.tsx:87
#: src/features/players/components/profile/skeleton.tsx:70
#: src/features/teams/components/team-profile/index.tsx:44
@@ -1630,11 +1630,11 @@ msgstr "Matches für Regionals sind ungeordnet"
msgid "Matches Played"
msgstr "Gespielte Matches"
#: src/features/predictions/components/prediction-editor.tsx:249
#: src/features/predictions/components/prediction-editor.tsx:252
msgid "Matchup"
msgstr "Matchup"
#: src/features/predictions/components/prediction-editor.tsx:226
#: src/features/predictions/components/prediction-editor.tsx:229
msgid "Matchup details"
msgstr "Matchup-Details"
@@ -1642,7 +1642,7 @@ msgstr "Matchup-Details"
msgid "MAU"
msgstr "MAU"
#: src/features/players/components/league-head-to-head.tsx:123
#: src/features/players/components/league-head-to-head.tsx:128
msgid "Me"
msgstr "Ich"
@@ -1651,11 +1651,11 @@ msgid "Migrate Badge Progress"
msgstr "Abzeichen-Fortschritt migrieren"
#: src/features/players/components/player-stats-table.tsx:131
#: src/features/players/components/player-stats-table.tsx:356
#: src/features/players/components/player-stats-table.tsx:355
msgid "MMR"
msgstr "MMR"
#: src/features/players/components/player-stats-table.tsx:431
#: src/features/players/components/player-stats-table.tsx:430
msgid "MMR Calculation:"
msgstr "MMR-Berechnung:"
@@ -1775,7 +1775,7 @@ msgstr "Keine Matches geplant"
msgid "No player activity found"
msgstr "Keine Spieleraktivität gefunden"
#: src/features/players/components/league-head-to-head.tsx:151
#: src/features/players/components/league-head-to-head.tsx:156
msgid "No players available"
msgstr "Keine Spieler verfügbar"
@@ -1784,8 +1784,8 @@ msgstr "Keine Spieler verfügbar"
msgid "No players enrolled yet"
msgstr "Noch keine Spieler angemeldet"
#: src/features/players/components/league-head-to-head.tsx:151
#: src/features/players/components/player-stats-table.tsx:486
#: src/features/players/components/league-head-to-head.tsx:156
#: src/features/players/components/player-stats-table.tsx:485
msgid "No players found matching \"{search}\""
msgstr "Keine Spieler gefunden, die zu \"{search}\" passen"
@@ -1818,7 +1818,7 @@ msgstr "Kein Song ausgewählt"
msgid "No state captured"
msgstr "Kein Status erfasst"
#: src/features/players/components/player-stats-table.tsx:319
#: src/features/players/components/player-stats-table.tsx:318
msgid "No Stats Available"
msgstr "Keine Statistiken verfügbar"
@@ -2182,7 +2182,7 @@ msgid "rofl"
msgstr "rofl"
#. placeholder {0}: match.round + 1
#: src/features/matches/components/match-card.tsx:79
#: src/features/matches/components/match-card.tsx:82
msgid "Round {0}"
msgstr "Runde {0}"
@@ -2245,8 +2245,8 @@ msgstr "Nach Songs suchen..."
msgid "Search for teams to enroll..."
msgstr "Teams zum Anmelden suchen..."
#: src/features/players/components/league-head-to-head.tsx:132
#: src/features/players/components/player-stats-table.tsx:332
#: src/features/players/components/league-head-to-head.tsx:137
#: src/features/players/components/player-stats-table.tsx:331
msgid "Search players"
msgstr "Spieler suchen"
@@ -2283,7 +2283,7 @@ msgstr "Abzeichen auswählen"
msgid "Select a device..."
msgstr "Gerät auswählen..."
#: src/features/players/components/league-head-to-head.tsx:112
#: src/features/players/components/league-head-to-head.tsx:117
msgid "Select a player"
msgstr "Wähle einen Spieler"
@@ -2382,7 +2382,7 @@ msgstr "Details anzeigen"
#. placeholder {0}: filteredAndSortedStats.length
#. placeholder {1}: playerStats.length
#: src/features/players/components/player-stats-table.tsx:329
#: src/features/players/components/player-stats-table.tsx:328
msgid "Showing {0} of {1} players"
msgstr "{0} von {1} Spielern angezeigt"
@@ -2434,7 +2434,7 @@ msgstr "Song-Segment darf höchstens 15 Sekunden lang sein"
msgid "Song start time is required"
msgstr "Startzeit des Songs ist erforderlich"
#: src/features/players/components/player-stats-table.tsx:350
#: src/features/players/components/player-stats-table.tsx:349
#: src/features/telemetry/components/shared/search-filter-bar.tsx:102
msgid "Sort:"
msgstr "Sortieren:"
@@ -2489,11 +2489,11 @@ msgstr "Tippen, um zu suchen …"
msgid "Starts in"
msgstr "Beginnt in"
#: src/features/players/components/player-stats-table.tsx:382
#: src/features/players/components/player-stats-table.tsx:381
msgid "Stat abbreviations and MMR info"
msgstr "Stat-Abkürzungen und MMR-Infos"
#: src/features/players/components/player-stats-table.tsx:389
#: src/features/players/components/player-stats-table.tsx:388
msgid "Stat Abbreviations:"
msgstr "Stat-Abkürzungen:"
@@ -2520,7 +2520,7 @@ msgstr "Status"
#: src/components/sheet/slide-panel/slide-panel.tsx:40
#: src/features/login/components/player-prompt/index.tsx:115
#: src/features/login/components/player-prompt/index.tsx:126
#: src/features/predictions/components/prediction-editor.tsx:240
#: src/features/predictions/components/prediction-editor.tsx:243
#: src/features/tournaments/components/edit-rules.tsx:39
msgid "Submit"
msgstr "Absenden"
@@ -2543,7 +2543,7 @@ msgstr "System"
msgid "T"
msgstr "T"
#: src/features/players/components/league-head-to-head.tsx:92
#: src/features/players/components/league-head-to-head.tsx:97
msgid "Tap an opponent below to compare"
msgstr "Tippe unten auf einen Gegner zum Vergleichen"
@@ -2810,7 +2810,7 @@ msgstr "Bevorstehend"
msgid "Update Match"
msgstr "Match aktualisieren"
#: src/features/players/components/profile/header.tsx:89
#: src/features/players/components/profile/header.tsx:92
msgid "Update Name"
msgstr "Namen aktualisieren"
@@ -2853,8 +2853,8 @@ msgstr "Turnierbaum ansehen"
msgid "View Groups"
msgstr "Gruppen ansehen"
#: src/features/bracket/components/match-dock.tsx:182
#: src/features/matches/components/match-card.tsx:91
#: src/features/bracket/components/match-dock.tsx:187
#: src/features/matches/components/match-card.tsx:94
msgid "View head-to-head"
msgstr "Direktvergleich ansehen"
@@ -2935,7 +2935,7 @@ msgstr "Finale der Gewinnerrunde"
#: src/components/stats-overview.tsx:103
#: src/components/stats-overview.tsx:136
#: src/features/players/components/player-stats-table.tsx:366
#: src/features/players/components/player-stats-table.tsx:365
msgid "Wins"
msgstr "Siege"