Commit Graph

6 Commits

Author SHA1 Message Date
leocrm-bot bb4b0ce514 feat: Core Plugin system — is_core flag, topological sort dependency resolution, deactivation protection 2026-07-07 07:44:02 +02:00
Leopoldadmin 5138590277 fix(plugin): add version comparison and migration run on version mismatch
Bug 6: install() and activate() now compare the plugin's manifest
version with the stored DB version. If they differ, migrations are
re-run to bring the schema up to date and the DB version field is
updated. This ensures that updating a plugin with a new manifest
version triggers the migration runner automatically.
2026-07-03 16:56:30 +00:00
Leopoldadmin 826cf69c9a fix(plugin): add dependency resolution and permission soft-check
Bug 3: install() and activate() now verify that declared dependencies
are installed/active before proceeding. Raises ValueError which the
service layer converts to HTTPException 400.

Bug 5: activate() now performs a soft permission check — logs warnings
for declared permissions not found in any discovered plugin.
2026-07-03 16:45:49 +00:00
Leopoldadmin 94a5bf105c fix(plugin): track routes by object identity to prevent cross-plugin removal
Bug 2: deactivate() removed routes by path-matching, which caused
routes from other plugins sharing the same prefix (e.g. /api/v1/dms)
to be removed when deactivating one plugin. Now tracks actual route
objects by identity in _mounted_routes and removes only those specific
objects during deactivation.
2026-07-03 16:25:31 +00:00
leocrm-bot a2452cc04b chore: fix all ruff lint errors + format — 0 errors, 306 tests pass 2026-06-29 17:43:56 +02:00
leocrm-bot 9678344f0e T03: plugin system framework + lifecycle + migrations + event bus + DI
- Plugin registry with discover/install/activate/deactivate/uninstall lifecycle
- PluginManifest Pydantic v2 schema (name, version, dependencies, routes, events, migrations)
- BasePlugin abstract class with lifecycle hooks (on_install/activate/deactivate/uninstall)
- Migration runner with tenant_id validator (rejects tables without tenant_id)
- Event bus integration: register/unregister listeners on activate/deactivate
- Service container DI: plugins receive db, cache, event_bus, storage, notifications
- Idempotent operations (activate active=200, deactivate inactive=200)
- UI registry for frontend component registration
- 47 new tests (14 ACs + 33 unit tests), 103 total tests pass
- Migration 0003: plugins + plugin_migrations tables
- Coverage: 85.92% for plugin modules
2026-06-29 08:02:15 +02:00