Agentic Sandbox v2026.5.5
Agentic Sandbox v2026.5.5
Released: 2026-05-20 Tag: `v2026.5.5` Previous: `v2026.5.4` (2026-05-20) Compare: `v2026.5.4...v2026.5.5`
What this release is
The end-to-end validation patch for v2026.5.4's two operator-facing fixes (#312, #313). v2026.5.4 shipped both with dry-run + cross-reference validation; this release ran them on a real libvirt host and found what the dry-run couldn't catch.
Six commits, three operator-visible bug fixes, one CI gate restoration. After this release the base-image build pipeline works without manual intervention, the browser-qa loadout boots a fully functional VM in one shot, and e2e is back on the release-blocking path.
What changed since v2026.5.4
- Loadout-based VM provisioning works again. A silent regression from #259's mode-600 hotfix had been blocking every loadout-based provision at "Generating health endpoint token…" since it landed. Found by running #313's live-VM validation; fixed by adding `sudo` to `get_health_token_hash`'s grep.
- `browser-qa` loadout is now actually functional. First live-VM run surfaced three bugs that the issue body's proposed YAML had inherited — a non-existent Ubuntu 24.04 package, a udev rule that didn't apply retroactively, and no Xorg startup mechanism despite "Xorg :99 runs" being a stated acceptance criterion. All three fixed; re-provision passes 7/7 checks.
- `build-base-image.sh` is now self-completing. The `--cdrom` → `--location` switch from v2026.5.4 fixed the virt-install API rejection but exposed a second latent bug: autoinstall has no poweroff trigger, so the installer reboots into the installed system and sits idle at a login prompt forever. Added `shutdown -h now` to late-commands. Builds now run unattended end-to-end.
- E2E hard-gate restored for tag pushes. The `if: false` workaround from commit `13faf95` is reverted. After v2026.5.5+ ships cleanly with e2e green, the next change drops the `if:` entirely so e2e gates every push.
Validation evidence
This is the first release where #312 + #313 are operator-proven, not just code-proven.
#312 — base-image build, end-to-end on titan:
$ sudo images/qemu/build-base-image.sh 24.04 --output /tmp/test-24.04.qcow2
... (autoinstall ran ~9 min; virt-customize + virt-sparsify clean)
[verify] Recorded test-24.04.qcow2 → 2410afc6b8eeb5793539b4c4cdbc24e02210d1397ee1d45f8186df55b67b1c39
✓ Built: /tmp/test-24.04.qcow2 (3.0G sparse, 40G virtual)
#313 — browser-qa VM, 7/7 acceptance checks:
[1] Xorg :99 running? ✓ PASS (pid via xorg99.service)
[2] /dev/uinput group + mode? ✓ PASS (crw-rw---- root:input)
[3] carbonyl runtime version? ✓ PASS (Carbonyl 0.2.0-alpha.3)
[4] python3-uinput importable? ✓ PASS
[5] agent in input group? ✓ PASS
[6] xserver-xorg-input-evdev? ✓ PASS
[7] xorg99.service active? ✓ PASS
New helper
- `scripts/validate-browser-qa.sh <vm-name>` — SSH into a provisioned browser-qa VM and check all 7 acceptance criteria. Exit 0 on pass, 1 on fail, 2 on SSH-unreachable. Suitable for CI gating later.
Upgrade matrix
| If you are… | Do this |
|---|---|
| Running v2026.5.4 with loadout-based provisioning broken | Upgrade — the secrets fix (`58c50c6`) unblocks every loadout-based `provision-vm.sh` invocation. |
| Using the `browser-qa` loadout | Upgrade — the three layer fixes (`629b598`) are the difference between "VM boots but Xorg isn't running and packages didn't install" and "7/7 acceptance checks pass." |
| Building base images | Upgrade — the poweroff fix means `build-base-image.sh` finishes unattended instead of hanging waiting for shutdown after install. |
| Running CI | Upgrade — tag pushes once again gate on e2e. v2026.5.5's own tag is the first to exercise the restored gate. |
| Operating other parts of the system | Upgrade is safe. No behavior change for v1/v2 clients, no API change, no migration. |
How to verify the upgrade
git fetch --tags origin
git checkout v2026.5.5
make build
# Verify versions
./management/target/release/agentic-mgmt --version # 2026.5.5
./cli/target/release/sandboxctl --version # 2026.5.5
./agent-rs/target/release/agent-client --version # 2026.5.5
# Verify the loopback default from v2026.5.4 is still in place
unset LISTEN_ADDR
./management/target/release/agentic-mgmt --help 2>&1 | head -3
# Verify the new browser-qa validation helper exists and is executable
test -x scripts/validate-browser-qa.sh && echo "OK"
# Optional: provision a browser-qa VM and run validation end-to-end
./images/qemu/provision-vm.sh agent-browser \
--loadout profiles/browser-qa.yaml \
--ssh-key ~/.ssh/automation_ed25519.pub \
--wait-ready
./scripts/validate-browser-qa.sh agent-browser # should exit 0
./scripts/destroy-vm.sh --force agent-browser
Issues closed
- #312 — `build-base-image.sh` virt-install API incompatibility. Full chain: v2026.5.4's `f105c9f` (the `--cdrom` → `--location` switch) plus this release's `b5b1e18` (the autoinstall poweroff that completes the build) plus `9720215` (e2e CI hard-gate restored).
- #313 — `browser-qa` loadout for trusted-input browser automation. Full chain: v2026.5.4's `df3ba86` (layer + profile + docs) plus this release's `58c50c6` (secrets regression unblock), `629b598` (three layer bugs from live-VM validation), `3b063af` (validate script xorg99 check), `b6ba53a` (docs pointer).
Carbonyl-agent cross-repo follow-up
`roctinam/carbonyl-agent#120`'s "VM-fallback documented + working" acceptance criterion can now be checked off in that thread — the loadout is proven on this host.
Known limitations / deferred
Carried forward from v2026.5.4, unchanged:
- #256 WS bearer-auth-on-upgrade stays open — needs paired dashboard JS rework. Loopback bind from v2026.5.4 cuts the documented cross-VM threat in the meantime.
- #257 full TLS wiring stays open. Multi-day work for multi-host deployments; not load-bearing for the single-host default.
- #114 + children (Alpine + Proxmox provisioning) deferred to 2026-08-17 check date.
Full change log
See [`CHANGELOG.md` `[2026.5.5]`](../../CHANGELOG.md#202655-2026-05-20) for the detailed Added / Fixed / Changed / Documentation / Operator-notes / Issues-closed breakdown.
Tagging procedure
When you greenlight the cut:
git tag -a v2026.5.5 -m "$(cat <<'EOF'
v2026.5.5 — end-to-end validation patch
Six commits since v2026.5.4 — all from running the v2026.5.4 fixes
end-to-end on a real libvirt host and finding what dry-run validation
couldn't catch.
- get_health_token_hash sudo fix (unblocks all loadout provisions
silently broken since #259's mode-600 hotfix)
- browser-qa layer: three bugs from live-VM validation
(xserver-xorg-video-modesetting non-existent in 24.04,
retroactive udev trigger missing, no Xorg startup mechanism)
- validate-browser-qa.sh smoke-test helper
- build-base-image.sh autoinstall poweroff (completes #312;
builds now self-complete instead of hanging post-install)
- e2e CI hard-gate restored for tag pushes (reverts the
if: false workaround from #312 cooldown)
Closes #312, #313.
Full notes: docs/releases/v2026.5.5.md and CHANGELOG.md [2026.5.5]
EOF
)"
git push origin v2026.5.5
git push github v2026.5.5