Archilyzer · Source

archilyzer

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

commit 5d52601138d6358f43a30c4f33283dabc130ff9f
parent 19724366cf9abb3429a686d533eb5f77e6b3ff4f
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Mon, 28 Sep 2026 05:43:00 -0400

plans: release 11 integration, as merged — the gates on 2046a23e (FLAKES-ONLY), STATE "Now (2026-09-28, morning)", the Rollout steps

The record: every merge with its branch tip and review, the hand joins (O2's
changelogs and Record; O5 and O2b the Record only), the changelogs checked as
one set, and every gate with numbers — tsc; common 2,112, editor unit 85,
test:scripts 185 + 1 skip, mcp 269, homepage unit 2; the three doc checks;
the five builds; e2e export 206, hub 33, 2origin 3, homepage 31 (0 skipped,
no public data), umtool 175/2/45, editor 652/1/12 of 665. The failures:
the known umtool mix pair (alone x3 36/36) and transcript-source.spec.ts:76
(alone x3 9/9), both flakes. The primary's export/public byte-identical at
all six checkpoints. STATE's new top block and the release 10 lows marked
closed; the Rollout is the ordered list the operator owes.

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

Diffstat:
Mplans/STATE.md | 85+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
Mplans/release-11.md | 214++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 295 insertions(+), 4 deletions(-)

diff --git a/plans/STATE.md b/plans/STATE.md @@ -3,6 +3,82 @@ 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. +**Now (2026-09-28, morning): release 11 is merged to `main` in full and NOT rolled out.** The +overnight of 2026-09-28 ([`release-11.md`](release-11.md): every slice's record, then "Integration, +as merged", then "Rollout"). `main` = `eb28a341` + three integration `plans:` commits +(FACTS `eeff74c3`, `brand-and-themes.md` `3643c974`, then this STATE and the record); no code +changed at integration. Nothing was deployed, cut, pushed or restarted; :3001 still runs `BUILD_ID` +`S07zTu3MKTjHJa9eDM1GF` (2026-09-26 21:46). +- **The slices, in merge order:** + - **O4 — the homepage builds and deploys from `/sites`** (`baaa4b47`): a Homepage section after + Hub (Build homepage / Deploy after build / Deploy homepage, a preview branch box), jobs + `build-homepage` / `deploy-homepage` / `build-deploy-homepage`, + `/api/ops/build-homepage|deploy-homepage` and `pnpm ops build-homepage|deploy-homepage`; + `JobLane` survives Strict Mode. + - **O3 — runner lows** (`c1d4790a`): an `error` recheck keeps a video "Missing?" (5 real videos flip + at the next build: jeralyzer 4, rekietalyzer 1); a failed forced source download keeps the + subtitle pass's status and fails the job with yt-dlp's line (`sourceFetchFailure`); a bucket's + retry keeps its log (`cookies-mode.spec:241` deterministic); the cut-release lows L3 + L4. + - **O6-A — one-core Phase 4 slice 3, checkpoint A** (`cb9d02b2`): `archilyzer doctor`, `run + <operation>`, `mcp`, every bin a subcommand, `pnpm archilyzer`; `common/lib/ports.mjs` and + `common/lib/envVars.ts` → generated `ENVIRONMENT.md`; `PUBLISH.md` absorbs the two deploy docs; + the build mode is a label. + - **O1 — hub lows** (`6cd3a9fe`): `/ask` waits for the hub's list, says when there are no + archives, shows a scope line; a member's missing live chat on its chip with a live-chat Retry; + `normalizeSocialSvg` themes a single-colour icon (the x.com fix); `mcp/README.md`'s `fetch_clip` + env lines. Three DRAFT copy lines. + - **O2 — homepage and brand lows** (`139a648e`): a custom hex fitted per base (`perBaseColor`), + `--chart-6` (a rust, Vermilion's family, validated), the mark's forced-colours outline, the + homepage e2e on a synthetic summary. + - **O5 — umtool brand fonts** (`15d5d646`): the rail / ledger / scroll / chart in IBM Plex Sans + under the brand, fitted by the face's own advances; IBM Plex Mono Bold vendored; an unbranded + render byte-identical (334 files). + - **O2b — follow-ups** (`69e7f59e`, + changelog nits `59d2f877`): the hub's added archives fitted + per base; `<clipPath>` passed over like `<mask>`; `no-data.spec`. + - **O6-B — checkpoint B** (`eb28a341`): every test-only env var `E2E_`-prefixed and declared in its + playwright config; the harnesses read `ports.mjs`. **One-core Phase 4 is done** (the optional + SETUP/PLAN.md consolidations aside). +- **Gates on the merged tree** (`eb28a341`; every number in the record): tsc clean; common 2,112, + editor unit 85, `test:scripts` 185 + 1 skip, mcp 269, homepage unit 2; the three generated-doc + checks exit 0; editor, export site + hub, homepage and umtool builds ok; e2e export 206, `e2e:hub` + 33, `e2e:2origin` 3, homepage 31 with 0 skipped (no `homepage/public` data), umtool 175 + 2 failed + + 45 skipped (the known `mix.spec` pair; alone ×3 36/36), editor full 652 + 1 failed + 12 skipped of + 665 in 39.5 min (`transcript-source.spec.ts:76`, a flake new to the records: alone ×3 9/9). + Verdict: **FLAKES-ONLY**, no regression. The primary's `export/public` was byte-identical at every + checkpoint. +- **What the operator owes, in order** (`release-11.md`, "Rollout"; the parent's runbook + `~/reports/overnight-2026-09-28/MORNING.html` has the scripts): + 1. **The copy rulings** — four lines in `export/app/ask/hubScopeCopy.ts`: `NO_ARCHIVES_IN_SCOPE` + (`:7`, release 10's, still unruled) and the three DRAFTs `NO_ARCHIVES_ON_HUB` (`:16`), + `LIVE_CHAT_MISSING` (`:24`) and `ASK_SCOPE_LINE` (`:33`). They ship as drafted unless changed; + a change is one small commit before the cut. + 2. **The operator questions the records raise:** should Build all honour `buildPipeline.mode` + (today a label; O6)? Is `--chart-6`'s rust near `--state-gone` acceptable (O2)? Settle the five + 410'd Rumble videos with a "Full-check unexpected" on `rekietalaw-rumble` and + `the-quartering-rumble` (O3)? + 3. **A release cut** (`archilyzer release cut all next --commit`; editor 8 and export 9 pending + bullets — export's is public on every `/changelog`). + 4. **The :3001 restart** on the new `main` (it brings O4's Homepage section and routes, O3's + retry-bucket and cut-form fixes, O6's copy and the digest replay that keeps `ids` — restart + before retrying any `archilyzer run digest` job — and O2's sidebar outline). + 5. **One settings write** after the restart (any Save): it re-normalizes the stored social icons, so + the x.com icon loses its `fill="white"`. + 6. **The deploys:** the five sites by name, then the hub, then the homepage — the homepage through + the new `/sites` → Homepage section (Build homepage, then Deploy homepage), which is O4's live + proof. + 7. **Re-upload the YouTube picture, watermark and banner** (`~/reports/archilyzer-media/brand/`), + still owed since release 10. + 8. Optional: rebuild + restart umtool on :3050. Its app changed only in `lib/tools.mjs` (the + shared tool probe) and two test-only variable names; O5's render changes already reach it from + disk (the live :3050 spawns `report-to-video/*`), and an unbranded render is byte-identical. +- **Next candidates:** one-core Phase 5 (projects join the core, `plans/one-core.md`); the Diagnostics + cards keeping their retry log (O3's found-and-left); `ChartView.tsx`'s five-slot cycle reaching + `--chart-6` (O2); O5's two wording lows in `svg-faces.mjs` / the README (kerning is not + conservative; `FALLBACK_EM` has exceptions); the LM chat-only tier config; the `Dockerfile.build` + image refresh; `transcript-source.spec.ts:76`'s stale-snapshot race (FACTS, "What the integration + gate found"); removing the seven `r11-*` worktrees, this one included once `main` carries its tip + (it re-sorts the port blocks; `diet-series` stays). + **Release 10 is fully rolled out as 0.9.4 (2026-09-28, 00:53).** The blocks below this one are the history, newest first from "Accent swap and mark contrast rolled out". - **Slice MR** (the mark ring on dark) merged `2b10f31b`; **0.9.4** cut as editor `2a6f6884` + @@ -138,7 +214,11 @@ below this block's homepage entry). Choose some on the [hub's front page] to ask.", with the bracketed words a link to `/`. It ships as drafted unless changed. - Whether `/ask` shows a "Searching N of M archives" scope line. -- **New lows (not started):** +- **New lows (not started):** *(ALL CLOSED 2026-09-28 by release 11, merged to `main` and not yet + rolled out: the icon by O1 — `normalizeSocialSvg` themes a single-colour icon, applied at the next + settings write; slice N's forced download and `cookies-mode.spec:241` by O3; `/ask` on a + zero-archive hub and the chip's missing live chat by O1 (DRAFT copy); `resolveMaybeMissingState` by + O3; umtool's rail/ledger/chart font and the bold IBM Plex Mono by O5. See `release-11.md`.)* - the operator's x.com social icon is invisible on the light footer (1.11:1): its `<path>` carries `fill="white"` and `normalizeSocialSvg` defaults only the root fill — fix by re-pasting the icon without the path fill in `settings.json` (found by slice O's screenshots); @@ -203,7 +283,8 @@ below this block's homepage entry). - **The editor was not restarted, on the operator's word.** :3001 has run a post-brand build since 2026-09-26 21:47 (`BUILD_ID` `S07zTu3MKTjHJa9eDM1GF`, main ≈ `9801a034`). - **Skipped:** the runbook's Anilyzer preview / phone check, on the operator's choice to deploy all five directly. - **Still optional:** `r10-umtool.sh`. -- **New lows:** +- **New lows:** *(both CLOSED 2026-09-28 by release 11 O2, not yet rolled out: `--chart-6`, a + validated rust in Vermilion's family; a custom hex fitted per base through `perBaseColor`.)* - A sixth published site's chart colour would nearly duplicate Anilyzer's magenta. Fix this before Jasolyzer gets a `siteUrl`. - A custom hex is not fitted per base on the homepage cards. diff --git a/plans/release-11.md b/plans/release-11.md @@ -1508,7 +1508,217 @@ blocker. Docs and record only: - **N1** (pre-existing, recorded only): with `E2E_TWO_ORIGIN_REBUILD=1`, playwright loads `playwright.2origin.config.ts` twice, so `stageTwoOrigins()` builds the hub twice per run. +### Integration, as merged (2026-09-28) + +Every slice was reviewed to SHIP on its own branch and merged by the parent as it landed; this pass +gated the combined tree once and wrote the records. Worktree `/home/user/Projects/r11-integration`, +branch `r11/integration`, port block #5, fast-forwarded to `main` `eb28a341` (`pnpm install +--frozen-lockfile`: already up to date). **No code changed at integration**: every gate below ran on +`eb28a341`, and the commits after it are `plans:` only. Scratch files `int-*` in the job's +`tmp/overnight`. + +| merge | branch → tip | review | on `main` | +|---|---|---|---| +| **O4** homepage deploy from `/sites` | `r11/homepage-deploy-ui` → `83b786ca` | SHIP AFTER FIXES → re-read SHIP | `baaa4b47` | +| **O3** runner lows | `r11/runner-lows` → `f4615403` | SHIP AFTER FIXES → re-read SHIP | `c1d4790a` | +| **O6-A** Phase 4 slice 3, checkpoint A | `r11/phase-4-s3` → `11d0403c` | SHIP AFTER FIXES → re-read SHIP | `cb9d02b2` | +| **O1** hub lows + DRAFT copy | `r11/hub-lows` → `8f5011c3` | SHIP AFTER FIXES → re-read SHIP (one new low, folded into O2b) | `6cd3a9fe` | +| **O2** homepage and brand lows | `r11/homepage-lows` → `1b39f285` | SHIP | `139a648e` | +| **O5** umtool brand fonts | `r11/umtool-fonts` → `8644e63f` | SHIP (four lows, two wording — see below) | `15d5d646` | +| **O2b** follow-ups | `r11/homepage-lows` → `013efa35` | SHIP; the review's changelog nits as `59d2f877` on `main` | `69e7f59e` | +| **O6-B** checkpoint B, the `E2E_` prefix | `r11/phase-4-s3` → `0ccd34f3` | SHIP AFTER FIXES → re-read SHIP | `eb28a341` | + +**What joined by hand** (`git show --remerge-diff` on each merge). +- `baaa4b47`, `c1d4790a`, `cb9d02b2`, `6cd3a9fe` and `eb28a341` merged clean: each branch had merged + `main` itself first (O3 `0c770285`, O6 `fcdaea12`, O1 `c7b42f23`; O6-B fast-forwarded), and + resolved its joins there. +- `139a648e` (O2): `editor/CHANGELOG.md` (O6's CLI bullet, then O2's forced-colours bullet), + `export/CHANGELOG.md` (O1's five hub bullets, then O2's outline and fitted-hex bullets) and this + file's Record (O6-A, O1, then O2). Every side kept. +- `15d5d646` (O5) and `69e7f59e` (O2b): this file's Record only. +- No code file conflicted in any merge. + +**Changelogs, checked as one set.** `editor/CHANGELOG.md` and `export/CHANGELOG.md` each have +exactly one `[Unreleased]`, directly above `[0.9.4]`: editor **8** bullets (O4 2, O3 3, O6-A 1, +O6-B 1, O2 1), export **9** (O3 1, O1 5, O2 2, O2b 1). Export's released part (`[0.9.4]` down) is +byte-identical to the 0.9.4 cut `ee9d41fa`. The editor's differs by exactly two link targets in +older released bullets (`DEPLOY_DOCKER.md` / `DEPLOY_CLOUDFLARE.md` → PUBLISH.md anchors, words +unchanged: O6 review Q1, `ef84f535`). `homepage/CHANGELOG.md` keeps its own convention (one +`[Unreleased]`, no cuts) and gained O2's four bullets, O2b's icon bullet and O6-B's Docker-page +bullet; O6-B's rename also rewrote one release-10 bullet there (`HOMEPAGE_SUMMARY_FILE` → +`E2E_HOMEPAGE_SUMMARY_FILE` beside `e2e/fixture-accents.ts`, a file that no longer exists — found +and left, below). No bullet repeats or contradicts another or the code as merged. + +**Gates**, all from the worktree root on `eb28a341` (`$T/int-gates.log`, `$T/int-e2e.log`, per-run +logs `int-g-*.log` / `int-e2e-*.log`). +- **tsc** (`pnpm -r --no-bail --workspace-concurrency=1 exec tsc --noEmit`): clean, 67 s. +- **Unit and script tests:** + - common **2,112/2,112**, 45 s (O6-B's recorded count: release 10's 2,038 + O4 3 + O3 10 + O6 30 + + O1 21 + O2 5 + O2b 3 + O6-B 2); + - editor unit **85/85**; + - `test:scripts` **185 passed + 1 skip of 186** (the report-to-video tests included, O5's +10; the + skip is the `LIVE=1` network test); + - mcp **269/269**; homepage unit **2/2**. + - `archilyzer docs env --check`, `settings example --check`, `docs files --check`: all exit 0. +- **Builds**, all ok, with `export/public` linked per path from the primary (17 links, none dangling) + and `homepage/public` holding only its tracked `_headers` (no data copied): + - editor 35 s (`BUILD_ID` `dcjZIUK_AhSRInyprrQny`); the route table lists + `/api/ops/build-homepage`, `/api/ops/deploy-homepage` and `/api/ops/cut-release`; + - export site 23 s: `<html … data-accent="signal">`; + - export hub (`INSTANCE_MODE=hub`) 23 s: `… dark" data-base="dark" data-accent="signal"`, + `out/ask/index.html` present (48,656 B); + - homepage (`pnpm --filter homepage exec next build`, NOT `run build`, whose `prebuild` indexes the + corpus) 12 s: the no-data page; its stylesheet carries the `forced-colors` rule and `--chart-6` + (×2 `#823c10`, ×1 `#a54a08`); + - umtool 16 s (`BUILD_ID` `pikb-0UeTC_FTcwMV-Xml`). +- **e2e**, one detached sequence (04:44 → 05:38), every run through the machine-wide queue (no + wait: nothing else held it): + + | suite | passed | failed | skipped | time | + |---|---|---|---|---| + | export full | **206** | 0 | 0 | 6.9 min | + | `e2e:hub` | **33** | 0 | 0 | 1.2 min | + | `e2e:2origin` (`E2E_TWO_ORIGIN_REBUILD=1`, links in place) | **3** | 0 | 0 | 34.2 s (64 s with the two hub builds) | + | homepage full (no `homepage/public` data) | **31** | 0 | **0** | 45.5 s | + | umtool full (`SONG_DIR=~/reports/quartering-uh-song/data`) | **175** | 2 | 45 | 4.2 min | + | **editor full** (`pnpm e2e`, 665 tests) | **652** | 1 | 12 | 39.5 min | + + The homepage's 31 with 0 skipped is O2's claim proved on a clean worktree: the suite reads its + synthetic summary and nothing from `public/` or the primary (`e2e/.e2e-summary.json` written by the + config; `homepage/public` still only `_headers` after). The 45 umtool skips are the song-data + capabilities this machine lacks (O5's and O6-B's runs: the same 175 / 2 / 45). `e2e:2origin`'s log + shows `compose hub` run twice (N1) into the WORKTREE's `export/public`. +- **Failures, classified** (each re-run alone, `$T/int-rerun*.log`): + - **umtool `mix.spec.ts:166` and `:201`: the known order-dependent pair, not the integration.** + Failed exactly as FACTS records ("`mix.spec.ts` IS ORDER-DEPENDENT"): the row linked to the + fixture's `channels/testchan/data/vid1/clips/0.00-14.00.mp4`, left by an earlier spec, instead of + `/out/clips-raw/vid1_0.00-9.00.mp4`. O5's and O6-B's full runs failed on the same pair. Alone, + `mix.spec.ts --repeat-each=3`: **36 passed**, 36.4 s (`int-rerun-umtool-mix.log`). + - **editor `transcript-source.spec.ts:76` ("diagnostics list a video with only + transcript.en-US.vtt"): a flake, not known before this pass.** The Diagnostics stage rendered + "Channel health" with no populated bucket, so the snapshot the page read lacked the video in + `nonStandardVtt`; the `Non-standard transcript VTT name (1)` heading never appeared (5 s + expect, 17.5 s in all). Alone, `transcript-source.spec.ts --repeat-each=3`: **9 passed** (the + spec's three tests ×3), 41.6 s (`int-rerun-editor-transcript-source.log`). Release 11 touched + nothing on its path: not the spec, `e2e/helpers.ts`, `common/controller/channelSnapshot.ts`, + `common/views/pipeline/stageStatus.ts`, `DiagnosticsStage.tsx` or the channel `page.tsx` (`git + diff --stat 2162db92 eb28a341`). O3's `RetryBucketControl` change renders inside a bucket's card, + below the heading that went missing, so it cannot hide it. The likeliest mechanism is + `generateReport`'s early return when a `snapshot.json` already exists (`e2e/helpers.ts:193`): + one written between `resetData` and the test's VTT swap (a debounced flush from the test before) + would be stale and never refreshed. Recorded in FACTS; not fixed (no code at integration). + - Nothing else failed. The 12 editor skips are `channels-rack-audit.spec.ts`, which runs only with + `E2E_RACK_SHOTS=1`. + - **Verdict: FLAKES-ONLY.** No regression. +- **The primary's `export/public` was never written.** `$T/int-ptree.sh` lists every entry (391: + 380 files, by path, type, size, mtime and md5; links by target — it has none) without following + links. Taken before any build (`int-primary-before.tree`, md5 `0f4b1f66…`), after the builds, + after the export suite, after `e2e:hub`, after `e2e:2origin` and after the editor suite: + **identical every time** (`cmp`). + - What the runs did in the worktree: the export suite replaced the `sw.js` LINK with its own plain + file; `e2e:2origin`'s `compose hub` (which logged "hub-summary.json skipped") replaced the `sw.js`, + `hub-sites.json`, `corpus.json`, `llms.txt`, `robots.txt` and `_headers` links with plain files. + The seed (`$T/int-seed-public.sh`) relinked every entry before the next run, and + `find export/public -xtype l` was empty before each. +- **The live processes were never touched:** :3001 still serves `BUILD_ID` `S07zTu3MKTjHJa9eDM1GF` + (2026-09-26 21:46); nothing was deployed, cut, pushed, restarted or written under `transcripts/`. +- Numbers tools: none. + +**Records folded in at integration** (the `plans:` commits below). +- **FACTS:** a new section, "Release 11 — slices O1–O6", anchored at `eb28a341`. Amended with dated + notes: the `/api/test/*` guard's variable (`EDITOR_TEST_ROUTES` → `E2E_TEST_ROUTES`, now set by + `editor/playwright.config.ts`' `E2E_SERVER_ENV`, not `dev:test`), `TWO_ORIGIN_REBUILD` → + `E2E_TWO_ORIGIN_REBUILD` in the two worktree-link facts, and `DEPLOY_CLOUDFLARE.md` → + `PUBLISH.md` in the preview-access fact. Release 10's "L1 — hub lows" was already amended by O1 + (`ac9c299b`); its colour entry gains one dated line (`fittedHex` is `perBaseColor`'s only + production caller). A closing subsection, "What the integration gate found", records the + `transcript-source.spec.ts:76` flake and what each suite writes into a worktree's + `export/public`. +- **O5 review's two wording lows (L1, L2) are recorded in FACTS, not fixed**: IBM Plex Sans has + positive kerning pairs, so the sum of advances is not conservative in general (real text's worst + net kerning +0.50 px); `FALLBACK_EM` 1.3 is exceeded by a few wide symbols (`⟹` 1.42 em). The + comment at `umtool/report-to-video/svg-faces.mjs:32-35` and the README's "Why a table" still say + otherwise — a comment-only fix for a later slice (no code changes at integration). +- **STATE:** a new "Now (2026-09-28, morning)" block above the 0.9.4 one. The 2026-09-26 block's + "New lows (not started)" (the x.com icon through umtool's fonts, formerly l.142–155) and the + 2026-09-27 rollout's two new lows get a dated note: all closed, with the slice that closed each. +- **`brand-and-themes.md`:** S4's record said the rail/ledger/chart text stays Fira and no bold Plex + Mono is vendored (the "Not branded, on purpose" bullet, the found-and-left `fontBold` bullet and + the review-rulings line); each gets a dated note that O5 closed it. + +**Found during the pass.** +- **One `homepage/CHANGELOG.md` bullet is now wrong about its own past.** O6-B's rename rewrote the + release-10 bullet "The e2e reads a copy of the summary with fixture accents (`HOMEPAGE_SUMMARY_FILE`, + `e2e/fixture-accents.ts`)" to `E2E_HOMEPAGE_SUMMARY_FILE`; neither the new name nor the file + existed at that time, and the newer O2 bullet already says the fixture file is gone. Harmless: + `homepage/CHANGELOG.md` is not published (the homepage's `/changelog` renders export's, + `homepage/app/changelog/page.tsx:25`). A wording fix at the next touch. +- **The O1 review's new low (a `<clipPath>` counted as a colour) was folded into O2b** (`c17ead28`), + so nothing from it is open. +- **Merged code already runs where processes spawn scripts from disk.** The primary checkout is on + `main` `eb28a341`, so the live :3050 already spawns O5's `umtool/report-to-video/*` (a branded + render gets Plex and the bold mono; an unbranded one is byte-identical), and any build the live + :3001 starts runs the new on-disk scripts (release 7's lesson). O6 kept every package-script name + the publish pipeline calls (`build:index`, `compose:site`, …), so an old-editor build still + resolves them; an unattended build-deploy would publish the merged code with its `[Unreleased]` + notes, which the operator accepted for the night. Outside `report-to-video/` and its e2e, umtool + changed only in `lib/tools.mjs` (O6's shared probe) and two test-only variable names + (`bin/cut-from-cache.mjs`, `lib/projects/kinds.mjs`); nothing requires a rebuild. + +| sha | what | +|---|---| +| `eeff74c3` | `plans:` FACTS — release 11 section; dated amendments (the `E2E_` names, PUBLISH.md) | +| `3643c974` | `plans:` `brand-and-themes.md` — O5 closed S4's Fira and bold-mono notes | +| _this_ | `plans:` this record, STATE ("Now (2026-09-28, morning)"), the Rollout steps | + ## Rollout -Nothing is rolled out tonight. The morning runbook lists what is owed: the :3001 editor restart, -a release cut and then the deploys, and the YouTube asset re-upload. +Nothing is rolled out: no cut, no deploy and no restart happened overnight, by rule. `main` is the +integration tip (above); the live :3001 editor still runs `BUILD_ID` `S07zTu3MKTjHJa9eDM1GF` +(2026-09-26 21:46), and the live sites are 0.9.4. The operator owes, in order (the parent's runbook, +`~/reports/overnight-2026-09-28/MORNING.html`, has the scripts): + +1. **Rule on the copy lines** in `export/app/ask/hubScopeCopy.ts`: the three marked `// DRAFT + (release 11, 2026-09-28)`, and release 10's still-unruled one. + - `:7` `NO_ARCHIVES_IN_SCOPE` (release 10's, unmarked): "No archives selected. Choose some on the + [hub's front page] to ask." + - `:16` `NO_ARCHIVES_ON_HUB`: "This hub has no archives yet. Add one on the [hub's front page] to + ask." + - `:24` `LIVE_CHAT_MISSING`: "live chat didn't load" + - `:33` `ASK_SCOPE_LINE(n, m)`: "Searching {n} of {m} archive(s) — [change on the front page]." + (shown whenever at least one archive is in scope; return `null` for all-in-scope to show it only + when some are off) + + They ship as drafted unless changed. A change is one small commit on `main` before the cut; + `ask.spec` and `federated-search.spec` import these constants, so they follow. +2. **Answer the records' questions** (none blocks the rollout): + - O6: should Build all / Build & deploy all honour `buildPipeline.mode`? Today the mode is a label + and containers are used whenever `docker version` answers. + - O2: is `--chart-6`'s rust acceptable beside `--state-gone`? The validator fails that pair; gone + is only labelled text on the homepage. + - O3: settle the five Rumble videos that got HTTP 410 on 2026-09-25 with a "Full-check unexpected" + on `rekietalaw-rumble` and `the-quartering-rumble`. They read "Missing?" after the next build; + the full check would make them Deleted. +3. **Cut the release:** `archilyzer release show`, then `archilyzer release cut all next --commit` + (editor 8 pending bullets, export 9; export's are public on every site's `/changelog`). The + homepage changelog keeps its own `[Unreleased]` convention and is not cut. +4. **Restart :3001 on the new `main`** (one restart). It brings O4's Homepage section and the two ops + routes, O3's retry-bucket, forced-download and Cut release form fixes, O6's build-mode copy and the + digest replay that keeps `ids`, and O2's sidebar outline under forced colours. **Restart before + retrying any `archilyzer run digest` job**: the old editor's replay widens it to the whole channel. +5. **Write the settings once** (any Save on Settings, or any other settings write). `writeSettings` + re-normalizes every stored social link, so the x.com icon's `fill="white"` becomes `currentColor`. + Check `settings.json` afterwards. +6. **Deploy.** First the five sites by name: the maybe-missing badge change, the forced-colours + outline, the single-colour icon and the changelog. Then the hub: O1's `/ask` changes, the fitted + hex for official and added archives, the outline. Then the homepage, **through the new `/sites` → + Homepage section**: Build homepage with Deploy after build unticked, then Deploy homepage (or `pnpm + ops build-homepage --wait`, then `pnpm ops deploy-homepage --wait`; the log ends `[deployed] + https://<hash>.archilyzer.pages.dev`). That is O4's live proof. The homepage reads the index as it + stands, so it goes after the sites' builds. +7. **Re-upload the YouTube picture, watermark and banner** (`~/reports/archilyzer-media/brand/`), + still owed since release 10. +8. **Optional:** rebuild and restart umtool on :3050. Nothing in the app needs it; O5's render changes + already reach the live :3050 from disk, and an unbranded render is byte-identical. +9. **Afterwards:** remove the seven merged `r11-*` worktrees when nothing runs (it re-sorts the port + blocks; `diet-series` stays).