← Back to Dashboard

Recent updates

May 17–18, 2026 — USA Lacrosse 2026 (dropdown voting, COTY merge), All State voting/admin, and coach stat ranking weights.

Summary of new features and fixes. Use the testing checklist before closing out items. Edit public/admin-recent-changes.html when adding the next release.

Latest — coach stat ranking weights

  • NewPer-coach stat weights: Each coach team can customize how Stats Rank is calculated in View All Player Stats on the All State vote page. Weights are saved per login (awards_team_id) and season year — not shared league-wide and not tied to a voting round.
  • NewSettings page: /all-state/stat-weights — tabs for Attack, Midfield, Defense, Goalie; sliders (0–100) for games played, goals, assists, points, shots, draw controls, ground balls, caused turnovers, interceptions, saves, and goals allowed (lower is better). Presets: Equal (default) and Suggested emphasis. Coach help: /help/stat-weights.
  • NewAPI: GET/PUT /api/all-state/my-stat-weights?year=2026 — coach auth required. Migration 034_all_state_coach_stat_weights.sql (all_state_coach_stat_weights table).
  • NoteDoes not affect ballots: Custom weights only change the private Stats Rank helper column. Submitted rank-choice votes, committee aggregates, and exports are unchanged.
  • NewAdmin Recent updates page: Help menu → Recent updates (replaces “Recent changes”). Dashboard button Recent updates (May 17). Route alias: /admin/recent-changes still works.
  • NewPlayer detail by roster ID: Vote/stats modals can load full player detail via roster id where available.

USA Lacrosse awards (2026 season)

  • NewPortal CSV import: npm run import-usa-lacrosse-nominations loads player nominations (All-American, All-Academic, Jackie Pitts) into candidates and Coach of the Year rows into coach_of_year_nominees, with portal submission IDs and full payload JSON. Multiline quoted CSV fields are supported.
  • NewCoach reference page: /usa-lacrosse/nominees — browse nominees by ballot with portal detail (stats, essays, honors). COTY supporting PDFs served from /nominee-docs/coty/.
  • NewUnified coach voting: /usa-lacrosse/vote — one ranking ballot per award with per-rank nominee dropdowns (same slot model as All State); ballot dropdown covers All American, All Academic, Jackie Pitts, and Coach of the Year. Legacy /all-american/vote redirects here.
  • NewCOTY consolidation: npm run consolidate-coty-nominees merges duplicate portal coaches, combines LOR PDFs (pdf-lib), stores merged_submissions (migration 035). Import script matches COTY PDFs by portal UUID and coach name.
  • NewAdmin views: Ranking Totals and View Each Coach's Vote include USA Lacrosse ballots. All American Approval page notes that 2026 player awards come from the portal import, not coach submissions.
  • ChangeAdd All American (2026): Coach self-nomination form is closed for 2026; home and rules pages point coaches to USA Lacrosse voting and nominees instead.

All State — coach voting

  • NewRounds 2 & 3 unified ranking: Coaches rank one combined pool (all positions together), same as Round 2 behavior extended to Round 3.
  • NewTie Breaker round: Admin selects which players appear on the ballot via checkboxes on All State Control → Tie Breaker. Coaches see only the saved whitelist. Migration 033 adds all_state_round_included_players.
  • NewAlphabetical rank dropdowns: Vote lists sort by player name so coaches can jump to a name with the keyboard.
  • NewRules page — All State: /rules documents STL All State eligibility, 1st Team / HM composition, voting rounds, and coach page links.
  • NewStat ranking weights: Link on vote page toolbar; Stats Rank in All Player Stats uses each coach’s saved weights (see Latest).

All State — admin control

  • NewEdit nomination properties: On All State Candidates, each row has Edit — update position, secondary position, name, school, grade, jersey, cards, stats, and coach comments without re-importing CSV.
  • NewOutlier detection: Flags votes outside expected rank range (sigma-based). Filter by round or all rounds; sortable table; message shows player, rank given, team, and expected range.
  • NewSelective vote removal: Check individual outlier rows, then throw out only those votes (not all flagged at once).
  • NewDrop threshold direction: Auto-drop rule can remove players ranked below or above a points threshold (radio on All State Control).
  • NewPer-round dropped players: Dropping applies to the selected round only; players stay in the overall pool for other rounds.
  • NewCoach vote position summary: On View Each Coach's Vote, each ballot shows A/D/G counts as #Attack/#Total, #Defense/#Total, #Goalie/#Total.

Fixes

  • FixLogin rate limiting: Coach and admin login limits count failed attempts only, so successful logins no longer trigger “too many attempts.”
  • FixAccess code verification: All State meeting access codes validate correctly (normalization / hash compare).
  • FixDropped players in ballots: Players dropped for a round no longer appear in that round’s rank dropdowns (e.g. Round 2).
  • FixOutliers by round: Outlier list respects the selected round scope instead of mixing all rounds by default.
  • FixExpected range display: Outlier “expected range” no longer shows invalid values (e.g. −1) when sample size is too small.

Testing checklist

Verify on staging/production after deploy. Remove or check off items as you go.

USA Lacrosse

  • Run import against production DB; confirm counts (~20 All-American, ~12 All-Academic, ~5 Jackie Pitts, ~8 COTY) and nominee detail on nominees.
  • Submit and reload each ballot on vote; confirm ranking validation and read-only after submit.
  • Confirm /all-american/vote redirects to USA Lacrosse vote.

Stat ranking weights

  • Apply migration 034_all_state_coach_stat_weights.sql on production if not already applied.
  • As Coach A: set Attack weights heavy on goals → save → open View All Player Stats → Stats Rank order reflects goals emphasis.
  • As Coach B (different login): confirm default/equal weights unless they save their own profile.
  • Reload vote page after saving weights; confirm Stats Rank updates without affecting saved ballot.
  • Try Suggested emphasis preset for goalie (saves / goals allowed) and verify rank shifts for goalies only.

All State voting

  • Round 1: position pools and slot count match nominee count per position.
  • Rounds 2 & 3: single combined ranking UI; submit and reload ballot.
  • Tie Breaker: save a subset on admin → coaches see only those names.
  • Drop a player for Round 2 only → absent from R2 dropdowns, still visible in R1/R3 if applicable.
  • Drop rule: test both “below” and “above” threshold directions.
  • Rank dropdown order is alphabetical; keyboard navigation finds names quickly.

All State admin

  • Edit a candidate’s position on candidates; confirm vote page and exports reflect the change.
  • Outliers: filter by round, sort columns, select subset, throw out — tally updates.
  • Coach votes page shows A/D/G summary per coach for each round.
  • Login: several failed attempts then success — no false lockout.
  • Access code: set code on active session, verify at vote meeting flow.

Recent commits: 3fa462a (COTY merge + pdf-lib), 95087a6 (USA Lacrosse dropdown voting), a9e87a8 (coach stat weights), df37327 (recent updates page, player detail), 3f011ac (USA Lacrosse + tie breaker + rules), 9a4cb5d (edit nominations), eda330e (outliers), 0b97236 (unified R2/R3, rate limit).