Archilyzer · Source

archilyzer

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

commit d9204a6e301d8ac1774fac6c51a53edfefa1d63d
parent 48d805caf7fdf93451b78d0bb28bc7091db779bf
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Mon, 28 Sep 2026 02:04:04 -0400

editor, common: `pnpm archilyzer`; the Docker build mode is not "a follow-up"

The root `archilyzer` script is the short form of `pnpm --filter
yt-dlp-transcript-common exec tsx bin/archilyzer.ts`. pnpm prints its `$ …`
line on stderr, so `pnpm -C "$PWD" archilyzer mcp` keeps stdout pure
JSON-RPC (checked with an initialize handshake). ENVIRONMENT.md's
regenerate line says `pnpm archilyzer docs env`.

Settings → Build pipeline said Docker "will run" isolated builds and that
"the container pipeline is a follow-up, so Docker currently falls back to a
basic build"; the option read "(follow-up)". The pipeline has shipped since
the editor's first Docker build mode: the copy and the option now say what
it does, as do `settingsSchema.ts`'s buildPipeline description (SETTINGS.md
regenerated) and its BuildMode comment. build.ts's R2-credentials refusal
and three comments name PUBLISH.md instead of the two docs it replaces.

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

Diffstat:
MENVIRONMENT.md | 2+-
MSETTINGS.md | 2+-
Mcommon/lib/envVars.ts | 2+-
Mcommon/lib/settingsSchema.ts | 7++++---
Mcommon/publish/build.ts | 8++++----
Meditor/app/settings/components/SettingsForm.tsx | 12+++++-------
Mpackage.json | 1+
7 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/ENVIRONMENT.md b/ENVIRONMENT.md @@ -4,7 +4,7 @@ Every environment variable the repo's code reads, by who it is for. The list is code (`common/lib/envVars.ts`), and a test fails when the code reads a variable the list does not declare, or the list declares one nothing reads. umtool's own knobs are documented in [umtool/docs](umtool/docs/README.md). -Regenerate this file with `pnpm --filter yt-dlp-transcript-common exec tsx bin/archilyzer.ts docs env`. `archilyzer doctor` prints which of the paths overrides are set on this machine. +Regenerate this file with `pnpm archilyzer docs env`. `pnpm archilyzer doctor` prints which of the paths overrides are set on this machine. ## Paths and binaries diff --git a/SETTINGS.md b/SETTINGS.md @@ -556,7 +556,7 @@ Default: ## `buildPipeline` -How the static export is built: "basic" reuses the single export/ tree and serializes builds on one queue (the long-standing behavior); "docker" runs each site's build in an isolated container for safe parallelism. The Docker pipeline itself is a follow-up; this block persists the chosen mode plus the container/concurrency knobs the deploy page and the future orchestrator read. +How the static export is built: "basic" reuses the single export/ tree and serializes builds on one queue (the long-standing behavior); "docker" builds every site at once, each in its own container (Dockerfile.build), then deploys them serially, and falls back to the basic build when no container engine answers — see PUBLISH.md. This block persists the chosen mode plus the image and concurrency knobs that pipeline reads. #### `buildPipeline` diff --git a/common/lib/envVars.ts b/common/lib/envVars.ts @@ -210,7 +210,7 @@ export function renderEnvironmentMarkdown(): string { "", "Every environment variable the repo's code reads, by who it is for. The list is code (`common/lib/envVars.ts`), and a test fails when the code reads a variable the list does not declare, or the list declares one nothing reads. umtool's own knobs are documented in [umtool/docs](umtool/docs/README.md).", "", - "Regenerate this file with `pnpm --filter yt-dlp-transcript-common exec tsx bin/archilyzer.ts docs env`. `archilyzer doctor` prints which of the paths overrides are set on this machine.", + "Regenerate this file with `pnpm archilyzer docs env`. `pnpm archilyzer doctor` prints which of the paths overrides are set on this machine.", "", ]; for (const a of ENV_AUDIENCES) { diff --git a/common/lib/settingsSchema.ts b/common/lib/settingsSchema.ts @@ -416,8 +416,9 @@ export const DIGEST_SETTINGS_FIELD_DOCS: FieldDocs<DigestSettings> = { // "basic" — `pnpm run build` in export/, serialized on the build queue (shared // output tree → no safe parallelism). -// "docker" — isolated per-site container builds (follow-up); enables real -// parallel multi-site builds capped by maxParallelBuilds. +// "docker" — isolated per-site container builds (publish/build.ts, +// runDockerBuildAllPhase): real parallel multi-site builds capped by +// maxParallelBuilds. export type BuildMode = "basic" | "docker"; // Each field is documented in BUILD_PIPELINE_SETTINGS_FIELD_DOCS below (rendered into SETTINGS.md). @@ -1524,7 +1525,7 @@ export const siteSettingsSchema = z.object({ "Where a channel's downloaded media goes when it is relocated off the corpus disk. A DEFAULT ONLY: the relocate controller never reads it and always takes an explicit root, so this is the value the per-channel Storage panel prefills and the /channels bulk move falls back to. Blank = no default. See StorageSettings.", ), buildPipeline: settingsField((v): BuildPipelineSettings => sanitizeBuildPipeline(v)).describe( - "How the static export is built: \"basic\" reuses the single export/ tree and serializes builds on one queue (the long-standing behavior); \"docker\" runs each site's build in an isolated container for safe parallelism. The Docker pipeline itself is a follow-up; this block persists the chosen mode plus the container/concurrency knobs the deploy page and the future orchestrator read.", + "How the static export is built: \"basic\" reuses the single export/ tree and serializes builds on one queue (the long-standing behavior); \"docker\" builds every site at once, each in its own container (Dockerfile.build), then deploys them serially, and falls back to the basic build when no container engine answers — see PUBLISH.md. This block persists the chosen mode plus the image and concurrency knobs that pipeline reads.", ), digest: settingsField((v): DigestSettings => sanitizeDigest(v)).describe( "AI digest generation (chapters + topic tags over the existing transcripts). Local-first: the metered lane is off by default. See DigestSettings.", diff --git a/common/publish/build.ts b/common/publish/build.ts @@ -177,7 +177,7 @@ export const PREVIEW_SHARES_ARCHIVES_NOTICE = // Cache-Control set on every uploaded archive. Served through a Cloudflare custom // domain, this lets the CDN absorb repeated/abusive downloads at the edge instead // of hitting R2 (each origin GET is a billable Class B op), which is the main cost -// defense for public archives — see DEPLOY_CLOUDFLARE.md. 1h balances flood +// defense for public archives — see PUBLISH.md. 1h balances flood // absorption against re-deployed archives (stable filenames, overwritten in place) // going stale; raise it if your archives rarely change. const ARCHIVE_CACHE_CONTROL = "public, max-age=3600"; @@ -230,7 +230,7 @@ export async function runArchiveUploadIntoLog( `[archives] ${files.length} oversize archive(s) need uploading to R2 bucket ` + `"${bucket}", but R2 S3 credentials are missing. Set R2_ACCESS_KEY_ID, ` + `R2_SECRET_ACCESS_KEY, and CLOUDFLARE_ACCOUNT_ID in the environment — see ` + - `DEPLOY_CLOUDFLARE.md. Aborting before deploy so the site never links to ` + + `PUBLISH.md ("Download archives and R2"). Aborting before deploy so the site never links to ` + `missing files.\n`, ); return 1; @@ -377,7 +377,7 @@ export async function runDeployIntoLog( // --------------------------------------------------------------------------- // Docker export pipeline (buildPipeline.mode = "docker") // -// Three ordered phases (see DEPLOY_DOCKER.md): +// Three ordered phases (see PUBLISH.md, "Building every site in containers"): // A) HOST, serial: build:data (shared LMDB + .export-index) then build:archives // (warm the shared archive cache). One writer of the shared state. // B) CONTAINERS, parallel (cap maxParallelBuilds): each site's compose + next @@ -473,7 +473,7 @@ async function runDockerBuildOne( const gid = typeof process.getgid === "function" ? process.getgid() : null; if (uid !== null && gid !== null) args.push("-u", `${uid}:${gid}`); // Optional resource caps so N parallel builds (each next build can use ~8 GB) - // don't OOM the host. Sized by the operator; see DEPLOY_DOCKER.md. + // don't OOM the host. Sized by the operator; see PUBLISH.md. const mem = process.env.DOCKER_BUILD_MEMORY?.trim(); const cpus = process.env.DOCKER_BUILD_CPUS?.trim(); if (mem) args.push("--memory", mem); diff --git a/editor/app/settings/components/SettingsForm.tsx b/editor/app/settings/components/SettingsForm.tsx @@ -300,10 +300,10 @@ export function SettingsForm({ initial }: Props) { <p className="text-xs text-muted-foreground"> How the static export is built. <strong>Basic</strong> runs the build in <code>export/</code> and serializes builds on one queue.{" "} - <strong>Docker</strong> will run each site&apos;s build in an isolated - container for safe parallel multi-site builds — the container pipeline - is a follow-up, so Docker currently falls back to a basic build. The - mode can also be toggled on the{" "} + <strong>Docker</strong> builds every site at once, each in its own + container (capped by Max parallel builds), then deploys them one by + one; with no container engine it falls back to the basic build. See + PUBLISH.md. The mode can also be toggled on the{" "} <a href="/sites" className="underline"> Sites </a>{" "} @@ -317,9 +317,7 @@ export function SettingsForm({ initial }: Props) { className="rounded border border-border bg-card px-2 py-1 text-sm" > <option value="basic">Basic — serial build queue</option> - <option value="docker"> - Docker — isolated parallel builds (follow-up) - </option> + <option value="docker">Docker — isolated parallel builds</option> </select> </label> <Field diff --git a/package.json b/package.json @@ -5,6 +5,7 @@ "license": "MIT", "type": "module", "scripts": { + "archilyzer": "pnpm --filter yt-dlp-transcript-common exec tsx bin/archilyzer.ts", "build:index": "pnpm --filter yt-dlp-transcript-common exec tsx bin/archilyzer.ts index", "sync:tick": "pnpm --filter yt-dlp-transcript-common exec tsx bin/archilyzer.ts sync tick", "build:export": "pnpm --filter export run build",