todo: group the url and query-string items into one theme

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>
This commit is contained in:
2026-08-21 16:40:39 +00:00
co-authored by Claude Fable 5
parent ef2c9c51f7
commit 44f6c6d6ac
7 changed files with 50 additions and 10 deletions
+2 -2
View File
@@ -20,7 +20,7 @@ the owner's OS user and can never be granted. Indirection there really is accide
## Themes ## Themes
**77 open, 20 closed**, across 28 themes. **78 open, 20 closed**, across 28 themes.
| Theme | Open | Closed | | Theme | Open | Closed |
| ------------------------------------------------------------------------------------------ | ---- | ------ | | ------------------------------------------------------------------------------------------ | ---- | ------ |
@@ -32,7 +32,6 @@ the owner's OS user and can never be granted. Indirection there really is accide
| [Code editor](todo/code-editor/) | 1 | 0 | | [Code editor](todo/code-editor/) | 1 | 0 |
| [Components — the shared UI layer](todo/components/) | 1 | 0 | | [Components — the shared UI layer](todo/components/) | 1 | 0 |
| [File watchers](todo/file-watchers/) | 1 | 0 | | [File watchers](todo/file-watchers/) | 1 | 0 |
| [Files app — routing](todo/files-app/) | 3 | 0 |
| [Fleet — one command across every server](todo/fleet/) | 3 | 0 | | [Fleet — one command across every server](todo/fleet/) | 3 | 0 |
| [Headscale](todo/headscale/) | 0 | 5 | | [Headscale](todo/headscale/) | 0 | 5 |
| [Infra (alpha)](todo/infra/) | 6 | 0 | | [Infra (alpha)](todo/infra/) | 6 | 0 |
@@ -50,6 +49,7 @@ the owner's OS user and can never be granted. Indirection there really is accide
| [Sudo terminal modal](todo/sudo-terminal-modal/) | 1 | 0 | | [Sudo terminal modal](todo/sudo-terminal-modal/) | 1 | 0 |
| [Tooling — the list about the list](todo/tooling/) | 1 | 0 | | [Tooling — the list about the list](todo/tooling/) | 1 | 0 |
| [Transmission](todo/transmission/) | 6 | 0 | | [Transmission](todo/transmission/) | 6 | 0 |
| [URL state — routing, query strings and selection](todo/url-state/) | 4 | 0 |
| [Waiting on the owner to run it](todo/waiting-on-owner/) | 2 | 0 | | [Waiting on the owner to run it](todo/waiting-on-owner/) | 2 | 0 |
| [Workspaces & Panels](todo/workspaces-panels/) | 2 | 0 | | [Workspaces & Panels](todo/workspaces-panels/) | 2 | 0 |
@@ -1,9 +1,17 @@
--- ---
theme: files-app theme: url-state
heading: "Files app — routing" heading: "URL state — routing, query strings and selection"
kind: theme kind: theme
--- ---
**Grouped 2026-08-21.** This was `files-app`, and the file browser is still where most of it is —
but the question underneath is not the file browser's. Where selection lives, what a query string is
allowed to mean, and who is responsible for clearing one are framework questions that happen to have
been answered first in `/files`. The panel framework's own version of the same question is here too,
rather than filed under the framework's deep read where nobody comparing the two would find it.
`docs/navigation-audit.md` is the authority for all of it.
**The URL model is done (2026-08-15).** The folder is the pathname — **The URL model is done (2026-08-15).** The folder is the pathname —
`/files/archive/Tests/platform/docs` — and `?view=` is a NAME within it, not a second copy of the path. `/files/archive/Tests/platform/docs` — and `?view=` is a NAME within it, not a second copy of the path.
Deep links and refresh work, which they never had. Landed across `559560de`, `98ba604a`, `7e31564c`, Deep links and refresh work, which they never had. Landed across `559560de`, `98ba604a`, `7e31564c`,
@@ -1,7 +1,7 @@
--- ---
id: files-app/a-panel-s-folder-is-still-not-addressable id: url-state/a-panel-s-folder-is-still-not-addressable
title: "A panel's folder is still not addressable" title: "A panel's folder is still not addressable"
theme: files-app theme: url-state
status: open status: open
created: 2026-08-20 created: 2026-08-20
date_source: assumed date_source: assumed
@@ -0,0 +1,29 @@
---
id: url-state/can-the-query-strings-come-out-of-the-flow
title: "Can the query strings come out of the flow?"
theme: url-state
status: open
created: 2026-08-20
date_source: assumed
order: 4
---
**Can the query strings come out of the flow?** One of the three questions the Workspace/Panel deep
read set out to answer rather than assume (`workspaces-panels/a-deep-read-of-the-whole-framework-to`),
pulled out to sit beside the file browser's version of the same problem — which is the only place the
question has actually been worked through end to end.
What makes it a real question rather than a tidy-up: a query string is doing several different jobs at
once across the app. In `/files` it names the open overlay (`?view=<name>`), which is addressable state
and belongs in the URL. `src/workspaces/components/NavLink.tsx` appends a **global** query string to
every link it renders — a different job again, and one most callers never think about. And
`docs/navigation-audit.md` prescribes `?selected=<id>` for a master list with a live preview, because
the detail route is the full page.
So "come out of the flow" is not one change. Deciding which of those uses are load-bearing addressable
state and which are ambient plumbing being carried around is the work, and the answer probably differs
per case.
Related, and the reason this theme exists: `url-state/the-acts-that-clear-the-overlay-have-no-owner`
is the same shape one layer down — the params are named in one place, but every site still decides for
itself whether to honour them.
@@ -1,7 +1,7 @@
--- ---
id: files-app/rows-are-still-not-links id: url-state/rows-are-still-not-links
title: "Rows are still not links" title: "Rows are still not links"
theme: files-app theme: url-state
status: open status: open
created: 2026-08-20 created: 2026-08-20
date_source: assumed date_source: assumed
@@ -1,7 +1,7 @@
--- ---
id: files-app/the-acts-that-clear-the-overlay-have-no-owner id: url-state/the-acts-that-clear-the-overlay-have-no-owner
title: "The acts that clear the overlay have no owner, only the list does" title: "The acts that clear the overlay have no owner, only the list does"
theme: files-app theme: url-state
status: open status: open
created: 2026-08-20 created: 2026-08-20
date_source: assumed date_source: assumed
@@ -14,6 +14,9 @@ repeatedly, and nobody has since sat down and read the whole thing at once.
Three questions to answer rather than assume: can the query strings come out of the flow; is there Three questions to answer rather than assume: can the query strings come out of the flow; is there
a better shape for panel-to-panel communication than the current channel/URL split; and what does a better shape for panel-to-panel communication than the current channel/URL split; and what does
the layout tree cost that a simpler one would not. the layout tree cost that a simpler one would not.
The first of those now has its own item, `url-state/can-the-query-strings-come-out-of-the-flow`,
filed with the file browser's work on the same question — that is where it has been thought about
hardest. It stays part of this read; it is not a separate effort.
**Fold the existing panel items into this** — the silent `key`/`appType` mismatch, the destructive **Fold the existing panel items into this** — the silent `key`/`appType` mismatch, the destructive
layout migration on a renamed key, and `docs/workspace-panel-todo.md`. They are symptoms of the layout migration on a renamed key, and `docs/workspace-panel-todo.md`. They are symptoms of the
same unexamined design, and fixing them one at a time is how it stays unexamined. same unexamined design, and fixing them one at a time is how it stays unexamined.