Depending on yt-dlp[deno] puts a deno binary in the environment's bin
directory, and the code assumed yt-dlp would then find it. That only holds
while that directory is on PATH, which is true under `uv run` in the checkout
and false once the package is installed as a tool: only the console script is
exposed. Installed that way, doctor reported "only nvm node ... invisible to
cron" while a 95 MB deno sat unused in the tool's own bin, and YouTube
extraction was one nvm-less environment away from failing outright -- the exact
failure the deno dependency was added to prevent.
Runtimes are now resolved against sys.prefix before PATH and passed to yt-dlp
as an absolute path, which its js_runtimes config documents. That also removes
the special case that made node the only runtime resolved to a real path.
The doctor tests hid this: they faked absence by patching shutil.which alone,
so the real deno was found regardless and one of them passed for the wrong
reason. They now hide it from both lookups.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>