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
+10 -2
View File
@@ -646,8 +646,16 @@ All the same bug: an app guessing "am I being closed?" from an unmount, or payin
key now, so there is nothing left to disagree with.
**SystemMonitor is done too** (audit M10) — `/system-monitor/:scope`, scope list as `NavLink`s,
`monitor:scope` deleted. Smallest of the seven and the same shape as `/photos`.
Remaining here: Music, Soulseek, Email, Browser. **Chat detail (`chat:selected-session`) is
chat-owned — leave it; it is written up in `COMMS/`.**
**Soulseek is done** — `/soulseek/:section`, and the peer moved to `?user=<name>` rather than the
`/soulseek/users/:name` the audit sketched: a second path segment would have needed a nested route
just to keep the nav's `NavLink` highlight, and `?search=` was already establishing the convention
for that workspace. Deleting `soulseek:user` also deleted the nonce it carried — a request stamped
`{username, nonce}`, consumed-once by the Users panel so that returning to the section did not
re-run the lookup, and nonce-stamped so that asking for the *same* peer twice still counted twice.
A link needs none of that: it is idempotent, so there is nothing to consume and nothing to
disambiguate. That is the shape of most of this section's remaining work.
Remaining here: Music, Email, Browser. **Chat detail (`chat:selected-session`) is chat-owned —
leave it; it is written up in `COMMS/`.**
### 5.9 The context has grown an app-config section — _(found 2026-08-07)_