feat(store): read ledmatrix_min_version, aliases and commit from the registry (#686)

The store reads three optional registry fields: ledmatrix_min_version
(an incompatible install/update is refused before any download, with a
"Needs LEDMatrix X+" card badge), aliases (update/uninstall/reinstall by
registry id find a plugin installed under its manifest id, with registry
proof only), and commit (shown and linked on the store card). An older
plugins.json behaves as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Chuck
2026-09-30 09:31:16 -04:00
committed by GitHub
co-authored by Claude Opus 5.5
parent 1c928b2033
commit 5ea0d511dc
15 changed files with 922 additions and 39 deletions
+32
View File
@@ -118,8 +118,40 @@ read any of them:
`"fixed"`): both always scrolled. Documented only; no warning, because
official plugins' schemas still offer `"fixed"`.
### Plugin store
- The store reads three optional registry fields that ledmatrix-plugins'
`update_registry.py` now publishes (ChuckBuilds/ledmatrix-plugins#579). An
older `plugins.json` without them behaves as before.
- `ledmatrix_min_version`: an install or update this core cannot run is
refused before anything is downloaded, pulled or moved aside, and the web
UI says why ("requires LEDMatrix X or newer…", HTTP 409) instead of "check
logs for details". The store card shows a "Needs LEDMatrix X+" badge. The
check on the downloaded manifest stays as the fallback (older registries,
an explicitly requested other branch, `compatible_versions`).
- `aliases`: the entry's other ids. Update, uninstall and reinstall by the
registry id now find a plugin installed under its manifest id
(`weather` → `ledmatrix-weather/`; likewise leaderboard, music, stocks).
Only registry proof counts: the entry's `aliases` or its `plugin_path`
name, or a folder whose manifest declares one of those ids. A
`ledmatrix-<id>/` folder with no such proof is never replaced or removed;
uninstall and update report "not installed" and log the folder's path.
Install and update fetch the registry first when such a folder exists
and none is loaded; uninstall stays offline.
- `commit`: the monorepo commit that introduced the listed version, shown
on the store card and linked to the plugin's source at that commit.
Informational only; installs still come from the branch head.
### Fixes
- Reinstalling a plugin by its registry id when it is installed under its
manifest id (`weather` in `ledmatrix-weather/`) no longer deletes it when
the install then fails. The safety copy was taken of `weather/`, which did
not exist, and the real install was removed to make room for the download,
so a refusal by the compatibility gate left no plugin at all. Uninstalling
by the registry id reported success and removed nothing; updating by it
said "not installed". All three now find the install.
- On-demand no longer restarts a running display. `POST
/display/on-demand/start` treated `start_service` (on by default, and what
"Preview on display", the on-demand dialog and the MQTT bridge all send) as