Fix CS2 Stage 3 QP slot assignment #89
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "claude/cs-results-qp-points-x7hums"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
computeStage3ExitQPfilled from slot 9 upward using only the teams passed instage3Exits.length === STAGE3_TOTAL_EXITS(8) — partial saves write 0 QP as a placeholder, and correct QP/placements are assigned once all 8 exits are knowncomputeStage3ExitQPnow places 0-wins teams from the bottom of the slot range so the function itself is correct even if called with a partial setTest plan
npm run test:run -- app/models/__tests__/cs2-major-stage.test.ts— all 17 tests pass🤖 Generated with Claude Code
Stage Advancement UI now shows the full 16-team field for each stage (direct entries plus teams that advanced from the previous stage), so admins can see and mark eliminations for Stage 1 advancers competing in Stage 2/3 without confusion about where those teams went. Key changes: - markCs2StageEliminations now accepts an explicit stageEliminated value per team, fixing a bug where Stage 1 teams eliminated in Stage 2 would have stageEliminated set to 1 (their entry stage) instead of 2. - New assignCs2EliminationQP writes QP to event_results progressively as eliminations are saved: Stage 1/2 exits get 0 QP immediately, Stage 3 exits get sub-ranked QP (placements 9-16 by W-L record). - Form keys changed to elim_{stageNum}_{participantId} so the backend knows which stage each elimination occurred at. - Stage completion is inferred from saved data (≥8 eliminations at that stage) to automatically move advancers into the next section. - STAGE_LABELS updated to reflect the real 16-team field for stages 2/3. https://claude.ai/code/session_013u6vbGHdppe88wQ95BLANw- Write placement in assignCs2EliminationQP so processQualifyingEvent preserves progressive QP at event finalization instead of zeroing it. Stage 1 exits get placement=25, Stage 2 exits get placement=17, Stage 3 exits get their W-L group start slot (9-16) so tie-split logic re-derives the same averaged QP at finalization. - Add clearCs2EliminationsAtStage model function and stage_displayed_{N} hidden fields so unchecking a team in the admin form actually clears their DB record (replacement semantics instead of additive). - Add stageEliminated >= stageEntry validation in markCs2StageEliminations. - Wrap mark-eliminations action handler in try/catch to surface errors. - Switch serial recalculateParticipantQP loop to Promise.all. - Remove duplicate calcStage3ExitQP from cs-major-simulator; import computeStage3ExitQP from cs2-major-stage and re-export under the original name so simulator tests remain unchanged. https://claude.ai/code/session_013u6vbGHdppe88wQ95BLANw