Skip to content

Soul Archive v3.1.2 — Windows compatibility hotfix

Latest

Choose a tag to compare

@dqsjqian dqsjqian released this 28 May 08:45

What changed

Hotfix for two Windows-specific bugs reported by user testing on v3.1.1.

Bug 1 — soul.py subcommands produced empty output on Windows Git Bash

Symptom: Commands like soul status / soul init returned exit code 0 with no visible output. The script ran, but nothing reached the terminal.

Root cause: os.execvp() on Windows (especially under Git Bash / MSYS) does not reliably propagate the child process's stdout back to the parent shell. The current process gets replaced, but the new process's stdout doesn't always re-bind to the parent shell's pipe.

Fix: replace os.execvp() with subprocess.run() + sys.exit(result.returncode). File descriptors stay stable across the call; signal propagation handled correctly. Cross-platform identical behavior.

Bug 2 — soul_paths.py raised UnicodeEncodeError when run directly on Chinese Windows

Symptom:

UnicodeEncodeError: 'gbk' codec can't encode character '\\U0001f9ec'

Root cause: soul_paths.py was the only script not given the UTF-8 stdout/stderr reconfigure guard introduced in v3.1.1, because it was classified as a 'library module' rather than an entrypoint. But its __main__ diagnostic block prints the 🧬 emoji (U+1F9EC), which the default Chinese Windows console codec (cp936) cannot encode.

Fix: apply the same 5-line UTF-8 reconfigure guard at module top, matching the pattern already used by the 8 sibling entrypoints. The guard is idempotent — calling reconfigure again from an importer is a no-op.

Files

  • scripts/soul.pyos.execvpsubprocess.run
  • scripts/soul_paths.py — UTF-8 reconfigure guard added at module top

Backwards compatibility

No data format change, no API change, no behavior change on macOS / Linux. v3.1.1 remains usable on those platforms; this release is only required for Windows users.

License: MIT.