v1.2.0 — macOS MEDIUM tier + cmd.exe shim
Second cross-platform release, and it closes the roadmap item v1.1.0 promised: macOS support. macOS Claude Code users now get the same subprocess-hygiene story Windows and Linux users have — with an honest MEDIUM ceiling that is pinned by a test so it can never silently regress. cmd.exe users on Windows get the full STRONG guarantee for the first time.
This release also makes the CI matrix honest about hosted Intel macOS, which GitHub is retiring.
What's new
tools/macos/find-claude.sh— macOS probe resolver mirroring the Linux/Windows versions, including the fnm dual-directory layout. Resolves every supported Claude Code install path on Darwin (PATH → npm prefix →/opt/homebrew→/usr/local→ nvm → fnm → asdf → volta → yarn global).tools/macos/claude-jobbed.sh— the macOS reaper:setpgid+ bashtrap+ a disowned, out-of-process watchdog. macOS has none of the kernel primitives the other tiers lean on (no Win32 Job Object, no cgroupcgroup.kill, noprctl(PR_SET_PDEATHSIG)), so the watchdog is what carries the guarantee.tools/claude-jobbed.cmd— cmd.exe shim. It re-execs the PowerShell wrapper and inherits the same STRONG Win32 Job Object. cmd.exe users now get the identical kernel-enforced kill-on-close guarantee PowerShell users have had since v1.0.0 —doskey claude=C:\path\to\tools\claude-jobbed.cmd $*and you are covered.install.sh— real macOS Darwin branch with a portable BSD/macOSmktemptemplate,~/.bash_profilehandling, and an honest-ceiling banner printed at install time so the user is told the MEDIUM limitation up front, not buried in docs.tests/macos/test-honesty.bats— a NEGATIVE test that pins the honest MEDIUM ceiling: it asserts that a simultaneous SIGKILL of wrapper and watchdog leaks by design. If someone ever "fixes" this into a false STRONG claim, this test fails. Honesty is enforced, not promised.- CI matrix — bats now runs on
macos-14(Apple Silicon) alongsideubuntu-latest, with PowerShell onwindows-latest. - Hosted Intel
macos-13dropped, tracked as an open gap (#3). GitHub is retiring hosted Intel macOS; themacos-13leg never received a runner and ran to GitHub's hard 24h "awaiting a runner" ceiling (timeout-minutesbounds execution after a runner is assigned, never queue time). The scripts are architecture-neutral and bash-3.2-safe by construction, and the static-parse step still proves the 3.2 syntax, so only x86_64 execution is uncovered — not syntax. Documented as an explicit open gap rather than silently removed, consistent with this project's honest-ceiling ethos.
Guarantee matrix
| Platform | Mechanism | SIGKILL-of-wrapper-alone survival | Simultaneous SIGKILL of wrapper + watchdog |
|---|---|---|---|
| Windows 10+ (PowerShell and cmd.exe) | Win32 Job Object + JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE |
✅ Kernel-enforced | ✅ Kernel-enforced (no watchdog needed) |
Linux ≥ 5.14 + systemd --user |
systemd-run --scope + cgroup.kill (watchdog-supervised) |
✅ Kernel-enforced via cgroup.kill | ✅ Kernel-enforced via cgroup.kill |
| Linux < 5.14 / no systemd / WSL1 | setpgid + bash trap |
❌ (trap doesn't fire on SIGKILL) | ❌ |
| macOS (v1.2.0, MEDIUM) | setpgid + trap + disowned out-of-process watchdog |
✅ Watchdog outlives the wrapper and reaps the tree | ❌ By design — pinned honest by test-honesty.bats |
The v1.1.0 matrix row macOS — deferred to v1.2.0 is now retired: macOS is shipped at the MEDIUM tier above.
Quick start
macOS
curl -fsSL https://raw.githubusercontent.com/ron2k1/claude-code-structured-concurrency/main/install.sh | bash -s -- --yesThe installer prints the honest MEDIUM ceiling banner. Then in a new shell:
claude --version # routes through tools/macos/claude-jobbed.sh transparentlyWindows cmd.exe (new in v1.2.0)
doskey claude=C:\path\to\claude-code-structured-concurrency\tools\claude-jobbed.cmd $*claude from cmd.exe now runs inside the same STRONG Job Object as the PowerShell path.
Windows PowerShell / Linux
Unchanged — see the v1.1.0 release notes.
Why macOS is MEDIUM, not STRONG
Windows has JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; Linux ≥ 5.14 has cgroup.kill. Both are kernel-enforced tree-kill primitives — the OS itself guarantees no descendant outlives the job/scope. macOS has no equivalent: no Job Object, no kill-able cgroup, no PR_SET_PDEATHSIG. The closest honest construction is setpgid + a trap to reap the process group, plus a disowned watchdog (a backgrounded subshell that polls our identity and tears the group down when the wrapper vanishes).
That construction survives a Force-Quit / SIGKILL of the wrapper alone — the watchdog is a separate process, so it outlives the wrapper and reaps the tree. What it cannot survive is a simultaneous SIGKILL of wrapper and watchdog: bash traps don't fire on -9, and there is no kernel backstop on macOS to catch the gap. Rather than paper over that with an optimistic claim, tests/macos/test-honesty.bats asserts the leak happens in that exact scenario — so the ceiling is enforced by CI, not just documented.
Intel (x86_64) macOS coverage — the open gap
CI executes on Apple Silicon (macos-14) only. Hosted Intel (macos-13) execution is intentionally not a CI leg in v1.2.0 (GitHub hosted-Intel retirement; the leg ran to the 24h await-runner ceiling). The scripts are architecture-neutral and bash-3.2-safe by construction, and the static-parse step still proves bash-3.2 syntax — so only x86_64 execution coverage is missing, not syntax correctness. Restoring an Intel execution leg (self-hosted or paid runner) is tracked in #3.
What's next
- v1.3.0+: optional macOS Swift
kqueuehelper to close the simultaneous-SIGKILL gap (would lift macOS toward STRONG); restored Intel macOS execution coverage (#3); Homebrew formula; apt PPA.
Stats
- 36 PowerShell unit assertions + 1 functional test (Windows) + 41 bats tests (19 Linux + 22 macOS) — all passing in CI on
ubuntu-latest,macos-14,windows-latest. - 9 ms reap latency verified on Windows 11 build 26200; macOS/Linux validated in CI (not micro-benched — no synthetic latency numbers claimed for the POSIX tiers).
- macOS honest ceiling pinned by a dedicated negative test (
tests/macos/test-honesty.bats).