iris b282fa2f52 Stop a delete re-reading every transcript, and let a busy list scroll
Three faults, all of them mine from the batch work or older than it.

Deleting one Claude Code session called `list` first -- a full read of every
transcript on the machine, about 3.7 seconds against the gigabyte in this
VM -- purely to turn an id into a path. A batch of ten spent most of a
minute re-reading the same files. `context_of` already resolved an id with
a targeted glob; `delete` now does the same and takes 78ms, measured
against the same corpus.

That glob is why ids are now checked. Both places interpolate the id into
`$HOME/.claude/projects/*/"$1".jsonl`, which is an argument rather than
script text, so no shell can be talked into running anything -- but a `/`
or a `..` still walks the glob out of the directory, and `delete` removes
what it lands on. Hex and dashes only, refused rather than escaped, in both
places rather than the dangerous one alone.

Listing was the only expensive call in the app still on the 5 second
default read timeout, against work that takes about four seconds before the
tunnel adds anything -- so it timed out against a server that was answering
perfectly well. A timeout is for a server that has stopped, so it is now
set clear of the work rather than just above it.

And `BusyItem` made a row inert by consuming pointer events, which took the
drag with the tap: a list could not be scrolled while anything in it was
busy. Deciding what a gesture is above the components that already decide
it is the wrong place to stand, so the card disables its own click instead
and the scroll is left alone.
2026-08-31 20:11:53 -04:00
2026-08-24 20:32:18 -04:00
S
Description
No description provided
27 MiB
0 Stars 1 Watchers 0 Forks
Languages
Rust 54%
Kotlin 43.6%
Shell 2.4%