files-app becomes url-state: the file browser is where the work happened, but where selection lives and who clears a query string are framework questions. The panel framework's version of the same question moves in beside them, extracted from the deep-read item, which keeps it as one of its three questions. Item ids changed with the theme. Done now deliberately — no board reads them yet, and this is the last cheap moment to move one. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1.1 KiB
id, title, theme, status, created, date_source, order
| id | title | theme | status | created | date_source | order |
|---|---|---|---|---|---|---|
| url-state/rows-are-still-not-links | Rows are still not links | url-state | open | 2026-08-20 | assumed | 1 |
Rows are still not links. This is the half that did not get done, and it is the original
finding. Both list and grid render <div onDoubleClick> (FileItem.tsx:701,748), and search
results render <div onClick> (FileViewContainer.tsx:187) — the "opaque click" that
docs/navigation-audit.md names. No cmd-click into a new tab, no middle-click, not
link-focusable, and the target lives in a closure rather than the DOM.
It is now much easier than it was: folderHref(path) gives a folder's URL and hrefForPath gives
a full To with the overlay already stripped, so a row becomes
<Link to={hrefForPath(childPath)}> and a file row becomes a link that sets ?view=<name>. The
breadcrumb has done exactly this since before today and is the model.
Watch for: a row is also a click target for SELECTION (single click selects, double opens,
shift/cmd extend). An anchor changes what those gestures mean by default, so the selection
handlers have to keep working and preventDefault where they win.