commit 4659a54b185f56e5742749099c8751d74e1a6df8
parent 30fdeae2d87bf6173f1aafe98c31b61be1b6c5bc
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Tue, 6 Oct 2026 08:56:39 -0400
doctor: YTDLP_AUTO_UPDATE is read with the entrypoint's exact-match rule (1, true, yes, on as written); RUNNING_IN_DOCKER says so
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Diffstat:
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/RUNNING_IN_DOCKER.md b/RUNNING_IN_DOCKER.md
@@ -308,7 +308,9 @@ For the Vulkan image it names a parakeet GGUF instead — see
An image pins yt-dlp at build time, and a stale yt-dlp is the most common reason
downloads suddenly start failing. Set `YTDLP_AUTO_UPDATE=1` in `.env` and each
-boot self-updates it. Or, once:
+boot self-updates it. Exactly `1`, `true`, `yes` or `on` turns it on, as written
+— `TRUE` or `Yes` does not (the entrypoint and `archilyzer doctor` read it the
+same way). Or, once:
```sh
docker compose exec editor yt-dlp -U
diff --git a/common/bin/doctor.test.ts b/common/bin/doctor.test.ts
@@ -671,6 +671,11 @@ test("downloader: a host's yt-dlp is a note; the image's is ok; an override says
assert.equal(find(r, "downloader", "yt-dlp")?.status, "warn");
assert.match(find(r, "downloader", "yt-dlp")!.detail, /YTDLP_AUTO_UPDATE is set, and the entrypoint never self-updates an override/);
assert.equal(r.ok, true, "a warning, never a failure");
+ // The entrypoint's exact-match rule: `TRUE` (or ` 1`) is off there, so here.
+ for (const off of ["TRUE", " 1", "0", ""]) {
+ r = await run(c, { ARCHILYZER_IMAGE_YTDLP: image, YTDLP_AUTO_UPDATE: off });
+ assert.equal(find(r, "downloader", "yt-dlp")?.status, "ok", JSON.stringify(off));
+ }
// An override that does not run.
(c.paths as { ytdlpBin: string }).ytdlpBin = broken;
r = await run(c, { ARCHILYZER_IMAGE_YTDLP: image });
diff --git a/common/bin/doctor.ts b/common/bin/doctor.ts
@@ -391,7 +391,9 @@ export async function collectDoctorReport(deps: DoctorDeps): Promise<DoctorRepor
const imageYtdlp = env.ARCHILYZER_IMAGE_YTDLP?.trim() || null;
const resolved = onPath(paths.ytdlpBin, env.PATH) ?? paths.ytdlpBin;
const origin = imageYtdlp === null ? "host" : sameFile(resolved, imageYtdlp) ? "image" : "override";
- const autoUpdate = /^(1|true|yes|on)$/i.test(env.YTDLP_AUTO_UPDATE?.trim() ?? "");
+ // The entrypoint's rule exactly (a shell `case`: 1, true, yes or on, as
+ // written — `TRUE` is off there, so it is off here).
+ const autoUpdate = ["1", "true", "yes", "on"].includes(env.YTDLP_AUTO_UPDATE ?? "");
// The shared probe counts any output as presence (an odd version flag is
// still a binary); "does it RUN" is asked here by exit status — the
// from-source wrapper with no checkout mounted prints a sentence and exits