feat(sandbox): add operator-only persistent pins - #46
Merged
Merged
Conversation
jmgilman
marked this pull request as ready for review
September 16, 2026 17:16
Contributor
Author
|
Live verification cleanup complete: original agentcompute.service is active; production binary/config hashes are unchanged. Disposable Incus/Mac fixtures are gone and the preexisting sandbox set was preserved. Removed the temporary candidate unit, test credentials/config, binaries, verification scripts, and screenshot scratch from agentcompute01, plus local throwaway files. Final head fe7b62c has passing CI, GitHub Pages build, and Images Validate checks; companion root#38 documentation CI also passed. PR is ready for review; nothing was merged or permanently deployed. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #45.
Changes
sandbox.pin_identities(empty by default),sandbox.create(pinned=True), andsandbox.pin(name, pinned)with exact authenticated-subject authorization.pinned/pinned_byon create/get/list/pin, document TTL semantics and recipe-only reusable images, and regenerate interface mocks.Companion operator documentation: GilmanLab/root#38 (documentation CI passed).
Verification
mise exec -- go test -race ./...passed.mise exec -- golangci-lint fmtandgolangci-lint run ./... --show-stats=falsepassed.mise exec -- moon run docs:build root:smokepassed; companion central documentation build passed.fe7b62c: CI, GitHub Pages build, and Images Validate. Release/deployment jobs were skipped by workflow conditions.Live acceptance — agentcompute01, 2026-09-16 UTC
Ran a temporary candidate HTTP service using the existing service identity and Incus/Lume backends, with explicit operator approval. Managed production binary/config were not replaced.
pin45-incusandpin45-macwithttl_minutes=1, pinned=True; create/get/list returnedpinned: true, pinned_by: "omp". Incus contained a running Linux probe; the Mac fixture exercised the live sidecar without launching a Mac VM.printf pin45-alivesuccessfully.ordinaryidentity: create-pinned, pin, and unpin returned exactlycapability failed: pinning requires an operator identity; before/after get results were identical and no denied sandbox was created.pin_identities: []rejected the operator's create-pinned and unpin calls while preserving existing pins.sandbox.pin(..., pinned=True), waited past TTL, then unpinned. Both were absent within 20.44 seconds, under one reaper interval. The original service and unchanged binary/config hashes were verified again.Three consecutive expired-scan log excerpts:
Verifier note: an earlier cleanup observation using
sandbox.list()raced with deletion between sandbox enumeration and instance enumeration. The successful run checked each fixture's disappearance viasandbox.get()instead. No production-code workaround was added.Rollout
No production binary or managed configuration is replaced by this PR. After installing the release, enable
sandbox.pin_identities: [omp]through the fleet-managed configuration. Existing pins stay effective if the allowlist is later emptied. Pins are not backups and do not promote sandbox-local images into the catalog.