2.0.4
What's Changed
Maintenance release — a full internal code audit. No user-facing feature changes; one scoring bug fixed and broad performance/quality improvements under the hood.
Fixed
- Test-data scoring with confidence mode. The admin Testing tab's seeder computed point totals with a duplicate routine that ignored
confidence_mode/confidence_penalty, so seeded leaderboards didn't match live scoring. Scoring now runs through a single sharedScoreAggregatorused by both live scoring and the seeder. - Testing-tab buttons. The seed/clean/wipe endpoints were never routed and returned 404; they now work.
Performance
- Admin stats no longer fire 260+ queries on a full FBS season — upset rate and consensus are computed from one aggregated pick-count query.
- Profile history no longer fires 30+ rank-count queries — week/season/all-time ranks are batch-loaded and ranked in PHP.
Internal
- All raw database access migrated from Capsule
DB::table()to Eloquent across 7 controllers and the seeder. - Logo storage now writes through Flarum's asset filesystem disk (cloud/CDN-friendly) instead of native filesystem calls.
- CFBD API and logo downloads use the Guzzle HTTP client instead of raw curl.
- Exceptions in the leaderboard/history/scores endpoints are now logged instead of silently swallowed.
- Settings, current-season lookup, and service dependencies are injected rather than resolved ad hoc.