Skip to content

Draft board with VOR/ADP, live draft mode, 2026 defaults - #24

Merged
MickeyPvX merged 2 commits into
mainfrom
feat/2026-draft
Aug 28, 2026
Merged

Draft board with VOR/ADP, live draft mode, 2026 defaults#24
MickeyPvX merged 2 commits into
mainfrom
feat/2026-draft

Conversation

@MickeyPvX

Copy link
Copy Markdown
Owner

Adds

espn-ffl draft-board — ranks the draft pool by value over replacement, derived from the league's own scoring settings and starting lineup, cross-referenced against ESPN's ADP. --live hides drafted players and shows remaining roster needs; --watch <secs> follows a draft in progress.

Fixes

  • Position conflated ESPN's defaultPositionId and lineupSlotId spaces, so server-side position filtering requested the wrong slots (-p K asked for WR/TE)
  • League position filter was a silent no-op — ESPN returns all slots 0..24 including zero-count ones
  • League settings cache read was left commented out, forcing a request every run
  • Injury status persisted via Display and re-parsed by two duplicated hand-written matches

Efficiency

Measured against a live league:

before after
Weekly player request 22.7 MB 10.1 MB
update-all-data (18 wks) ~873 MB, 72 req ~209 MB, 36 req
Roster writes per call 4,845 rows 259 rows
Repeat draft-board full refetch cached

Plus request pacing, 429/5xx backoff honouring Retry-After, cache TTLs scoped to the live season, and SQLite upserts via ON CONFLICT batched in transactions.

Breaking

  • --refresh-positions removed (parsed but never read)
  • --season now defaults to the season in progress instead of a hardcoded 2025

Verification

161 tests passing (was 128), clippy clean, cargo fmt --check clean. All commands exercised against a live 2026 league.

MickeyPvX and others added 2 commits August 27, 2026 20:06
Adds `draft-board`: ranks the pool by value over replacement derived from
the league's own scoring and starting lineup, cross-referenced with ESPN
ADP. `--live`/`--watch` track picks and remaining roster needs.

Fixes:
- Position conflated ESPN's defaultPositionId and lineupSlotId spaces, so
  server-side position filtering pulled the wrong slots
- League position filter was a silent no-op (zero-count slots counted)
- League settings cache read was left commented out
- Injury status round-tripped through Display with duplicated parsers

Efficiency:
- Narrow player requests to rosterable slots (~56% smaller responses)
- update-all-data fetches each week once instead of twice
- Roster updates write only rostered players, not every known player
- Request pacing, 429/5xx backoff, and TTLs on live-season caches
- SQLite upserts via ON CONFLICT, batched in transactions

Season default now derives from the date. Removes `--refresh-positions`,
which was parsed but never read.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Resolves 8 cargo-audit failures in transitive deps (bytes,
crossbeam-epoch, quinn-proto, rustls-webpki).

Also bumps lru 0.12 -> 0.18, clearing two unsoundness advisories.
We only use get/put/clear/len, so no code changes were needed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@MickeyPvX
MickeyPvX merged commit 21dcd90 into main Aug 28, 2026
6 checks passed
@MickeyPvX
MickeyPvX deleted the feat/2026-draft branch August 28, 2026 00:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant