give the soulseek workspace a url

The section is /soulseek/:section — nav entries are NavLinks, the view panel reads the same
URL instead of being told, and the dashboard's tiles and recent searches are real links (a
recent search now opens that search, not the search screen's front page).

The peer went in `?user=<name>` rather than the /soulseek/users/:name the audit sketched: a
second path segment would need a nested route just to keep the nav highlight, and `?search=`
had already set the convention there. That deletes the `soulseek:user` channel and with it a
`{username, nonce}` request the Users panel consumed-once and cleared — the nonce existed so
asking for the same peer twice counted twice. A link is idempotent, so there is nothing to
consume and nothing to disambiguate.

`soulseek:refresh` stays: it is a signal, which is what channels are for.
This commit is contained in:
2026-08-07 11:45:33 +00:00
parent 00332e275a
commit fd923bb9be
12 changed files with 149 additions and 114 deletions
+5 -4
View File
@@ -126,10 +126,11 @@ connection status and the header renders it. Panel-scoped by construction, which
### The thirteen channels, honestly
13 channels, 26 call sites. Six carry selection that should be in the URL`music:cwd` (the entire
library location, so no album is linkable), `soulseek:section` and `soulseek:user` (the whole Soulseek
workspace has no URL), `chat:selected-session`, `monitor:scope`. Two are view toggles where a channel is
genuinely fine (`music:favorites`, `music:lyrics`).
Was 13 channels, 26 call sites. Six carried selection that belongs in the URL, and three of those are
gone: `soulseek:section` and `soulseek:user` (the whole Soulseek workspace now has one) and
`monitor:scope`. Still to move: `music:cwd` — the entire library location, so no album is linkable — and
`chat:selected-session`, which is the chat's to move, not this document's. Two are view toggles where a
channel is genuinely fine (`music:favorites`, `music:lyrics`).
Two are wired to nobody: `preview:refresh` and `chat:active-session` have publishers and no subscribers.
A third, `file-viewer:<panelId>`, had a subscriber and no publisher — it is gone, along with the