Three valid findings from the 06-22 Codex review:
1. provision_llama_cuda.sh: when $LLAMA_DIR holds a .git checkout (a prior CPU
source build), the whole-dir backup was skipped, so a failed CUDA rebuild's
'rm -rf build' destroyed the working CPU server with nothing to restore --
leaving NO llama-server despite the 'keeps the existing server' promise (a
thermal shutdown mid-build is a real failure mode on this hardware). Back up
build/bin before the rebuild and restore it on total failure; idempotent and
self-cleaning (never overwrites a freshly built server). Verified both paths.
2. uninstall.ps1: 'fuser -k 8888/tcp' killed ANY listener on 8888 (Jupyter et al.
default to it), not just Studio. Now only kills a PID whose /proc/cmdline is
under /root/.unsloth -- matching the adjacent pkill scoping.
3. setup.sh: the 'defer to background CUDA build' branch fired even on a direct
in-WSL 'unsloth studio update', where install.ps1 never launched a background
builder -- so the footer claimed a build was running while nothing built. Gate
it on UNSLOTH_WSL_LLAMA_DEFERRED=1 (set only by install.ps1, and already read
elsewhere in setup.sh); a direct run now falls through to a real CPU build.
bash -n + PS parse clean; the common install.ps1 WoA path (prebuilt success,
deferred flag set) is unaffected.