unsloth/.github/scripts
danielhanchen d87c998a84 Judge the install the way preflight does, and reap the whole probe group
Read desktop-capabilities the way the desktop reads it. preflight/managed.rs
pipes stdout and sends stderr to /dev/null (managed.rs:358), then hands the
whole stdout buffer to serde_json (managed.rs:414). The probe concatenated both
streams and scanned to the first brace, so a single diagnostic line on stderr
made json.loads raise on the trailing text, studio_install_ok stayed "absent",
and a broken backend was reported FALSE_READY over an install the real app
parses, sees as incomplete, and offers to repair. That fails a valid recovery
change for a reason that exists only in the probe. stdout and stderr are now
captured separately and stdout is parsed strictly; a payload that does not parse
counts as repair evidence, matching the Stale the desktop reports when the
capability probe returns nothing (managed.rs:521).

A booting backend alone is not a finished install. The manifest is written last
(install_python_stack.py:3255), so a kill after "studio deps" but before it, the
data-designer leg, leaves a venv whose backend boots while desktop-capabilities
still reports studio_install_ok=false and preflight reports Stale
(managed.rs:445). Calling that HEALTHY skipped the re-run step, so the leg
asserted nothing beyond a marker appearing and never exercised the version fast
path that is supposed to clear an incomplete install, which is the half of the
bug that strands the user. HEALTHY now requires both.

Escalate to the process group after reaping the probe's backend. reap() returned
as soon as proc.wait() succeeded, and the leader exits promptly on SIGTERM while
a uvicorn worker does not, so the SIGKILL iteration was skipped and that worker
kept the port and the venv open while the repair step reinstalled underneath it.
It also read os.getpgid(proc.pid) after the reap, which raises. The pgid is now
captured up front and SIGKILL always goes to the group, the same escalation
interrupt-install.sh:94 makes. A heartbeat experiment left the group alive with
the old sequence and empty with the new one.

Trigger the workflow on pyproject.toml. Every leg installs the checkout with
--local, so that file decides the unsloth console script and the core
dependencies the probe leans on: -h and desktop-capabilities only survive a torn
install because typer/click/rich are declared there. No other install workflow
interrupts the installer, so such a change would otherwise merge without a
single leg running.
2026-07-28 22:01:16 +00:00
..
agent-guides-drive.sh Give opencode real timeout headroom in Local Agent Guides CI (#7235) 2026-07-19 06:08:54 -07:00
agent-guides-install.sh CLI: Rename unsloth connect to unsloth start (#6613) 2026-07-03 08:17:27 -07:00
assert-llama-loads.sh Replace standalone Studio wording with Unsloth (#7221) 2026-07-19 00:47:04 -07:00
assert-prompt-cache.sh Replace standalone Studio wording with Unsloth (#7221) 2026-07-19 00:47:04 -07:00
ci-connect-prompt.txt Add Local Agent Guides CI (#6547) 2026-06-22 04:21:48 -07:00
ci-min-system-prompt.txt Add Local Agent Guides CI (#6547) 2026-06-22 04:21:48 -07:00
hf-download-with-retry.sh Replace standalone Studio wording with Unsloth (#7221) 2026-07-19 00:47:04 -07:00
interrupt-install.ps1 Run the Windows legs as the desktop does, and judge repair by what preflight reads 2026-07-28 20:11:35 +00:00
interrupt-install.sh Kill the group, and stop the probe blocking on a full pipe 2026-07-28 19:24:53 +00:00
interrupted_install_probe.py Judge the install the way preflight does, and reap the whole probe group 2026-07-28 22:01:16 +00:00
run-studio-permission-browser.sh Studio: clarify tool permission controls (#7181) 2026-07-20 09:55:39 -03:00
serve-unsloth-run.sh CLI: Rename unsloth connect to unsloth start (#6613) 2026-07-03 08:17:27 -07:00