unsloth/tests/studio
Daniel Han 827d25931b
Stop 19 test files racing on one PowerShell startup cache (#9371)
* Stop 19 test files racing on one PowerShell startup cache

Backend CI run 32341628757 on `1c3dde199` finished `284 failed, 8498 passed`. Every
one of the 284 was a pwsh subprocess ending `died with <Signals.SIGABRT: 6>`, across
19 files that all read as Windows-installer regressions. None of them were. 222 of
the aborts land inside a two-second window, 88 at 07:09:30 and 133 at 07:09:31,
which is a mass kill of every live pwsh rather than independent per-test flakiness.

The cause
------------------------------------------------------------------------
Every `-NonInteractive` startup reads and rewrites an ~83 KB
`$XDG_CACHE_HOME/powershell/StartupProfileData-NonInteractive`, and XDG_CACHE_HOME
defaults to `$HOME/.cache`. Under `-n 4` all four xdist workers share one HOME, so
the whole job's pwsh processes race on one file and a startup that deserialises a
half-written one dies before it reaches our script. `Stack overflow.` is .NET's
failfast, which cannot unwind a blown stack, so it prints one line and calls
abort(); that is the SIGABRT (PowerShell/PowerShell#24461).

Measured twice, independently, 4000 startups per arm:

  run 1  shared cache dir     7/4000 died  {-11: 3, -6: 4}
         private cache dirs   0/4000
  run 2  shared cache dir    11/4000 died  {-11: 10, -6: 1}
         private cache dirs   0/4000

Three distinct crash shapes appeared, and each names the torn file rather than our
scripts: `Stack overflow.`, `System.IO.FileLoadException: The given assembly name`,
and `System.ArgumentException: String cannot have zero length.` 18 deaths in 8000
shared startups, 0 in 8000 private.

CI agrees from the other direction. Of the pwsh-heavy files in that run, exactly one
had zero failures, tests/test_windows_amd_gpu_scan_fallback.py, and it is the only
one that hands its child a private HOME, across roughly 80 startups where the run's
own rate predicts about 16 failures.

What is NOT established
------------------------------------------------------------------------
Neither experiment reproduces CI's rate. Roughly 20% of pwsh startups died there
against 0.2 to 0.3% here, and at CI's actual `-n 4` on this box I measured 0/1200 in
both arms: the race needed 48-way concurrency before it appeared at all. The likely
reason is that four workers on a 4-core runner are in real contention while four
threads on a 192-core box almost never overlap in the critical section, but that is
reasoning and not a measurement, so treat the mechanism as proven and the magnitude
as unexplained. That is also why this does not stop at removing the shared file.

Three layers, in order
------------------------------------------------------------------------
1. Remove the contended resource. One cache directory per xdist worker, fresh per
   session. Workers run their tests one at a time, so within a worker the startups
   stay sequential and the cache still does its job warm; across workers the
   directories are disjoint and there is nothing left to race on. Fresh rather than a
   stable path, because a cache torn by an earlier run would otherwise poison every
   later session on the same box.
2. Retry a run that produced no verdict. Three attempts, unslept, because the trigger
   is process startup rather than a resource that frees up.
3. Attribute what is left. A crash raises PwshInterpreterCrash naming the interpreter.

Layer 1 is the fix; 2 and 3 exist because of the unexplained magnitude above.

Deliberately NOT done: bounding pwsh concurrency with a lock, or giving up `-n 4`.
The workflow records 806.1s to 219.7s from that flag, and the contended resource can
be removed rather than rationed.

The rule that keeps this honest
------------------------------------------------------------------------
A signal is not a verdict, so retrying it papers over nothing: the script never ran
to its end. A normal exit is returned untouched on the first attempt whatever its
code, so a pwsh that runs and gives the WRONG answer still fails with its own
message. Getting that second half wrong would turn this into a way to retry real
regressions into green, which is worse than the bug it fixes, so both directions are
executed in tests/studio/test_pwsh_interpreter_crash_attribution.py against a real
SIGABRT rather than reviewed.

Mutation-tested: relaxing the crash test from `returncode < 0` to `returncode != 0`
fails test_a_clean_run_with_the_wrong_answer_still_fails_with_its_own_message and
test_a_clean_run_is_not_retried, which are exactly the two that guard that direction.

This also generalises `_run_pwsh` from tests/studio/test_install_phase_timing.py,
added earlier today for a second, signal-free shape: pwsh printing its "The
PowerShell process will exit" banner and exiting normally with empty stdout. That one
cannot be seen in the exit status, so it stays a text match.

Verified
------------------------------------------------------------------------
tests/python/test_windows_xformers_installer.py, tests/studio/test_install_phase_timing.py,
tests/studio/install/ and the new guard: 2635 passed, 3 skipped.
Guard alone: 5 passed.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Drop the subprocess import the pwsh conversion left behind

Source lint's import-hoist check is right: every subprocess.run in
test_windows_xformers_installer.py became run_pwsh, so `import subprocess` has no
references left except the one inside a comment explaining why run_pwsh is used
instead. Its wording names the shape exactly -- "was used before, now unused
(references re-pointed)" -- which is what a mechanical call-site rewrite leaves
behind.

Swept the other 18 converted files the same way with an AST pass rather than by
eye. This was the only real one: the remaining hits are `from __future__ import
annotations`, which every such scan reports, and a PropertyMock in
test_rocm_support.py that is present on main unchanged.

42 passed.

* Suppress the core dump on the forged SIGABRT

tests/test_deliberate_crashes_suppress_cores.py caught this: the abort child had no
PR_SET_DUMPABLE=0, so each of these aborts piped a multi-MB core to apport before the
child could be reaped. The guard is right and its message names the fix.

The child still exits -6 and PR_GET_DUMPABLE reads 0, so all five verdicts are
unchanged. Linux-only and non-fatal elsewhere: Windows has no CDLL(None) and pipes no
core, so arming it there would trade a no-op for a lost test.

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: danielhanchen <unslothai@gmail.com>
2026-08-20 04:22:41 -07:00
..
fixtures Source the update popup's release notes from the GitHub releases (#8352) 2026-08-11 00:28:01 -07:00
install Stop 19 test files racing on one PowerShell startup cache (#9371) 2026-08-20 04:22:41 -07:00
load_freeze Put the event-loop latency bound between the two things it separates (#9077) 2026-08-17 02:19:44 -07:00
_node_harness.py fix(studio): refresh token count after model load (#7450) (#7453) 2026-08-03 06:22:49 -07:00
_playwright_robust.py Scroll into view before a forced click (#9291) 2026-08-19 06:17:48 -07:00
appimage_media_pipeline_probe.py Desktop: ship a complete Linux AppImage (#9113) 2026-08-19 10:09:29 -03:00
appimage_model_download_webdriver.py Desktop: ship a complete Linux AppImage (#9113) 2026-08-19 10:09:29 -03:00
appimage_portability_smoke.py Desktop: ship a complete Linux AppImage (#9113) 2026-08-19 10:09:29 -03:00
appimage_test_support.py Desktop: ship a complete Linux AppImage (#9113) 2026-08-19 10:09:29 -03:00
mac_capability_verdict_smoke.py Studio: hold the Mac capability verdict while an MLX repair can still overturn it (#8152) 2026-08-08 06:47:11 -07:00
playwright_chat_autoscroll.py Studio CI: make a failing browser smoke say why, and stop it skipping the build gates (#8983) 2026-08-18 04:42:41 -07:00
playwright_chat_ime_i18n.py Read the IME re-arm flush off the live composer (#8401) 2026-08-11 03:59:01 -07:00
playwright_chat_ui.py Scroll into view before a forced click (#9291) 2026-08-19 06:17:48 -07:00
playwright_extra_ui.py Scroll into view before a forced click (#9291) 2026-08-19 06:17:48 -07:00
playwright_heavy_thread.py Say both load fallbacks when both fire, and repair the two suites that guard it (#9189) 2026-08-18 20:58:30 -07:00
playwright_image_download_cancel_retry.py Studio: remove obsolete onboarding and model code (#8453) 2026-08-11 23:45:43 -07:00
playwright_image_model_footprint.py Studio: remove obsolete onboarding and model code (#8453) 2026-08-11 23:45:43 -07:00
playwright_loaded_models_indicator.py Studio: remove obsolete onboarding and model code (#8453) 2026-08-11 23:45:43 -07:00
playwright_mac_tab_capabilities.py Fix CI on main: stale test doubles, a stale router stub, and two source defects (#8956) 2026-08-16 02:02:47 -07:00
playwright_model_config.py Re-type the native default, not whatever the input happens to show (#9282) 2026-08-19 05:08:17 -07:00
playwright_research_freeze.py Studio CI: make a failing browser smoke say why, and stop it skipping the build gates (#8983) 2026-08-18 04:42:41 -07:00
playwright_settings_tabs.py Drain the sampling debounce long enough for the node CI actually runs (#9332) 2026-08-19 23:55:01 -07:00
playwright_stream_pacing.py Studio: keep the streaming render harness the perf PRs kept rebuilding (#8969) 2026-08-17 22:38:56 -07:00
playwright_strip_ansi_smoke.py Studio CI: make a failing browser smoke say why, and stop it skipping the build gates (#8983) 2026-08-18 04:42:41 -07:00
playwright_tauri_python_tool_images.py Desktop: block HTTP loopback requests from untrusted images (#8046) 2026-08-07 18:56:26 -03:00
playwright_thread_scoped_settings.py studio: keep each chat's composer pills and settings with the chat (#8686) 2026-08-16 00:13:04 -07:00
playwright_thread_weight.py Studio: make the chat thread stop getting slower as it fills (#8992) 2026-08-18 06:19:05 -07:00
playwright_train_pickers.py feat(studio): rework train page setup flow (#7633) 2026-08-06 04:26:05 -07:00
playwright_ui_font_scale.py Studio: load the settings tab panels when they are shown, not at launch (#8966) 2026-08-18 00:10:58 -07:00
playwright_update_banner_layout.py Studio: stop the overlay rail going click-through while it is scrolling (#9150) 2026-08-18 01:41:05 -07:00
run_real_mlx_smoke.py Replace standalone Studio wording with Unsloth (#7221) 2026-07-19 00:47:04 -07:00
sim_thread_settings_portability.py studio: keep each chat's composer pills and settings with the chat (#8686) 2026-08-16 00:13:04 -07:00
studio_api_smoke.py tests: read checked-in files as UTF-8 instead of the platform default (#7438) 2026-07-26 23:31:56 -07:00
test_about_tab_xpu_runtime_contract.py Add Intel Arc GPU detection and XPU PyTorch install to Windows installer (#7706) 2026-08-04 03:03:10 -07:00
test_absorbed_lanes_still_run.py Run two short jobs as background lanes of Lint CI, not on their own runners (#9176) 2026-08-18 05:27:55 -07:00
test_agent_guides_verdicts.py Support OpenCode V2 in unsloth start (#9275) 2026-08-20 04:42:41 +02:00
test_amd_name_arch_r9700.ps1 Detect the Radeon AI PRO R9700 (gfx1201): it carries neither 9070 nor 9080, so name inference found nothing (#8573) 2026-08-12 17:35:41 -07:00
test_amd_venv_repair_loop.ps1 Restore the #8335 WMI guard anchor after the RDNA1 wrapper (#8684) 2026-08-13 06:16:22 -07:00
test_application_control_cli_fallback.ps1 Windows: stop depending on the generated unsloth.exe console script (#8592) 2026-08-13 07:54:51 -07:00
test_apt_steps_are_bounded.py Ask whether Playwright system libraries are missing before installing them (#9273) 2026-08-19 02:37:33 -07:00
test_audio_snapshot_download_targets.py studio: add audio page with tts/stt create tab, train tab, and openai audio endpoints (#7984) 2026-08-11 04:47:26 -07:00
test_auth_form_input_count.py Studio: add a keyboard shortcuts page and make the existing chords rebindable (#8948) 2026-08-19 06:11:21 -07:00
test_autoload_hf_token_preflight.py Studio: support Vulkan GPU selection and explicit Vulkan installation (#7188) 2026-07-29 06:24:58 -07:00
test_autoscroll_harness_contract.py Say both load fallbacks when both fire, and repair the two suites that guard it (#9189) 2026-08-18 20:58:30 -07:00
test_backend_ci_matrix.py One interpreter leg on a pull request, and a floor lint that reads more than syntax (#9100) 2026-08-17 18:48:26 -07:00
test_backend_ci_parallel_isolation.py Ask the repo, not sys.path, whether a stubbed name is third-party (#9133) 2026-08-17 18:43:27 -07:00
test_banner_update_delay_override.py Stop the banner layout suite waiting out the update timer on every boot (#9105) 2026-08-17 18:48:01 -07:00
test_cache_budget_discipline.py Give the Colab freeze a pip cache, like the job beside it already has (#9276) 2026-08-19 03:22:16 -07:00
test_cached_model_path_selection.py Feat/model picker per model config v2 (#7207) 2026-07-20 22:53:22 -07:00
test_cancel_atomicity.py feat(studio): run chats in parallel in the Chat tab (#7455) 2026-07-28 04:40:38 -07:00
test_cancel_id_wiring.py tests: read checked-in files as UTF-8 instead of the platform default (#7438) 2026-07-26 23:31:56 -07:00
test_chat_autoload_failure_gate.py Stub the two helpers the sliced harnesses started importing (#9342) 2026-08-19 22:06:51 -07:00
test_chat_preset_builtin_invariants.py Run the repo CPU test suite on all four runner cores (#9019) 2026-08-16 21:46:01 -07:00
test_chat_preset_load_config.py feat(studio): adjustable llama-server parallel slots from the web UI (#7447) 2026-07-28 18:03:28 -07:00
test_chat_prompt_variables.py tests: read checked-in files as UTF-8 instead of the platform default (#7438) 2026-07-26 23:31:56 -07:00
test_chat_response_details_ui_contract.py Studio: center sheet header close buttons (#7957) 2026-08-06 07:42:12 -07:00
test_chat_thinking_compact_layout.py Studio: drive UI font size through a typography scale instead of the root font size (#7359) 2026-07-23 01:26:56 -07:00
test_chat_thread_read_consolidation.py Studio: optimize chat sends by reusing thread metadata (#8382) 2026-08-11 03:42:59 -07:00
test_chat_thread_title_cas.py Studio: keep chat titles whole so a wider sidebar shows more of them (#8078) 2026-08-07 07:09:37 -07:00
test_chat_title_generation.py Fix three frontend contract tests that main is currently red on (#8703) 2026-08-13 07:27:38 -07:00
test_chat_ui_shards_cover_everything.py Split Chat UI Tests into four shards on the Studio boundaries (#9132) 2026-08-17 18:49:10 -07:00
test_ci_shell_suite_coverage.py Anchor the host-defaults assertions and take the file off the skip list (#7774) 2026-08-03 02:42:26 -07:00
test_cli_hsa_spoof_launch_7331.py Route spoofed Strix Halo GPUs to the AMD per-gfx index (#8480) 2026-08-12 02:02:02 -07:00
test_cli_repo_variant.py Reduce and tighten comments and docstrings across the test suite (#6429) 2026-06-18 01:07:09 -07:00
test_cli_run_alias.py tests: read checked-in files as UTF-8 instead of the platform default (#7438) 2026-07-26 23:31:56 -07:00
test_cli_studio_defaults.py tests: read checked-in files as UTF-8 instead of the platform default (#7438) 2026-07-26 23:31:56 -07:00
test_cli_studio_stop_windows.py Studio: Stop every running Unsloth server, not just the last one recorded (#7577) 2026-07-29 01:56:13 -07:00
test_click_forced.py Scroll into view before a forced click (#9291) 2026-08-19 06:17:48 -07:00
test_compact_dropdown_submenus.py Studio: UI font size scales all text consistently without moving layout (#7355) 2026-07-23 00:44:42 -07:00
test_compile_caches_are_per_worker.py Bundle Unsloth GGUF CI onto one runner, matching Windows and macOS (#9139) 2026-08-17 21:13:01 -07:00
test_composer_rtl_bidi_attribute.py tests: read checked-in files as UTF-8 instead of the platform default (#7438) 2026-07-26 23:31:56 -07:00
test_deep_research_frontend_contract.py Allow unlimited Deep Research time budgets (#9078) 2026-08-19 05:01:10 -07:00
test_desktop_reliability_frontend_contract.py Cover the Audio header in the macOS drag-region contract test (#8718) 2026-08-14 06:05:27 -07:00
test_diffusion_gpu_layers_contract.py Studio: pin GGUF to CPU on virtualised Metal, clamp parallel slots under MTP (#7717) 2026-08-03 05:05:00 -07:00
test_diffusion_train_settings_layout_contract.py Studio: stop the Images Train settings columns overlapping (#7895) 2026-08-05 05:50:52 -07:00
test_export_output_path_contract.py tests: read checked-in files as UTF-8 instead of the platform default (#7438) 2026-07-26 23:31:56 -07:00
test_first_turn_thread_identity.py Support independent prompt queues across parallel chats (#7629) 2026-08-04 20:17:19 -03:00
test_frontend_dep_removal.py tests: read checked-in files as UTF-8 instead of the platform default (#7438) 2026-07-26 23:31:56 -07:00
test_frontend_dist_cache.py Stop 13 jobs rebuilding the same frontend on every commit (#9375) 2026-08-20 04:22:14 -07:00
test_generation_length_ui_contract.py Studio: prevent empty responses after model thinking (#7418) 2026-07-24 17:01:12 -07:00
test_gguf_smoke_phases_stay_independent.py Bundle Unsloth GGUF CI onto one runner, matching Windows and macOS (#9139) 2026-08-17 21:13:01 -07:00
test_gpu_inference_smoke.py Feat/model picker per model config v2 (#7207) 2026-07-20 22:53:22 -07:00
test_hardware_dispatch_matrix.py Studio: name what is keeping Train off on Apple Silicon (#8303) 2026-08-10 06:40:22 -07:00
test_heavy_thread_gap_contract.py Studio: measure where a heavy thread stalls, across engines and thread size (#9016) 2026-08-18 04:33:11 -07:00
test_heavy_thread_harness_contract.py Repair the tests main is currently red on (#9192) 2026-08-19 05:03:46 -07:00
test_heavy_thread_measurement_integrity.py Repair the tests main is currently red on (#9192) 2026-08-19 05:03:46 -07:00
test_hf_token_validation_tick_contract.py fix(studio): harden training setup, lifecycle, and audio loading (#8103) 2026-08-08 01:45:40 -07:00
test_indicator_browsers_run_in_parallel.py Run the three loaded-models-indicator engines at once (#9158) 2026-08-18 00:53:30 -07:00
test_inference_smoke_http_diagnostics.py Allowlist huggingface-hub's http_backoff loop so Security audit stops failing (#9252) 2026-08-18 22:02:31 -07:00
test_inference_status_runtime_fields_contract.py Studio: stop /api/inference/status raising on every loaded GGUF (#8074) 2026-08-06 20:18:11 -07:00
test_install_phase_timing.py Stop 19 test files racing on one PowerShell startup cache (#9371) 2026-08-20 04:22:41 -07:00
test_install_rollback_lifecycle.ps1 Studio: route every Windows installer line through the UTF-8 stdout sink (#8148) 2026-08-08 06:47:03 -07:00
test_installer_av_shapes.py Windows: stop compiling C# for colour on hosts that already render it (#8767) 2026-08-14 04:44:37 -07:00
test_intel_registry_fallback.ps1 Add Intel Arc GPU detection and XPU PyTorch install to Windows installer (#7706) 2026-08-04 03:03:10 -07:00
test_is_mlx_dispatch_gate.py tests: read checked-in files as UTF-8 instead of the platform default (#7438) 2026-07-26 23:31:56 -07:00
test_legacy_chat_title_repair.py Studio: keep chat titles whole so a wider sidebar shows more of them (#8078) 2026-08-07 07:09:37 -07:00
test_llama_cpp_wall_clock_cap.py tests: read checked-in files as UTF-8 instead of the platform default (#7438) 2026-07-26 23:31:56 -07:00
test_locale_root_direction_contract.py Replace standalone Studio wording with Unsloth (#7221) 2026-07-19 00:47:04 -07:00
test_mac_bundled_job_phases.py Run the Mac GGUF inference phases in the Mac UI job, not on a second runner (#9213) 2026-08-18 21:00:06 -07:00
test_mac_host_offload_optin.py Run the Mac GGUF inference phases in the Mac UI job, not on a second runner (#9213) 2026-08-18 21:00:06 -07:00
test_mac_tab_capability_warm_window.py Studio: stop the macOS launcher killing a warming backend, and the Mac tab blackout (#8076) 2026-08-07 02:45:06 -07:00
test_macos_slots_per_commit.py Move the two version-incidental macOS jobs onto the emptier pool (#9277) 2026-08-19 03:21:25 -07:00
test_main_runs_survive_merge_bursts.py Let every main run finish instead of cancelling it before it starts (#9082) 2026-08-17 03:59:13 -07:00
test_mlx_training_worker_behaviors.py feat(studio): rework train page setup flow (#7633) 2026-08-06 04:26:05 -07:00
test_model_picker_catalog_first_paint.py studio: add audio page with tts/stt create tab, train tab, and openai audio endpoints (#7984) 2026-08-11 04:47:26 -07:00
test_model_picker_contracts.py Say both load fallbacks when both fire, and repair the two suites that guard it (#9189) 2026-08-18 20:58:30 -07:00
test_multi_chat_prompt_queue_contract.py Repair the prompt-queue contract test against the queueing refactor (#9026) 2026-08-16 20:21:47 -07:00
test_new_chat_context_recount.py Stub the two helpers the sliced harnesses started importing (#9342) 2026-08-19 22:06:51 -07:00
test_no_test_shadows_another.py Bundle Unsloth GGUF CI onto one runner, matching Windows and macOS (#9139) 2026-08-17 21:13:01 -07:00
test_node_decision.ps1 Studio: skip redundant packaged frontend rebuilds (#8326) 2026-08-11 03:02:17 -07:00
test_node_probe_guard.ps1 Studio: use an isolated Node.js for the frontend build instead of replacing the system Node/npm (#6533) 2026-06-21 21:17:29 -07:00
test_nsis_signed_plugins_contract.py Keep the signed NSIS plugin directory across a bundler upgrade, and retry the vc_redist fetch (#7841) 2026-08-04 07:44:16 -07:00
test_overlay_layering.py Keep the two floating panels out of each other's corner (#8249) 2026-08-11 05:57:13 -07:00
test_path_probe_access_denied.ps1 Studio: route every Windows installer line through the UTF-8 stdout sink (#8148) 2026-08-08 06:47:03 -07:00
test_pdf_qa_recipe_contract.py feat(studio): rework train page setup flow (#7633) 2026-08-06 04:26:05 -07:00
test_pester_bootstrap_hardening.py Give the small Windows checks one box per image instead of one box per check (#9143) 2026-08-17 21:13:48 -07:00
test_playwright_install_avoids_with_deps.py Drain the sampling debounce long enough for the node CI actually runs (#9332) 2026-08-19 23:55:01 -07:00
test_playwright_server_lifecycle.py Say both load fallbacks when both fire, and repair the two suites that guard it (#9189) 2026-08-18 20:58:30 -07:00
test_playwright_suites_run_in_ci.py Studio: make the chat thread stop getting slower as it fills (#8992) 2026-08-18 06:19:05 -07:00
test_pre_turing_cap.ps1 Installer: select CUDA wheels that cover the host's GPUs (#7814) 2026-08-04 06:55:29 -07:00
test_provider_backfill_awaits_batch.py tests: follow the remote-connection contract through its refactor (#8467) 2026-08-13 04:56:47 -07:00
test_psmodulepath_normalization.ps1 studio setup: let Windows PowerShell load its own Security module (#7692) 2026-08-01 03:05:44 -07:00
test_pwsh_interpreter_crash_attribution.py Stop 19 test files racing on one PowerShell startup cache (#9371) 2026-08-20 04:22:41 -07:00
test_rdna1_unsupported_message_8529.ps1 Keep the #8577 AMD peer guards message-only, and fix the table drift they exposed (#8689) 2026-08-13 07:03:06 -07:00
test_remote_connection_models_contract.py tests: follow the remote-connection contract through its refactor (#8467) 2026-08-13 04:56:47 -07:00
test_resolve_cuda_toolkit.ps1 Studio: route every Windows installer line through the UTF-8 stdout sink (#8148) 2026-08-08 06:47:03 -07:00
test_reveal_file_manager.py add a way to open a chat's sandbox folder from the ui (#8661) 2026-08-13 17:09:20 -07:00
test_reveal_file_manager_matrix.py add a way to open a chat's sandbox folder from the ui (#8661) 2026-08-13 17:09:20 -07:00
test_run_windows_entry_point.py Windows: stop depending on the generated unsloth.exe console script (#8592) 2026-08-13 07:54:51 -07:00
test_settings_compact_overflow_contract.py feat(studio): add settings-managed remote access (#7875) 2026-08-06 07:53:44 -07:00
test_settings_smoke_covers_every_tab.py Drain the sampling debounce long enough for the node CI actually runs (#9332) 2026-08-19 23:55:01 -07:00
test_setup_pin_stale.ps1 install: let UNSLOTH_TORCH_INDEX_FAMILY / _URL override CUDA wheel detection (#6692) 2026-07-20 00:58:52 -07:00
test_setup_xpu_runtime_prereport.ps1 Windows installer: fix single-AMD-GPU detection and the unrecoverable "needs repair" loop (#8398) 2026-08-11 12:02:13 -07:00
test_short_job_absorption.py Take two ubuntu jobs off their own runners: absorb one, delete the other (#9360) 2026-08-20 00:05:28 -07:00
test_smoke_workflows_share_one_script.py Run the Mac GGUF inference phases in the Mac UI job, not on a second runner (#9213) 2026-08-18 21:00:06 -07:00
test_spark_tts_tokenizer_subfolder.py studio: add audio page with tts/stt create tab, train tab, and openai audio endpoints (#7984) 2026-08-11 04:47:26 -07:00
test_stop_running_chats_prompt_contract.py feat(studio): run chats in parallel in the Chat tab (#7455) 2026-07-28 04:40:38 -07:00
test_stream_cancel_registration_timing.py feat(studio): run chats in parallel in the Chat tab (#7455) 2026-07-28 04:40:38 -07:00
test_stt_model_search_locator_contract.py Locate the dictation model search box by test id, not by its copy (#7914) 2026-08-06 00:19:13 -07:00
test_studio_gguf_export_script_pin.py tests: require the export pin fallback to cover a half-built unsloth_zoo (#8685) 2026-08-13 06:07:27 -07:00
test_studio_pid_file_contract.py Studio: Stop every running Unsloth server, not just the last one recorded (#7577) 2026-07-29 01:56:13 -07:00
test_studio_text_descender_clipping.py Read the descender guard's class list wherever it is written (#8765) 2026-08-14 04:53:28 -07:00
test_sync_allow_scripts_pins.py Studio: auto-sync allowScripts pins after dependency bumps (#6136) 2026-06-10 02:35:37 -07:00
test_tauri_branding_contract.py Studio: keep sidebar logo visible during training (#8331) 2026-08-10 12:55:03 +02:00
test_tauri_deep_link_contract.py Add Unsloth desktop deep links (#7560) 2026-07-28 16:52:53 +02:00
test_tauri_installer_resource_contract.py Reduce antivirus false positives in the desktop installers (#8586) 2026-08-13 07:02:18 -07:00
test_tauri_python_tool_images.py Desktop: block HTTP loopback requests from untrusted images (#8046) 2026-08-07 18:56:26 -03:00
test_tee_stream_none_guard.py Fix studio server crash when launched without a console (Windows) (#7932) 2026-08-05 08:17:58 -07:00
test_token_count_prompt_parity.py fix(studio): refresh token count after model load (#7450) (#7453) 2026-08-03 06:22:49 -07:00
test_torch_flavor.ps1 install: let UNSLOTH_TORCH_INDEX_FAMILY / _URL override CUDA wheel detection (#6692) 2026-07-20 00:58:52 -07:00
test_torch_index_pin_hardening.ps1 install: let UNSLOTH_TORCH_INDEX_FAMILY / _URL override CUDA wheel detection (#6692) 2026-07-20 00:58:52 -07:00
test_training_config_filename_contract.py feat(studio): rework train page setup flow (#7633) 2026-08-06 04:26:05 -07:00
test_training_worker_contracts.py feat(studio): rework train page setup flow (#7633) 2026-08-06 04:26:05 -07:00
test_ui_font_scale_contract.py Repoint three guard tests at where the code moved, and derive the font-size expectations (#7833) 2026-08-04 05:26:19 -07:00
test_ui_shard_engines.py Cache the .deb set webkit needs, so a dead mirror costs a miss not a shard (#9289) 2026-08-19 06:57:19 -07:00
test_uninstall_arg_guard.ps1 Tighten the comments around the uninstaller argument guard (#7647) 2026-07-30 05:36:27 -07:00
test_uninstall_dual_install_icon.ps1 Windows installer: fix DiskPart UAC mid-install, drive-root cache, and spurious unsloth.exe rename warning (#6296) 2026-06-22 03:09:08 -07:00
test_uninstall_prebuilt_parity.ps1 Uninstall the whisper.cpp prebuilt and the node/whisper install locks (#7686) 2026-08-01 03:03:30 -07:00
test_uninstall_reparse_stop_roots.ps1 Studio: install sd.cpp under the Studio home, not beside it (#8226) 2026-08-10 07:03:20 -07:00
test_update_release_notes.py Count a capped overlay stack by what it reads, not by how the cap is spelled (#9253) 2026-08-18 22:03:10 -07:00
test_usage_examples_agent_detection_contract.py feat: detect installed coding agent CLIs in Studio settings (#6909) 2026-07-08 05:26:50 -07:00
test_usage_examples_model_source_contract.py studio: apply saved per-model settings on API loads, add API monitor (#7473) 2026-07-31 04:24:17 -07:00
test_uv_cache_discipline.py Stop 13 jobs rebuilding the same frontend on every commit (#9375) 2026-08-20 04:22:14 -07:00
test_voice_settings_select_width.py Studio: UI font size scales all text consistently without moving layout (#7355) 2026-07-23 00:44:42 -07:00
test_wait_for_first.py Wait for the Compare nav instead of sampling for it (#9264) 2026-08-19 03:48:57 -07:00
test_whisper_binary_probe_denied.py Windows: guard the source-build and whisper.cpp probes on an unreadable install tree (#7757) 2026-08-02 23:47:24 -07:00
test_windows_small_checks_stay_on_their_image.py Give the small Windows checks one box per image instead of one box per check (#9143) 2026-08-17 21:13:48 -07:00
test_workflow_guards_run_unfiltered.py Run two short jobs as background lanes of Lint CI, not on their own runners (#9176) 2026-08-18 05:27:55 -07:00
test_xpu_arm64_torchaudio.ps1 Add Intel Arc GPU detection and XPU PyTorch install to Windows installer (#7706) 2026-08-04 03:03:10 -07:00
test_xpu_spoof_pipeline.py Add Intel XPU support to Unsloth Studio (#4724) 2026-07-24 02:22:07 -03:00
test_xpu_triton_swap.py Studio: share one torch classification probe across the repair paths (#8779) 2026-08-14 00:00:47 -07:00
test_zoo_suite_parallel_isolation.py Run the zoo suite in parallel, minus the two files that cannot share a worker (#9285) 2026-08-19 06:25:09 -07:00