unsloth/tests/studio
Daniel Han 2043c734c4
Take two ubuntu jobs off their own runners: absorb one, delete the other (#9360)
Over 400 completed main push runs, 25 of 96 job types execute in under 120s:
1116s of work spread across 25 runners, each queuing for about three hours. Two
of them are dealt with here.

  Security audit :: pytest tests/security                72s exec, 11096s queue
  Unsloth export capability :: capability (ubuntu-latest) 67s exec, 10642s queue

Different problems, so different treatments.

The security suite MOVED, onto the Workflow trigger lint runner
------------------------------------------------------------------------
Same argument that put the lockfile and load-orchestrator lanes into Lint CI in
#9176: work with a narrow trigger, moved into a job that was going to occupy a
runner on this commit anyway, can only reduce the slots a commit takes. Here the
trigger widens too, since this host has no paths filter and security-audit.yml's
pull_request does, so the suite now runs on every pull request rather than on the
ones that touch its paths.

This host and NOT Lint CI, where the other lanes went, and that is the whole
decision. Lint CI installs shellcheck from apt, so its harden-runner has to
permit escalation and an apt mirror; a security gate moved there would run under
a policy weaker than the one it has today. Workflow trigger lint's harden-runner
block is byte-for-byte identical to the one the job carried in security-audit.yml
(block, disable-sudo, the same six endpoints), so nothing about its isolation
changes. harden-runner binds per runner, not per step, which is what makes that
the deciding constraint rather than a detail.

Folded into the existing pytest invocation rather than added as a step of its
own. I wrote it as a separate step first, so a security regression would not be
reported as a workflow-guard failure, and
test_the_guards_run_in_one_pytest_invocation rejected it: one step per module
costs about 15s of interpreter and conftest startup, measured in this repo at
53.9s as one invocation against 300.8s as one each. The guard is right and the
attribution preference is not worth 15s.

pytest and PyYAML are now pinned here to the versions security-audit.yml pinned
them to. That suite runs scripts/lint_workflow_triggers.py as a SUBPROCESS and
asserts on its exit semantics, so a pytest or PyYAML that resolves differently
changes what it is asserting against.

The capability ubuntu leg was DELETED, because it was already duplicated
------------------------------------------------------------------------
That workflow's own comment already explains why it has no macOS leg: every test
in tests/test_export_capability.py goes through _patch(), which monkeypatches
_has_torch, get_device and is_apple_silicon, so a real Mac proves nothing a Linux
runner does not -- and studio-backend-ci.yml runs the same file on ubuntu-latest
as part of `pytest tests/`.

That argument reaches one step further than it was taken. If Backend CI covers
the file on Linux, the ubuntu leg HERE is the duplicate too. Checked: the file is
not in that job's --ignore list. The import-safety test does not need a
torch-free image either; it installs its own builtins.__import__ blocker and
drops preloaded torch/unsloth from sys.modules, so it proves the same thing
inside Backend CI's fully installed environment.

Windows stays. Nothing else in CI runs that file there, and _has_torch's import
probe is the per-OS behaviour the job exists for.

The guard
------------------------------------------------------------------------
tests/studio/test_short_job_absorption.py, wired into the unfiltered job. Both
changes fail silently rather than loudly if they regress, which is what it is
for:

  - the suite still runs somewhere, and no longer runs twice
  - the absorbing job's harden-runner has not widened past the six endpoints the
    suite came with, since "the policy is identical" is the entire justification
    for this host
  - the absorbing job has not gained a paths filter
  - capability still has its Windows leg
  - studio-backend-ci.yml still runs the whole tests/ tree and does not name
    test_export_capability.py, because one line added to that --ignore list
    would remove the coverage the ubuntu leg was deleted for, and nothing would
    turn red

Mutation-tested, each failing exactly one test: drop tests/security from the
invocation; add one endpoint to the allowlist; add
--ignore=tests/test_export_capability.py to Backend CI; remove the Windows leg.

Also corrected a docstring in tests/security/test_scan_packages.py that named
tests-security and what it installs. It was about to become false.

Verification
------------------------------------------------------------------------
tests/security under the host's own -n 4: 409 passed, 6 skipped.
scripts/lint_workflow_triggers.py: OK across 41 workflow files.
All three workflows still parse; security-audit.yml keeps its other 4 jobs.

Net: 7 short ubuntu slots per commit, down to 5.

A note for whoever extends this. The census that found these 15 candidates was
partly stale and I nearly acted on it: the lockfile and load-orchestrator rows
were already absorbed by #9176 and their samples were pre-merge tails, and the
two Local Agent Guides rows show ~0s because they are if-gated to schedule and
dispatch, which is a skip and not a fast job. Read the trigger before ranking by
duration. Of the remaining candidates, Scorecard is blocked by its job-level
id-token: write, the Kaggle gate by a downstream needs:, npm-provenance by an
audit egress policy plus registry.npmjs.org, and the notransport clean-install
lane by a container that asserts several common tools are absent.
2026-08-20 00:05:28 -07:00
..
fixtures Source the update popup's release notes from the GitHub releases (#8352) 2026-08-11 00:28:01 -07:00
install Record the venv own requirement digests, not the installers (#9263) 2026-08-19 01:31:09 -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_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 Drain the sampling debounce long enough for the node CI actually runs (#9332) 2026-08-19 23:55:01 -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_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 Cache uv's downloads, which is now the largest single cost in CI (#9271) 2026-08-19 05:47:32 -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