fix: plugin asset paths that miss on the Pi's case-sensitive filesystem (leaderboard 1.5.6, baseball 1.57.1, basketball 1.42.1, hockey 1.42.3) - #614
Merged
Conversation
leaderboard 1.5.6: league_config named nfl.png, nba.png, mlb.png and nhl.png while the core ships NFL.png etc. Core 3.3.0 (#506) dropped the lowercase duplicates, so on a Pi those leagues drew a blank logo column and warned on every rebuild (hdpi: three warnings an hour). A Windows checkout finds either spelling, which hid it. NCAA women's basketball now uses the core's NCAA basketball badge (ncaaw.png never shipped). The core has no NCAA baseball logo, so that column stays blank. A missing league logo is now warned once per path, then logged at debug. baseball 1.57.1: the core ships no MiLB or NCAA baseball icon, and its NCAA badges show a basketball or hockey player, so those separators are skipped at debug instead of warning on every load (ledpi). Adding the file at either path still turns that separator on. basketball 1.42.1 and hockey 1.42.3 had the same bug. Their NCAA separators named NCAA.png and ncaa_hockey.png, neither of which the core has ever shipped. They now use the core's ncaam.png and ncaah.png badges. Basketball's missing WNBA icon drops to debug as well. Tests: scripts/test_core_asset_paths.py fails on any assets/ literal that exists in the core only under another case (it compares against listdir, so it works on Windows too). It also fails on any separator icon that neither ships with the core nor is declared as a drop-in. Per-plugin tests cover the leaderboard's logo paths and warn-once behaviour, and build each scoreboard's real ScrollDisplay. Every one of them fails on main. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configuration
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Up to standards ✅🟢 Issues
|
| Metric | Results |
|---|---|
| Complexity | 144 |
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
ChuckBuilds
added a commit
that referenced
this pull request
Oct 4, 2026
#614 (case-sensitive asset paths) released baseball-scoreboard 1.57.1 while this branch was open. Keep its 1.57.1 entry and put this change's comment fix on top as 1.57.2; plugins.json regenerated with update_registry.py. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
7 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What was broken
On the Pi (ext4),
nfl.pngandNFL.pngare different files. Windows and macOS treat them as the same file, so these paths worked on a dev box and missed on every board.nfl_logos/nfl.png,mlb_logos/mlb.png,nhl_logos/nhl.png,nba_logos/nba.pngNFL.png,MLB.png,NHL.png,NBA.pngncaa_womens_logos/ncaaw.pngmilb_logos/MiLB.png,ncaa_logos/ncaa_baseball.pngncaa_logos/NCAA.png,wnba_logos/WNBA.pngncaam.png(NCAA basketball badge); no WNBA iconncaa_logos/ncaa_hockey.pngncaah.png(NCAA hockey badge)Why the leaderboard broke: core shipped both spellings until ChuckBuilds/LEDMatrix#506 (in v3.3.0) dropped the lowercase copies. That PR checked core's own tree, but the leaderboard lives in this repo. Uppercase has shipped since April 2025, so the fix works on every core at or above the leaderboard's 3.4.0 floor.
Fixes
leaderboard 1.5.6: league logos are spelled as shipped. NCAA women's basketball borrows the NCAA basketball badge (
ncaam.png), the same one the men's poll uses. A missing league logo now warns once per path, then logs at debug. Before, every rebuild warned, because misses are deliberately not cached.baseball 1.57.1 — the separator decision: the missing separators are skipped quietly at debug, which matches afl/nrl/soccer's existing
(will skip separator). I ruled out the other two options:ncaam.png) or a hockey player (ncaah.png), which would mislabel a baseball league. UsingMLB.pngfor MiLB or college games would mislabel them too.The paths stay as drop-ins, so adding either file to the LEDMatrix install turns that separator on. The README says so.
basketball 1.42.1 / hockey 1.42.3: these are the sibling copies of the same separator code. Their NCAA separators now use the badges core actually ships, so college slates get a separator again. Basketball's missing WNBA icon drops to debug, the same as baseball's.
docs/assets/ledmatrix-leaderboard/shots.jsonandtest_pixel_perfect.pyhad the samenfl.png. Neither needs re-rendering: the docs images were made on a case-insensitive host, so they already show the logo.Tests
Every new test fails on
mainand passes here. All were checked against a freshgit archiveof coremain.scripts/test_core_asset_paths.py(a repo-level guard, so it runs on every PR):assets/...literal in plugin code/JSON or docs fixtures that exists in core (or the plugin dir) only under a different case. It compares againstos.listdir(), so it catches this on Windows too. Onmainit flags all four leaderboard paths andshots.json.*_SEPARATOR_ICONthat neither ships with core nor appears inUNSHIPPED_SEPARATOR_ICONS. That's the hockey case: it was silent and could only be caught by a declaration. An allowlist entry that core starts shipping also fails, so the list only shrinks.ledmatrix-leaderboard/test_league_logo_paths.py: every league's logo matches a shipped file's exact case (ncaa_baseball is the declared exception), and three rebuilds with two missing paths produce exactly two warnings.{baseball,basketball,hockey}-scoreboard/test_separator_icons.py: each builds the realScrollDisplaywith cwd at core and asserts:height - 4Verification
main's files: all 7 old paths miss and all 6 new ones resolve. This is the Pi's behaviour, which a Windows run can't show.check_plugin.py, coremain): all four plugins PASS at every size. The leaderboard render now shows the NFL shield.run_plugin_tests.pyon the four plugins: 139 pass, 1 fail. The failure isbaseball-scoreboard/test_odds_placement.py(2 cases,y=8at 64x32). It fails the same way on unpatchedmainagainst the same core, so it isn't from this PR.check_version_bump.py --base origin/mainwith the four ids: PASS.update_registry.py --check,check_module_collisions.py,check_manifests_ascii.pyandcheck_sports_drift.py: all pass.Not in this PR
ufc-scoreboardstill warns on load aboutufc_logos/UFC.png. Core doesn't ship it; the plugin'sgenerate_placeholder_icon.pyhas to be run by hand. It's declared in the guard's allowlist and left for a separate change.🤖 Generated with Claude Code