Miri passes the hardware checks on real macOS 15 and macOS 26 Macs#376

opened2d agobySSamanyu Das

Outcome

A person on macOS 15 or macOS 26 can rely on Miri as much as a person on macOS 27. Each check that a virtual machine could not run has passed on a real Mac, or has an issue for its failure. docs/limitations.md then drops its Unverified entry for macOS 15 and 26.

Context

  • #369: Sam chose a macOS 15.0 minimum on 8 November 2026.
  • #375 lowers the minimum. It ran every check a Tart virtual machine on macOS 15.7.7 allows, and lists the results.
  • V1 acceptance checklist defines the quick check used below.
  • Supported platforms records what stays unverified.

These checks did not run for #375:

  1. make e2e on Sam's Mac with the #375 build. It replaces Sam's running Miri, so the PR relied on CI's macOS 27 job.
  2. Trackpad gestures, multiple displays, display plug and unplug, the lid, and system sleep on macOS 15. A virtual machine has no trackpad and one display, and it refuses pmset sleepnow.
  3. Any check on a real macOS 15 Mac, and any check on macOS 26.

Acceptance criteria

On Sam's Mac (macOS 27), with a build of main that contains #375:

  • Take the live-test lock while Sam is away, then run make e2e. Both selftests report a pass: observed-granted and recovered.

On a real Apple silicon Mac on macOS 15, with Miri Developer installed from the make package disk image:

  • vtool -show-build "/Applications/Miri Developer.app/Contents/MacOS/Miri" shows minos 15.0 and the SDK of the Xcode that built it.
  • Setup shows every required check as Passed after the Accessibility grant, and the Accessibility message names Privacy & Security > Accessibility.
  • Settings > Gestures > Test Gesture passes with three fingers and with four fingers, and a real swipe scrolls the strip under the pointer.
  • Quick check items 1 to 7 from the v1 acceptance checklist pass with an external display and at least 5 windows per strip: both arrangements, independent strips, focus and window moves across displays, 3 unplugs and replugs, one lid close and open, 3 sleeps and wakes, and one engine force-quit.
  • A title-bar drag between columns and a drag onto the other display drop the window where the drag shows.

On a real Apple silicon Mac on macOS 26:

  • Copy the MiriCoreTests.xctest bundle and the engine test binaries built on macOS 27 to the Mac and run them. All pass, as they did in the macOS 15 virtual machine for #375.
  • The four verify-miri recipes in .claude/skills/verify-miri/features/ pass.
  • The macOS 15 checks above pass, including the quick check.

For each check:

  • Each failure has its own bug issue, reproduced on that Mac.
  • The result goes into docs/acceptance-ledger.md, with the macOS version, build number, and Mac model.
  • When every check passes, docs/limitations.md and Supported platforms in decisions/release-scope.md drop the unverified wording for that version.

Verification level

Hardware only. This needs a real Mac on macOS 15 and a real Mac on macOS 26, each with a trackpad, an external display, and a lid. Each Mac needs a manual Accessibility grant. The make e2e check needs Sam's Mac while Sam is away from it. Automated observations, manual grants, and hand checks are separate kinds of evidence, and the ledger records which each result is.

Out of scope

  • Intel Macs, which stay deferred.
  • macOS versions older than 15.
  • The release check in the acceptance checklist, which runs before v1 on every supported version.

Dependency and status (coordination, 10 Nov 2026)

  • Builds on another thing? Soft: needs a main build that already contains #375 (landed). Does not depend on #388/#386/#377/#350/#333 for its remaining criteria.
  • Evidence: macOS 27 make e2e ticked. Software checks in a macOS 26 VM after manual Accessibility grant are recorded in comments, but they do not satisfy the hardware criteria. Real macOS 15 and macOS 26 hardware boxes remain unticked.
  • Blocker: real Apple silicon Macs on macOS 15 and macOS 26 (trackpad, external display, lid). Hardware holds are not waivers.
  • Independent work now: none that can tick the remaining hardware boxes without those Macs. Do not mark hardware criteria from VM results.
  • Next step: hold until hardware is available; keep ledger entries honest.
  • Links: https://github.com/samanyudas/miri/issues/376 · https://github.com/samanyudas/miri/pull/375

Note

🤖 Claude Opus 5.5 responding on behalf of samanyudas

make e2e passes on Sam's Mac with main at 1f4f565c, which contains #375. That box is ticked. The macOS 26 software checks have started in a virtual machine.

make e2e on Sam's Mac (macOS 27.0.1, 8 November 2026, 18:53 local)

  • Checkout: detached worktree at 1f4f565c, engine pin de88217. The bundle records minos 15.0, sdk 27.0.
  • The live-test lock was taken and released by make e2e.
  • test-permission-prototype.sh: observed-granted. Attribution unresolved. Missing-helper and aliased-path checks passed.
  • test-window-recovery.sh: recovered. Stranded at [[2520, 340], [380, 172]], recovered to [[1090, 649], [380, 172]].
  • Sam's running Miri Developer, the fix-364 bundle at pid 55449, ran before and after unchanged.

macOS 26.6.2 (25G83) virtual machine, Tart image macos-tahoe-vanilla, automated, same 1f4f565c build. This is evidence toward the macOS 26 boxes, not a tick, because they ask for a real Mac.

  • Swift tests: Test run with 220 tests in 30 suites passed, from the host-built test bundle. The first run failed 5 tests only because the VM had no developer tools and no engine files. Both were installed, then all 220 passed.
  • Engine tests: 1183 passed and 42 passed.
  • Selftests without the Accessibility grant: observed-ungranted and skipped-ungranted.
  • The disk image Miri-Developer-1f4f565c.dmg installed to /Applications and launched. The Welcome window opened and drew correctly, and its Accessibility text names Privacy & Security > Accessibility, which is the pane name System Settings shows on macOS 26.

Remaining limits

  • The granted runs in the macOS 26 virtual machine are still to come: the four verify-miri recipes and the granted selftests. They wait for Sam to type the VM password once for the Accessibility grant, because Screen Sharing input does not reach the password field.
  • Gestures, displays, lid, sleep, and every real-Mac box stay open.

Note

🤖 Claude Opus 5.5 responding on behalf of samanyudas

With the Accessibility grant, every software check passes in a macOS 26.6.2 (25G83) virtual machine on main 1f4f565c. The macOS 26 boxes stay unticked, because they ask for a real Mac and the VM cannot test gestures, displays, lid, or sleep.

Sam typed the VM password for two grants: Miri Developer, and sshd-keygen-wrapper for the test tools. All results below are automated observations.

  • Granted selftests: observed-granted. Attribution unresolved. Missing-helper and aliased-path checks passed. and recovered.
  • verify-miri run 20261108-095518: engine focus and macOS frontmost agreed on every step.
    • Focus: arrows, letters, the column number, and up and down within a stack.
    • Swap west, east, first, and last. Width presets, grow, and shrink. Maximize and restore, center, float and tile. Stack and unstack, stack height grow and shrink, and swap within a stack.
    • Restart Engine, the ⌃⌥Q Stop shortcut, Start, Stop, a saved Stop across relaunch, and the crash limit: "The engine stopped unexpectedly 3 times within five minutes."
    • Setup: the yabai stand-in showed "Waiting for setup: Other window managers", and Miri started by itself when it quit.
    • Shortcuts: remove, add, the action conflict, the macOS Emoji conflict, and reset, with config.toml restored afterwards.
    • V end: layout check passed.
  • Resolution: 2560x1440 to 1920x1080 and back. All 5 windows kept their order, the maximized window refit, and the frames afterwards were identical.
  • Force-quit after the 5-minute session save: matched=5, strips=1, missing=0 with an identical layout. The maximized window stayed maximized, and un-maximizing restored its width.

Not covered

  • The gesture test: Sam could not do it in this session.
  • The "Show Logs in Finder" check, because it needs Finder automation from SSH.
  • The verify-miri copy in the VM matched fixture windows by process when titles were hidden, because the SSH session has no Screen Recording grant.

Note

🤖 Claude Opus 5.5 responding on behalf of samanyudas

Stuck until someone has a real Apple silicon Mac on macOS 15 and one on macOS 26.

  • Gesture test: Sam ruled out running Settings > Gestures > Test Gesture in the Tart virtual machines on 10 Nov 2026. That box now needs a real Mac, like the others.
  • What is left: every unticked box needs real hardware: a trackpad, an external display, a lid, and sleep. The virtual machine results in the comments above support these boxes but do not tick them.
  • Board: the new stuck label puts this issue in the Stuck column. The board sync now treats that label like an open blocking issue, for blockers outside the tracker such as hardware.
  • Unstick: remove the stuck label once a macOS 15 or macOS 26 Mac is available, then run the checks for that version.