Archilyzer · Source

archilyzer

Archilyzer
git clone https://archilyzer.pages.dev/source/archilyzer.git
Log | Files | Refs | README | LICENSE

commit 5344f904417f1218dc0ce6a82074e916d0c89da7
parent 4715bc6a6af711219874b8be02228fc52009bea5
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Tue, 22 Sep 2026 16:58:12 -0400

plans: two S5/S6 debts landed, and the platter is not /mnt/platter

`storage-locations.md` still listed `assertRelocationRootPresent` and the `/review`
section as the pieces left over from S5; both shipped in `storage/debts-1` on
2026-09-21 and only the per-unit re-check in the two lane runners is still open. A
reader following the old text would have re-implemented a guard that exists.

`relocate-channel-media.md`'s Step 0 and Step 1 are the pre-S6 by-hand runbook — an
rsync-and-symlink of the saved-video store, and an fstab entry at `/mnt/platter`.
The store is moved from `/storage` now, and the platter's root is a SUBDIRECTORY of
its mountpoint, which is the shape that broke the first free-space check. Both are
marked superseded in place rather than deleted, because the reasoning about
absolute `SavedVideoPointer.dir` values is still why the mover rewrites pointers.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

Diffstat:
Mplans/relocate-channel-media.md | 24++++++++++++++++++++++--
Mplans/storage-locations.md | 19+++++++++++++++++++
2 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/plans/relocate-channel-media.md b/plans/relocate-channel-media.md @@ -361,7 +361,18 @@ essentially nothing to `/home` during a copy — the job log under `transcripts/ *unrelated* writer (a download, the LMDB index) fails mid-run; that is a reason to do step 0 first, not a reason to change the design. -### Step 0 — the saved-video store, by hand, today (no code, frees ~130 GB) +### Step 0 — the saved-video store, by hand, today (no code, frees ~130 GB) — **SUPERSEDED** + +> **Superseded 2026-09-20 — see [`storage-locations.md`](storage-locations.md) S6.** The +> hand-rolled rsync-and-symlink below is no longer the way: the saved-video store is movable +> from `/storage`. `common/controller/relocateDir.ts` is the channel mover's factored core, +> `relocateSavedVideos` is the store's mover, `settings.storage.savedVideosLocationId` +> (`common/lib/settings.ts:965-974`, `common/lib/storageLocations.ts:82`) records where it +> lives, and `transcripts/.relocating-saved-videos.json` is its in-flight marker. The move is +> guarded by `assertRelocationRootPresent` +> (`common/controller/relocateSavedVideos.ts:366,580`), which the by-hand runbook has no +> equivalent of. Kept below because the reasoning about absolute `SavedVideoPointer.dir` +> values is still exactly why the mover rewrites pointers rather than re-pointing a root. `transcripts/saved-videos` is **130.5 GB**, all of it one channel — `nuxanor-kick`, 29 containers, still being written to. @@ -397,7 +408,16 @@ Runbook (the platter takes the copy, so this works from a 100 %-full `/home`): Do this before any slice ships. It is why it is step 0. -### Step 1 — mount the platter +### Step 1 — mount the platter — **SUPERSEDED** + +> **Superseded 2026-09-20 — see [`storage-locations.md`](storage-locations.md) S6.** The +> platter is mounted and registered as the location `platter`, and its root is **not** +> `/mnt/platter`: it is `/run/media/user/<uuid>/archilyzer-media`, a SUBDIRECTORY of the +> mountpoint (FACTS, "`volumeFreeBytes` tests the mount boundary AT THE MOUNTPOINT" ~:4848 — +> that subdirectory shape is precisely what broke the first free-space check). A root is +> `join(mountpoint, relPath)`, the mountpoint and its uuid are learned by the probe, and a +> location is re-pointed on `/storage` without moving a byte. Do not add `/mnt/platter` to +> fstab. Mount `sdb1` (1.8 T ext4) at `/mnt/platter` with `nofail` in fstab; create `/mnt/platter/archilyzer-media` and `/mnt/platter/archilyzer-saved-videos`, owned by `user`. diff --git a/plans/storage-locations.md b/plans/storage-locations.md @@ -329,9 +329,21 @@ The S3/S4 gate list. Full suite on the final tip. Offline against the real host: seen writing into a dangling link. - **(c) is `reason: "storage"`, not `"media-unreachable"`**, and it lives beside the tier as a chip on `/channels` rather than as a `/review` section. `/review` is a follow-up. + **Done 2026-09-21** in `storage/debts-1`: `common/views/review.ts` (`autoPausedRows`) over + `settings.channelPriority`, a channel a PERSON paused is not a row, and Resume posts the + `previousTier` through `setChannelTierAction` — the one priority writer. + Anchors: [`FACTS.md`](FACTS.md#review-lists-what-the-machine-decided). - **(b), `assertRelocationRootPresent`, is NOT done.** The absolute-path `mkdir` in moveOut and moveBack can still materialise a mount when the volume is absent. It is the one piece of S5 left and it is self-contained. + **Done 2026-09-21** in `storage/debts-1` (`1fccabac`): exported from + `common/controller/relocateChannelMedia.ts:332`, called from `relocationRootProblem` (so + preview and action agree) and again immediately before each copy phase's mkdir, and from + `relocateSavedVideos.ts:366,580` for the saved-video store. It stats the root and, when + that root belongs to a location carrying a learned `volume.uuid`, requires the probe's + identity to match; it FAILS OPEN on unknown identity and is stat-only for a root nobody + named as a location. Anchors: + [`FACTS.md`](FACTS.md#assertrelocationrootpresent). - 2026-09-18 — written; dispatch after S4 merges (`storage/locations-s5`). - 2026-09-19 — S4 (`storage/locations-s4`, `c4384bd`→`f007263`) reviewed and merged as `4b55e3c`: badge names the location, destination by name with Resume move, bulk by name, docs + changelog. Full suite on the branch tip 527/538 under load, all 11 rerun green after two spec fixes (`a939e0e`, `f007263`). **S0–S4 complete.** Next: S5 (unreachable media) — see below. @@ -366,3 +378,10 @@ Every seam is pinned in **Not done, and named rather than forgotten:** `assertRelocationRootPresent` (S5(b)) — the move can still `mkdir` a target under an absent mount; a `/review` section for auto-paused channels; and the per-unit reachability re-check in the two lane runners. + +**Two of those three landed on 2026-09-21 in `storage/debts-1`** (merged to `main` by +fast-forward, `7589c50c` → `e109b6ac`): `assertRelocationRootPresent` +(`common/controller/relocateChannelMedia.ts:332`, `1fccabac`) and the `/review` section +(`common/views/review.ts` `autoPausedRows`, `bbc1899e`). **Only the per-unit reachability +re-check in the two lane runners remains** — still deliberately deferred to the five-minute +watch, and still available as a follow-up if a lane is ever seen writing into a dangling link.