Version: Fusion 0.57.0
Repro:
- Start
fn dashboard in ~ with several managed projects.
- Register a path-based plugin contributing skills via definePlugin's
skills array; enable it for managed project P only.
- Open P's Skills view.
Expected: the plugin's skills listed (source plugin:<id>).
Actual: no plugin skills, across restarts, nothing in logs. Plugin state is STARTED, plugin settings render fine, module verified healthy (default export, 10 skills, imports standalone).
Confirmation: starting fn dashboard in P's root makes all 10 skills appear — daemon scope == enablement scope.
Root cause: plugin enablement is per-project (project_plugin_states keyed projectPath+pluginId; each PluginStore pinned to one normalizedProjectPath), but the skills adapter is wired once at startup to the daemon-level PluginLoader (getPluginSkills: () => pluginLoader.getPluginSkills()). Its loadAllPlugins() loads only plugins enabled for the daemon's rootDir and silently skips the rest, so /skills/discovered merges disk skills of the requested project with plugin skills from the wrong scope.
Suggested fix: make getPluginSkills project-aware (resolve the requesting project's enablement + a loader for that scope), or load the union of all projects' enabled plugins and filter per request. Please also log plugins skipped as disabled at load time — the silent skip made this expensive to diagnose.
Version: Fusion 0.57.0
Repro:
fn dashboardin~with several managed projects.skillsarray; enable it for managed project P only.Expected: the plugin's skills listed (source
plugin:<id>).Actual: no plugin skills, across restarts, nothing in logs. Plugin state is STARTED, plugin settings render fine, module verified healthy (default export, 10 skills, imports standalone).
Confirmation: starting
fn dashboardin P's root makes all 10 skills appear — daemon scope == enablement scope.Root cause: plugin enablement is per-project (
project_plugin_stateskeyed projectPath+pluginId; each PluginStore pinned to one normalizedProjectPath), but the skills adapter is wired once at startup to the daemon-level PluginLoader (getPluginSkills: () => pluginLoader.getPluginSkills()). ItsloadAllPlugins()loads only plugins enabled for the daemon's rootDir and silently skips the rest, so/skills/discoveredmerges disk skills of the requested project with plugin skills from the wrong scope.Suggested fix: make getPluginSkills project-aware (resolve the requesting project's enablement + a loader for that scope), or load the union of all projects' enabled plugins and filter per request. Please also log plugins skipped as disabled at load time — the silent skip made this expensive to diagnose.