Skip to content

fix(store): land the install_from_url gate, which never reached main - #511

Merged
ChuckBuilds merged 1 commit into
mainfrom
fix/land-sideload-gate
Sep 2, 2026
Merged

fix(store): land the install_from_url gate, which never reached main#511
ChuckBuilds merged 1 commit into
mainfrom
fix/land-sideload-gate

Conversation

@ChuckBuilds

@ChuckBuilds ChuckBuilds commented Sep 2, 2026

Copy link
Copy Markdown
Owner

#510 shows as merged, but into fix/gate-git-pull-updates#508's branch — rather than main. #508 reached main first, so the sideload gate was left behind on a branch that is no longer in anyone's way.

Same failure as plugins #350/#351, which merged into each other's bases. Worth knowing the pattern: GitHub reports these as MERGED, gh pr list shows nothing outstanding, and the code simply isn't there.

State on main today

route gated?
install_plugin — every path that re-downloads #431/#433
update_plugin's git branch #508
install_from_url — sideloading missing

install_from_url validates required manifest fields, warns on version-field and schema problems, then installs whatever it found — never comparing the core version.

Verified on main before opening this: compatibility.check appears 0 times inside install_from_url, and class TestSideloadGate is absent from the test file.

This PR

Cherry-picked unchanged from the orphaned branch — it applies to main with no conflict.

TestSideloadGate pins the same three cases the other two routes pin: refuses a floor above this core and leaves nothing behind; still allows a compatible plugin (the guard against a gate that refuses everything and passes the first test); and does not block a 2.0.0 floor on a core reporting an untrustworthy version.

Full suite: 3725 passed, 6 skipped.

Verified on hardware

The install gate this completes was exercised end-to-end on a live rig (core v3.2.0-55-g154525be) by attempting to install calendar, which floors at 3.3.0:

store_manager - INFO  - Downloading 9 files for plugins/calendar via API
store_manager - ERROR - Refusing to install calendar: Google Calendar supports
                        LEDMatrix >=3.3.0, but this system is running 3.2.0.

Refused after download, with no partial directory left behind, and the operation reported as failed rather than silently succeeding.

🤖 Generated with Claude Code

https://claude.ai/code/session_014RRtqXDCnvnY6EQwhT5CV9

Summary by CodeRabbit

  • Bug Fixes
    • Custom URL plugin installations now verify compatibility before completing installation.
    • Incompatible plugins are rejected with an error instead of being installed.
    • Temporary files are cleaned up after rejected installations.
    • Compatible plugins continue to install successfully, including those meeting the ecosystem’s minimum supported version.

#510 shows as merged, but into fix/gate-git-pull-updates -- #508's branch --
rather than main. #508 reached main first, so the sideload gate was left behind
on a branch. Same failure as plugins #350/#351, which merged into each other's
bases; worth knowing the pattern, because GitHub reports these as MERGED and
`gh pr list` shows nothing outstanding.

main today has two of the three routes gated: install_plugin (#431/#433) and
update_plugin's git branch (#508). install_from_url validates required manifest
fields and then installs whatever it found, never comparing the core version.

Cherry-picked unchanged from the orphaned branch -- it applies to main with no
conflict. TestSideloadGate pins the three cases the other routes pin: refuses a
floor above this core leaving nothing behind, still allows a compatible plugin
(the guard against a gate that refuses everything), and does not block a 2.0.0
floor on a core reporting an untrustworthy version.

Full suite 3725 passed, 6 skipped.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014RRtqXDCnvnY6EQwhT5CV9
@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: 7eb9bd64-8429-4927-95f2-9040e554ec4a

📥 Commits

Reviewing files that changed from the base of the PR and between 154525b and bad23b5.

📒 Files selected for processing (2)
  • src/plugin_system/store_manager.py
  • test/test_plugin_compatibility_gate.py

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

Custom URL plugin installations now check manifest and core compatibility before moving staged files. Incompatible plugins return an error and are removed. Tests cover incompatible, compatible, and untrustworthy core-version cases.

Changes

URL Plugin Compatibility Gate

Layer / File(s) Summary
Gate sideload installation and validate outcomes
src/plugin_system/store_manager.py, test/test_plugin_compatibility_gate.py
install_from_url checks compatibility before installation and rejects incompatible plugins. Tests verify cleanup, successful compatible installs, the 2.0.0 compatibility floor, and the updated installation-gate documentation.

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

Merge Risk: ⚪ Minimal · up to bad23

The change prevents sideloaded plugins that require a newer core from being installed while preserving compatible and uncertain-version cases. No actionable merge-blocking risk remains after normal checks and review.

Sequence Diagram(s)

sequenceDiagram
  participant install_from_url
  participant compatibility_check
  participant staged_plugin
  install_from_url->>compatibility_check: Check manifest against core version
  compatibility_check-->>install_from_url: Return compatibility result
  alt Incompatible plugin
    install_from_url->>staged_plugin: Remove staged plugin
    install_from_url-->>install_from_url: Return success: False
  else Compatible plugin
    install_from_url->>staged_plugin: Move into installed directory
    install_from_url-->>install_from_url: Return success: True
  end
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 8 functions across 2 files. 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 clearly identifies the main change: adding the missing compatibility gate to install_from_url. It is concise and specific.
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.
  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/land-sideload-gate

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

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 a686932 into main Sep 2, 2026
9 checks passed
@ChuckBuilds
ChuckBuilds deleted the fix/land-sideload-gate branch September 2, 2026 13:51
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