Skip to content

peer-job-runner crashes on native Windows at os.fork() #1184

Description

@mpaul31

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-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
.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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions