make the email url the selection instead of a mirror of it

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-07 11:51:45 +00:00
co-authored by Claude Opus 5
parent fd923bb9be
commit 6c47cbeb74
6 changed files with 57 additions and 36 deletions
+14 -1
View File
@@ -654,7 +654,20 @@ All the same bug: an app guessing "am I being closed?" from an unmount, or payin
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 —
**Email is done** (audit H5) — and it is the one of the seven where the route already existed and
the work was pure deletion. `/email/:emailId` has been a route pair all along; what sat on top of
it was an `EMAIL_SELECTED` global plus two effects copying state into the URL and the URL back into
state. That made the address a *mirror* rather than the source: rows stayed `<button>`s with the id
in a closure, and Back raced the effect that had just rewritten the URL with `replace`. List,
reader and the mobile-panel switch now each read `useSelectedEmailId()` (`Email/shared.ts`) and the
rows are `<Link>`s, so cmd-click opens a mail in a tab for the first time. Two decisions worth
recording: no `<Navigate>` guard, because unlike a section route the bare `/email` is a real state —
the list with nothing open, exactly as `/chat` and `/jobs` — and arrow-key browsing navigates with
`replace`, since sweeping a folder would otherwise stack one history entry per row and Back would
walk the sweep instead of leaving the mailbox. `EMAIL_FOLDER` stays a global for now: it is read in
one component and is view state rather than selection. Putting it in `?folder=` is a real but
separate item.
Remaining here: Music, 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)_