Files
platform/todo/files-app/rows-are-still-not-links.md
T
pastilhasandClaude Fable 5 6071ded175 todo: one file per item, grouped by theme, with a generated index
TODO.md had reached 1050 lines and 72 open items across 28 sections, read mostly
on a phone. It is now a directory: todo/<theme>/<item>.md, one card per file, with
frontmatter carrying id, status, created date and order, and the prose body copied
across verbatim. TODO.md becomes a generated index (bun run todo:index).

Dates: where an item's prose stated one it is used; otherwise its old section's;
otherwise 2026-08-20, floored at the day before the split rather than invented.
date_source records which.

Shaped for a two-way Kanban board, filed as todo/tooling — a card is a file, id is
the identity, frontmatter is the machine's half and the body is the owner's.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 05:42:39 +00:00

1.1 KiB

id, title, theme, status, created, date_source, order
id title theme status created date_source order
files-app/rows-are-still-not-links Rows are still not links files-app 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.