Archilyzer · Source

archilyzer

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

commit db313562698c5ff464d620c1a1e50422c109e476
parent f6c4819987bc70ed2abb3da94c92646167d8b5f9
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Fri,  2 Oct 2026 00:27:55 -0400

plans: slice U2's review (H1, N1, N2; L1 a follow-up), the corrected busy-scan claim, and the gates after the fixes

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

Diffstat:
Mplans/FACTS.md | 7++++++-
Mplans/release-17.md | 27++++++++++++++++++++++-----
2 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/plans/FACTS.md b/plans/FACTS.md @@ -8323,7 +8323,12 @@ phase deletes from the destination. media root is never created; a dangling link, a cut move's leftover (`<name>.moved-*`, `<name>.incoming`), a bad value, or `"media"` in a process without `UMTOOL_MEDIA_DIR` refuse. - **`umtool storage deliverables <project> --to media|local`** is the move (the bench's "Move - deliverables" runs it as a job). `umtool check` reports `storage-unreachable` (blocking: an `out`, + deliverables" runs it as a job). It, and `move-out`/`move-back`, refuse a project while + `lib/report/busy.mjs` sees a pipeline process in it: a script argument under the project directory + (the build steps), a `--project` value equal to the project's id or name or resolving to its + directory (how the app runs `cut-from-cache.mjs` and `share-batch.mjs` — matched whole, never by + prefix), or `apply-manifest.py`/`build.py` by cwd. A hand-run command that is none of these, and + another machine, are not seen. `umtool check` reports `storage-unreachable` (blocking: an `out`, `clips` or `share-*` link whose target is gone) and `storage-mismatch` (open). - The e2e app server has no media root (`UMTOOL_MEDIA_DIR=` in `playwright.config.ts`); specs give their CLI one (`<fixture>-media`), so `deliverables.spec.ts` shows an app cutting through a link it diff --git a/plans/release-17.md b/plans/release-17.md @@ -609,11 +609,13 @@ manifests, `revisions/`, the caches and the cue cache stay put; final mp4s trave that is neither is `manifest-invalid` on `storage.deliverables`, blocking. - **CLI.** `umtool storage deliverables <project> --to media|local [--dry-run] [--json]`: one line per directory and the switch's before → after; exit 1 on any failure (the switch then stays). Refused - while a pipeline process works in the project — U1's `/proc` scan of the report scripts, now also the - report's own `apply-manifest.py` and `build.py` found by their working directory (they name no - path). Its blind spots, said in the code and `docs/folders.md`: the app's in-process work (the bench - runs the move as a job, so the app's one-job-at-a-time rule keeps cuts and batches out), a hand-run - command, another machine. `umtool storage [<project>]` lists each report's deliverables and switch. + while a pipeline process works in the project (`lib/report/busy.mjs` after the review, H1): a script + argument under the project directory (U1's scan, how the build steps name a project), a `--project` + value equal to the project's id or name or resolving to its directory (how the app runs a cut and a + share batch; whole values, never a prefix), and the report's own `apply-manifest.py` and `build.py` + by working directory. Not seen: a hand-run command that is none of these, another machine. From the + bench the move is itself a job, so the app's one-job-at-a-time rule keeps its cuts and batches out + as well. `umtool storage [<project>]` lists each report's deliverables and switch. - **Bench.** The deliver panel says where the deliverables are (`data-deliverables` = `local` | `media` | `invalid`; one `data-deliverable="<name>"` with `data-deliverable-state` per directory) and gains **"Move deliverables to media|local"** (`data-action="deliver-move"`, `data-move-to`), the @@ -703,6 +705,21 @@ manifests, `revisions/`, the caches and the cue cache stay put; final mp4s trave `[Unreleased]` (`editor/CHANGELOG.md`): "umtool can move a report's cut clips and share batches to the media drive, one project at a time." +#### Review (SHIP AFTER FIXES) and the fixes + +| Finding | Fix | +|---|---| +| H1 (HIGH) — the busy scan counted a pipeline script only when an argument was the absolute project path, but the app runs `cut-from-cache.mjs` and `share-batch.mjs` as `--project <id>`: a shell-run move did not see the app's cuts and batches, the two writers it exists to wait for; the docs, FACTS, this record and the CLI comment claimed it did | `3ff84ad5`: the scan moves to `lib/report/busy.mjs` (imported by the CLI only) and also counts a script whose `--project` value equals the project's id or name, or resolves against the process's cwd to the project directory — whole values, never a prefix; `move-out`/`move-back` get it too. Tests: `namesProject`'s cases, a dummy process carrying `cut-from-cache.mjs --project <id>` is seen and `<id>-other` is not, the CLI refuses as `busy` with its pid and moves once only `<id>-other` runs. The claim is corrected in the CLI comments, `docs/folders.md`, `docs/cli.md`, FACTS and the "What it does" bullet above: what it sees, and that a hand-run command that is none of these scripts, and another machine, are not seen | +| N1 — a link under an absent key (absent means local) was not flagged, only under an explicit `"local"` | `3ff84ad5`: a `clips`/`share-*` link into the media root under no key is `storage-mismatch` too (a hand-made link elsewhere under no key is not); a unit case runs `umtool check` on no key, `local`, `media` | +| N2 — the route's 409 for a move while a job runs was asserted nowhere | `f52f1eb1`: `deliverables.spec`'s cut test posts a `move` during the cut and expects 409 "a job is already running" | +| L1 — the decisions inbox and the deliver panel stat through every `out`/`clips`/`share-*` link, so a stalled media drive blocks them (U1's class) | left, a follow-up (below) | + +**Gates after the fixes:** umtool tsc clean. `deliverables.test.mjs` **18/18** (+4), `storage.test.mjs` +24/24. umtool e2e at `f52f1eb1`, `deliverables` + `storage`: **10 passed**, 0 failed, 1.2 min of tests (10 min with the queue). + +**Follow-up (L1):** with a stalled (not absent) media drive, the inbox's decisions pass and the deliver +panel block on the stat through each link, as U1's project summary does for `out`. + ### Slice XP, as shipped — X posts are private (2026-10-01) Branch `r17/x-posts-private` off `main` `90bd8384`, worktree `~/Projects/r13-lows-export` (editor 5501,