Skip to content

chore(plugins): add missing LICENSE files + march-madness README (audit phase 1) - #173

Merged
ChuckBuilds merged 5 commits into
mainfrom
claude/plugin-audit-phase1-neglected
Jul 10, 2026
Merged

chore(plugins): add missing LICENSE files + march-madness README (audit phase 1)#173
ChuckBuilds merged 5 commits into
mainfrom
claude/plugin-audit-phase1-neglected

Conversation

@ChuckBuilds

@ChuckBuilds ChuckBuilds commented Jul 8, 2026

Copy link
Copy Markdown
Owner

Summary

First phase of a fleet-wide plugin audit, targeting the most neglected plugins: adds the missing per-plugin LICENSE files, writes the one missing README.md (march-madness), and fixes a small networking correctness gap. No behavior changes to existing config.

Type of change

  • Bug fix in an existing plugin (march-madness: retry adapter now covers http:// redirects)
  • New plugin
  • New feature for an existing plugin
  • Documentation only (README + LICENSE additions)
  • Repo-wide change

Plugin(s) affected

geochron, march-madness, nfl-draft, on-air, tide-display

Related issues

N/A

Test plan

  • Verified the web UI configuration form against the schema — march-madness schema is unchanged; the new README documents the existing keys (README ↔ schema parity checked by hand).
  • Loaded on real hardware / emulator / dev server — not run in this environment (core LEDMatrix checkout unavailable here). CI's plugin-safety harness renders every screen at all four sizes for each changed plugin.
  • Local checks that did run: python update_registry.py --dry-run (5 expected bumps), python scripts/check_module_collisions.py (clean), JSON validity of all edited manifests.

Required for plugin changes

  • Bumped version in each changed manifest.json (geochron 1.0.0→1.0.1, march-madness 1.0.0→1.0.1, nfl-draft 1.3.11→1.3.12, on-air 1.2.0→1.2.1, tide-display 1.1.0→1.1.1) + changelog entries
  • class_name unchanged and still matches manager.py
  • entry_point unchanged
  • Updated the plugin's README.md (created march-madness/README.md)
  • config_schema.json unchanged — no new options introduced
  • plugins.json synced via update_registry.py

Notes for reviewer

Licensing — please confirm. Each new LICENSE file was chosen to match the license already declared in that plugin's manifest.json, not to impose one:

  • MIT (author-declared): geochron, nfl-draft, on-air, tide-display
  • GPL-3.0: march-madness — its manifest declared no license, so I applied the repo default and added "license": "GPL-3.0" to the manifest.

ledmatrix-elections also lacks a LICENSE but is authored by a third-party contributor (rpierce99), so I deliberately left its license alone — that's the contributor's call. Happy to add one if you tell me which.

march-madness is not redundant with basketball-scoreboard's tournament support: it's a dedicated bracket view (round grouping, seeds, round-logo separators, upset highlighting) rather than a game-rotation list. The README makes that distinction explicit. The only code change is mounting the existing retry/backoff HTTPAdapter on http:// in addition to https://.

This is phase 1 of a larger audit (docs/schema polish, config completeness, and resource-efficiency refactors ship in later phased PRs).

🤖 Generated with Claude Code

https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB


Generated by Claude Code

Summary by CodeRabbit

  • New Features

    • Added a new README for one plugin with setup, configuration, and troubleshooting guidance.
  • Bug Fixes

    • Improved network reliability for one plugin by applying retries more consistently.
    • Removed an invalid manifest setting from another plugin.
  • Chores

    • Updated version and release metadata across several plugins.
    • Added license files for multiple plugins and refreshed manifest license details.

…:// retry mount

Neglected-plugin hygiene pass (plugin audit, phase 1):

- Add LICENSE files matching each manifest's declared license: MIT for
  geochron, nfl-draft, on-air, tide-display; GPL-3.0 for march-madness
  (previously undeclared — license field added to its manifest).
- march-madness: add a README (it was the only plugin shipping without one)
  documenting features, display mode, per-key config, and data source; and
  mount the HTTP retry adapter on http:// as well as https:// so redirected
  ESPN requests keep the retry/backoff policy.
- Bump manifest versions + add changelog entries; sync plugins.json.

ledmatrix-elections (third-party author) LICENSE intentionally deferred
pending the contributor's licensing choice.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB
@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@ChuckBuilds, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 39 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 148adf76-72af-440c-98a0-53a139e437cd

📥 Commits

Reviewing files that changed from the base of the PR and between 4e02d37 and 258d745.

📒 Files selected for processing (12)
  • plugins.json
  • plugins/geochron/LICENSE
  • plugins/geochron/manifest.json
  • plugins/ledmatrix-elections/LICENSE
  • plugins/ledmatrix-elections/manifest.json
  • plugins/nfl-draft/LICENSE
  • plugins/nfl-draft/README.md
  • plugins/nfl-draft/manifest.json
  • plugins/on-air/LICENSE
  • plugins/on-air/manifest.json
  • plugins/tide-display/LICENSE
  • plugins/tide-display/manifest.json
📝 Walkthrough

Walkthrough

Adds MIT or GPLv3 LICENSE files to five plugins (geochron, march-madness, on-air, nfl-draft, tide-display), bumps their manifest versions with new changelog entries, updates central plugins.json metadata, adds a march-madness README, and fixes an HTTP retry adapter mount in march-madness manager.py.

Changes

Plugin license and version metadata updates

Layer / File(s) Summary
Geochron LICENSE and manifest bump
plugins/geochron/LICENSE, plugins/geochron/manifest.json, plugins.json
Adds MIT LICENSE; bumps manifest version to 1.0.1 with changelog entry and updated last_updated; syncs plugins.json entry.
March Madness license, docs, retry fix, and manifest bump
plugins/march-madness/LICENSE, plugins/march-madness/README.md, plugins/march-madness/manager.py, plugins/march-madness/manifest.json, plugins.json
Adds GPLv3 LICENSE and full README; fixes HTTPAdapter retry mounting to cover http:// in addition to https://; bumps manifest to 1.0.1 adding compatible_versions, license, and switching dependencies to an array; syncs plugins.json entry.
On-Air LICENSE, manifest cleanup, and version bump
plugins/on-air/LICENSE, plugins/on-air/manifest.json, plugins.json
Adds MIT LICENSE; removes invalid update_interval field and bumps manifest to 1.2.1 with changelog entry; syncs plugins.json entry.
NFL Draft LICENSE and manifest bump
plugins/nfl-draft/LICENSE, plugins/nfl-draft/manifest.json, plugins.json
Adds MIT LICENSE; bumps manifest to 1.3.12 with changelog entry; syncs plugins.json entry.
Tide Display LICENSE and manifest bump
plugins/tide-display/LICENSE, plugins/tide-display/manifest.json, plugins.json
Adds MIT LICENSE; bumps manifest to 1.1.1 with changelog entry; syncs plugins.json entry.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main audit changes: adding missing LICENSE files and the march-madness README.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/plugin-audit-phase1-neglected

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 0 complexity

Metric Results
Complexity 0

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.

claude added 2 commits July 8, 2026 20:56
The safety CI validates each changed plugin's manifest against the core
manifest_schema.json. Two pre-existing issues surfaced once these plugins
became "changed" in this PR:

- march-madness: add the required `compatible_versions` field ([">=2.0.0"]).
- on-air: remove `update_interval: 0`, which violates the schema's
  minimum of 1. on-air is MQTT push-driven and does not poll; the sibling
  mqtt-notifications plugin omits the field entirely.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB
The core manifest_schema.json requires `dependencies` to be an array;
march-madness declared it as an empty object `{}`. It has no plugin
dependencies, so `[]` is correct.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB
@ChuckBuilds

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Per project policy the whole repo is GPL-3.0. This PR originally added MIT
LICENSE files (matching those plugins' declared MIT manifests); switch them
to GPL-3.0 instead so nothing ships as MIT:

- geochron, nfl-draft, on-air, tide-display: LICENSE file + manifest
  "license" field MIT -> GPL-3.0. All are first-party (ChuckBuilds), so the
  relicense is the copyright holder's call; MIT is GPL-compatible.
- ledmatrix-elections: add a GPL-3.0 LICENSE (it shipped without one) and
  declare it in the manifest; bump 1.1.0 -> 1.1.1. This plugin is a
  third-party contribution (rpierce99) — under the repo's inbound=outbound
  GPL policy (CONTRIBUTING.md) it is already GPL-licensed to the project.

No code changes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB
ChuckBuilds pushed a commit that referenced this pull request Jul 9, 2026
countdown's LICENSE file was already GPL-3.0 but its manifest declared MIT;
align the manifest to the file (project standard). Folded into the pending
3.1.1 changelog entry — no extra version bump.

Rides on a merge of the #173 branch, which flips geochron/nfl-draft/on-air/
tide-display to GPL-3.0 and adds ledmatrix-elections' LICENSE, keeping this
stacked branch consistent with #173's licensing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB
The README still said "MIT License"; align it with the GPL-3.0 LICENSE and
manifest (part of the repo-wide MIT -> GPL-3.0 standardization). Docs only;
nfl-draft is already version-bumped in this PR.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB
@ChuckBuilds
ChuckBuilds merged commit 25780e7 into main Jul 10, 2026
4 checks passed
@ChuckBuilds
ChuckBuilds deleted the claude/plugin-audit-phase1-neglected branch July 10, 2026 13:34
ChuckBuilds pushed a commit that referenced this pull request Jul 10, 2026
Resolves conflicts after #173 (phase-1 LICENSE) and #176 (flights
airport-weather) landed on main:
- ledmatrix-flights/manifest.json: main advanced to 1.12.2 (still MIT).
  Re-applied the GPL-3.0 license flip on top and bumped to 1.12.3,
  preserving the weather-feature version history.
- plugins.json: regenerated from manifests (deterministic).

flights -> 1.12.3, stocks -> 2.3.1 (both GPL-3.0).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB
ChuckBuilds pushed a commit that referenced this pull request Jul 10, 2026
Resolves conflicts after #173 (phase-1) landed on main:
- on-air/manifest.json: the branch's versions[] (1.2.2 -> 1.2.1 -> ...)
  is a clean superset of main's (1.2.1 -> ...), so kept the branch's
  manifest.
- plugins.json: regenerated from manifests (deterministic).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB
ChuckBuilds added a commit that referenced this pull request Jul 10, 2026
…it phase 2) (#175)

* chore(plugins): add missing LICENSE files, march-madness README, http:// retry mount

Neglected-plugin hygiene pass (plugin audit, phase 1):

- Add LICENSE files matching each manifest's declared license: MIT for
  geochron, nfl-draft, on-air, tide-display; GPL-3.0 for march-madness
  (previously undeclared — license field added to its manifest).
- march-madness: add a README (it was the only plugin shipping without one)
  documenting features, display mode, per-key config, and data source; and
  mount the HTTP retry adapter on http:// as well as https:// so redirected
  ESPN requests keep the retry/backoff policy.
- Bump manifest versions + add changelog entries; sync plugins.json.

ledmatrix-elections (third-party author) LICENSE intentionally deferred
pending the contributor's licensing choice.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB

* fix(plugins): satisfy core manifest schema for march-madness and on-air

The safety CI validates each changed plugin's manifest against the core
manifest_schema.json. Two pre-existing issues surfaced once these plugins
became "changed" in this PR:

- march-madness: add the required `compatible_versions` field ([">=2.0.0"]).
- on-air: remove `update_interval: 0`, which violates the schema's
  minimum of 1. on-air is MQTT push-driven and does not poll; the sibling
  mqtt-notifications plugin omits the field entirely.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB

* fix(march-madness): make dependencies an array to satisfy core schema

The core manifest_schema.json requires `dependencies` to be an array;
march-madness declared it as an empty object `{}`. It has no plugin
dependencies, so `[]` is correct.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB

* docs(plugins): fix stale README config docs (7-segment-clock, on-air, static-image)

Plugin audit phase 2a — realign these READMEs with their config_schema.json
(the source of truth for the web UI form):

- 7-segment-clock: remove the documented-but-removed sunrise/sunset color
  transition feature (location lat/lng/locality, color_daytime/nighttime,
  min_fade_elevation, astral dependency) — it no longer exists in the schema
  or manager; document the real color and digit_spacing options; fix the
  placeholder license section (GPL-3.0, matching the LICENSE file).
- on-air: replace the removed pulsing/glow/tally-dot options with the actual
  text color, background color, font, and Home Assistant discovery fields;
  correct the per-message color/bg MQTT payload docs; drop the broken
  preview.png reference.
- static-image: document all rotation_mode values (add time_based/date_based),
  describe images as scheduled image entries rather than plain paths, and add
  a Per-Image Scheduling section.

Also normalizes each manifest's versions[] changelog key to ledmatrix_min
(some mixed the old ledmatrix_min_version). Version bumps + plugins.json sync.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB

* docs(calendar,countdown): add config tables + missing schema titles

Audit phase 2 (README parity, continued):

- calendar: convert the prose config bullets to a per-key table that also
  documents the previously-undocumented customization fonts. Kept
  credentials_file/token_file — both are real config-only keys the manager
  reads (manager.py:72-73), not schema drift. Added web-UI titles to the
  untitled options (Enabled, Max Events, Show All-Day Events, Event Rotation
  Interval, Display Duration, Update Interval).
- countdown: replace the stale prose config section with per-key tables
  covering the v3 keys (target_time, mode until/since, layout_preset,
  text_align, and the per-countdown style/layout overrides); add a title to
  the top-level enabled option.

Normalizes both manifests' versions[] key to ledmatrix_min. Version bumps +
plugins.json sync.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB

* chore(license): standardize these plugins to GPL-3.0 (not MIT)

Per project policy the whole repo is GPL-3.0. This PR originally added MIT
LICENSE files (matching those plugins' declared MIT manifests); switch them
to GPL-3.0 instead so nothing ships as MIT:

- geochron, nfl-draft, on-air, tide-display: LICENSE file + manifest
  "license" field MIT -> GPL-3.0. All are first-party (ChuckBuilds), so the
  relicense is the copyright holder's call; MIT is GPL-compatible.
- ledmatrix-elections: add a GPL-3.0 LICENSE (it shipped without one) and
  declare it in the manifest; bump 1.1.0 -> 1.1.1. This plugin is a
  third-party contribution (rpierce99) — under the repo's inbound=outbound
  GPL policy (CONTRIBUTING.md) it is already GPL-licensed to the project.

No code changes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB

* chore(license): set countdown manifest license to GPL-3.0

countdown's LICENSE file was already GPL-3.0 but its manifest declared MIT;
align the manifest to the file (project standard). Folded into the pending
3.1.1 changelog entry — no extra version bump.

Rides on a merge of the #173 branch, which flips geochron/nfl-draft/on-air/
tide-display to GPL-3.0 and adds ledmatrix-elections' LICENSE, keeping this
stacked branch consistent with #173's licensing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB

* docs(countdown): fix README license section to GPL-3.0

The README license line still said "MIT License"; align it with the
GPL-3.0 manifest + LICENSE (repo-wide MIT -> GPL-3.0 standardization).
Docs only; countdown is already version-bumped in this PR.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9Saiat9CQmNi3DeDdvacB

* fix(plugins): use ledmatrix_min_version, not deprecated ledmatrix_min

This PR's changelog normalization went the wrong direction: it converted
each touched plugin's versions[] entries from ledmatrix_min_version to
ledmatrix_min. The core's own validator (store_manager.py,
_validate_manifest_version_fields) explicitly flags ledmatrix_min as
deprecated and expects ledmatrix_min_version, so every real device
install/update of these 5 plugins would start logging a fresh
"deprecated field" warning that wasn't there before. Revert the field
name direction (and the changelog notes describing the change) so it
actually matches the core's documented, non-deprecated field.

---------

Co-authored-by: Claude <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.

2 participants