- Manage Library search: find any course/folder by name anywhere in
the tree instead of expanding levels one by one; results carry the
same Move/Rename/Hide actions.
- Bulk select: every row gets a checkbox, so items found via search or
expanded across different tree levels can be hidden, shown, or moved
to the same destination together in one batch.
- Undo last action: a "Last action: ... [Undo]" bar appears after any
move/rename (Sort Unsorted apply, Bulk Rename apply, a Manage
Library move/rename, a bulk move) and reverses the whole batch.
Deliberately never covers Hide/Show (already a one-click toggle) or
Delete (permanent by design) - only ever move/rename, which are
trivially reversible. Re-checks each item before reversing it, so a
partial failure reports exactly what did and didn't reverse.
- Storage Usage: disk usage per top-level library folder, largest
first, with a simple proportional bar; a manual scan since it reads
every file's size.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The previous approach baked git rev-parse --short HEAD into the image
at Docker build time, but Dockhand's build context doesn't reliably
have .git available, so it silently fell back to "unknown" in
production even though the build itself succeeded. Replace it with a
plain VERSION file committed to the repo (a timestamp + short
description, updated by hand alongside each commit) that ships via the
same COPY . . as everything else - no git access needed inside the
build at all.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>