# Overnight 2026-10-09 → 10 — the next batch, run from the primary checkout Operator rulings (2026-10-09, late evening; do not re-open): - **Scope:** e2e speed S1–S3 ([e2e-speed.md](e2e-speed.md)); B2 report-to-video robustness; release 19 A6–A9; release 21 D2, then release 20 (the data model). - **The orchestrator runs in the primary checkout** (`~/Projects/yt-dlp-transcript-browser`, branch `main`) and advances releases itself: after full green gates it fast-forwards `main` and runs the standard rollout. Agents still work in their own worktrees. - **Live pilot allowed:** the TISM pilot (release 21's "Rollout (pilot)" steps 1–3) runs on the live editor once D2 is live. **The transcription lane stays held** — `transcribe-one` for the 3 new records is queued, not run. - **Handoff:** a generated `MORNING.html` runbook. ## Step 0 — take over (the orchestrator, first thing) 1. `git merge --ff-only r19/integration` on `main` (brings release 19's rollout record and this plan; plans only — no rebuild). 2. Read: this file, `plans/e2e-speed.md`, `plans/release-19.md` (A6–A9 rows; "Landing, as it went"), `plans/release-20.md`, `plans/release-21.md` (D2; "Rollout (pilot)"), `plans/STATE.md`, `plans/FACTS.md` (as needed), and memory `release-19-in-flight`, `orchestrator-in-primary`, `memory-gate-heavy-steps`, `e2e-run-detached`, `subagents-monitor-not-poll`, `no-claude-session-links`. 3. Scratch: `$CLAUDE_JOB_DIR/tmp`. Reusable scripts from the r19 landing are in `~/.claude/jobs/c0baff27/tmp/` (copy, don't edit in place): `detach.sh`, `e2e-progress.sh`, `r19-light.sh`, `r19-build.sh`, `r19-e2e.sh`, `r19-privacy-counts.sh`, `link-fixture-public.sh`, `source-audit/{fresh-check,scratch-counts,verify-live}.sh`, `r19-homepage.sh`, `live-ops.sh`. Rollout scripts: `~/reports/release-19/scripts/r19-{build,restart,smoke,umtool}.sh` — copy to `~/reports/release-20/scripts/` and re-guard `MERGE=` / `LIVE=` for tonight. 4. Peers: Super Jeralyzer is finishing jeralyzer-private (the co-host timeline, **private only**); when it confirms `/reports/cohosts/`, send every peer the all-clear for the quiet window (Super Hasanalyzer, Super Jeralyzer, Super Jasolyzer, candace owens corpus analysis, mixology, recipe content engine). The overnight work then shares the machine through the heavy slot and the e2e queue — no further quiet window is asked for. ## Integration branch `r20/integration`, from `main` after step 0. Each agent branches from it in its own worktree (`pnpm wt add --from r20/integration`, then `link-fixture-public.sh ` — a worktree's e2e uses the committed fixture compose `plans/tools/compose-fixture-one-youtube-channel/public`, not the primary's `export/public`). The orchestrator merges each finished track `--no-ff` on a clean tree, re-runs the touched suites, and records. ## Tracks (at most two Opus agents at once) | lane | order | track | branch | files it owns | gate | |---|---|---|---|---|---| | 1 | first | **E — e2e speed S1–S3** | `r20/e2e-speed` | `editor/playwright.config.ts`, `editor/package.json` scripts, `editor/e2e/helpers.ts` + `globalSetup.ts`, `scripts/queue-lock.mjs` (only if S1 needs it), a new `scripts/e2e-timings.mjs`, the four timer knobs (`common/lib/envVars.ts` + the product code each reads) | the full editor suite **through the new default** (start + stamp) and once in dev; the stamp proven stale-safe (edit a file → rebuild); timings file written; unit for the stamp | | 1 | after E | **A — release 19 A6–A9** | `r20/a6-a9` | `editor/app/api/ops/**`, `scripts/archilyzer-ops.mjs`, `mcp/src/**`, `common/controller/` import/listing code, COMMANDS.md (regenerated) | route unit tests + `scripts/archilyzer-ops.test.mjs` + mcp tests; one `ops-api` route-test sweep; polite scraping in every listing (one stream, real gaps, back off on 429); `docs cli --check` | | 2 | first | **B — B2 report-to-video** | `r20/b2` | `umtool/report-to-video/**` (operator granted write access 2026-10-09) | apply `$T_OLD/b2-partial/` under `$T_OLD/b2-constraints.md` (`$T_OLD=~/.claude/jobs/c0baff27/tmp`): prune only `chrome/*-frames` + `work-*` after the final mux; `--chrome-only` never rewrites an existing hard-linked segment; `--only` kept; teaser > 34 chars a warning; QR / relative-src errors; the thread/flip validators; plus `fetch-via-editor.mjs`'s 10-min timeout (wait without one, printing queue position — A5's ruling); `test:scripts` ≥ 443 report-to-video tests green. **Does not merge** until the candace owens corpus analysis session reviews it (ruled); the orchestrator sends it the branch + a summary and records the review | | 2 | after B | **D — release 21 D2, then release 20** | `r20/d2-r20` | D2: `fetchWindowAction` and the saved-video reader (cut a window from a saved container before the network; provenance `saved-video`); R20: `recordedDate`, Twitch id normalization, verify the en-track 0-cues bug and the stats-cache key (report, fix only what the plan rules) | D2: route/action unit tests + one `ops-api` case; R20: per `release-20.md` | Track agents: `general-purpose`, model `opus`, briefed with this table row, the plan file of their slice, and the rules below. They run unit tests and **at most single e2e spec files in the foreground** (Bash timeout 600000; waiting on the queue is normal — re-run on timeout). The orchestrator runs every full suite (detached, Monitor). ## The live pilot (after D2 is merged, gated and live) On the live editor, through `pnpm ops` (it reads its own token now): 1. `attach-media` dryRun for `the-incredible-salt-mine` (source per release-21.md) — expect ~166 held and matched, 3 with media but not held, 10 `[LOST]`; record the exact counts. 2. The same without `dryRun`, plus `createRecords` for the 3. `transcribe-one` ×3 queued — they wait on the held lane. 3. MCP `fetch_clip` on a TISM cue → `cached: true`, provenance `saved-video`, no network in the job log. Stop and record if any count is off by more than a few; do not "fix" by hand. ## Gates before any fast-forward On the `r20/integration` tip: `pnpm typecheck`; `pnpm test`; `archilyzer docs env|files|cli --check`, `settings example --check`; four builds (each `pnpm heavy`, 5 GB scope; export over the committed fixture compose; umtool capped with the corpus linked); e2e, one at a time: the full editor suite (start mode — after E lands, the new default), export default + report + hub, umtool full, homepage. A red is re-run alone before it counts; a red that stays red blocks the fast-forward. Counts-only privacy greps over `main..r20/integration` (name, email local part, guarded suffix, home paths, session links/trailers, deployment hashes, corpus data) — every count 0 in files and in messages written tonight. ## Fast-forward and rollout (the orchestrator) `git merge --ff-only r20/integration` on `main`, then: editor build + restart + smoke (copied r19 scripts, re-guarded); umtool build + restart when umtool changed; `source publish --check`, then the homepage to production (the live mirror re-cloned after 5 min and counted); public sites only if the release changes what they serve (release 20's `recordedDate` may — read the diff of `export/`); live checks per deployed site. The editor restart closes running jobs as interrupted — tell their sessions. ## Rules (hard) - **No `Claude-Session` trailer or session link, anywhere.** Commits end with `Co-Authored-By: Claude Opus 5.5 (1M context) ` alone. - Memory floor ≥ 6 GB available before any build, e2e or render; every `next build` capped (5 GB, no swap) and through `pnpm heavy`; never two at once. e2e detached (`setsid nohup`) with a Monitor; subagents never Monitor, sleep-loop or poll. - Never hand-edit `transcripts/**` (writes go through `pnpm ops` / the editor); never boot a second editor against the real corpus; never print the operator's `~/.config/archilyzer/source-*.txt` (count lines only). - No yt-dlp or ASR by hand; polite scraping; no expired Twitch VOD re-downloads. - Private stays private: Candace data local-only; the co-host timeline on jeralyzer-private only; no X channel on a public site. - Records state rulings, never reasons; each track adds "as it went" to its plan file; the orchestrator adds the landing and the rollout. ## Morning `~/reports/overnight-2026-10-10/MORNING.html` (generated, like `make-morning.py`): what landed and where (`main` sha), each gate with its numbers, the rollout's live checks, the pilot's counts, B2's review state, what is waiting on the operator (Phase 2 items still open: scrub rule 10 + a homepage republish; publish policies; the docker builder; pruning the `r18-*` worktrees and merged branches; the D4b network inputs), and the e2e timings before/after S1. ## Queued for planning (not tonight) - **Reports that cite across sites** (operator request, 2026-10-09): a report may cite any channel in the corpus, or one another site owns, without that channel joining the citing site's searchable pool — e.g. **cited-only channels** (the cited moments and clips publish; no browse, search or transcripts) or **cross-site moment links** into the owning site. Tonight's workaround: jeralyzer-private's pool gained `rev-says-desu` and `hasanabi` (operator ruling); the polemics sites pad their pools with critics' channels the same way. Start from what exists: compose's `not-in-site` refusal (ComposeReportsError) and the export's cited-only compose (the report e2e suite's fixture). A release-23 candidate — planned in the morning, not built tonight. ## As it went (The orchestrator records here.)