Skip to content

fix(macos): resolve #283 guest exclusions with hosted-Mac evidence - #348

Merged
zackees merged 1 commit into
mainfrom
fix/283-macos-guest-evidence
Sep 25, 2026
Merged

zackees merged 1 commit into
mainfrom
fix/283-macos-guest-evidence

Conversation

@zackees

@zackees zackees commented Sep 25, 2026

Copy link
Copy Markdown
Owner

Closes #283.

Evidence

The exact-SHA full CI run 36067778414 (the #346 candidate) ran the test suite on hosted macos-15-intel and macos-15 with no macOS exclusions. Every test the Recovery guest excluded as a macOS finding passed there: all 12 cap-primitives tests, both readiness-marker renames, install_directory_replaces_an_existing_tree_and_removes_the_old_one, and real_worker_sequential_stress_leaves_no_parent_state. That answers the two open #283 items:

  • Finding 1 mitigation: negative st_rdev shows up only in the guest. Decision: report and wait on Handle a negative st_rdev like st_dev sunfishcode/cap-std#428. A [patch.crates-io] fork would not reach kernal-api's consumers.
  • Finding 4 real-hardware check: real APFS supports the rename flags, so the ENOTSUP comes from the guest.

Changes

  • Guest exclusions (18 → 16):
  • owned_group_termination_reaches_the_grandchild: this failed intermittently in the guest because Child::wait closes stdin first. The root could then read EOF and exit 0 before the SIGKILL landed. The test now holds stdin open, waits up to 10s, and asserts the root died by SIGKILL.
  • Docs and checks: updated the lane README, the script comments, and the ci/test_macos_x64_guest.py group and count checks.

Verification

  • Locally: python -m unittest ci.test_macos_x64_guest passes, and the Linux process_host_control tests pass 3/3 runs.
  • CI: the guest lane is running on this branch as run 36076443918.

🤖 Generated with Claude Code

Hosted Intel and Apple Silicon runners pass every test the Recovery guest
excluded as a macOS finding (exact-SHA run 36067778414), so what remains
excluded is guest-only:
- cap-primitives st_rdev panic: the guest reports negative device numbers;
  wait for sunfishcode/cap-std#428 rather than [patch].
- ENOTSUP from the guest filesystem's atomic renames, now also covering
  install_directory's RENAME_SWAP (documented to return the fs error).
- one two-core timing window.

Re-enabled in the guest: the PTY restore and owner-bound child tests (fixed
in #347) and the containment-state test, which passes there now.

owned_group_termination_reaches_the_grandchild failed intermittently in the
guest because Child::wait closes stdin first, letting the root read EOF and
exit 0 before the SIGKILL landed. Hold stdin across a bounded wait and
assert the root died by SIGKILL.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@zackees
zackees merged commit 92dd60e into main Sep 25, 2026
6 checks passed
@zackees
zackees deleted the fix/283-macos-guest-evidence branch September 25, 2026 00:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug(macos): macOS portability failures the Intel test lane surfaced

1 participant