fix(harness): judge the install separately from backend readiness
prd-number-check / require-numbered-prds (pull_request) Successful in 9s
test / image-input-builds (pull_request) Successful in 46s
test / integration-docker (pull_request) Successful in 1m3s
test / unit (pull_request) Successful in 2m58s
test / coverage (pull_request) Failing after 18s
tracker-policy-pr / check-pr (pull_request) Failing after 14m1s
prd-number-check / require-numbered-prds (pull_request) Successful in 9s
test / image-input-builds (pull_request) Successful in 46s
test / integration-docker (pull_request) Successful in 1m3s
test / unit (pull_request) Successful in 2m58s
test / coverage (pull_request) Failing after 18s
tracker-policy-pr / check-pr (pull_request) Failing after 14m1s
The first run against the branch's own code confirmed the doctor fix — no traceback, the firecracker probes now report "TAP pool: 0/8" instead of dying on PermissionError — and then failed for a reason the installer cannot fix. The Apple `container` service is per-USER. `container system status` reports an appRoot under ~/Library/Application Support/com.apple.container/, and bbtest sees "container system service: NOT running" while the creating admin's is running. A brand-new account therefore has no backend until it runs `container system start` once, doctor rightly fails, and `test` would be permanently red for host state that install.sh neither creates nor can regress. So stop treating doctor's exit code as one verdict. `test` now fails when the install is broken — no entry point, doctor crashed, or doctor could not report a usable python and config dir — and reports backend readiness as a note. BB_TEST_REQUIRE_BACKEND=1 restores the strict behaviour. A traceback is checked for explicitly rather than inferred from the exit code, because those are the same value. The PermissionError bug exited non-zero exactly like a missing prerequisite does; only the traceback distinguishes a defect from an environment fact, and that distinction is the whole point of this change. The research doc's footprint table had the service as a host-wide launchd service that survives user deletion. It does not. The state lives in the home and goes with it, so the reset is more complete than claimed — but the corollary is that a fresh account cannot run a bottle until the service is started for it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WEfZZhakx13bxTfXcZCoS5
This commit is contained in:
@@ -72,14 +72,24 @@ Grounding the teardown story in what `install.sh` and the backend create:
|
||||
| private venv fallback (no pipx) | `~/.bot-bottle/venv` + symlink in `~/.local/bin` ([`install.sh`](../install.sh)) | ✅ | ❌ removed with home |
|
||||
| PATH / token exports | shell profile (`~/.zprofile`, etc.); `BOT_BOTTLE_CLAUDE_OAUTH_TOKEN` ([`README.md:74`](../README.md)) | ✅ | ❌ removed with home |
|
||||
| **Apple `container` install** | `/usr/local/...` + notarized `.pkg` receipts | ❌ | ✅ **stays** |
|
||||
| **Apple `container` system service** | launchd system service (`container system start`) | ❌ | ✅ **stays** |
|
||||
| Apple `container` **service state** | per-user: `~/Library/Application Support/com.apple.container/` (`container system start`) | ✅ | ❌ removed with home |
|
||||
| **Homebrew** (if used for `container`/python) | `/opt/homebrew` | ❌ | ✅ **stays** |
|
||||
| Rosetta 2 (needed for image builds) | system | ❌ | ✅ **stays** |
|
||||
|
||||
The three bold rows are the crux: **deleting the throwaway user does not
|
||||
uninstall the Apple Container runtime, its system service, Homebrew, or
|
||||
Rosetta.** A VM, by contrast, wipes 100% of the above by definition —
|
||||
that's its entire advantage for this task.
|
||||
The bold rows are the crux: **deleting the throwaway user does not uninstall
|
||||
the Apple Container runtime, Homebrew, or Rosetta.** A VM, by contrast, wipes
|
||||
100% of the above by definition — that's its entire advantage for this task.
|
||||
|
||||
The service row is the exception, and a live harness run corrected it: the
|
||||
Apple `container` service is **per-user**, not a host-wide launchd service.
|
||||
`container system status` reports an `appRoot` under
|
||||
`~/Library/Application Support/com.apple.container/`, and a freshly created
|
||||
account sees `container system service: NOT running` even while the creating
|
||||
admin's is running. That cuts both ways — the state is genuinely removed with
|
||||
the home, so the reset is *more* complete than this table first claimed, but
|
||||
it also means **no brand-new user can run a bottle until they run
|
||||
`container system start` once**. `doctor` correctly fails until they do, which
|
||||
is why `test` judges backend readiness separately from install correctness.
|
||||
|
||||
## Option A — Disposable Tart VM (recommended)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user