Symptom
On Windows with Docker Desktop's WSL2 backend (the default), doctor fails a too-small machine with:
✖ Not ready — not enough free compute to start a training.
Free some up, or raise the machine's allocation in Docker Desktop → Resources.
That remedy is wrong on WSL2: Docker Desktop has no Resources → Memory slider there — the VM's memory is governed by %UserProfile%\.wslconfig ([wsl2] memory=…) + wsl --shutdown. A field user (2026-07-24) followed the hint into Docker Desktop and found nothing to raise; the machine stayed "not ready" until the per-run allocation was lowered instead.
Where
internal/cli/doctor.go:394-397 — the roll-up hardcodes the Docker Desktop remedy, unconditionally (no OS/backend guard). Same phrasing again at doctor.go:373 (stuck-Pending pods).- The underlying verdict is fine:
internal/doctor/doctor.go:567-638 (checkNodeFit) correctly compares RESOURCE_REQUESTS per Ready node against allocatable. - Precedent already in-repo:
internal/cli/resources_set.go:490-492 gates the equivalent advice behind runtime.GOOS == "darwin". - There is no WSL/backend detection anywhere in the repo (zero hits for
wsl/wslconfig across .go/.sh/.ps1/.md).
Fix
Minimal, detection-free version: on runtime.GOOS == "windows", replace the remedy with both levers, e.g.
Free some up, or give Docker more memory: WSL2 backend (default) → set [wsl2] memory=… in %UserProfile%\.wslconfig, then wsl --shutdown and restart Docker Desktop; Hyper-V backend → Docker Desktop → Settings → Resources.
On darwin keep the current text; on linux drop the Docker Desktop reference. (Optional follow-up: actual backend detection — e.g. docker info OperatingSystem/KernelVersion contains "WSL2" — to print only the applicable lever.)
Apply the same treatment to both sites (doctor.go:397, doctor.go:373).
Acceptance
Symptom
On Windows with Docker Desktop's WSL2 backend (the default),
doctorfails a too-small machine with:That remedy is wrong on WSL2: Docker Desktop has no Resources → Memory slider there — the VM's memory is governed by
%UserProfile%\.wslconfig([wsl2] memory=…) +wsl --shutdown. A field user (2026-07-24) followed the hint into Docker Desktop and found nothing to raise; the machine stayed "not ready" until the per-run allocation was lowered instead.Where
internal/cli/doctor.go:394-397— the roll-up hardcodes the Docker Desktop remedy, unconditionally (no OS/backend guard). Same phrasing again atdoctor.go:373(stuck-Pending pods).internal/doctor/doctor.go:567-638(checkNodeFit) correctly comparesRESOURCE_REQUESTSper Ready node against allocatable.internal/cli/resources_set.go:490-492gates the equivalent advice behindruntime.GOOS == "darwin".wsl/wslconfigacross .go/.sh/.ps1/.md).Fix
Minimal, detection-free version: on
runtime.GOOS == "windows", replace the remedy with both levers, e.g.On darwin keep the current text; on linux drop the Docker Desktop reference. (Optional follow-up: actual backend detection — e.g.
docker infoOperatingSystem/KernelVersion contains "WSL2" — to print only the applicable lever.)Apply the same treatment to both sites (
doctor.go:397,doctor.go:373).Acceptance
.wslconfig(and never point at a slider that doesn't exist as the only option).