Skip to content

docs(afl-scoreboard): document every setting, with real finals-series renders - #356

Merged
ChuckBuilds merged 2 commits into
docs/7-segment-clock-readmefrom
docs/afl-scoreboard-readme
Sep 2, 2026
Merged

docs(afl-scoreboard): document every setting, with real finals-series renders#356
ChuckBuilds merged 2 commits into
docs/7-segment-clock-readmefrom
docs/afl-scoreboard-readme

Conversation

@ChuckBuilds

Copy link
Copy Markdown
Owner

Stacked on #355 — it carries the shared
scripts/render_docs_assets.py tooling that generates these images. Base is set to that branch so the
diff stays readable. Merge #355 first and this retargets to main cleanly. If you merge #355 now, every
later plugin PR in this series can go straight to main independently.

Summary

Documentation only; no plugin behaviour changes. Second plugin in the pass to bring
every ChuckBuilds-owned plugin README to a consistent standard.

The README covered roughly fifteen of the plugin's ~120 settings, had no images, and
its "Key settings" table had drifted from the schema — it listed
show_favorite_teams_only as defaulting to false (it is true), display_duration
as 30 (it is 15), and showed show_odds: false in an example labelled as defaults.

Game selection now has its own section

This is the part that surprises people, and it was undocumented. There are three
distinct code paths, chosen by whether favorite_teams is empty and whether
show_favorite_teams_only is on:

Selection mode upcoming_games_to_show means
No favourites A total across the league
Favourites, exclusively A budget per favourite team
Favourites first, then others A total for the favourites portion only

Three favourites with a value of 3 is nine cards or three, depending on one
unrelated checkbox. Also documented: the rotating window that advances non-favourite
games every other_rotation_interval_seconds, that exclude_teams beats everything,
and that show_favorite_teams_only: true with an empty favourites list shows
everything rather than nothing.

Four dead ends, each verified

  • show_odds does nothing for AFL. Defaults to true, but ESPN publishes no odds
    block for any AFL fixture — a full finals-week payload contains zero, and the
    rendered card is byte-identical either way. Not free, though: the plugin still
    issues one odds request per selected game per update. The README tells AFL users to
    turn it off.
  • show_ranking does nothing for AFL — no poll to read for this league.
  • dynamic_duration.min_duration_seconds is in the schema with a default of 30
    but is never read; only max_duration_seconds is.
  • background_service.max_workers is in the schema with a default of 3 but the
    service is constructed with a single worker regardless.

The last two are in shared sports code copied across seven scoreboards, so fixing or
removing them is a lineage-wide change rather than something to slip into a docs PR.
Flagging rather than fixing.

Also found

A failed team-logo download is cached as a sub-kilobyte placeholder that is never
retried, so that team stays a grey text box permanently. Documented in Troubleshooting
with how to clear it. Hit this for real while rendering — five of eleven cached AFL
logos on my machine were stubs.

Images

Real output from archived ESPN payloads of the 2026 finals series, frozen clock, so
they are reproducible and --check verifies them against the code.

The live-mode card deserves a note on honesty: it is the real Carlton–Melbourne
semi-final with the status rewound to three-quarter time and the score set to the real
cumulative three-quarter total from ESPN's own linescores (Carlton 56, Melbourne 52).
It shows a moment that genuinely happened, not an invented scoreline.

Verification

  • python scripts/check_plugin.py --plugin afl-scoreboard — 24/24 PASS (8 sizes × 3 modes)
  • python scripts/render_docs_assets.py --plugin afl-scoreboard --check — images match
  • python scripts/check_module_collisions.py — OK across 43 plugins
  • manifest bumped 1.17.2 → 1.17.3, plugins.json regenerated via update_registry.py

🤖 Generated with Claude Code

… renders

Documentation only; no plugin behaviour changes.

The README covered roughly fifteen of the plugin's 120-odd settings, had no
images, and its "Key settings" table had drifted from the schema -- it listed
show_favorite_teams_only as defaulting to false (it is true),
display_duration as 30 (it is 15), and showed show_odds: false in an example
labelled as the defaults. It is rewritten around real rendered output and now
documents every option, grouped by what you would be trying to achieve.

Game selection gets its own section, because it is the part that surprises
people. There are three distinct code paths -- no favourites, favourites
exclusively, and favourites-first-then-others -- and which one runs depends on
whether favorite_teams is empty and whether show_favorite_teams_only is on. Most
importantly, upcoming_games_to_show and recent_games_to_show mean a per-team
budget in the exclusive path and a total in the other two, so three favourites
and a value of 3 is nine cards or three depending on one unrelated checkbox.
That is now a table rather than something to discover on the panel.

Four dead ends are recorded, each verified rather than assumed:

- show_odds defaults to true but ESPN publishes no odds block for any AFL
  fixture -- a full finals-week payload contains zero, and the rendered card is
  identical either way. It is not free: the plugin still issues one odds request
  per selected game per update, so the README tells AFL users to turn it off.
- show_ranking has no poll to read for this league.
- dynamic_duration.min_duration_seconds is in the schema with a default of 30
  but is never read; only max_duration_seconds is.
- background_service.max_workers is in the schema with a default of 3 but the
  service is constructed with a single worker regardless.

Also documents the missing-logo failure mode found while rendering: a failed
logo download is cached as a sub-kilobyte placeholder that is never retried, so
the team stays a grey text box until the stub file is deleted.

Screenshots come from archived ESPN payloads of the 2026 finals series with a
frozen clock, so they are reproducible and `--check` verifies them. The live
card is that same real data with one match rewound to three-quarter time and its
score set to the real cumulative three-quarter total (Carlton 56, Melbourne 52),
so it shows a moment that genuinely happened rather than an invented scoreline.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: 0b3a93ac-6341-462b-b006-48a27397c0bb

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

The rewrite dropped it. It documents core config (display.vegas_scroll.*)
rather than plugin config, which is exactly why it is worth keeping here: a
live game takes over the panel by default, and the settings that instead keep
the marquee running and weight this scoreboard's slots are somewhere the reader
would not think to look.

Reworded to name filtering.favorite_live_boost and live_update_interval by
their full paths, so it lines up with the reference sections above it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

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
ChuckBuilds merged commit 5cfd3e1 into docs/7-segment-clock-readme Sep 2, 2026
4 checks passed
@ChuckBuilds
ChuckBuilds deleted the docs/afl-scoreboard-readme branch September 2, 2026 16:44
ChuckBuilds added a commit that referenced this pull request Sep 2, 2026
… renders

Re-lands #356, which merged but never reached main: I based it on
docs/7-segment-clock-readme so it could use the render tooling before that
tooling existed on main, and #355 squash-merged that branch to main *before*
at since. This is the same content, cut from main instead.

Documentation only; no behaviour change.

The README covered roughly fifteen of the plugin's 120-odd settings, had no
images, and its "Key settings" table had drifted from the schema -- it listed
show_favorite_teams_only as defaulting to false (it is true), display_duration
as 30 (it is 15), and showed show_odds: false in an example labelled as the
defaults.

Game selection gets its own section, because it is the part that surprises
people. There are three distinct code paths -- no favourites, favourites
exclusively, and favourites-first-then-others -- and which one runs depends on
whether favorite_teams is empty and whether show_favorite_teams_only is on. Most
importantly, upcoming_games_to_show and recent_games_to_show mean a per-team
budget in the exclusive path and a total in the other two, so three favourites
and a value of 3 is nine cards or three depending on one unrelated checkbox.

Four dead ends are recorded, each verified rather than assumed: show_odds is a
no-op for AFL because ESPN publishes no odds block for the league (a full
finals-week payload contains zero) though it still issues one odds request per
selected game; show_ranking has no poll to read; and
dynamic_duration.min_duration_seconds and background_service.max_workers are in
the schema but never applied.

Re-verified against main rather than assumed still-current: every documented
default still matches config_schema.json after #353 and #354, and the committed
images re-render byte-identical against main's sports.py, which those PRs
changed. The harness passes 24/24.

Version bumped from main's current 1.19.0 rather than the 1.17.3 the stranded
branch carried.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ChuckBuilds added a commit that referenced this pull request Sep 2, 2026
* docs(afl-scoreboard): document every setting, with real finals-series renders

Re-lands #356, which merged but never reached main: I based it on
docs/7-segment-clock-readme so it could use the render tooling before that
tooling existed on main, and #355 squash-merged that branch to main *before*
at since. This is the same content, cut from main instead.

Documentation only; no behaviour change.

The README covered roughly fifteen of the plugin's 120-odd settings, had no
images, and its "Key settings" table had drifted from the schema -- it listed
show_favorite_teams_only as defaulting to false (it is true), display_duration
as 30 (it is 15), and showed show_odds: false in an example labelled as the
defaults.

Game selection gets its own section, because it is the part that surprises
people. There are three distinct code paths -- no favourites, favourites
exclusively, and favourites-first-then-others -- and which one runs depends on
whether favorite_teams is empty and whether show_favorite_teams_only is on. Most
importantly, upcoming_games_to_show and recent_games_to_show mean a per-team
budget in the exclusive path and a total in the other two, so three favourites
and a value of 3 is nine cards or three depending on one unrelated checkbox.

Four dead ends are recorded, each verified rather than assumed: show_odds is a
no-op for AFL because ESPN publishes no odds block for the league (a full
finals-week payload contains zero) though it still issues one odds request per
selected game; show_ranking has no poll to read; and
dynamic_duration.min_duration_seconds and background_service.max_workers are in
the schema but never applied.

Re-verified against main rather than assumed still-current: every documented
default still matches config_schema.json after #353 and #354, and the committed
images re-render byte-identical against main's sports.py, which those PRs
changed. The harness passes 24/24.

Version bumped from main's current 1.19.0 rather than the 1.17.3 the stranded
branch carried.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* chore(afl-scoreboard): re-bump to 1.19.2 after the logo fix landed

#357 took the plugin to 1.19.1 while this was open, so the docs bump moves to
1.19.2 and sits on top of it. Images re-verified byte-identical after the
rebase; plugins.json regenerated.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
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