mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-08-26 21:08:14 +00:00
docs(sports): re-check the hold, and close two items that are already done
The remaining-work list had two entries that finished without the doc noticing, which is the failure mode this file exists to prevent. - The stale plugin-test tranche is gone. run_plugin_tests.py --all now reports 174 passed, 2 skipped, 0 failed across the whole fleet. Recorded how to re-check it too: these are standalone scripts, not a pytest suite, and one calls sys.exit(1) at import, so pointing pytest at a plugin directory collapses into an INTERNALERROR that looks nothing like the real state. - CLAUDE.md already says eight panel sizes. That leaves the hardware soaks as the only open item needing work rather than calendar time. B6's prerequisite is now built -- core test/test_sports_sunset_matrix.py (#505) -- so the phase table and the regression-test section say so, and the two modelling traps it had to work through are recorded for whoever touches it next: the copy-removed shape must be an unguarded import or the failure names scroll_display_legacy instead of the core module, and only the leaf module may be hidden because a pre-3.2.0 core still ships src/common/. The hold itself is re-checked and unchanged: v3.2.0 is still latest, __version__ is still 3.2.0, no 3.3.0, 23 days rather than the few months the gate asks for. Also worth stating plainly -- the core updates by git pull, not by downloading a release, so release-asset counts would not measure uptake even if we had them. Whatever unblocks this has to come from the store side. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01STMbQE4YctTacQXfbYqKuW
This commit is contained in:
co-authored by
Claude Opus 5
parent
cc6a75712c
commit
c2ace90353
+33
-14
@@ -214,7 +214,7 @@ one of them cannot break a user on an old core and the other can.
|
||||
| **B3** | Upstream the scroll **orchestration** layer as `src/common/sports_scroll.py`, reading `global_config['target_fps']` natively | ✅ | Content building stays per-sport |
|
||||
| **B4** | Ship 3.2.0 *and* make version reporting trustworthy | ✅ | Released 2026-08-03; tag, release and `src.__version__` agree; compatibility gate merged (#428, #431, #433) |
|
||||
| **B5** | Adoption — guarded core imports, all eight. **Bundled copies stay.** | ✅ | All eight adopted; harness byte-identical; see the B5 retrospective below — four shipped broken and were repaired in plugins #251 |
|
||||
| **B6** | Sunset — delete the bundled copies | **blocked, deliberately** | 3.2.0 *in users' hands*. Released 2026-08-03; there is no adoption data yet. See "B6 — the decision as of 2026-08-05" |
|
||||
| **B6** | Sunset — delete the bundled copies | **blocked, deliberately** | 3.2.0 *in users' hands*. Released 2026-08-03; still no adoption data at the 2026-08-26 re-check. The prerequisite regression test is built (#505); only the evidence is missing. See "B6 — the decision as of 2026-08-05" |
|
||||
|
||||
### B4 — what "ship 3.2.0" actually requires
|
||||
|
||||
@@ -305,7 +305,8 @@ been in users' hands long enough that the population running a core without it
|
||||
is small.** The bundled copies cost disk space; deleting them early costs
|
||||
scoreboards, silently. That trade is not close.
|
||||
|
||||
Before the first sunset, add a **compatibility regression test**. It has to
|
||||
Before the first sunset, add a **compatibility regression test**. **Built:**
|
||||
core `test/test_sports_sunset_matrix.py` (#505). It has to
|
||||
cover four cases, not one — B5's safety claim and B6's failure mode are
|
||||
different propositions and only the second is obvious:
|
||||
|
||||
@@ -354,6 +355,15 @@ instead of receiving one that cannot load. Every adopted plugin has a
|
||||
the default download, or store-side install data if that is ever added. Revisit
|
||||
then, not on a schedule.
|
||||
|
||||
**Re-checked 2026-08-26 — still held.** v3.2.0 remains the latest release and
|
||||
`src.__version__` is still `3.2.0`; no 3.3.0 has been cut. That is 23 days, not
|
||||
the few months above, and no store-side install data has appeared. Note also
|
||||
that the core updates by `git pull --rebase` rather than by downloading a
|
||||
release, so release-asset counts would not measure uptake even if we had them —
|
||||
whatever eventually unblocks this has to come from the store side. The
|
||||
prerequisite test is now built (#505), so when the evidence does arrive the
|
||||
remaining work is the sunset itself.
|
||||
|
||||
**When it happens, remember:** four plugins declare their floor top-level, where
|
||||
editing `versions[0]` is a silent no-op, and the floor has three live spellings
|
||||
(`min_ledmatrix_version`, `requires.min_ledmatrix_version`,
|
||||
@@ -423,21 +433,30 @@ What actually remains, smallest first:
|
||||
1. **Nothing on the critical path.** B6 is the only remaining phase and it is
|
||||
waiting on calendar time, not on work. Resist the urge to fill the gap by
|
||||
adopting more modules — see the decision above.
|
||||
2. **The stale plugin-test tranche** — 5 failures across baseball, hockey and
|
||||
basketball, all pre-existing API drift in the plugins' own older tests
|
||||
(`plugin.initialized`, `CacheManager(config_manager=...)`, a bare
|
||||
`cache_manager` import, `MockLogger.setLevel`, `BasketballPluginManager`).
|
||||
None are scroll-related. They make the suite noisy, which is how a real
|
||||
failure gets ignored.
|
||||
2. ~~**The stale plugin-test tranche**~~ — **done** (verified 2026-08-26).
|
||||
The 5 failures across baseball, hockey and basketball are gone;
|
||||
`scripts/run_plugin_tests.py --all` reports 174 passed, 2 skipped, 0 failed
|
||||
across the whole fleet. Re-check with that runner rather than by pointing
|
||||
pytest at a plugin directory: these are standalone scripts, not a pytest
|
||||
suite, and one of them calls `sys.exit(1)` at import, which collapses a
|
||||
pytest run into an INTERNALERROR that looks nothing like the real state.
|
||||
3. **Soak the remaining adoptions on hardware.** Only baseball has been watched
|
||||
through a live game, and hockey has been loaded on devpi. The other six are
|
||||
proven by harness, unit tests and pixel comparison — not by a live match.
|
||||
Out-of-season sports cannot be soaked until their season starts.
|
||||
4. **`CLAUDE.md` in the plugins repo says four panel sizes; the harness renders
|
||||
eight.** A one-line doc fix, and the discrepancy has already produced one
|
||||
false review finding.
|
||||
5. **Then, when the evidence supports it, B6** — with the four-case
|
||||
compatibility regression test above in CI first.
|
||||
Out-of-season sports cannot be soaked until their season starts. **This is
|
||||
now the only open item that needs work rather than calendar time.**
|
||||
4. ~~**`CLAUDE.md` says four panel sizes**~~ — **done.** It reads "Default
|
||||
matrix sizes are eight … design for the classic four first".
|
||||
5. **Then, when the evidence supports it, B6.** Its prerequisite — the
|
||||
four-case compatibility regression test — is built: core
|
||||
`test/test_sports_sunset_matrix.py` (#505). It drives all four cells through
|
||||
the real `PluginManager.load_plugin` and asserts the sunset cell as
|
||||
`PluginState.ERROR` plus an error naming the missing module, not as a raise.
|
||||
Two modelling traps it had to work through, worth knowing before trusting
|
||||
any successor: the copy-removed shape must be an *unguarded* import, or the
|
||||
failure names the missing `scroll_display_legacy` instead of the core
|
||||
module; and only the leaf module may be hidden, since a pre-3.2.0 core still
|
||||
ships `src/common/`.
|
||||
|
||||
## How to keep this project healthy
|
||||
|
||||
|
||||
Reference in New Issue
Block a user