Archilyzer · Source

archilyzer

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

commit e2ad2d8bddb5e1442d58ff4500ae566aaa4b4ba1
parent ea22b2fc9ce785df013dd03872c775b50a16870c
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Sat, 26 Sep 2026 18:23:02 -0400

plans: release 10 slice N review fixes — M1 wording (5397363f), L1 persistKept test (ea22b2fc), L2 recorded; gates on ea22b2fc: common 1,985, editor unit 85, test:scripts 173 + 1, mcp 269, editor build, FULL editor e2e 641 passed / 2 failed / 12 skipped in 48.6 min, re-runs alone ×3: tags 3/3 (flake), cookies-mode 2/3 (pre-existing NeedsCookiesList unmount race)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Diffstat:
Mplans/release-10.md | 82+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 80 insertions(+), 2 deletions(-)

diff --git a/plans/release-10.md b/plans/release-10.md @@ -1236,8 +1236,10 @@ key; no new job kind; no new directory. "Source-video persistence applies to transcribe-handling channels only." for any other handling, so the plan's e2e 6(a) — click the button on a youtube-handling video — had no button to click. - The gate is gone. - - A youtube channel gets its own description line: "…A transcript already on disk is kept, and - no audio is extracted beside it." + - A youtube channel gets its own description line: "…YouTube's subtitles are fetched again + first, as on any re-download; a Whisper transcript is not touched, and no audio is extracted + beside a transcript." (review M1: the first wording said the transcript was "kept", which a + re-fetched VTT is not). - Labels, aria-labels and test ids are unchanged. - `videoChoreCards.ts`'s `shown` text is updated. - **`keepTranscript` with a plan that persists nothing fetches nothing.** The plan said "do not @@ -1323,6 +1325,82 @@ key; no new job kind; no new directory. - **"Persist kept now" on a youtube-handling channel now downloads every kept video's source** (the plan's known limitation). `persistKept` still counts a returned-but-failed download as `persisted` (pre-existing). +- **A forced download that fails on a video with a transcript marks the whole download failed** + (review L2; a low for a later slice, not fixed here). + - The `else` branch after the attempt-3 run (`downloadOneManaged.ts:1470-1472`) sets `status = + "failed"` and `lastSucceeded = false` for a `keepTranscript` pass too. + - So the video page shows "Download failed" on a video whose transcript is fine. + - The whole-recording fetch job still ends `done` with no file, and the MCP says "finished but + named no file". + - yt-dlp's `source-media.*.part` (from `bestvideo*+bestaudio`, possibly several GB) can stay in + `data/<id>/` until a later persist resumes it. + - These are the same mechanics as today's no-subs fallback, now reachable on youtube channels. + - The review's option: on a `keepTranscript` failure, keep the subtitle pass's status and record + only the failed attempt. + +**Review fixes** (review SHIP AFTER FIXES, `n-review.md`: one medium, three lows; the three +questions ruled as asked — the card un-gated, no `--no-overwrites`, the history file kept off +`PREFETCH_OWN_FILES`). + +1. **M1: nothing the operator reads says the transcript is "kept"** (`3067f8af`). On a + youtube-handling channel the subtitle pass deletes and re-fetches `transcript.<lang>.vtt` (and + the live chat) before the media pass runs, so "kept" was true only of a Whisper + `transcript.json`. + - The Source video card, the `[Unreleased]` bullet and the AGENTS.md paragraph now say: + "YouTube's subtitles are fetched again first, as on any re-download; a Whisper transcript is + not touched, and no audio is extracted beside a transcript." + - The AGENTS.md sentence also says the pass was skipped for a transcript *or captions* (nit N5). +2. **L1: a test that `persistKept` passes `forceMedia`** (`42f836cd`, + `controller/persistKeptForceMedia.test.ts`, 1 test). + - Setup: youtube handling, `keepLatest: 1`, a kept video with a `transcript.json`, + `SETTINGS_FILE` set to a temp file with the disk floor off. + - Asserts: three spawns, the last without `--skip-download`; `persisted: 1`; the pointer + (`override`) and the container in the store; no `audio.*` or `source-media.*` in the data dir; + the transcript's bytes unchanged. + - It bites: with `persistKept.ts:137` removed it fails. +3. **L2:** recorded above, under "Found and left". +4. **L3: the full editor suite** (below). +- **Nits not taken:** + - N1 is covered by M1's "beside a transcript". + - N2, N3 (a 300-unit cut can split a surrogate pair), N4 and N6 are cosmetic. + +| sha | what | +|---|---| +| `3067f8af` | M1: the card text, the changelog bullet, the AGENTS.md clause (+ N5) | +| `42f836cd` | L1: `persistKeptForceMedia.test.ts` | +| _this_ | `plans:` these fixes, L2, the full-suite gate | + +**Gates on `42f836cd`:** +- **tsc:** clean before each commit (`n-tsc6.log`, `n-tsc7.log`). +- **common 1,985/1,985** (+1, the L1 test). +- **editor unit 85/85.** +- **`test:scripts` 173 + 1 skip.** +- **mcp 269/269.** +- **Editor build:** `pnpm --filter editor exec next build` ok, compiled in 19.9 s, 54 s total + (`n-gates2.log`). +- **The FULL editor e2e suite** (`pnpm e2e`, no spec list; queued, detached, `export/public` links + in place with none dangling): **641 passed, 2 failed, 12 skipped of 655, 48.6 min** + (`n-e2e-full1.log`). Each failure was re-run alone ×3 + (`pnpm e2e cookies-mode.spec.ts:241 tags.spec.ts:220 --repeat-each=3`): **5 passed, 1 failed, + 3.0 min** (`n-rerun1.log`). + - `tags.spec.ts:220` ("a video whose description and transcript are large previews and + renders"): **3/3 alone — a flake.** + - The failed assertion is the `addTag` helper's `tags-saved` wait (5 s), under load. + - The test downloads nothing, so no `metadata.history.json` exists and the new header block + renders nothing. + - `cookies-mode.spec.ts:241` ("defer: … downloads via the bucket button"): **2/3 alone — an + intermittent that predates this slice.** + - Both failures are the same: `getByLabel('Retry needs cookies output')` → "element(s) not + found" while waiting for "Managed download complete". The captured log shows the download + itself finished (`single-url fetched vidcookiegated1`). + - The cause: `NeedsCookiesList` (`editor/app/channels/[slug]/components/stages/DownloadStage.tsx`) + returns `null` when the bucket empties, so the refresh after the successful download + unmounts the card and its run log before the last line arrives. That is the FACTS + "a run log lives in the panel's React state" hazard, in a file this slice does not touch. + - Nothing of this slice runs on that path. The gated video's first prefetch fails before + writing metadata, so there is no history. The retry is not a forced download, and its + transcript comes from the subtitle pass, so there is no attempt 3. + - Left for a later slice: render the card while its run lives, as `SourceVideoSection` does. ## Rollout