commit 598e763442185bf180afe23d9dcaa73d5d3e5524
parent f1fc799bdeb45dbdeef8c8e3958a3f78761e42a2
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Sat, 26 Sep 2026 02:13:41 -0400
plans: release 10 lows planned — L1 hub (subs retry, /ask scope, accent fallback, one card order, playwright sw.js unlink) ‖ L2 runner (soft-block backoff, boot-pass timeout, /jobs cancelReason, safeRevalidate warning); merge after the brand rollout
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Diffstat:
| M | plans/release-10.md | | | 71 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 71 insertions(+), 0 deletions(-)
diff --git a/plans/release-10.md b/plans/release-10.md
@@ -151,6 +151,77 @@ which passed while S3 was unmerged), and every rollout script is fail-stop: no h
failed build, no hub step after a failed sites run, a skipped site named, no restart on the pre-brand
`BUILD_ID`. Details: `brand-and-themes.md`, S3 "Review fixes".
+## Planned: the lows, L1 ‖ L2 (2026-09-26)
+
+These are the release-10 candidates from `STATE.md`, found on the evening of 2026-09-25. Their
+details are in [`release-9.md`](release-9.md) around :219, :247–300, :459, :577–580 and :650–675. They
+run as two parallel slices, alongside brand S4 (umtool + `common/bin`; see
+[`brand-and-themes.md`](brand-and-themes.md)).
+
+```
+main (4e5630aa) ──┬──> L1 hub lows (r10/hub-lows) ──┐
+ ├──> L2 runner lows (r10/runner-lows) ──┼──> reviews ──> merge after the brand rollout
+ └──> brand S4 (brand/media) ──┘ (or earlier, on the operator's word + a re-cut)
+```
+
+**Merge timing.** The operator cut editor/export 0.9.0 for the brand rollout, and the runbook
+builds `main`. The lows therefore stay on their branches after review, and merge once the brand is
+rolled out. If the operator asks for them sooner, export needs another cut, because its
+`[Unreleased]` notes are public on `/changelog`.
+
+### L1 — hub lows (`r10/hub-lows`)
+
+1. **`retry: false` on the hub's subs query.** A member with no subs corpus is ready about 1 s late
+ (release 9 C2 re-read).
+2. **`/ask` on the hub honours the scope chips.** Use `useHubScope().isOn` in `AskHub`. It still
+ waits for every archive to settle.
+3. **Official sites' accents on the hub.** A shared `seriesColor` fallback for the result stripes
+ and chip dots, for an official site with no accent. This needs `hub-summary.json`'s order. The
+ rollout's accents fix the cards' stripes; this covers everything else and any site without an
+ accent.
+4. **One order for the official instances.** The hub orders its cards alphabetically (by
+ `hub-sites.json`), the homepage by transcripts, so the same colours land on different rows. The
+ hub follows the homepage, which puts `seriesColor` and the rows in the same order. If the code
+ shows a reason to prefer alphabetical, say so instead.
+5. **`export/playwright.config.ts` unlinks `public/sw.js` before copying it.** In a worktree that
+ path is a link into the primary checkout, and a worktree export e2e run overwrites the
+ primary's hub service worker (FACTS 2026-09-25).
+
+L1 owns: `export/app/components/hub/**`, the hub search/scope files, `homepage/**` (ordering only),
+`export/playwright.config.ts`, and `export/CHANGELOG.md`.
+
+### L2 — runner lows (`r10/runner-lows`)
+
+6. **YouTube's soft block backs off.** "Try again later" classifies as `deleted` → per_video, so it
+ never backs off. Classify it as a rate/bot condition that backs off, and keep genuinely deleted
+ videos per_video. See the release 9 F record.
+7. **The boot pass's wait on the storage pass gets a timeout.** Log it when the timeout fires, and
+ let the boot pass continue.
+8. **`/jobs` shows `cancelReason`.** It is already in the meta and the log (release 9 B4b); draw it
+ on the job row / detail.
+9. **The safeRevalidate warning fires per occurrence, not once per bundle.** Rate-limit or count it,
+ rather than printing it once per module load.
+
+L2 owns: `common/controller/**` and `common/jobs/**` for 6–7, the editor `/jobs` UI, and the
+safeRevalidate helper.
+
+### Shared, and whoever merges later resolves it
+
+- `editor/CHANGELOG.md`. Add a NEW `## [Unreleased]` above `[0.9.0]`, and never edit `[0.9.0]`.
+- This file's records.
+- Neither slice touches S4's files: `common/lib/brandMedia*`, `common/bin/brand-media.ts`,
+ `common/bin/gen-media-glyphs.py`, `umtool/report-to-video/**`.
+
+### Gates, per slice
+
+- tsc.
+- Unit tests: common, editor, `test:scripts`, mcp.
+- **L1:** `next build` for editor, export (site and hub) and homepage; the full export suite,
+ `e2e:hub`, `e2e:2origin` and the homepage e2e. Also prove item 5: after a worktree export e2e,
+ the primary's `export/public/sw.js` is untouched.
+- **L2:** the editor `next build`, and the editor e2e specs for `/jobs`, boot and downloads (the
+ full editor suite runs at integration). Unit tests for the classification (6) and the timeout (7).
+
## Rollout
Nothing is rolled out. The live :3001 editor still runs `0213f6c8` (the pre-brand build); the five