Archilyzer · Source

archilyzer

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

commit 30e2834879bf54b90723b5c84c78e1c9d59a0e82
parent 4572213d70dd41e717892d9cbc4c35c58154afe4
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Thu, 24 Sep 2026 13:27:24 -0400

plans: rollout 2026-09-24 — release 2 live on :3001, smoke and the boot-cost note

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

Diffstat:
Mplans/STATE.md | 12++++++++----
Mplans/one-core-phase-3.md | 50++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 58 insertions(+), 4 deletions(-)

diff --git a/plans/STATE.md b/plans/STATE.md @@ -3,8 +3,12 @@ The working memory for the local-AI derived-corpus work. Rewritten at the end of every session, before context is cleared. See [`README.md`](README.md) for the protocol. -**Last updated:** 2026-09-23 — **one-core Phase 3 slices 2 and 4a are on `main` @ -`ae2fa5a9`, and gate B is done.** Base `54cf1b31`; two branches merged in the order +**Last updated:** 2026-09-24 — **release 2 is LIVE on :3001** (`1e27f7c3` = `b836ea8a` + +two prelude commits; rollout record: +[`one-core-phase-3.md`](one-core-phase-3.md#rollout-2026-09-24--b836ea8a--two-prelude-commits-live-on-3001)), +and **slices 3a + 4b are in flight** on `one-core/phase-3-s3a` and `one-core/phase-3-s4b` +(worktrees off `1e27f7c3`). Previous: 2026-09-23 — **one-core Phase 3 slices 2 and 4a are on +`main` @ `ae2fa5a9`, and gate B is done.** Base `54cf1b31`; two branches merged in the order `one-core/phase-3-s2` → `8d6e84f6`, then `one-core/phase-3-s4a` → `ae2fa5a9` (with `main` merged into it as `7035316c`). Release record, gates and the next release's inventory: [`one-core-phase-3.md`](one-core-phase-3.md#release-2026-09-23--slices-2-and-4a); anchors: @@ -35,8 +39,8 @@ merged into it as `7035316c`). Release record, gates and the next release's inve **Still owed (operator):** the Anilyzer **production** deploy (preview is up, see below); the other five sites to corpus spec 4; the LM chat-only tier (shipped, unconfigured). **Owed -(code):** the backfill lane form's hint text still says 836 reachable (gate B measured 679) — -`LaneSettingsForm.tsx:101`. +(code):** nothing from release 2 — the lane form's 836 hint is live figures since `c0a90a37` / +`1e27f7c3` (679 reachable, 74,411 needing media on 2026-09-24). **Previously:** 2026-09-22 — **the release *curated-tags follow-ups + debts sweep* is on `main` @ `766e0873`.** Base `4ac8ceda`; three branches merged in the order diff --git a/plans/one-core-phase-3.md b/plans/one-core-phase-3.md @@ -519,6 +519,56 @@ list its own record (`5b43dc8d`) or the review fix (`81deae69`), and the review settingsDocs wiring tests, so common on that tip is 1650, not 1648. Both records said "unmerged"; both are merged. +### Rollout 2026-09-24 — `b836ea8a` (+ two prelude commits) live on :3001 + +The editor on :3001 had served a `54cf1b31` build since 2026-09-14; this put release 2 in +front of the operator. Editor only — `git diff --stat 54cf1b31..b836ea8a -- umtool` is empty +and umtool's one `common` import (`lib/momentUrl`) is unchanged, so umtool was not rebuilt. + +**Two code commits on `main` first, both to the same stale sentence.** `c0a90a37` — the +backfill lane form (`LaneSettingsForm.tsx`) derives the re-acquire figures from the +widget-sync payload plus one statfs of the transcripts root (`getFreeBytes`, the same call +behind the jobs payload's `disk.freeBytes`); the hand-typed "836 / ~76,270 / 91× / 45 GB" +stays as the fallback when no figures are passed. `1e27f7c3` — found live: the lane-wide +`backfill.reachable` folds attribution-text, whose input is the transcript, so the first +build rendered "78,146 videos still have media on disk". The page now reads the +**diarization** kind's entry from `backfill.kinds` — the one operation whose missing input is +audio, which is what the toggle fetches. Live it reads "679 videos still have media on disk +and 74,411 would need re-downloading — 110× the reachable work, against 269.43 GB free", the +successor of the dated sentence and the same 679 gate B measured. + +**Procedure, as in release 1:** offline round-trip first — +`plans/tools/phase3-settings-numbers.ts live=settings.json`, written block equal to +`jq -S . settings.json` (diff empty, no key added); then `pnpm --filter editor build` detached +into the live `.next` while the old server kept serving; then TERM the process whose cwd is +`editor/`, wait for :3001 to free, `setsid nohup pnpm run start -H 0.0.0.0`. Done twice +(build 7 on `c0a90a37`, build 8 on `1e27f7c3`): `BUILD_ID` `CXAYTdyUXFjcEqCiMCwQ-` → +`M-ujB5s8O4_phVlvBejMG` → `vXFdg-SWIkdh7XpWLEqCQ`, both route tables with `ƒ /api/view/[name]`. + +**Smoke, by hand = `view-route.spec.ts`:** `/api/view/<bogus>` and `/api/view/invalidate-cache` +404; `/api/widget/presets` 200; `/api/view/pulse?rev=` and `/api/pulse?rev=` both +`changed:false` (build 8; on build 7 a download was in flight and the rev never held still); +`/api/widget/cleanable` `cleanableBytes: null` (the old cleanable path is gone, not `-1` — +the spec's fixture value); `/`, `/operations/diarization` (Holding, re-acquire off), `/settings`, +`/storage`, `/jobs`, `/tags` all 200; `settings.json` md5 `8e03ec3f…` unchanged across both +boots; no `ZodError` in either start log. The eight old/new pairs: `pulse`, `workers`, +`widgetSync`, `widgetActionable`, `cleanable` byte-equal on build 7 (ignoring `builtAt` / +`disk.freeBytes` / `now`); `activeJobs`, `autoQueueStatus`, `schedulerStatus` equal once the +live-only fields (`heldMs`, a running download's `fraction` / ETA `detail`) are stripped — a +live server is not the idle fixture. Build 8 changed nothing under `app/api`, so the pair +evidence carries. + +**What the smoke could not clear, and why.** Corpus-wide pages took 47–240 s and several +probes timed out for ~25 min after each boot. The cause is not the build: every boot re-runs +the recency pass (`[recency] dating 8000 of 8883 undated candidates`, once per Next module +graph, memoised in-process), the scheduler re-queues the overdue sync-all (46 syncs held, 2 +running), and a metadata scan resumes — all against a platter drive (`sdb`, the relocated +media root) that an in-flight ffmpeg remux and, later, the 4b numbers script were saturating +(`/proc/pressure/io` "full" 58–66 %; the NVMe was idle). Two restarts in one hour paid that +boot cost twice; `ARCHILYZER_IDLE_BOOT=1` exists for exactly this and was not used because the +lanes were meant to resume. Sharp fails to load in the primary and every worktree +(`require('sharp')` throws); builds do not need it and it predates this release. + ## Next release — slice 3 and slice 4b Not started. The facts below were checked against `ae2fa5a9` on 2026-09-23.