In one paragraph
On 2026-10-22, between about 01:15 and 02:55 Eastern, we prepared studio-a, an institution-managed Mac Studio with MDM and endpoint protection, for the Experiment 1 probes. The work ran over SSH in two passes. Pass 1 installed Homebrew, LibreOffice and UTM and set the power and multi-session settings; it failed at the code-signing trust step, which needs an on-screen dialog, and its raw logs were later deleted by mistake. Pass 2 installed envd ad hoc signed, created two of the planned 33 environment accounts (env01 and env02), installed their LaunchAgents without loading them, and seeded the golden tree and its clones. Gate 0 then returned 2, as expected with two accounts, and found that CGSession does not exist on macOS 15.7.5 (measured), contrary to what our earlier documents said. A 60-second host baseline with no environment session logged in recorded about 16.0 GB of 48 GB used, memory pressure normal and swap 0 across 12 samples (measured, pilot folder). The status is preliminary: the setup is incomplete, no session has been logged in, and the baseline is an input for a later report, not a per-environment number.
Setup
- Machine: studio-a, Mac16,9 (Mac Studio, M4 Max), 16 CPUs, 48 GB, macOS 15.7.5 (24G624), FileVault on, one 1080p display attached, 299 GB free at Day 0 (all measured). Xcode Command Line Tools with Swift 6.1.2, no full Xcode, no tmux.
- Management: institution MDM and endpoint protection with real-time scanning (measured; present throughout).
- Pre-installed by the institution: Google Chrome 156.0.8078.48, owned by root, not touched.
- Access: a relayed VPN link from the development laptop; SSH round trip 0.4 to 0.6 s (measured). Screen Sharing answers; a full remote session was not tested.
- Software put on the machine: Homebrew 7.0.10, LibreOffice 26.8.1, UTM 5.0.8 (pass 1); uv 0.12.17 copied from the laptop; Python 3.12.14 in a venv (3.14.7 was also downloaded and not used); the repository at head
f0d01ceby git bundle with the origin remote removed. - Scope rule accepted the same night: the pilot is limited to env01 and env02, each expansion needs an explicit go, and raw logs are kept.
What ran
Pass 1 (01:52 to 01:55 Eastern)
setup_host.sh driven through a sudo askpass helper. Measured outcomes, from a transcript recovery because the raw logs were lost:
- Homebrew 7.0.10, LibreOffice 26.8.1 and UTM 5.0.8 installed.
- The
google-chromecask refused: Chrome was already present outside Homebrew. pmsetsleep, displaysleep, disksleep and powernap set to 0. The previous values were not recorded first, so an exact undo is not possible, and the MDM may restore its own values.MultipleSessionEnabledset to YES (its value before pass 1 was not 1; whether it was absent or 0 was not recorded)./usr/local/drumscreated.- The signing-trust step failed (see Failures). No env users were created.
Pass 2 (02:44 to 02:47 Eastern)
Every step exited 0 except Gate 0, which exited 2 as expected. Measured, from the kept logs:
/usr/local/drumsrepaired to mode 0755.- envd installed at
/usr/local/drums/bin/envd, ad hoc signed (no stable identity), owned by root, mode 0755. - env01 (uid 502) and env02 (uid 503) created as hidden standard users; homes with group
admin, mode 750; setup assistant skipped; screensaver off. - LaunchAgents
run.drums.envdinstalled for both accounts, not loaded. - Golden tree built and cloned into each account's
golden,workandwork.spare. SHOWOTHERUSERS_MANAGEDset to TRUE.- A leak check over the logs found 0, 0, 0 occurrences of the three secrets it looks for.
Gate 0
make gate0 returned 2. It printed: FileVault on; 2 of 33 env users; CGSession missing; no env00. With two accounts this is the expected code; the CGSession line is the finding.
The 0-env host baseline (about 02:47 Eastern)
make meta and make baseline-sample into a pilot run folder, results/2026-10-22-studio-a-mac-pilot2. The sampler ran as the operator, not as root, for about 60 s and wrote 12 samples. No environment session was logged in; the console session held a terminal.
Host baseline with no environment session logged in (pilot folder) preliminary2026-10-22 · studio-a
| Metric | Value | Unit | n | Note |
|---|---|---|---|---|
| memory used | 16.04 (15.99 to 16.07) | GB | 12 | of 48 GB; mem_used_bytes / 1e9; no environment session logged in |
| swap used | 0 | GB | 12 | 0 in every sample |
| WindowServer CPU | 12.9 to 21 | % | 12 | ps decaying average, not instantaneous |
| memory pressure normal | 12 / 12 | samples | memory_pressure reported normal in every sample |
Host: Mac Studio M4 Max, 16 cores, 48 GB, macOS 15.7.5 (24G624). An institution-managed Mac with MDM and endpoint protection whose agents were running throughout. One 1080p display attached. The console session held a terminal. No environment session was logged in.. Workload: idle host: no environment session, no envd running, no task; the metrics sampler only. Method: make meta, then make baseline-sample at about 02:47 Eastern on 2026-10-22, into the pilot run folder results/2026-10-22-studio-a-mac-pilot2. The sampler ran as the operator (not root) for about 60 s and wrote 12 host.jsonl lines. Memory in decimal gigabytes from mem_used_bytes; CPU percentages are ps decaying averages, not instantaneous readings.. Source: results/2026-10-22-studio-a-mac-pilot2/host.jsonl (pilot folder on studio-a; copy in the internal runbook archive); results/2026-10-22-studio-a-mac-pilot2/meta.json (same; its host field is not published).
- A pilot folder, not the published run folder.
- The 16 GB includes the institution's MDM and endpoint-protection agents and a console session with a terminal; no environment session existed. It is a baseline input the report subtracts from later windows, not a per-environment number and not an idle cost of the harness.
- The design's idle-session cost (the footprint of a session's processes after login) was never taken, and the post-login baseline (step 9 of the reproduce table) does not exist.
- Watts are null: powermetrics needs root and the sampler did not run as root.
- Total CPU swung between 39.0 and 388.9 percent across the 12 samples (ps decaying averages, with setup work close in time) and is left off this table on purpose.
meta.json recorded build 15.7.5 (24G624), hardware Mac16,9 with 48 GB and 16 CPUs, git sha f0d01ce, and null for the Chromium path, the envd version and the baseline span, because no envd was running and the span is written after the logins.
Results
- Memory used with no environment session: 15.99 to 16.07 GB of 48 GB, mean 16.04 GB over 12 samples (measured, pilot folder; decimal gigabytes from
mem_used_bytes). Memory pressure normal in all 12 samples. Swap 0. - WindowServer CPU 12.9 to 21.0 percent across the samples (measured;
psdecaying averages, not instantaneous readings). Total CPU swung between 39.0 and 388.9 percent across the samples for the same reason, with a test run and setup work close in time; we do not read anything into it. - Watts: null.
powermetricsneeds root, and the sampler did not run as root. - What this number is for: the report subtracts a 0-env baseline from later sweep windows to estimate memory per environment. It is an input. It is not a per-session cost and not an idle cost of the harness, because the 16 GB includes the institution's management and endpoint-protection agents and a console session with a terminal, and the design's idle-session cost (the
footprintof a session's processes after login) was never taken.
Failures and surprises
CGSessionis missing on macOS 15.7.5 (measured, Gate 0). Our earlier documents said it is present on macOS 15 (author claim). The measured finding wins: that claim is wrong on this build.make park-consoleand theCGSessionline of Gate 0 fail. The console must be parked by hand through the user-switching menu. The probes do not useCGSession. Whether Screen Sharing survives a manual park is untested.- Endpoint protection slows file and process operations (informal measurement). A 15-line script, run once while a test suite was running, measured process start at 5.3 ms on the Studio against 1.7 ms on the laptop, and file create, read and delete at 15.6 ms against 4.0 ms; Python start was about the same on both (17.9 against 23.4 ms). Different machines, different OS versions, one run, under load: this is a note about the environment, not a benchmark. Reset and APFS clone timings may be skewed by it. The suggested mitigation, an exclusion for
/usr/local/drumsand/Users/env*, was not done. - Code-signing trust needs an on-screen dialog.
security add-trusted-cert, both in the user domain and with sudo on the System keychain, failed with "The authorization was denied since no user interaction was possible." The setup script's claim that system-wide trust works over SSH is wrong on 15.7.5. The half-imported identity was deleted. envd is installed ad hoc signed instead, which means TCC grants will not carry across rebuilds the way a stable identity was meant to make them. - Cask loop defect in
setup_host.sh. The loop fails when an app already exists outside Homebrew, here the institution-managed Chrome.brew install --cask --adoptwas tried and rejected, because it wants to change the group of the managed app. Worked around in the Day 0 driver; the fix (skip a cask whose/Applicationsapp is already present) is recorded for later and not made. - umask bug in the Day 0 driver (internal tooling, not in the repository). The driver set umask 077 for its secret files and the setup scripts inherited it:
/usr/local/drumscame out mode 0700 and/opt/homebrewlost world access. Repaired by hand:chmod o+rxon 843 directories ando+ron 5,616 files under/opt/homebrew;/usr/local/drumsset to 0755 in pass 2. The driver was fixed (077 only around the secret files, 022 for the rest) and tested locally with a fake sudo. - Pass 1 raw logs were deleted by mistake (a remove ran before a move). What survives is a transcript recovery: the setup log with lines over 300 characters cut, and the last 40 lines of the brew log. Rule adopted immediately after, and kept since: every run keeps its raw logs under a timestamped folder, nothing deletes them, secrets are counted and redacted in place, and the folder is archived. Archive, never delete.
- FileVault is on. Setup stops unless
DRUMS_ALLOW_FILEVAULT=1; a reboot needs a person at the machine for the pre-boot password. "Do not reboot studio-a" is the standing rule. - uv picked Python 3.14.7 first. The suite was stopped and re-run on 3.12.14, pinned by an untracked
.python-version. - Two envd binary sizes exist (the release build and the ad-hoc-signed install). The difference is consistent with signing and was not analysed. Neither size is a figure worth publishing.
Limitations
- Two of the planned 33 accounts exist. No session has been logged in. No LaunchAgent has been loaded. No TCC grant exists for envd anywhere. Nothing in this record measures the environment primitive.
- The baseline comes from a pilot folder, not the published run folder, and from a managed Mac whose agents we cannot remove. It is a baseline input, not a per-environment number, and the design's post-login baseline (step 9 of the reproduce table) does not exist.
- Author claims still open on this build: per-session pasteboard,
cfprefsdand TCC behaviour; whether a posted key stays inside its session; whether macOS keeps groupadminand mode 750 on an env home after first login; the login window offering hidden users and the clicks per boot; the LaunchAgent under launchd; keychain unlock over SSH; real reset, clone and screenshot timings and memory per env. - Pass 1 has no raw logs. Its outcomes above rest on a transcript recovery.
Reproduce
git clone <repo>; uv sync; make test; make build-envd(see EXP-001).DRUMS_HOST_OK=1 make setup-host. Expect the signing-trust step to need a person at the screen on 15.7.5;make signing-identityredoes that step alone. Expect the cask loop to fail if Chrome is already installed outside Homebrew.DRUMS_HOST_OK=1 make create-users(we created two accounts, not 33, on purpose).DRUMS_HOST_OK=1 make install-launchagent.make golden.DRUMS_HOST_OK=1 make seed-env-homes.make gate0. On this build expectCGSessionmissing.export RUN=results/<date>-<host>-mac; make meta; make baseline-samplebefore any env login. Run the sampler as root if watts are wanted.
Sources
- Repository branch
exp1-sessions-per-studio, headf0d01ce:scripts/mac/*.sh,scripts/write_meta.py,metrics/,Makefile,README.md(reproduce table and "The gates"). - Internal runbook archive, not on the branch: the Day 0 change record;
studio-day0/logs/20261022-024429/(pass 2 logs, status, run-info);pass1-logs-recovered-from-transcript.txtandpass1-status.txt(pass 1). - Pilot run folder on studio-a:
results/2026-10-22-studio-a-mac-pilot2/meta.jsonandhost.jsonl(a copy sits in the runbook archive; thehostfield ofmeta.jsonis not published). - Result file:
data/results/exp-002-host-baseline-0env.json. - Related: EXP-001, EXP-003, EXP-016.