diff --git a/plugins/EXTRACTING-A-PLUGIN.md b/plugins/EXTRACTING-A-PLUGIN.md index 446a5f00..c85317d8 100644 --- a/plugins/EXTRACTING-A-PLUGIN.md +++ b/plugins/EXTRACTING-A-PLUGIN.md @@ -115,7 +115,8 @@ A normal refresh is enough; the shell is `no-store`. When the log's last line ap ## Music specifically — READ THIS BEFORE STARTING -**Music is not a bigger offscale. It does not fit the shape, and three of its parts have nowhere to go.** +**Music is bigger than offscale, and one part of it has nowhere to go.** Two others did, and the owner cut +both from tonight's scope — see below. Mapped 2026-08-15. **Decide these yourself. Do not stop to ask.** Every one of them has two defensible answers, the owner has @@ -145,8 +146,11 @@ avoid is not a wrong call; it is a tree left half-moved with a question attached 2. **A global UI overlay.** `MusicPlayerHost` is rendered by `DashboardLayout` on **every route**, not inside a panel, and gates itself on `can('music')`. A plugin contributes panels and a layout; there is no "render this everywhere" slot, and inventing one is a platform change. -3. **A dashboard widget.** `src/workspaces/widgets/MusicPlayer/` in a *third* workspace package, wired - through `WidgetRegistry`. Plugins cannot contribute widgets. +3. ~~**A dashboard widget.**~~ **OUT OF SCOPE — leave it where it is.** + + `src/workspaces/widgets/MusicPlayer/` sits in a third workspace package and is wired through + `WidgetRegistry`. Plugins cannot contribute widgets and are not going to learn how tonight. Leave the + directory, the registration and the barrel export alone; note the seam in the manifest. ### What else differs @@ -190,9 +194,11 @@ in the platform is worth far more than a perfect design that did not land. | Part | Close the gap | Leave it behind | | --- | --- | --- | -| ~~websockets~~ | — | **out of scope, see above. Do not spend a minute on cliamp.** | -| global overlay | add one slot the shell renders from installed plugins | leave `MusicPlayerHost` in `DashboardLayout`, gated on the permission as it already is | -| widget | let a plugin contribute `widgetRegistryMetas` | leave `widgets/MusicPlayer` where it is | +| ~~websockets~~ | — | **out of scope. Do not spend a minute on cliamp.** | +| ~~widget~~ | — | **out of scope. Leave `widgets/MusicPlayer` exactly as it is.** | +| global overlay | add one slot the shell renders from installed plugins | leave `MusicPlayerHost` in `DashboardLayout`, gated as it already is | + +**One open call, then.** The player overlay is the only judgement left, and either answer is fine. Whatever you pick, the plugin must **install, enable, disable and uninstall cleanly** at the end. A piece left in the platform is a documented seam; a piece left dangling is a bug.