Employees + USB default-disabled with an enable-time provisioning note

Both plugins provision extra tables, so they now install disabled and explain
themselves before a site opts in.

- Plugin contract gains get_provisioning_note() -> {tables, note, docs}.
  Employees and USB implement it (what tables get created in shopdb, how they
  are referenced, link to the schema README; USB references the captured
  DLP/reminder plans).
- Manifest default_enabled=false for employees + usb; the plugins list API
  returns provisioning_note + default_enabled; install now registers a plugin
  disabled when default_enabled is false.
- Setup wizard Features step renders the provisioning note the moment a plugin
  with one is enabled.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
cproudlock
2026-07-10 09:53:43 -04:00
parent f04deba011
commit 0e0bbc0604
8 changed files with 92 additions and 20 deletions

View File

@@ -53,13 +53,14 @@ class PluginRegistry:
}
}, f, indent=2)
def register(self, name: str, version: str) -> PluginState:
"""Register a newly installed plugin."""
def register(self, name: str, version: str, enabled: bool = True) -> PluginState:
"""Register a newly installed plugin. enabled=False leaves it off until a
site opts in (used for plugins that provision extra tables)."""
state = PluginState(
name=name,
version=version,
installed_at=datetime.utcnow().isoformat(),
enabled=True
enabled=enabled
)
self._plugins[name] = state
self._save()