fix: register core capabilities + plugin lifecycle before discovery

Core fix: core capabilities (plugin-manager, capability-registry,
contribution-registry, permissions, events) now registered BEFORE plugin
discovery, so plugins can resolve required capabilities at load time.

Changes:
- main.go: register 5 core capabilities before DiscoverPlugins();
  add plugin lifecycle (register caps, resolve required/optional,
  set status LOADED/DEGRADED/MISSING_REQUIRED, register contributions)
- api/app.go: ReloadPlugins now re-registers core + plugin capabilities
- capability/registry.go: add UnregisterAll() for reload
- cmd/smoke-platform/main.go: verify core caps, required resolution,
  degraded status, total caps >= 7
- PluginCard.svelte: remove ✗ on optional-missing, show degraded info
- PluginManager.svelte: preserved (counter shows core+plugin caps)

Rule: optional missing => DEGRADED (not FAILED).
Required missing => MISSING_REQUIRED_CAPABILITY.

Verified: smoke-platform , test.sh (10/10) , check.sh 
This commit is contained in:
2026-06-16 17:12:46 +08:00
parent 1c75389535
commit dd3a5f8ff5
4 changed files with 215 additions and 5 deletions
+7
View File
@@ -46,6 +46,13 @@ func (r *Registry) Register(pluginID string, capabilities []string) error {
return nil
}
// UnregisterAll removes all capabilities (used before reload).
func (r *Registry) UnregisterAll() {
r.mu.Lock()
defer r.mu.Unlock()
r.capabilities = make(map[string]*Entry)
}
// Unregister removes all capabilities provided by a plugin.
func (r *Registry) Unregister(pluginID string) {
r.mu.Lock()