Problem
plugin.json's documented nav object includes a screen field (CLAUDE.md example: "nav": { "label": "My Plugin", "screen": "plugin-my_plugin" }), but the frontend never reads it. The nav dropdown builder in static/app.js hardcodes:
screenId = "plugin-" + plugin.id
regardless of whatever nav.screen a plugin declares. Similarly, at least one plugin (multiplayer in slopsmith-stems) sets an undocumented nav.icon field that also has no consumer anywhere in app.js.
Evidence of confusion this causes
Across the plugin ecosystem, authors keep populating nav.screen inconsistently despite it doing nothing:
slopsmith-plugin-editor sets "screen": "editor"
slopsmith-plugin-tabimport sets "screen": "tab-import", which doesn't even match its own plugin id (tab_import)
slopsmith-plugin-rooms omits screen entirely
Since the field is silently ignored, none of this affects runtime behavior today — but it's actively misleading documentation, and plugin authors are cargo-culting a value that does nothing.
Ask
Either:
- Wire
nav.screen (and drop or formally support nav.icon) into the dropdown builder so plugin authors can actually control their nav entry's screen id, or
- Remove
nav.screen from the documented manifest schema in CLAUDE.md and note it's derived automatically from plugin.id, so authors stop setting a value with no effect.
Option 2 is probably the safer/simpler fix given no plugin currently depends on nav.screen being anything other than "plugin-" + id.
Migrated from Maestro-Ltd/slopsmith#33.
Problem
plugin.json's documentednavobject includes ascreenfield (CLAUDE.md example:"nav": { "label": "My Plugin", "screen": "plugin-my_plugin" }), but the frontend never reads it. The nav dropdown builder instatic/app.jshardcodes:regardless of whatever
nav.screena plugin declares. Similarly, at least one plugin (multiplayerinslopsmith-stems) sets an undocumentednav.iconfield that also has no consumer anywhere inapp.js.Evidence of confusion this causes
Across the plugin ecosystem, authors keep populating
nav.screeninconsistently despite it doing nothing:slopsmith-plugin-editorsets"screen": "editor"slopsmith-plugin-tabimportsets"screen": "tab-import", which doesn't even match its own pluginid(tab_import)slopsmith-plugin-roomsomitsscreenentirelySince the field is silently ignored, none of this affects runtime behavior today — but it's actively misleading documentation, and plugin authors are cargo-culting a value that does nothing.
Ask
Either:
nav.screen(and drop or formally supportnav.icon) into the dropdown builder so plugin authors can actually control their nav entry's screen id, ornav.screenfrom the documented manifest schema in CLAUDE.md and note it's derived automatically fromplugin.id, so authors stop setting a value with no effect.Option 2 is probably the safer/simpler fix given no plugin currently depends on
nav.screenbeing anything other than"plugin-" + id.Migrated from Maestro-Ltd/slopsmith#33.