From 05161bf7ef8e72b8ca7c705c59ec871a402926e4 Mon Sep 17 00:00:00 2001 From: Mitchell-Johnson Date: Sun, 11 Oct 2026 20:32:34 -0700 Subject: [PATCH] PLAN.md: the Files edge sweep Co-Authored-By: Claude Fable 5.1 --- PLAN.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/PLAN.md b/PLAN.md index 3ba644f..4c48af9 100644 --- a/PLAN.md +++ b/PLAN.md @@ -774,6 +774,25 @@ something long in one, switch away and back, refresh — it's all still there. - *Not done, on purpose:* no restart-from-a-seek beyond what is encoded (the encode is faster than watching; a seek far ahead waits), no bit-rate ladder or adaptive switching, no subtitles, no keeping a finished re-encode for next time. +- **Files edge sweep** — **2026-10-11** (v0.1.0-214), asked for as "a full bug sweep of + the Files section, every example and edge case". Every handler and both UI files read + through with odd inputs in mind, then a battery of ~60 requests against the live hub + (`sweep.py`, not kept: listings of files, missing and forbidden paths, NUL bytes, names + with spaces/#/%/?/umlauts, links to files, folders and nothing, a pipe, over-size saves, + uploads with bad names and clashes, renames and moves onto things, protected paths, + thumbnails of empty and mislabelled images, playback of an image and an audio-only mp4, + root-mode variants). One real data bug: **a save over the 8 MiB cap truncated the file + and kept the first 8 MiB, answering 204** — the body is now read whole first and refused + with 413, the file untouched. The rest: a link to a file showed the link's own time; a + link to nothing read as an empty 200; a bad codec or size was answered by inspecting + the file; a failed stream was handed back to the next identical request; a player + leaving mid-start made the recipe loop try the next engine; a root-mode ffmpeg's end + could wait forever; a page closing kept its stream for ten minutes (a beacon now + releases it at once); the path box took only absolute paths (it resolves like a shell + now, in the tab and the Move picker, with a test); a dropped folder became a nameless + empty file; the upload toast counted intentions; the viewer called a pipe a binary + file. Not bugs, left alone: `rm -rf` of a mount point empties it (the console is + root-capable by design); a folder of ten thousand rows is slow (no virtual list). - **Docker read-only view** — `docker ps`/logs; dockhand stays the source of truth. - **Notifications** — push on service failure / SMART warning / UPS event. - **Terminal extras** — search, copy-mode, font/theme, split panes, upload via