Archilyzer · Source

archilyzer

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

commit 701c83c28cd777290f5e07aa230c625c7375aff9
parent 5dbead9a3e3836d7f1432eb2a78cf2fd774f6d3c
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Fri, 25 Sep 2026 19:50:31 -0400

plans: release 9 rollout record — 5dbead9a live on :3001 (boot pass re-queued 1 / cancelled 390, ops sync exits 0), hub + homepage deployed from the same commit; STATE + FACTS

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

Diffstat:
Mplans/FACTS.md | 33+++++++++++++++++++++++++++++++++
Mplans/STATE.md | 27+++++++++++++++++++--------
Mplans/release-9.md | 75+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 127 insertions(+), 8 deletions(-)

diff --git a/plans/FACTS.md b/plans/FACTS.md @@ -6410,3 +6410,36 @@ Line numbers are `plans/FACTS.md` lines at `e172749b`, before this record's in-p - **Restart leftovers.** Jobs queued when the editor stops keep `status: "queued"` in their meta forever (no re-queue, no mark). A just-drained job also reads `queued` (`startedAt: null`) for a while after its log starts. Both are cosmetic. + +## Release 9 facts (2026-09-25) + +- **A job body never calls `revalidatePath` directly.** A job the platform queue drains runs with no + request store and Next throws `Invariant: static generation store missing`, which marked the job + `failed` after its work was done. Job bodies and `onDone`/`afterRun` hooks call + `safeRevalidate(paths, tags?)` (`editor/app/lib/safeRevalidate.ts`): it swallows exactly that + invariant (one warning per bundle), rethrows anything else. Request-context server actions keep + the plain call. +- **`--sleep-requests 1` is a YouTube platform arg** (`common/ytdlp/platformArgs.mjs`), like + Rumble's; a channel's `ytdlpExtraArgs` comes after and wins. +- **`runManagedDownloads` skips the inter-download sleep only for `skipped-filtered`** (no media + request was made). Every failure class still sleeps — YouTube's soft block "try again later" + classifies as `deleted`/per_video, so skipping there would hammer a soft block. +- **A job record carries `progressAt`** (live-only, stamped by the one progress writer and by task + completion). `/jobs` marks `possibly-stalled` only when tasks are idle AND progress has not moved + for 10 min (`common/views/jobRows.ts`). +- **Boot settles queued metas** (`common/jobs/bootQueuedJobs.ts`, from `instrumentation.ts`, after + the storage boot pass, best-effort): `sync` is never re-queued (the heartbeat re-derives it); + metas queued > 24 h before the boot are cancelled as stale; of the rest only the newest per kind + + channel + bucket + params is re-queued via the retry path; the others are cancelled as superseded; + `ARCHILYZER_IDLE_BOOT` cancels everything. A `cancelReason` field on the meta says why. First live + boot: re-queued 1, cancelled 390. +- **The hub embeds `public/hub-summary.json`** at `compose:hub` (`common/controller/poolSummary.ts` + shared with `compose-homepage`; `common/lib/hubSummary.ts` projects `official` + per-site figures + from the same `buildHomepageSummary`). Optional end to end: missing/404/malformed → cards without + figures. `compose-site` removes it; `builtHubProblem` does not require it; it is gitignored. A + member's `corpus.json` carries only channel/video counts, so the figures cannot be summed live. +- **The hub defaults to the `archilyzer` theme, dark** (`export/app/layout.tsx` branches on + `instanceMode() === "hub"`); site builds stay base/system. In that theme `--chart-3` is its own + green (light `#5a9e3a`, dark `#86c86a`), no longer `--state-gone`'s hex. +- **Port blocks follow the sorted worktree list** (`pnpm wt list`): adding or removing a worktree + shifts every later block. Tell a running implementer. diff --git a/plans/STATE.md b/plans/STATE.md @@ -3,14 +3,25 @@ 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. -**Live on :3001 (2026-09-25, 14:43):** `0e72ef73` (release 8, on top of release 7's `bb3dbb4c`), -`BUILD_ID` `9pC6zELQSzjdkIPDNsVox`. umtool on :3050 was rebuilt without a code change and restarted -with it, `BUILD_ID` `a9YAe_dwhuM6DiCPzIwMD`. Still live from release 7: -- https://archilyzer-hub.pages.dev (five members); -- https://archilyzer.pages.dev (200; since 18:30 the release-8 refresh, slice H, is production — - deploy `a684a0ce`; its hero does NOT link the hub until the hub is polished, step C of the - 2026-09-25 evening plan); -- https://rekietalyzer.pages.dev (rebuilt 13:00). +**Live on :3001 (2026-09-25, 19:40):** `0213f6c8` (release 9 = slice F four fixes + hub slice C1, on +top of release 8's `0e72ef73`), `BUILD_ID` `P0VMdKX7gbdsaiS5GvorF`. umtool on :3050 untouched, +`BUILD_ID` `a9YAe_dwhuM6DiCPzIwMD`. Live sites: +- https://archilyzer-hub.pages.dev — C1 (archilyzer theme, "Official instances" with the homepage's + figures from `hub-summary.json`), deploy `6e7115f9`; +- https://archilyzer.pages.dev — the release-8 refresh (slice H) since 18:30, rebuilt 19:45 from + `0213f6c8` (deploy `37fc10cc`); its hero does NOT link the hub until C2 lands (C3); +- the five official sites at release 8's slices Z + E (17:45 / 18:10 deploys). + +See the [release-9 rollout record](release-9.md#rollout-2026-09-25-evening--0213f6c8-live-on-3001-third-restart-of-the-day). + +**Next (the 2026-09-25 evening plan, step C2 onward):** C2 federated-search UX (target behaviour +proposed to the operator: all official sites by default with per-site chips, per-site loading/failed +state, "N of M archives answered", a text source label on each result card, staged loading); +then the Ko-fi line (ko-fi.com/archilyzer — copy: "funds development and better servers for the +official instances", no setup details; homepage line + hub footer + config-gated site footers); +then C3 (`HUB_LINK_ENABLED = true`, homepage rebuild) in the same homepage deploy; then release 10 +lows (soft-block classification, boot-pass storage-wait timeout, `/jobs` cancelReason) and Phase 4 +slice 3. See the [release-8 rollout record](release-8.md#rollout-2026-09-25-late-afternoon--0e72ef73-live-on-3001-second-restart-of-the-day). diff --git a/plans/release-9.md b/plans/release-9.md @@ -377,3 +377,78 @@ Bonnellyzer 2, Hasanalyzer 3, Rekietalyzer 0 — identical before and after on t - The chart-3 change repaints the homepage's third instance too; it needs a homepage rebuild to show. ## Rollout + +## Rollout 2026-09-25 (evening) — `0213f6c8` live on :3001 (third restart of the day) + +Merge order: release 9 slice F (`one-core/r9-fixes` `7a646efa`, review SHIP AFTER FIXES → re-read +SHIP) merged as `ef0978a6`; slice C1 (`one-core/c1-hub-look` `545cf025`, which had merged main and +re-gated) merged as `0213f6c8`. Scripts: `plans/tools/rollout/` with `REL=r9` (`4bdb1f5e`, step 0 of +the evening plan), plus `$T/r9-{build,restart,hub-home,sync}.sh`. + +**Gate on the merged tree** (`7a646efa`, tree = `ef0978a6` minus a STATE commit): tsc 0; common +1,839; editor unit 78; scripts 162 + 1 skip; editor `next build` ok; e2e 14 specs 86/86, 5.9 min. +C1's re-gate on `11e185c0` (main merged): tsc 0; common 1,845; export site build, `compose:hub` + +hub build ok; `e2e:hub` 11/11; the projection of main's `buildHomepageSummary` (low H) over the +primary's stats pages matched the live homepage summary exactly (5 / 63 / 75,785 / 49,767 / +60,840 / 480; gone per site 473, 2, 2, 3, 0). + +**Editor build** on the primary at `0213f6c8`: 40 s, `BUILD_ID` `9pC6zELQSzjdkIPDNsVox` → +`P0VMdKX7gbdsaiS5GvorF`. umtool untouched (still `a9YAe_dwhuM6DiCPzIwMD`, not restarted). + +**md5** 81 files (one more than release 8: the new `paramounttactcl-x` channel). before → pre-restart: +ONE change, `paramount-tactical/config.json` — written 19:35:47, the operator clearing the +`downloadFilter.include: "Quartering"` on the Configure form (the plan's "for the rest" step; +`lastFullDownloadAt` had been stamped at 19:19:27 by download-missing, before the sweep). +pre-restart → after-boot: identical. + +**Restart** 19:40: live jobs were only the two auto runners (no operator job). Editor answered 200 +after 3 s, `/tags` 200. **Boot pass (B4b):** 391 queued metas before → `[boot] stale queued jobs: +re-queued 1, cancelled 390 (sync 345, superseded 1, stale 44)` → 1 queued meta after. The one +re-queue was the paramount-tactical metadata-scan (`01M3CV5W6WG8QJW09G2F0N1V8A` → +`01M3DF38BAH541K6A51XE8HXWG`), which ended **`done`** with nothing left to scan — the first live +B1 proof: one `[safeRevalidate] no request store (a queued job ran outside a request); skipped +revalidating /channels/paramount-tactical, /channels, /operations/[id] (page)` line in the start +log, no `failed`. + +**B1 + B3 live proof:** `pnpm ops sync --json '{"slug":"teamrcn"}' --wait` exited **0** in 29 s, +job `01M3DF7EQJB92BK2Q5QNN9H61R` `done` (release 8's ran the same work and read `failed`); its +listing spawn carried `--sleep-requests 1` (`yt-dlp --flat-playlist … -I 1:50 --sleep-requests 1 +https://www.youtube.com/@teamrcn`). B4a: no STUCK on a healthy job seen. B2 waits for the next +download-missing with filter-declined videos (Paramount's were all settled before the release). + +**Smoke** (`plans/tools/rollout/smoke.sh`, 19:42 → 19:49): `SMOKE_FAIL=1` from exactly the two +moving pairs — `/api/jobs/active` vs `/api/view/activeJobs` (the proof sync ran during the read) +and `/api/auto-queue/status` vs `/api/view/autoQueueStatus` (same 513,122 bytes; the diff is +`focusPending` 107 → 112 / 1,353 → 1,348 and the lane's current video: the auto-download lane +walking Paramount Tactical between the two reads). Everything else green: 6 pairs identical, 2 +404s, presets, pulse `changed=false` both ways, 11 pages 200, `BUILD_ID` `P0VMdKX7gbdsaiS5GvorF`, +0 ZodError, `DEFERRED_OK download.deferred well-formed ("ok 0")` (the fixed check), umtool 200, +`/channels/paramount-tactical/videos` 200 with 42 open rows. + +**Hub + homepage (C1):** `pnpm ops build-hub` 65 s — log: `hub-summary.json covers 5 official +instance(s).`; `deploy-hub` 27 s → https://archilyzer-hub.pages.dev (deploy `6e7115f9`). Live +check (Playwright): `data-theme="archilyzer"`, H1 "60,840 hours of speech from every official +archive, searchable at once.", `Official instances` with 5 `shelf-spine` cards each showing +channels / recordings / transcripts / hours (Anilyzer 23 / 29,751 / 8,365 / 8,159), no eyebrow, +the live "Searching …" line, `/hub-summary.json` 200. `archilyzer build homepage` 47 s (v5) + +`deploy homepage` 32 s → https://archilyzer.pages.dev (deploy `37fc10cc`), H1 present, still no +hub link (C3). **The two summaries differ by 3 recordings** (hub 75,800, homepage 75,803): the +auto-download lane archived three Paramount videos in the two minutes between the builds; +transcripts, hours, gone identical. + +**Paramount Tactical (A2), the same evening:** metadata-scan `01M3DBFV07NC0Z6KWZ1BG3K9BX` scanned +the last 201 (0 errors; store 1,370 + 12 members-only errors of 1,473); download-missing +`01M3DD3WBVYPPXB1NCQ1HDX8BM`: 1,381 missing, 92 complete, 12 members-only excluded, **1,369 settled +by the filter with 0 requests and 0 sleeps**; keep-videos matched 1 (`NV1QqS9NOiU`, already kept). +Both ops jobs read `failed` on the pre-release invariant. After the operator cleared the filter +(19:35) the auto-download lane took the channel at lane pace: archive 92 → 115 by 19:50. + +**Found and left.** +- The hub orders its cards by `hub-sites.json` (alphabetical); the homepage orders by transcripts. + Same colours per site (C1's `seriesColor` fallback keys on the summary's order), different rows. +- No official site sets `accent`; all five hub cards wear series colours. A `site.json` edit each. +- The hub build now walks the pool's `data/` and opens the LMDB read-write (as the homepage build + does); an unmounted drive undercounts silently — C1 record. +- YouTube's soft block ("try again later") classifies as `deleted` → per_video → no backoff — F record. +- The boot pass waits for the storage boot pass with no timeout (review LOW); `/jobs` does not show + `cancelReason`; the safeRevalidate warning is once per bundle.