DrumsBench

Experiments / EXP-016

macOS probes A, B and C, gates, sweep, soak and cost per valid rollout (the Experiment 1 headline)

Find N_max, the largest number of background macOS sessions on one Mac Studio at which every pre-registered gate holds over two 15-minute windows, then price a valid rollout at three host prices.

plannedWritten and reviewed as code or protocol, but not executed. No numbers.
Date
2026-10-25
Hypothesis
A Mac Studio runs more than a handful of independent login-session environments with no VMs, with zero observed cross-contamination next to a positive control that fired; we have no evidence for or against this yet.
Arms
macos-sessions
Hardware
Mac Studio M4 Max, 16 cores, 48 GB (studio-a)
OS
macOS 15.7.5 (24G624)
Workload
four scripted oracle tasks (Writer save, browser form, clipboard cross, visibility) round-robin per environment
Code
exp1-sessions-per-studio at f0d01ce
Limitation
Nothing has run; this page is the protocol and its exit criteria, written before any number exists, and the date is the date of the record.

In one paragraph

This is the experiment the harness in EXP-001 was built for, written down before it runs. Four probes answer the open risks first: can many background sessions be logged in and still painted (A), do keystrokes, pasteboards and modifier keys stay inside their sessions (B), does Chrome keep painting in a background session (C), and do our detectors fire when a leak is forced (P, see EXP-003). A fail in A, B or C stops the macOS arm; a fail in P means the detector is fixed before anything else. Then two gates at N equals 1, a sweep that climbs through N equals 1, 4, 8, 16, 24 and 32 with two 15-minute windows at each N, a 60-minute soak at the largest confirmed N, the isolation tests after every window, and a cost per valid rollout at three host prices. Every threshold below is a design value fixed in advance. None of it has run. No number on this page is a measurement.

Setup

What ran

Nothing. The dry-run paths of probes A, B and C are exercised by unit tests with made-up data (drumsctl/tests/test_probe_scripts.py). Every sweep, gate and soak code path runs in tests against a fake envd. Six attempts at probe P failed to run (EXP-003).

Results

None. This section will hold, when the experiment has run:

The protocol

Probes (Day 1, in order; make probes).

Gates at N equals 1 (make gate1, make gate2). Gate 1: every envd healthy with ax_trusted, screen_recording and reset_kills true and a non-black screenshot; TextEdit typing and pasteboard round trips; screenshot p95 under 200 ms over 20 captures. Gate 2: 20 of 20 valid Writer and 20 of 20 valid browser rollouts, reset ready p95 at most 5000 ms, 20 of 20 stale-generation calls refused.

Sweep (make sweep NS=1,4,8,16,24,32). Two 15-minute windows at every N; isolation tests 2, 3, 4, 5 and 7 after each window's rollouts; canaries and sampler throughout. An N is confirmed when every window passed all gates, flaky when some did, failed when none did. The climb stops at the first non-confirmed N. N_max is the largest confirmed N. The N equals 1 baseline for the step gate is the median step p95 over all N equals 1 windows.

Per-window gates (pre-registered exit criteria, all design values).

gatepasses when
sessionsevery session LoginDone
step latencyper task, step p95 at most 2 times the N equals 1 step p95
memorymemory pressure normal the whole window (an unknown level fails) and swap growth under 1 GB
cross-deliveryexactly 0
isolation verifiedno isolation check lost (isolation_unverified)
valid fractionat least 0.98
env failure rateunder 0.02
resetreset ready p95 under 10 s

A missing number fails its gate.

Soak (make soak N=<N_max>). 60 minutes at N_max, then 100 stale-generation trials (isolation test 10; applied_stale must be 0) and a 10-trial pasteboard check (test 2). Fails on any lost trial.

On demand (make positive-control, make isolation-extra). drumsctl's positive control, pasteboard half only on the Studio; isolation tests 8 (files and prefs), 9 (reset during write) and 11 (crash blast radius) at N_max.

Day-plan gates 3 to 6. The N equals 4 row confirmed 2/2 with all four tasks; tests 8, 9 and 11 at N equals 4 exit 0; dialog and crash bystanders within 20%; the sweep table complete with N_max on two windows; the soak with contamination 0, stale applied 0 of 100, and rollouts per host-hour recorded.

Cost (make report). usd_per_valid_rollout = host_usd_per_hour / valid_rollouts_per_host_hour, with the rate measured over the confirmed windows at N_max, at three host prices: an owned Studio amortized over a fixed term plus an energy term (the purchase price is a placeholder until the invoice; watts need the root sampler, else the energy term is left out and the table says so), a cloud Mac on demand (vendor claim with a 24-hour minimum), and a hosted Mac mini priced in euros at the run day's rate (vendor claim; null until the rate is passed in). cost.json copies every input next to its result. Model inference is in no price.

Failures and surprises

None yet. The six failed probe P attempts are in EXP-003; the Day 0 findings that bear on this plan (no CGSession on this build, so the console is parked by hand; envd ad hoc signed, so grants may not survive a rebuild; endpoint protection that may skew reset timings) are in EXP-002.

Limitations

Reproduce

Steps 1 to 18 of the reproduce table in EXP-001, from make setup-host through make results. The headline steps are make probes, make gate1, make gate2 COORDS=..., make sweep COORDS=..., make soak N=<N_max> COORDS=..., make positive-control COORDS=..., make isolation-extra N=<N_max> COORDS=..., make report EUR_USD=<rate> STUDIO_USD=<invoice>, and make reproduce on a second machine for Gate 10.

Sources