docs: Plugin system documentation and discoverability (#203)#204
docs: Plugin system documentation and discoverability (#203)#204deucebucket merged 2 commits intodevelopfrom
Conversation
Add in-app docs for Python drop-in plugins, secrets management, and real-world API examples (Google Books, Open Library) to the Plugins settings tab. Ship example-logger plugin to examples/plugins/ with comprehensive README.
There was a problem hiding this comment.
🔍 Vibe Check Review
Context
Documentation-only PR adding in-app plugin system help, an example logger plugin, a standalone plugins README, and new hint entries for plugin-related tooltips. Addresses issue #203.
Codebase Patterns I Verified
- BasePlugin interface (
plugin_loader.py:47-103on PR branch):setup(),can_process(),process(),teardown()— matches docs exactly - Timeout:
DEFAULT_PLUGIN_TIMEOUT = 30— matches docs claim of "30s timeout" - Confidence weight:
source_weight = 60inplugin_loader.py:335— matches README claim of "60" - Auto-disable threshold:
AUTO_DISABLE_THRESHOLD = 5inplugins.py:29— matches docs claim of "5 consecutive failures" - Hints pattern: Existing hints in
hints.pyuse flat dict keys with descriptive strings — new entries match - Template pattern: Existing
plugins_settings.htmluses Jinja2{{"{{"}}escaping for literal braces — new cards match
✅ Good
- All factual claims (timeout, weight, failure threshold, BasePlugin methods) verified against actual code
- Example plugin is minimal and correct — good template for users
- README covers manifest fields, interface methods, behavior, and config comprehensively
- Secrets management card is a nice touch — separating keys from config is a common user confusion point
- CHANGELOG and version bump present and correct
🚨 Issues Found
| Severity | Location | Exact Code Quote | Issue | Fix |
|---|---|---|---|---|
| MEDIUM | templates/plugins_settings.html:182 |
{{"{{"}}title{{"}}"}}}+inauthor: |
Extra } in Google Books URL template. Renders as {{title}}} (three closing braces) instead of {{title}}. Users copying this example will get a broken template variable. |
Remove the extra } — change {{"}}"}}} to {{"}}"}}}... actually, change {{"}}"}}}+inauthor: to {{"}}"}}+inauthor: |
📋 Scope Verification
| Issue | Problem | Addressed? | Notes |
|---|---|---|---|
| #203 | Plugin system poorly documented/discoverable, unclear secrets, no real-world examples | ✅ | In-app help cards, example plugin, README, secrets docs, API config examples all added |
Scope Status: SCOPE_OK
📝 Documentation Check
- CHANGELOG.md: ✅ Updated
- README.md: ✅ Version badge updated
Minor Notes (non-blocking)
- Two hint keys added to
hints.py(custom_api_sources,plugin_health) are not referenced in any template. Not a bug — they may be intended for other UI locations — but worth confirming they're needed.
🎯 Verdict
COMMENT — The extra } in the Google Books URL example (line 182) will show users a broken template variable if they copy it. It's a cosmetic docs issue, not a code bug, so not blocking — but worth fixing before merge since the whole point of this PR is to help users get configs right.
🤖 Ruthless review by vibe-check
There was a problem hiding this comment.
🔍 Vibe Check Review
Context
Documentation PR adding in-app plugin guides, example plugin, secrets management docs, and API configuration walkthroughs for the existing plugin system (added in PRs #195-197).
Codebase Patterns I Verified
- Plugin system exists:
library_manager/plugin_loader.pywithBasePluginclass added in PR #197 (merged) from library_manager.plugin_loader import BasePlugin- correct import path, verified in PR #197 diff- 30-second timeout -
DEFAULT_PLUGIN_TIMEOUT = 30confirmed inplugin_loader.py - 5 consecutive failures auto-disable -
AUTO_DISABLE_THRESHOLD = 5confirmed in PR #196 - Confidence weight 60 -
source_weight = 60confirmed inplugin_loader.py(PR #197 line 448) - default_order 35 - confirmed as default in both manifest validation and
PluginInfodataclass - Hints pattern - new entries follow existing dict-based pattern with section comments, matching
hints.pystyle exactly - secrets.json - referenced in
app.pyandconfig.py(confirmed via grep)
✅ Good
- All documented claims are factually accurate against the implemented code
- Example plugin is clean, minimal, and correctly demonstrates the full
BasePlugininterface manifest.jsonfield table is comprehensive and matches the actual validation logic inplugin_loader.py- Secrets management section correctly distinguishes Docker vs bare metal paths
- Google Books and Open Library API configs use correct endpoint URLs and JSONPath syntax
- Hint entries are well-written and consistent with existing hint style
- CHANGELOG and version bump are correct
🚨 Issues Found
No issues found.
📋 Scope Verification
| Issue | Problem | Addressed? | Notes |
|---|---|---|---|
| #203 | Plugin system poorly documented, unclear secrets management, no examples | ✅ | In-app guide, example plugin in examples/plugins/, secrets card, API config walkthroughs, hint tooltips - all deliverables covered |
Scope Status: SCOPE_OK
📝 Documentation Check
- CHANGELOG.md: ✅ Updated (beta.145 entry)
- README.md: ✅ Version badge updated
🎯 Verdict
APPROVE - Clean docs PR. All factual claims verified against the actual plugin implementation. Ships useful documentation and a working example plugin.
Summary
examples/plugins/with comprehensive READMETest plan
examples/plugins/example-logger/contains working manifest.json and layer.pyCloses #203