Repository navigation
doc: name the aci_edge_sandboxes runtime in the design - #450
Merged
Pedro Henrique Penna (ppenna) merged 1 commit intoOct 9, 2026
Merged
Conversation
The component map and the sandbox architecture chapter described only the layered nvx sandbox launcher. The aci_edge_sandboxes crate also launches microVMs: its default backend boots OpenVMM directly with the managed lifecycle and no sandbox blocks, and its optional agent backend delegates to a separately supplied native library. Name both launchers, the guest path that serves blockless workloads, and the crate's tests. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
🟢 Approval recommended
The documentation accurately reflects the implementation and introduces no unresolved issues.
0 open findings
What changed in this PR
Documents aci_edge_sandboxes within NVX’s sandbox architecture and component ownership map.
Changes:
- Describes both sandbox launch paths and their guest models.
- Maps crate backends, guest responsibilities, and lifecycle tests to their owning components.
| File | Description |
|---|---|
doc/design/sandbox-filesystem-and-agent-architecture.md |
Names the crate, backends, lifecycle API, and blockless workload path. |
doc/design/code-ownership-map.md |
Adds ownership entries for edge sandbox runtime components and tests. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Pedro Henrique Penna (ppenna)
deleted the
doc-sync/edge-sandbox-components
branch
October 9, 2026 17:24
8 tasks
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.
Summary
The design docs start from the component responsibility map, but neither it nor the sandbox filesystem and agent architecture chapter named the
aci_edge_sandboxescrate, which is a second host component that launches NVX microVMs. The chapter already describes the blockless managed path that the crate uses (under Control protocol and checkpoint handoff), but it doesn't say which host component drives it. This PR names the crate, its two backends, the guest path that serves blockless workloads, and the crate's tests. It adds no new contract detail and links to the crate README for the API.Changes
nvx sandboxcommand attaches image layers and scratch, which the guest assembles into the layered root. The existing map row is renamed to Layered sandbox launch.scripts/nvx_tools/sandbox.pypasses--microvm-sandbox-block.guest/common/initrunsnvx-init-agentonly withnvx_sandbox=1.aci_edge_sandboxesexposes provision, start, exec, stop, and deprovision, and its contract model lives in a data-model crate.aci_edge_sandboxes/src/lib.rs,aci_edge_sandboxes/Cargo.toml(aci_edge_sandboxes_modelpath dependency),aci_edge_sandboxes/model/src/lib.rsaci_edge_sandboxes/src/openvmm/launch.rs(--microvm-lifecycle managed, no--microvm-sandbox-block, nonvx_sandbox=1; the unit test asserts the block flag is absent).guest/common/initthen startsnvx-managed-agentwith no container root.reconcileinaci_edge_sandboxes/src/openvmm/mod.rs, plusfilesystem.rsandnetwork.rsnvx_map=), and workload account creation (nvx_workload_account=create).guest/common/init(ensure_workload_account),guest/common/nvx-managed-agent.c(MAP_TOKEN)aci_edge_sandboxes/src/agent/, theagentfeature inCargo.toml. No build script underscripts/,docker/, orguest/produces an edge initramfs.aci_edge_sandboxes/tests/{validation,mock_backend,openvmm_fake,openvmm_e2e}.rs,scripts/nvx.py test-aci-edge-sandboxesPinned OpenVMM:
f12dcf5e8f2ea60cc15899dd16852320530670bd(unchanged). The design text relies on it only for the managed-lifecycle and sandbox-block options. Thenvx_sandbox=1token is a caller token that OpenVMM does not add.Conservative choices:
nvx_overlay_upper=ramfslayout. Only the crate README and the pin commit message say so, and that guest isn't built from this repository.Follow-ups (out of scope)
THIRD_PARTY_NOTICES.mdstill calls OpenVMM a private submodule that only authorized users can access.nanvix/openvmmis public (gh api repos/nanvix/openvmmreports"private": false). The same stale wording is indoc/ci.md(theOPENVMM_DEPLOY_KEYparagraph) anddoc/run.md(the download token note). An open PR touches each of these, or the file is outside this run's edit boundary.doc/openvmm-upstream-roadmap.mdis a point-in-time plan that pins fork tip2728f33ea, but the current pin isf12dcf5e8. It needs either a refresh or an explicit dated-snapshot label.scripts/setup/README.mdis documentation outsidedoc/. Moving it would also require updating a path check inscripts/test_nvx_tools.py, so it needs a code-and-doc change.doc/design/validation.mddoesn't list theaci_edge_sandboxesreal-hypervisor lifecycle suite among the validation layers.unittest_results.txtis a tracked file at the repository root that looks like a stray test log.Validation
python -m unittest scripts.test_nvx_tools.CliTests scripts.test_performance.PerformanceTests: 110 tests passed (1 skipped).doc/design.md,cold-boot.md,machine-and-device-abi.md,snapshot-and-restore.md,doc/guests/ubuntu-guest.md, anddoc/run.md. All relative links and anchors resolve, each changed file has one H1 and balanced code fences, anddoc/design.mdlinks every chapter indoc/design/.git diff --check: clean.python scripts/nvx.py verify: passed.