api: move the pause image from ActorTemplate to SandboxConfig - #848
Merged
Julian Gutierrez Oschmann (juli4n) merged 1 commit intoAug 11, 2026
Conversation
The pause image holds the sandbox's namespaces and runs no workload code. It is an implementation detail of the sandbox, not something actor authors pick, so it belongs with the sandbox binaries that already moved off the ActorTemplate onto the cluster-scoped SandboxConfig. It now travels with those binaries end to end: resolved from the pool's SandboxConfig, carried on ateletpb.SandboxAssets rather than WorkloadSpec, and recorded in the per-actor sandbox record so Checkpoint pins it into the snapshot manifest and Restore rebuilds the sandbox from the image the snapshot was taken with (the golden's on a DATA_ON_GOLDEN restore). A record without one is rejected outright rather than pulling an empty image.
Julian Gutierrez Oschmann (juli4n)
approved these changes
Aug 11, 2026
Julian Gutierrez Oschmann (juli4n)
merged commit Aug 11, 2026
da8414b
into
agent-substrate:main
11 checks passed
eliranw
added a commit
to eliranw/substrate
that referenced
this pull request
Aug 11, 2026
A non-positive limit means "unlimited" in the OCI spec, so it is not a claim on the guest. Summing it let a negative offset a sibling's real limit and slip the total past the envelope check: 1536Mi + 1024Mi + (-1536Mi) reads as 1024Mi against a 2048Mi guest, so a 2560Mi overrun was accepted. cpuLimitMillis already skipped a non-positive quota; memory now matches. Also repoints the SandboxConfig anchor in api-guide.md, which went stale when agent-substrate#848 renamed the section. Signed-off-by: Eliran Wolff <eliranw@nvidia.com>
haiyanmeng
added a commit
to haiyanmeng/substrate
that referenced
this pull request
Aug 11, 2026
unmarshalSandboxRecord rejects a manifest with no pauseImage since agent-substrate#848, but TestUploadLocalCheckpointDir's fixtures still write one without -- the two landed together and neither saw the other -- so eight subtests fail on the manifest read before they reach what they assert. Fill the field in writeLocalSnapshot rather than in each fixture: none of these subtests is about the pause image, and the one that is (TestSnapshotManifestRequiresPauseImage) builds its manifest by hand.
haiyanmeng
added a commit
to haiyanmeng/substrate
that referenced
this pull request
Aug 11, 2026
agent-substrate#848 moved the pause image onto the SandboxConfig and made the ActorTemplate schema strict about it, so the egress demo's template is now rejected outright: "unknown field spec.pauseImage". Nothing deploys, and the networking suite fails on a missing ActorTemplate. The install step reported success anyway, which is why this took an e2e run to find. The dispatcher runs a demo's _cmdline from an `if`, which disables errexit for everything under it, and _cmdline returns 0 no matter what the deploy did. Make the egress deploy exit on failure so the next one says so where it happens.
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.
The pause image holds the sandbox's namespaces and runs no workload code. It is an implementation detail of the sandbox, not something actor authors pick, so it belongs with the sandbox binaries that already moved off the ActorTemplate onto the cluster-scoped SandboxConfig.
It now travels with those binaries end to end: resolved from the pool's SandboxConfig, carried on ateletpb.SandboxAssets rather than WorkloadSpec, and recorded in the per-actor sandbox record so Checkpoint pins it into the snapshot manifest and Restore rebuilds the sandbox from the image the snapshot was taken with (the golden's on a DATA_ON_GOLDEN restore). A record without one is rejected outright rather than pulling an empty image.