the widget is out of scope too, leaving one open call

widgets/MusicPlayer stays in its third workspace package, registered where it
is. plugins cannot contribute widgets and are not going to learn how tonight.

with cliamp and the widget both cut, exactly one judgement is left in the music
extraction: whether the global MusicPlayerHost overlay gets a contribution slot
in the shell or stays in DashboardLayout gated as it already is. either is fine.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-15 01:21:54 +00:00
co-authored by Claude Opus 5
parent b5db3c47e1
commit 7d65732f77
+12 -6
View File
@@ -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 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. Mapped 2026-08-15.
**Decide these yourself. Do not stop to ask.** Every one of them has two defensible answers, the owner has **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 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 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. 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 3. ~~**A dashboard widget.**~~ **OUT OF SCOPE — leave it where it is.**
through `WidgetRegistry`. Plugins cannot contribute widgets.
`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 ### 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 | | Part | Close the gap | Leave it behind |
| --- | --- | --- | | --- | --- | --- |
| ~~websockets~~ | — | **out of scope, see above. Do not spend a minute on cliamp.** | | ~~websockets~~ | — | **out of scope. 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~~ | — | **out of scope. Leave `widgets/MusicPlayer` exactly as it is.** |
| widget | let a plugin contribute `widgetRegistryMetas` | leave `widgets/MusicPlayer` where 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 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. left in the platform is a documented seam; a piece left dangling is a bug.