brackt/app/lib
Claude 37af2f1fc3
All checks were successful
🚀 Deploy / 🧪 Test (pull_request) Successful in 3m2s
🚀 Deploy / ʦ🔍 Typecheck & Lint (pull_request) Successful in 1m22s
🚀 Deploy / 🐳 Build (pull_request) Has been skipped
🚀 Deploy / 🚀 Deploy (pull_request) Has been skipped
Fix final rankings for double-elimination brackets
Review of the llws_20 bracket turned up two display bugs in the shared
ranking code, both triggered by the template setting loserFeedsInto on
every winners-bracket round.

findConsolationRound took the FIRST round with loserFeedsInto and
treated its target as a third-place game. That is sound for fifa_48,
whose only such round is the Semifinals, but llws_20 uses loserFeedsInto
to route losers into the elimination bracket — so "Elimination Round 1"
was being read as the consolation game. Its four matches were then
placed as exact positions inside the Opening Round tier, corrupting the
final rankings list. A consolation round now has to be terminal: its
winner plays no further game, which is precisely what lets its result
split two exact positions.

The rank walk also advanced by a round's match count on the assumption
that every match places its loser. That holds in single elimination and
must be kept for undecided rounds — four semifinalists occupy positions
1-4 whether or not the games have been played — but a winners-bracket
loss places nobody, since the loser drops into the elimination bracket
and is ranked by whatever knocks them out later. Those rounds consumed
positions they never filled, so a 20-team bracket ranked its last teams
T23. Rounds whose losers are placed later now consume nothing, leaving
LLWS at 1, T2, 3, 4, T5, T7, T9, T13, T17 for the full 20-team field.
Single-elimination templates are unaffected; afl_10's sub-8th ranks were
inflated the same way and are now correct too.

Also from review: the llws_20 participant labels were 21-24 characters
in an 80px fixed-width admin column and would have wrapped to three
lines across all 20 rows. Shortened them and widened the column.

Tests play a full 20-team tournament through the real advancement map
and assert the resulting rank labels.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EAxqBVzfmKJe6WQ6VF9guj
2026-08-03 18:33:22 +00:00
..
__tests__ Auto-populate & auto-score tennis Grand Slam brackets from Wikipedia 2026-06-26 21:48:00 -07:00
audit-log-display.ts Add Brackt as a league-private meta-sport (#200) (#377) 2026-05-04 20:31:44 -07:00
auth-client.ts Migrate authentication from Clerk to BetterAuth (#324) 2026-04-24 22:00:49 -07:00
auth.server.ts Add branded dark-themed HTML email template (#402) 2026-05-10 11:18:57 -07:00
auth.ts Migrate authentication from Clerk to BetterAuth (#324) 2026-04-24 22:00:49 -07:00
avatar-colors.ts Add Storybook stories for new components from staged changes (#321) 2026-04-23 22:09:25 -07:00
avatar-data.ts Add Cloudinary-backed avatar system (#385) 2026-05-06 14:47:37 -07:00
bracket-templates.ts Fix final rankings for double-elimination brackets 2026-08-03 18:33:22 +00:00
brand.ts New design (#309) 2026-04-23 13:14:55 -07:00
cloudinary-url.ts Add Cloudinary-backed avatar system (#385) 2026-05-06 14:47:37 -07:00
cloudinary.server.ts Add Cloudinary sports icon uploads (#393) 2026-05-07 16:07:34 -07:00
color-hash.ts User/chris/bracket UI redesign (#95) 2026-03-09 22:44:33 -07:00
corona-states.ts Add Storybook stories for new components from staged changes (#321) 2026-04-23 22:09:25 -07:00
cron-auth.ts Debug sync-and-simulate cron job: surface curl output and log auth failures 2026-06-10 16:50:30 +00:00
date-utils.ts claude/practical-newton-4v041g (#98) 2026-06-18 02:33:05 +00:00
draft-eligibility.ts Show why a participant is ineligible to draft (#378) 2026-05-04 21:54:14 -07:00
draft-order.ts Fix draft order initialization for teams added mid-season (#449) 2026-05-19 18:22:47 -07:00
draft-timer.ts Fix draft pause clock: use Math.ceil consistently via shared msToSeconds helper 2026-06-06 16:39:53 -07:00
email.server.ts Add branded dark-themed HTML email template (#402) 2026-05-10 11:18:57 -07:00
event-utils.ts claude/funny-maxwell-vcyb19 (#91) 2026-06-15 22:05:25 +00:00
fifa-2026-bracket.ts Reflect group stage in World Cup sim; seed R32 from real 2026 bracket 2026-06-23 12:15:45 -07:00
fifa-2026-third-place-allocation.ts Reflect group stage in World Cup sim; seed R32 from real 2026 bracket 2026-06-23 12:15:45 -07:00
flag-generator.ts Add Cloudinary-backed avatar system (#385) 2026-05-06 14:47:37 -07:00
flag-types.ts Add Cloudinary-backed avatar system (#385) 2026-05-06 14:47:37 -07:00
fuzzy-match.ts Add golf qualifying points simulator (Plackett-Luce Monte Carlo) (#223) 2026-03-24 21:46:02 -07:00
landing-data.ts Add Storybook stories for new components from staged changes (#321) 2026-04-23 22:09:25 -07:00
logger.ts Replace console.* with structured logger, fix no-inferrable-types (closes #98) (#199) 2026-03-21 13:41:39 -07:00
normalize-team-name.ts Auto-populate & auto-score tennis Grand Slam brackets from Wikipedia 2026-06-26 21:48:00 -07:00
overnight-pause.ts Add overnight pause for draft timers (#335) 2026-04-26 22:31:52 -07:00
owner-map.ts Migrate authentication from Clerk to BetterAuth (#324) 2026-04-24 22:00:49 -07:00
parse-results-text.ts feat: batch qualifying results entry (#290) 2026-04-12 14:52:22 -07:00
scoring-types.ts feat: Add scoring rules editor to league settings and creation pages 2025-10-29 00:04:27 -07:00
season-helpers.server.ts Add oxlint linting setup with zero errors (#194) 2026-03-21 09:44:05 -07:00
sport-icon-cleanup.server.ts Harden sport icon cleanup (#397) 2026-05-08 21:19:09 -07:00
sport-icon-url.ts Add Cloudinary sports icon uploads (#393) 2026-05-07 16:07:34 -07:00
standings-display.ts Show tied ranks with T prefix across standings and Discord (#239) 2026-03-27 20:45:15 -07:00
tournament-identity.ts Canonical tournament layer: 2026-05-01 21:04:48 -07:00
unmatched-team-reconciliation.ts Improve unmatched team reconciliation UX (#425) 2026-05-14 16:45:02 -07:00
utils.ts feat: add theme system with dark mode support and navbar component 2025-10-10 23:30:26 -07:00
wizard-state.ts Add auto-start draft at scheduled time (#437) (#438) 2026-05-16 23:37:29 -07:00