The cross-model pass in ce-code-review and ce-doc-review cannot start on native Windows because peer-job-runner.py
unconditionally uses POSIX-only process APIs.
Git Bash is available and can interpret the worker .sh file, but the runner invokes the native Windows Python
installation. That Python does not provide os.fork(), os.setsid(), os.killpg(), or os.geteuid().
This affects current main and the pending 3.20.0 release in #1084. The detached runner was introduced by #1135 /
4c63fd2.
Environment
- Windows 11 Enterprise 10.0.26100
- PowerShell 7.6.1
- Git for Windows 2.50.1
- Git Bash 5.2.37 (
x86_64-pc-msys)
- Native Windows Python 3.14.3
jq 1.8.2
- Claude Code 2.1.212
Reproduction
From PowerShell, verify which Python Git Bash resolves and which APIs it exposes:
& 'C:\Program Files\Git\bin\bash.exe' -lc 'command -v python3; python3 --version; python3 -c "import os; print({name:
hasattr(os, name) for name in (''fork'', ''setsid'', ''killpg'', ''geteuid'')})"'
Output:
/c/Users/<user>/AppData/Local/Microsoft/WindowsApps/python3
Python 3.14.3
{'fork': False, 'setsid': False, 'killpg': False, 'geteuid': False}
Then run a ce-code-review or ce-doc-review invocation that triggers its cross-model adversarial pass. The skill
starts the runner with the equivalent of:
python3 "$SKILL_DIR/scripts/peer-job-runner.py" start ... -- bash "$SKILL_DIR/scripts/cross-model-*.sh" ...
peer-job-runner.py reaches its unconditional os.fork() call and fails before the Claude worker starts:
AttributeError: module 'os' has no attribute 'fork'
The POSIX-only path is visible in both runner copies:
https://github.com/EveryInc/compound-engineering-plugin/blob/4aeaf6853074efe021409e880ad27958bf07bca6/skills/ce-code-revie /peer-job-runner.py#L619-L624
Expected behavior
Cross-model review should work when Codex is running natively on Windows and Git Bash is used only to interpret the
.sh worker.
The runner could use platform-specific Windows process supervision, or detect that the required POSIX APIs are
unavailable and use a graceful supported fallback. Installing another native Windows Python version does not supply
these APIs, and invoking the command through Git Bash does not change Python’s process model.
Actual behavior
The review fails before invoking Claude. The presence of Bash, jq, Python, and an authenticated Claude CLI does not
avoid the failure.
The cross-model pass in
ce-code-reviewandce-doc-reviewcannot start on native Windows becausepeer-job-runner.pyunconditionally uses POSIX-only process APIs.
Git Bash is available and can interpret the worker
.shfile, but the runner invokes the native Windows Pythoninstallation. That Python does not provide
os.fork(),os.setsid(),os.killpg(), oros.geteuid().This affects current
mainand the pending 3.20.0 release in #1084. The detached runner was introduced by #1135 /4c63fd2.Environment
x86_64-pc-msys)jq1.8.2Reproduction
From PowerShell, verify which Python Git Bash resolves and which APIs it exposes:
Output:
Then run a
ce-code-revieworce-doc-reviewinvocation that triggers its cross-model adversarial pass. The skillstarts the runner with the equivalent of:
peer-job-runner.pyreaches its unconditionalos.fork()call and fails before the Claude worker starts:The POSIX-only path is visible in both runner copies:
https://github.com/EveryInc/compound-engineering-plugin/blob/4aeaf6853074efe021409e880ad27958bf07bca6/skills/ce-doc-review peer-job-runner.py#L619-L624
https://github.com/EveryInc/compound-engineering-plugin/blob/4aeaf6853074efe021409e880ad27958bf07bca6/skills/ce-code-revie /peer-job-runner.py#L619-L624
Expected behavior
Cross-model review should work when Codex is running natively on Windows and Git Bash is used only to interpret the
.shworker.The runner could use platform-specific Windows process supervision, or detect that the required POSIX APIs are
unavailable and use a graceful supported fallback. Installing another native Windows Python version does not supply
these APIs, and invoking the command through Git Bash does not change Python’s process model.
Actual behavior
The review fails before invoking Claude. The presence of Bash,
jq, Python, and an authenticated Claude CLI does notavoid the failure.