commit 7f91177c75088089fdf8556b05ca9af26d5a5c89
parent 6db33734b791dcb771046ecf0e47d56cdf37fa64
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Fri, 9 Oct 2026 23:25:12 -0400
plans: overnight 2026-10-10 — the next batch run from the primary checkout (e2e speed, B2, A6–A9, D2 + R20, the TISM pilot)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Diffstat:
1 file changed, 114 insertions(+), 0 deletions(-)
diff --git a/plans/overnight-2026-10-10.md b/plans/overnight-2026-10-10.md
@@ -0,0 +1,114 @@
+# 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
+<branch> --from r20/integration`, then `link-fixture-public.sh <worktree>` — 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) <noreply@anthropic.com>` 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.)