Archilyzer · Source

archilyzer

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

commit fedb210dc811a308f12bc307e7489d457ce46f4b
parent 2aabde260d97cf647034366f8b71a10777738e2f
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Mon, 28 Sep 2026 09:40:25 -0400

plans: follow-up O6c recorded — the build-mode stub dropped; the Rumble full check (operator actions, 13:32Z); both questions ruled in STATE, the O3/O6 records and Rollout; FACTS amended; the changelog bullets replaced

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

Diffstat:
Meditor/CHANGELOG.md | 4++--
Mhomepage/CHANGELOG.md | 2+-
Mplans/FACTS.md | 14++++++++++++--
Mplans/STATE.md | 19+++++++++++++++----
Mplans/release-11.md | 101++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
5 files changed, 120 insertions(+), 20 deletions(-)

diff --git a/editor/CHANGELOG.md b/editor/CHANGELOG.md @@ -6,8 +6,8 @@ - **"Persist source video" or a whole-recording fetch that cannot get the source no longer marks the video's download failed.** When YouTube's subtitles came down but the source video did not, the video page said "Download failed" over a transcript that is fine. The download now keeps the subtitle pass's result and records only the failed media attempt, with yt-dlp's reason. The run itself now ends failed with that reason; it used to end done with no file, so `fetch_clip` could only say the job "finished but named no file". A partial source file is left for a retry to resume, and the run's log names it. - **A bucket's retry keeps its log when it empties the bucket.** On a channel's Download stage, "Download with cookies", the partial-download resume and the missing-transcript retry could lose their run log part-way: the video they fetched left the bucket, the page refreshed, and the card disappeared with the log in it. The card now stays, with its log and its button disabled, until the page is reloaded. The Transcribe stage's "Fetch audio" button does the same. (A Diagnostics card still disappears, log and all, when its retry empties it.) - **A release cut whose commit fails still refreshes the pages.** When the changelog's new heading was written but the commit after it failed, the Cut release form and `pnpm ops cut-release` answered as if nothing had happened and no page showed the new heading until a reload. Both now refresh the changelog pages, and `pnpm ops cut-release` says the file was written. Every refused cut's answer says whether anything was written (`untouched`), and a cut of both changelogs that stopped half-way names the one already cut as well as the failure. -- **`archilyzer` checks the machine, runs one operation offline, starts the MCP server, and is one command from the repo root.** `pnpm archilyzer <command>` is the short form (`pnpm archilyzer --help` lists them all). `pnpm archilyzer doctor` is a read-only report: Node, the checkout, the corpus and whether each channel's media is reachable, `settings.json`, every tool the paths name plus each enabled worker's engine and model, umtool's report-pipeline tools, and this checkout's ports; it exits 1 only for something the machine is set up to do and cannot. `pnpm archilyzer run <operation> <channel> [ids…]` runs diarization, either attribution pass or digest over one channel as the editor's job does (a job record and log under `.jobs/`, the same summary line, the same refusal for an unmounted drive); sync, the metadata scan, downloads and transcription are refused with the reason, because they run on the editor's paced download queue and worker pool. `pnpm archilyzer mcp` starts the MCP server, so it can be registered as `-- pnpm -C "$PWD" archilyzer mcp`. Every other script in `common/bin/` is a subcommand too (`duplicates`, `posts fetch`, `digest plan`, `verify transcripts`, …), and export's `detect:duplicates` script is now `archilyzer duplicates`. Every environment variable is listed, by audience, in the new `ENVIRONMENT.md`, and `DEPLOY_CLOUDFLARE.md` and `DEPLOY_DOCKER.md` are now one `PUBLISH.md`. Settings and `/sites` no longer call the Docker build mode a follow-up, and say what it is: a label. **Build all sites** builds in containers whenever a container engine answers, whichever mode is set. -- **Settings' build mode says it is a label, and the test-only environment variables start with `E2E_`.** The Build mode choices now read *Basic (a label for now)* and *Docker (a label for now)*, and the **Build all sites** section and the per-site panel on `/sites` say the same: Build all builds every site in parallel in containers whenever a container engine answers, whatever the mode, and single-site builds run one at a time. For whoever runs the test suites: every variable only a test harness reads is renamed with an `E2E_` prefix and listed in its package's `playwright.config.ts` (and in `ENVIRONMENT.md`); `SHARDS=N pnpm e2e:sharded` is now `E2E_SHARDS=N`. +- **`archilyzer` checks the machine, runs one operation offline, starts the MCP server, and is one command from the repo root.** `pnpm archilyzer <command>` is the short form (`pnpm archilyzer --help` lists them all). `pnpm archilyzer doctor` is a read-only report: Node, the checkout, the corpus and whether each channel's media is reachable, `settings.json`, every tool the paths name plus each enabled worker's engine and model, umtool's report-pipeline tools, and this checkout's ports; it exits 1 only for something the machine is set up to do and cannot. `pnpm archilyzer run <operation> <channel> [ids…]` runs diarization, either attribution pass or digest over one channel as the editor's job does (a job record and log under `.jobs/`, the same summary line, the same refusal for an unmounted drive); sync, the metadata scan, downloads and transcription are refused with the reason, because they run on the editor's paced download queue and worker pool. `pnpm archilyzer mcp` starts the MCP server, so it can be registered as `-- pnpm -C "$PWD" archilyzer mcp`. Every other script in `common/bin/` is a subcommand too (`duplicates`, `posts fetch`, `digest plan`, `verify transcripts`, …), and export's `detect:duplicates` script is now `archilyzer duplicates`. Every environment variable is listed, by audience, in the new `ENVIRONMENT.md`, and `DEPLOY_CLOUDFLARE.md` and `DEPLOY_DOCKER.md` are now one `PUBLISH.md`. +- **The build-mode toggle and setting are gone, and the test-only environment variables start with `E2E_`.** The Basic / Docker choice on `/sites` and in **Settings → Build pipeline** was a label nothing read, so it is removed; a `settings.json` that still has `buildPipeline.mode` loads as before and drops the key on the next save. **Build all sites** builds every site in parallel in containers whenever a container engine answers, and serially on the host when none does, as it always did; a single site's build runs one at a time. Max parallel builds, the image tag and the Dockerfile path stay. For whoever runs the test suites: every variable only a test harness reads is renamed with an `E2E_` prefix and listed in its package's `playwright.config.ts` (and in `ENVIRONMENT.md`); `SHARDS=N pnpm e2e:sharded` is now `E2E_SHARDS=N`. - **In high-contrast mode the sidebar's Archilyzer mark keeps its edge.** In Windows' high-contrast mode (forced colours) the reader's own background replaces the page on every ground and can be as dark as the mark's slate tile, whose thin ring is only drawn on Dark. In that mode the tile now gets a 1-pixel outline in the reader's text colour, on every ground, following its rounded corners. Nothing changes outside that mode. ## [0.9.4] - 2026-09-28 diff --git a/homepage/CHANGELOG.md b/homepage/CHANGELOG.md @@ -2,7 +2,7 @@ ## [Unreleased] -- **The docs' *Building several sites at once* page says what Build all does.** It called the container pipeline opt-in, turned on in the settings. Build all sites builds every site in parallel in containers whenever a container engine is available, whichever build mode is set (that choice is only a label for now), and one after another when none is. +- **The docs' *Building several sites at once* page says what Build all does.** It called the container pipeline opt-in, turned on in the settings. Build all sites builds every site in parallel in containers whenever a container engine is available, and one after another when none is; there is nothing to switch on. - **A single-colour social icon shows on every ground.** The footer's social icons are the operator's (`homepage.json`'s, else `settings.socialLinks`), normalized when they are saved (`normalizeSocialSvg`, release 11 slice O1). An icon drawn in one colour now takes the footer's colour throughout; before, a part that carried its own colour kept it, so X's official logo, which is white, was invisible on the Light ground. An icon of two or more colours, such as YouTube's red mark with its white triangle, keeps its colours as pasted. "No fill", gradients, masks, clip paths and animation timing are never changed, and a clip path's own colour does not count, so a one-colour icon exported from Figma follows the footer too. It applies when the settings are next saved, then needs a rebuild and deploy of the homepage. - **In high-contrast mode the header mark's tile keeps its edge.** In Windows' high-contrast mode (forced colours) the reader's own background replaces the page on every ground and can be as dark as the slate tile, whose ring is only drawn on Dark. In that mode the tile gets a 1-pixel outline in the reader's text colour, on every ground, following its rounded corners. Nothing changes outside that mode. - **A sixth official instance has a chart colour of its own.** The growth chart, its legend and `/stats` had five validated colours, so a sixth site fell to a pink within a degree of the fifth's magenta. There is now a sixth, a rust (`--chart-6`: `#823c10` on Light and Sepia, `#a54a08` on Dark), which is Vermilion's hue family, so Jasolyzer's card and its layer will share a hue once it is published. It clears every pair with the other five on all three grounds for colour-blind readers (the dataviz validator, all pairs; worst CVD ΔE 9.1, normal 16.3). Any six sites now wear the six validated colours; `/stats`' sixth channel gets the rust too. diff --git a/plans/FACTS.md b/plans/FACTS.md @@ -1112,6 +1112,8 @@ The real cause is an **optimistic write raced by a reload**. `BuildModeToggle` c passes before `settings.json` has been written, and the test's `page.goto()` reload can read the pre-click settings. A fast host wins that race; a loaded container loses it. The spec now polls `test-settings.json` for `buildPipeline.mode === "docker"` before reloading. +*(Amended 2026-09-28, O6c: the toggle and `buildPipeline.mode` are gone, and so is that test; the +lesson below stands.)* **The general lesson: an optimistic control proves nothing about persistence.** Assert the persisted artifact, not the widget, before reloading — and treat "passes serially, fails @@ -3131,7 +3133,7 @@ only their routes say otherwise", is wrong for two of them): |---|---|---|---|---| | `/charts` | **per-site** templates; preview DATA = last-composed site | `readTemplates(paths, siteId)` → `sites/<id>/chart-templates.json`; `useStats`/`useSummaries` fetch `/stats/*` = `export/public/stats` = whichever site `compose-site` ran last | `saveDefaultDashboardAction`, no revalidate | yes, REQUIRED one site | | `/aliases` | **global + per-site overlay** | `readGlobalAliases` → `transcripts/search-aliases.json`; `readSiteAliases` → `sites/<id>/search-aliases.json`; merged at compose, per-site id SHADOWS global (`aliasesStore.ts:68-73`) | `saveGlobalAliasesAction`, `saveSiteAliasesAction`, no revalidate | optional | -| `/deploy` | **per-site target + global chrome** | `listSites`; `export/CHANGELOG.md`; `export/out/index.html` mtime (`resolveOutDir` ignores siteId); `settings.buildPipeline.mode` | `cutReleaseAction`, `setBuildModeAction`, `deployExportAction(siteId)` + four from `buildAction` | optional | +| `/deploy` | **per-site target + global chrome** | `listSites`; `export/CHANGELOG.md`; `export/out/index.html` mtime (`resolveOutDir` ignores siteId); `settings.buildPipeline.mode` *(gone 2026-09-28, O6c)* | `cutReleaseAction`, `setBuildModeAction`, `deployExportAction(siteId)` + four from `buildAction` | optional | | `/build` | **corpus-wide, no site notion at all** | `activeQueueNames()`, `liveJobRows(BUILD_KINDS)` — no `searchParams`, no `listSites` | eleven actions in `buildAction.ts` | **never** | | `/homepage` | **global — the hub's identity** | `getHomepageConfig` → `sites/_homepage/homepage.json` | `saveHomepageConfigAction` | **never**; page was sync | @@ -3139,7 +3141,7 @@ only their routes say otherwise", is wrong for two of them): in two directories: `build/buildAction.ts:34` imported `deploy/buildDeployCore`, and four `deploy/components/*` imported `build/buildAction`. Now: server modules in `editor/app/sites/lib/` — `buildAction.ts`, `deployAction.ts`, `cutReleaseAction.ts`, -`buildModeAction.ts`, `homepageActions.ts`, `chartsActions.ts`, `aliasesActions.ts` (all +`buildModeAction.ts` *(deleted 2026-09-28, O6c)*, `homepageActions.ts`, `chartsActions.ts`, `aliasesActions.ts` (all `"use server"`) plus `buildDeployCore.ts` (deliberately NOT, its header says why). Components FLAT in `editor/app/sites/components/`, so every moved file has the same import shape: `../lib/x`, `../../components/QueueControl`, `../../jobs/actions` — the last two byte-identical @@ -7000,6 +7002,14 @@ out. O3's facts are the section just above ("O3 — runner lows"). Anchors are a deploy all use containers whenever `docker version` answers, else the serial host build. Settings ("Basic (a label for now)" / "Docker (a label for now)"), the schema text, SETTINGS.md, `/sites` and the homepage's Docker page say so. Whether they should honour it is an open operator question. + - *Amended 2026-09-28 (morning, follow-up O6c): ruled — dropped.* The operator: "If docker build + mode isn't ready yet, just drop it for now rather than keep the stub." `buildPipeline.mode`, + `BuildMode` / `isBuildMode`, the `/sites` toggle (`BuildModeToggle.tsx`, + `buildModeAction.ts`) and the Settings select are gone. `buildPipeline` is + `{maxParallelBuilds, dockerImage, dockerfile}`, and `sanitizeBuildPipeline` builds only those, + so a `settings.json` that still says `"mode": "basic"` loads and loses the key on the next save + (`settingsSchema.test.ts`, `settingsWrite.test.ts`). The container path is unchanged: Build all + uses containers whenever `docker version` answers. ### The homepage builds and deploys from `/sites` (O4) diff --git a/plans/STATE.md b/plans/STATE.md @@ -22,7 +22,7 @@ changed at integration. Nothing was deployed, cut, pushed or restarted; :3001 st - **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. + the build mode is a label (then dropped outright: O6c, below). - **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` @@ -38,6 +38,10 @@ changed at integration. Nothing was deployed, cut, pushed or restarted; :3001 st - **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). + - **O6c — the build-mode stub dropped** (2026-09-28 morning, on the operator's ruling; branch + `r11/phase-4-s3` tip after `5b6a66ec`): `buildPipeline.mode`, the `/sites` toggle and the + Settings select are gone; an old `settings.json` with `mode` loads and drops it on the next + save; Build all still uses containers whenever `docker version` answers. - **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` @@ -55,11 +59,18 @@ changed at integration. Nothing was deployed, cut, pushed or restarted; :3001 st No reader-visible change, so no bullet. Record: `release-11.md`, "Operator rulings and follow-up O1c". 2. **The operator questions the records raise:** - - Should Build all honour `buildPipeline.mode` (today a label; O6)? **Open.** + - ~~Should Build all honour `buildPipeline.mode` (today a label; O6)?~~ **Ruled 2026-09-28: + dropped** ("just drop it for now rather than keep the stub"). Follow-up O6c removed the mode, + the `/sites` toggle and the Settings select; an old `settings.json` with `mode` still loads. + Build all uses containers whenever `docker version` answers, as before. - ~~Is `--chart-6`'s rust near `--state-gone` acceptable (O2)?~~ **Ruled 2026-09-28: accepted; Vermilion keeps slot 6.** - - Settle the five 410'd Rumble videos with a "Full-check unexpected" on `rekietalaw-rumble` - and `the-quartering-rumble` (O3)? **Open.** + - ~~Settle the five 410'd Rumble videos with a "Full-check unexpected" on `rekietalaw-rumble` + and `the-quartering-rumble` (O3)?~~ **Done 2026-09-28 13:32Z** (the operator: "full check the + rumble channels"; run by the parent on :3001 through `platform:rumble`): all five read + deleted, 0 errors, so they publish as Deleted at the next build, not "Missing?" (jeralyzer's + and rekietalyzer's counts do not rise by 4 and 1). Record: `release-11.md`, "Operator + actions (2026-09-28 morning)". 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 diff --git a/plans/release-11.md b/plans/release-11.md @@ -226,7 +226,8 @@ found, and slice P's review lows L3 + L4. No settings, site or channel key; noth five are Rumble probes that got `HTTP Error 410: Gone` on 2026-09-25 and were stored as `error`, hours before `6d5cdbc3` taught the classifier that 410 is `deleted`; they are really deleted, and "Missing?" is closer than "available". A "Full-check unexpected" on those two channels would - settle them as Deleted (the operator's call; nothing was run). + settle them as Deleted (the operator's call; nothing was run). *Done 2026-09-28 13:32Z, on the + operator's word: all five read deleted — "Operator actions (2026-09-28 morning)", below.* **2 — a failed forced download keeps the subtitle pass's status** (`common/ytdlp/downloadOneManaged.ts`). - The attempt-3 `else` set `status = "failed"` and `lastSucceeded = false` for a `keepTranscript` @@ -347,7 +348,8 @@ found, and slice P's review lows L3 + L4. No settings, site or channel key; noth control renders. The follow-up is to lift a ran-bucket set into both sections and keep those cards in `populated` / `listed`. - **The five 410 videos** are published as available today and will read "Missing?" after the next - build; a Full-check unexpected would make them Deleted. + build; a Full-check unexpected would make them Deleted. *Ruled and done 2026-09-28 13:32Z: the + full check read all five deleted, so they publish as Deleted, not "Missing?".* **Review fixes** (review SHIP AFTER FIXES, `o3-review.md` in the job scratch dir: one should-fix, wording only; three lows; one nit; the three questions ruled — keep `archiveSourceVideo`'s failure broad, staying @@ -610,6 +612,7 @@ the `E2E_` prefix cleanup, which is checkpoint B, after O1–O5 land. they use containers whenever `docker version` answers and the mode is a label (review S2). The parent ruled copy-only tonight; honouring it (basic → serial host even when docker answers) is a behaviour change for its own slice. + *Ruled 2026-09-28 (morning): dropped — follow-up O6c removed the mode, the toggle and the select.* - **`run` does not see the editor's lanes** (review L1). Beside the editor's lane on the same channel it does the same videos twice — wasted CPU, not damage (atomic writes). Said in the header and the usage line; a `.jobs/` check for a running job of the same kind and slug is not @@ -1691,8 +1694,9 @@ something." at least one archive is in scope. - **`--chart-6`'s rust near `--state-gone` is accepted** (O2's question). - **Vermilion keeps slot 6** (`ACCENT_CHART_SLOT.vermilion = 5`, the runbook's question). -- **Still open:** O6's Build all vs `buildPipeline.mode`, and O3's full check of the five 410'd - Rumble videos. +- **Still open** at the time: O6's Build all vs `buildPipeline.mode`, and O3's full check of the + five 410'd Rumble videos. *Both closed later that morning: the mode dropped (follow-up O6c) and + the full check run ("Operator actions (2026-09-28 morning)").* **O1c: the link is written in the line** (`a4ffa959`). Branch `r11/hub-lows`, fast-forwarded to `main` `e1cedf3d` first. @@ -1740,6 +1744,79 @@ something." shipped lines are strings with no `.text`. - **A mutation, a second link not throwing:** exactly the two-links test fails. +### Follow-up O6c — the build-mode stub dropped (2026-09-28 morning) + +**The ruling.** The operator: "If docker build mode isn't ready yet, just drop it for now rather +than keep the stub." `buildPipeline.mode` was a label nothing read (O6's review S2). Build all and +Build & deploy all use containers whenever `docker version` answers, and build serially on the host +otherwise. That is unchanged. Branch `r11/phase-4-s3`, fast-forwarded to `main` `27723d37` first. + +**What went:** +- `common/lib/settingsSchema.ts`: the `mode` key, `BuildMode` and `isBuildMode`, and `mode`'s + field doc. The buildPipeline description and the `maxParallelBuilds` doc no longer name a mode. + `SETTINGS.md` and `settings.json.example` are regenerated. +- The `/sites` Basic | Docker toggle: `BuildModeToggle.tsx`, `buildModeAction.ts`, and its use and + `getSettings` import on `/sites`. +- The Settings form's select (and "(Docker mode)" in the Max parallel builds label) and + `settings/actions.ts`' handling of it. +- The publish tab's "Build mode (Basic or Docker) is set on the Sites page" line. +- The mode's mentions in: + - `BuildAllSitesButton` (comment and paragraph) and `BuildSitesPanel` (comment and note); + - the `buildAction.ts`, `publish/build.ts:378` and `Dockerfile.build:1` comments; + - `PUBLISH.md`, `RUNNING_IN_DOCKER.md:~545` and the homepage's `deploy-docker.md`. +- Specs: + - `deploy-page.spec`'s toggle test is now "/sites has no build-mode toggle, and Build all says + when it uses containers"; + - `settings.spec` saves the three real fields and asserts no Build mode control and no `mode` + on disk. + +**What stays:** the container path, `maxParallelBuilds`, `dockerImage` and `dockerfile`. + +**An old file still loads.** The operator's `settings.json` says `"mode": "basic"`. +`sanitizeBuildPipeline` builds its output from the three real fields only, so that file loads with +no error, and the next save writes no `mode`. +- `settingsSchema.test.ts`: the sanitizer and the whole-file parse drop `mode`, for `"basic"`, + `"docker"`, junk and a number. +- `settingsWrite.test.ts`: a file carrying `mode` loads through `getSettings()`, and + `writeSettings` puts exactly `{maxParallelBuilds, dockerImage, dockerfile}` on disk. +- `settings example --check` compares the committed `settings.json.example` and `SETTINGS.md` + against what the schema generates. Both are regenerated without `mode`, so it exits 0. +- It never reads the operator's file. + +**Changelogs.** The O6 editor `[Unreleased]` bullet that said "the mode is a label" is replaced, +not stacked. It now says the toggle and setting are gone, an old file loads, and Build all uses +containers when it can, as it always did. The O6-A bullet's build-mode sentence is removed. The +homepage bullet for its Docker page says there is nothing to switch on. + +| sha | what | +|---|---| +| `5b6a66ec` | `editor, common:` the stub dropped (schema, toggle, select, copy, the two specs, two new settings tests) | +| `7262256f` | `docs:` PUBLISH, RUNNING_IN_DOCKER, the homepage's Docker page | +| _this_ | `plans:` this record, STATE, FACTS amendments; the editor and homepage changelog bullets replaced | + +**Gates**, from the worktree root on `27723d37` + these commits (`$T/o6c-*.log`): +- tsc clean (70 s). +- **common 2,114/2,114** (+2), **editor unit 85/85**, **`test:scripts` 185 + 1 skip**, **mcp + 269/269**. +- The three `--check`s: all exit 0. +- `next build`: editor ok (39 s), homepage ok (15 s). +- **e2e** (`o6c-specs.txt`: deploy-page, settings, sites-crud, sites-homepage, ops-api): **56 passed, 0 + failed, 2.2 min**. +- **They bite:** with `27723d37`'s `settingsSchema.ts` under the new tests, both new tests fail + (22 pass, 2 fail — `o6-bite.log`). + +**Operator actions (2026-09-28 morning).** +- **The five 410'd Rumble videos are settled.** On the operator's word ("full check the rumble + channels"), the parent ran **Full-check unexpected** on the live :3001 at **2026-09-28 13:32Z**, + through the editor's `platform:rumble` queue at concurrency 1 (`$T/fc-run.log`): + - `rekietalaw-rumble`, job `01M3M3EVM0M3EZH9ETK6KY1AH7`: `v7e07us` deleted (`v7emb9a` skipped, + already known deleted); + - `the-quartering-rumble`, job `01M3M3F55A7VESDMYTM5801YJK`: `v4vriou`, `v4x5o1l`, `v4yqask` and + `v501kfc` deleted; + - 0 errors. +- So O3's five read **Deleted** at the next index build, not "Missing?". Jeralyzer's and + Rekietalyzer's "Missing?" counts do not rise by 4 and 1. + ## Rollout Nothing is rolled out: no cut, no deploy and no restart happened overnight, by rule. `main` is the @@ -1751,19 +1828,21 @@ integration tip (above); the live :3001 editor still runs `BUILD_ID` `S07zTu3MKT rulings and follow-up O1c", above). The drafts' markers are gone and each link is written in its line (`` copy`…${link("…")}…` ``); no commit is owed for them before the cut. 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. + - ~~O6: should Build all / Build & deploy all honour `buildPipeline.mode`?~~ **Ruled 2026-09-28: + dropped.** Follow-up O6c removed the mode, the `/sites` toggle and the Settings select; + containers are used whenever `docker version` answers, as before. - ~~O2: is `--chart-6`'s rust acceptable beside `--state-gone`?~~ **Ruled 2026-09-28: accepted; Vermilion keeps slot 6.** - - 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. + - ~~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`.~~ **Done 2026-09-28 13:32Z:** + all five read deleted, 0 errors ("Operator actions (2026-09-28 morning)"); they publish as + Deleted at the next build. 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 + routes, O3's retry-bucket, forced-download and Cut release form fixes, O6c's removal of the + build-mode toggle and select, O6's 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`.