Conversation
The 'conductor update' command often fails on Windows when other conductor processes are running because they hold file locks inside %LOCALAPPDATA%\uv\tools\conductor-cli\. uv tool install --force then errors with 'Access is denied' or 'file is in use'. Improvements: 1. Pre-flight check for other running conductor processes Detects via 'tasklist' on Windows and 'ps' elsewhere. Lists matching PIDs and exits with guidance to stop them (or pass --force to skip the check). Includes a smart command-line filter so we match the conductor entrypoint, 'python -m conductor', and 'uv tool run conductor' without false positives on unrelated paths. 2. Retry loop (3 attempts, 2s delay) mirroring install.ps1 Absorbs transient Windows Defender / file-lock failures. Mid-sequence success short-circuits. 3. Better error reporting Surfaces full uv stdout AND stderr (not just stderr), and on Windows points users at the most common remediations: stopping running conductor processes and adding a Defender exclusion. 4. Broader Windows .exe rename _rename_windows_exes now also moves %LOCALAPPDATA%\uv\tools\conductor-cli\Scripts\conductor.exe and the %APPDATA% equivalent out of the way (in addition to ~/.local/bin and the exe on PATH), covering every location uv may have placed the entrypoint in. 5. New 'conductor update --force' flag Skips the running-process check for users who are confident the install will succeed. Tests: +5 new tests (pre-flight abort, --force skip, retry-then-success, stdout+stderr surfacing, abort message). Existing tests updated for the new retry call counts. 62/62 update tests pass. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jrob5756
added a commit
that referenced
this pull request
May 6, 2026
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Merged
jrob5756
added a commit
that referenced
this pull request
May 6, 2026
* chore: release 0.1.12 Bumps version to 0.1.12 and updates CHANGELOG with the four PRs merged since v0.1.11: - #149: Windows install diagnostics - #151: Tag-based registry versioning with # ref syntax - #152: Unified reasoning.effort configuration - #153: Dashboard layout fix for human_gate options + loop-backs Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: add #155 (Windows update reliability) to 0.1.12 changelog Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
conductor updatefails frequently on Windows. Root cause: when anotherconductorprocess is running (foregroundconductor run --web, background dashboards from--web-bg, IDE-spawned workers), it holds file locks on the entrypoint executable and on files inside%LOCALAPPDATA%\uv\tools\conductor-cli\.uv tool install --forcethen errors with "Access is denied" or "file is in use", and the previous error reporting only printedproc.stderrwith no remediation.Changes
1. Pre-flight running-process check
Detects other Conductor processes via
taskliston Windows andpselsewhere. If any are found, prints them with PIDs and aborts with guidance:_looks_like_conductor_process()matches theconductorentrypoint,python -m conductor, anduv tool run conductorwithout false positives on unrelated paths.2. Retry loop (mirrors
install.ps1)run_updatenow retries theuv tool installinvocation up to 3 times with a 2-second delay, matching the existing logic ininstall.ps1for transient Windows Defender / file-lock failures. Mid-sequence success short-circuits.3. Better error reporting
proc.stdoutANDproc.stderr(previously only stderr)Add-MpPreference -ExclusionPath ...) on Windows failure4. Broader Windows .exe rename
_rename_windows_exes()now also moves these out of the way beforeuv tool install:%LOCALAPPDATA%\uv\tools\conductor-cli\Scripts\conductor.exe— the most common cause of failed self-upgrades%APPDATA%\uv\tools\conductor-cli\Scripts\conductor.exe— alt path on some uv versions(In addition to the previously-covered
~/.local/bin/conductor.exeand the exe found onPATH.)5. New
--forceflagconductor update --forceskips the pre-flight check for users who are confident the install will succeed.Tests
TestRunUpdate:test_aborts_when_other_conductor_running— pre-flight detects processes and aborts without invoking installtest_force_skips_pre_flight—--forceproceeds even with running processestest_retry_succeeds_on_second_attempt— transient failure → success short-circuitstest_failure_surfaces_stdout_and_stderr— both streams showntest_upgrade_failureto assertcall_count == 3(retries to exhaustion)tests/test_cli(301 tests) passesmake lint✓uv run ty check✓Verification path on Windows
After this lands, a Windows user hitting "update fails almost every time" should:
conductor update— gets immediate, actionable feedback if processes are runningconductor stop --allto clean up background dashboardsconductor runterminalsconductor update— now succeeds, or shows a clear error with Defender remediation if Defender is the issue