Skip to content

scoreboards: require core 3.8.1; use its game-over check (sports family 5 adopt) - #631

Merged
ChuckBuilds merged 4 commits into
mainfrom
claude/family5-adopt
Oct 5, 2026
Merged

ChuckBuilds merged 4 commits into
mainfrom
claude/family5-adopt

Conversation

@ChuckBuilds

Copy link
Copy Markdown
Owner

Step 6 of family 5, the last one. Core v3.8.1 ships src.common.sports_game_over (LEDMatrix#770). The nine scoreboards now require 3.8.1, inherit SportsGameOverMixin and delete their identical _is_game_really_over copies, which #625 had reconciled. Nothing a user sees changes.

Changes

  • Adoption: each SportsLive lists SportsGameOverMixin just before SportsLiveSharedMixin, the order core documents and tests. The import is plain, each plugin keeps its FINAL_PERIOD, and its copy is deleted. Baseball's BaseballLive not-played override stays, and its super() now reaches core's method.
  • Minimum core 3.8.1, with minor bumps: afl 1.36.0, baseball 1.58.0, basketball 1.43.0, football 3.19.0, hockey 1.43.0, lacrosse 1.37.0, nrl 1.35.0, soccer 2.40.0, ufc 1.20.0. Each gets a versions[] entry, compatible_versions >=3.8.1, a CHANGELOG entry, and plugins.json.
  • New guard, scripts/test_game_over_mixin_copies.py:
    • It fails if a copy returns. Only BaseballLive may define the method, and it must call super().
    • It also fails if the import is guarded or aliased, if the base is missing or in the wrong order, if a FINAL_PERIOD value drifts or appears elsewhere, or if core's mixin grows.
    • All 12 planted breakages were caught.
  • Core-version table: v3.8.1 is tagged, so check_min_core_version.py dates the five modules it ships as 3.8.1: fetch_service, sports_game_over, display_arbiter, screen_runner and plugin_local_files. I checked each with git show v3.8.1:<path>. The tag test now tracks v3.8.1.
  • Docs: doc 08 gets a "Converged at 3.8.1" note.

Verification

Compared against origin/main, both on the core v3.8.1 tag.

  • Game-over answers: test_game_over_check.py passes all 3,115, unchanged, and its --print tables are byte-identical.
  • Rendering: 192 harness PNGs across the nine plugins, 0 differ.
  • Plugin tests: run_plugin_tests.py gives the same result per test (349 passed). The same 2 failures happen on main: test_football_plugin, which prompts for input, and test_baseball_activity.
  • Repo scripts: all 49 scripts/test_*.py pass.
  • Other checks: check_version_bump (naming all nine), update_registry --check, check_min_core_version, check_sports_drift and check_manifests_ascii all pass.
  • MRO proof: all 18 league live managers resolve the method to core's mixin. The three baseball managers go through BaseballLive first.
  • Core parity: core's test_sports_game_over_parity.py passes against this branch (118); deleted copies count as adopted.

Overlap: #620 conflicts in seven plugins' manifest and CHANGELOG and in plugins.json. Its sports.py changes merge cleanly. Whichever lands second re-bumps those seven.

🤖 Generated with Claude Code

ChuckBuilds and others added 4 commits October 5, 2026 10:26
…opies (family 5)

Core 3.8.1 ships src.common.sports_game_over, whose
SportsGameOverMixin._is_game_really_over is the body the nine copies were
reconciled to in #625. Each plugin's SportsLive now inherits it, listed
before SportsLiveSharedMixin (the order core documents and tests), keeps its
FINAL_PERIOD declaration and deletes its copy. The import is plain; the next
commit floors every plugin on 3.8.1.

Baseball keeps BaseballLive._is_game_really_over, the postponed/suspended
check; its super() call now reaches core's method.

No behaviour change: scripts/test_game_over_check.py gives the same 3,115
answers, and every harness render is byte-identical.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
afl 1.36.0, baseball 1.58.0, basketball 1.43.0, football 3.19.0,
hockey 1.43.0, lacrosse 1.37.0, nrl 1.35.0, soccer 2.40.0, ufc 1.20.0.

versions[0].ledmatrix_min_version and compatible_versions rise to 3.8.1,
the first release that ships src.common.sports_game_over, which the
previous commit imports plainly. A floor raise is a minor bump, as for the
3.7.0 and 3.8.0 raises before it. plugins.json regenerated with
update_registry.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
scripts/test_game_over_mixin_copies.py, in the shape of the stage 3 and
stage 4 guards. For each of the nine scoreboards it fails when:

- a runtime file defines _is_game_really_over again (any class, or module
  level), except baseball's BaseballLive, which must call super();
- sports.py's import of SportsGameOverMixin is missing, aliased or inside a
  try that catches ImportError;
- SportsLive does not inherit the mixin, or lists it after
  SportsLiveSharedMixin;
- SportsLive's FINAL_PERIOD is not the owner's value (hockey 3; basketball,
  football and lacrosse 4; the rest None), or another class sets it;
- with a core checkout, the mixin defines anything but the method and
  FINAL_PERIOD.

A self-check plants each failure. CI picks it up through the
scripts/test_*.py glob in test-plugins.yml. The shared sports code page
records the 3.8.1 convergence.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Core v3.8.1 (a669d781) is tagged. Every None entry in the min-core table
is in it (checked with git show v3.8.1:<path>): fetch_service,
sports_game_over, display_arbiter, screen_runner and plugin_local_files
are now "3.8.1", and the test's tag list gains 3.8.1, so its tag
section checks them. v3.8.1 reports __version__ "3.8.1"; REPORTED_AS
needs no entry.

This clears check_min_core_version for the scoreboards' plain import of
src.common.sports_game_over.

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

coderabbitai Bot commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 8c994c72-6fa9-499b-8ebd-2cae990ccf70
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 107 complexity

Metric Results
Complexity 107

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 540fd24 into main Oct 5, 2026
5 checks passed
@ChuckBuilds
ChuckBuilds deleted the claude/family5-adopt branch October 5, 2026 14:46
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