unsloth_cli/tests had no CI at all. unsloth_cli/** was a paths trigger and a
ruff target, so the Backend CI job already fired on CLI changes but never ran
these 673 tests, which cover the studio launcher, the pre-exposure gate and the
auth secret writers. Four had been failing on main unnoticed.
Two were stale rather than broken code:
- test_studio_default_exposes_parallel_option pinned the plain --parallel
default to 1, but #7455 deliberately moved _PARALLEL_DEFAULT_PLAIN to 4 so a
new chat does not queue behind the previous one. Assert against the constant
so the two cannot drift again.
- test_reexec_forwards_api_only expected --secure --api-only to re-exec. The
pre-exposure gate now refuses that combination, because api-only serves no
login page and the bootstrap deadline does not apply, so a seeded password
could never be changed. Drop the case and assert the refusal instead.
Two only passed when a built frontend dist happened to be present, which it is
not in a fresh clone or on a runner. Both reach a public-launch path where the
missing-dist gate exits first, so they never got to the backend check and the
run_server call they are about. Stub _find_frontend_dist the way their siblings
already do.
Own step rather than folding into the tests/ discovery: pyproject's testpaths is
tests/, and this suite needs no PYTHONPATH or CUDA spoof, importing neither
unsloth nor torch. Its deps are already installed by the job (pydantic and
uvicorn, which brings click, via studio.txt; pyyaml explicitly).