commit 733baddfc9de7d3e9030126cdfba388f7b154e33
parent e19ea927bf8150b48254acb6efad74dd3d516b21
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Mon, 28 Sep 2026 12:37:18 -0400
plans: slice Q's review recorded — SHIP; L1 and L3 fixed, the rest left; the operator step corrected (I1)
"Slice Q, as shipped" gains a Review subsection (verdict SHIP; L1
6e21cf60, L3 e19ea927; L2, L4, L5, L6 left with one line each; I2 for
slice R), the two fix rows in the commit table, and the operator step
per I1: the link target holds only the rebuildable .cache/umtool index
and caches, the song data is under ~/reports/quartering-uh-song/data, so
a missed link costs an index rebuild and the nesting trap, not data.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat:
1 file changed, 54 insertions(+), 12 deletions(-)
diff --git a/plans/release-12.md b/plans/release-12.md
@@ -166,7 +166,10 @@ can be redone):
| `0b28a7a4` | `common, docs:` `/run/media/<user>` / `operator`, `WORKTREES.md`, `fit-hooks.mjs` |
| `29dc507c` | `changelog:` one `[Unreleased]` bullet; the released line's path example |
| `1059befb` | `e2e:` deck.spec pins the relative `out` an accept records |
-| _this_ | `plans:` this record; `source-mirror.md`'s "As shipped" note under Slice Q |
+| `57ce980a` | `plans:` this record; `source-mirror.md`'s "As shipped" note under Slice Q |
+| `75327c6f` | `changelog:` review L1 — the bullet leads with the full `mkdir -p … && ln -s …` command |
+| `0416881f` | `umtool:` review L3 — `ThumbEntry` declares `bg` (relative to the song data dir; `dataFile()`, never `resolveInRoots`) |
+| _this_ | `plans:` the review, and the operator step corrected (review I1) |
**Gates** (from the worktree root; logs `$T/q-*.log`):
- **The grep gate** `git grep -c -i 'user' HEAD -- . ':!plans/'` is **empty** (exit 1) at
@@ -216,12 +219,14 @@ can be redone):
slice's file.
- **`REPO_ROOT` outside any checkout** falls back to the cwd's parent, as the plan says. Started
from `/`, that is `/`.
-- **`bg` is now relative to the song data dir,** and nothing reads it yet.
+- **`bg` is now relative to the song data dir,** and nothing reads it yet. `ThumbEntry` declares
+ it and says how to resolve it (review L3, below).
**Changelog.**
-- **One `[Unreleased]` bullet** in `editor/CHANGELOG.md`: umtool's corpus from `TRANSCRIPTS_DIR` or
- the checkout, the two new defaults (and the symlink to make before restarting umtool), relative
- manifests, and the run logs gone.
+- **One `[Unreleased]` bullet** in `editor/CHANGELOG.md`. It leads with the change and the command
+ a reader runs, `mkdir -p ~/.local/share/archilyzer && ln -s <where the data is>
+ ~/.local/share/archilyzer/song`, before restarting umtool (review L1). Then: the corpus from
+ `TRANSCRIPTS_DIR` or the checkout, the videos' default, relative manifests, and the run logs gone.
- **The released `[0.9.0]` storage-locations entry now says `/run/media/<user>/<uuid>`.** A
released entry is normally left as written. This one was changed because it is a path example,
not a name a reader would search for.
@@ -231,12 +236,49 @@ restart**:
```
mkdir -p ~/.local/share/archilyzer && ln -s /home/user/.claude/jobs/efbe67a7/tmp/song ~/.local/share/archilyzer/song
```
-- **Why before a restart:** a restarted :3050 with no link finds nothing at the new default. It may
- also create `~/.local/share/archilyzer/song/.cache/umtool` as a real directory, and `ln -s` would
- then put the link *inside* it (`song/song`). If that happened, remove the directory first.
-- **Best at merge, not only before a restart.** The live :3050 is a `next start` build and is
- unaffected until then, but it runs song scripts from disk. The song build chain passes `SONG_DIR`
- explicitly (`lib/trim.ts:226`), and `accept-thumb` needs only `SONG_REPORTS`, whose default is
- unchanged. A script run by hand with no `SONG_DIR` looks at the new default.
+- **What the link keeps (review I1).** The link target is the live :3050's current default
+ `SONG_DATA`, and it holds **only the rebuildable `.cache/umtool`**: 7.9 MB of project index and
+ caches, "safe to delete at any time" (`lib/paths.mjs`). The song project's bulk data is under
+ `~/reports/quartering-uh-song/data`, not there. The link keeps :3050's `SONG_DATA`,
+ `SONG_SCRATCH`, `CACHE_DIR` and `INDEX_DIR` byte-identical to today's (the job dir's realpath is
+ its path).
+- **What a missed link costs:** an index rebuild, and the nesting trap. It loses no data. A
+ restarted :3050 with no link finds nothing at the new default and may create
+ `~/.local/share/archilyzer/song/.cache/umtool` as a real directory. A later `ln -s` would then put
+ the link *inside* it (`song/song`). If that happened, remove the directory first.
+- **Linking to `~/reports/quartering-uh-song/data` instead** is a separate choice for the operator.
+ It moves `CACHE_DIR` there and makes `SONG_SCRATCH` equal `SONG_REPORTS`.
+- **Before the restart,** the live :3050 is a `next start` build and keeps its baked paths, but it
+ runs song scripts from disk:
+ - the song build chain passes `SONG_DIR` explicitly (`lib/trim.ts:226`);
+ - `accept-thumb` needs only `SONG_REPORTS`, whose default is unchanged;
+ - a script run by hand with no `SONG_DIR` looks at the new default.
+
+**Review** (verdict **SHIP**; a read-only Opus review of `90c7f776..57ce980a`, `$T/q-review.md`).
+No High or Medium findings. The coordinator asked for two of the Lows to be fixed:
+- **L1 — fixed, `75327c6f`.** The changelog's bare `ln -s` failed on a machine with no
+ `~/.local/share/archilyzer`. The bullet now leads with the full command,
+ `mkdir -p ~/.local/share/archilyzer && ln -s <where the data is> ~/.local/share/archilyzer/song`.
+ It names no machine path.
+- **L3 — fixed, `0416881f`.** A future reader could resolve the relative `bg` through
+ `resolveInRoots`, which binds it to `SONG_REPORTS`. `ThumbEntry` now declares `bg?` with the
+ rule: relative to the song data dir, resolve with `dataFile()`, never `resolveInRoots`. This is
+ a type and comment only; no behaviour changed.
+- **Left, on the coordinator's word:**
+ - **L2.** Run from a cwd outside any checkout, umtool's `REPO_ROOT` falls back to the cwd's parent
+ and reads a corpus that is not there. This is the plan's design, and every documented
+ invocation runs inside the checkout. A walk from `import.meta.url` as a second try is the
+ follow-up.
+ - **L4.** `cues.mjs` (`build-video`, `resolve-windows`, `check-availability`) still ignores
+ `TRANSCRIPTS_DIR`. The plan leaves `cues.mjs` alone, and this is not a regression.
+ - **L5.** With no song data, `SONG_SCRATCH` widens to `~/.local/share/archilyzer` in the read and
+ write roots. Nothing else lives there today, and it was noted only.
+ - **L6.** Cosmetic: a stale "job temp dir" comment in `lib/paths.mjs`, ragged comment wraps, and
+ `docs/folders.md`'s older roots list. Not worth a commit here.
+- **I2, for slice R.** `29dc507c`'s commit message and older blobs carry `/run/media/user`, which
+ the built-in `${os.homedir()}` rule does not match. R's `source-scrub.txt` needs its own rule, or
+ its denylist refuses the publish (it fails closed).
+- **After the fixes:** tsc is clean (41 s, all seven packages), and the grep gate is empty at the
+ new tip. Per the coordinator, e2e was not re-run for a type comment and a changelog line.
## Rollout