pub enum RuntimeError {
Show 36 variants
ArtifactNotFound {
name: String,
version: String,
},
ArtifactIntegrityFailed {
name: String,
version: String,
},
LockMissingEntry {
name: String,
},
LockVersionMismatch {
name: String,
requested: String,
pinned: String,
},
ArtifactArchive {
name: String,
version: String,
message: String,
},
ToolComponentCompile {
name: String,
version: String,
message: String,
},
CapsuleCompile(String),
CreateWorkdir {
path: String,
source: Error,
},
WriteToolManifest {
path: String,
source: Error,
},
SystemPromptFileRead {
path: String,
source: Error,
},
CompactionSystemPromptFileRead {
path: String,
source: Error,
},
SystemPromptArtifactRead {
name: String,
source: Error,
},
SkillSourceNotFound {
path: String,
},
SkillSourceMissingSkillMd {
path: String,
},
SkillSourceRead {
path: String,
source: Error,
},
InvalidNetworkAllowEntry {
entry: String,
message: String,
},
InvalidFilesystemScope {
scope: String,
message: String,
},
ContainmentFloorUnmet {
declared: ContainmentClass,
achieved: ContainmentClass,
reason: String,
},
StagedRuntimeRequiresSealed {
binaries: Vec<String>,
declared: ContainmentClass,
},
ShellBinaryPackageUnreachable {
entries: Vec<UnreachableEntrypoint>,
},
SealedRootConstructionFailed {
detail: String,
},
EgressNamespaceUnavailable {
blocker: EgressNamespaceBlocker,
reason: String,
},
CapsuleExportMissing,
ToolExportMissing {
name: String,
},
CapsuleTrap(String),
CapsuleDeadlineExceeded {
seconds: u64,
},
CapsuleResourceLimit {
message: String,
},
ShellResourceLimitExceeded {
binary: String,
limit: String,
detail: String,
},
CgroupDelegationUnavailable {
reason: String,
},
WorkdirSizeExceeded {
max_bytes: u64,
observed_bytes: u64,
},
WasiInit {
path: String,
message: String,
},
DriverNotConfigured,
DriverNotInstalled(String),
AgentLoopFailed(String),
PortInUse {
port: u16,
},
Runtime(String),
}Variants§
ArtifactNotFound
ArtifactIntegrityFailed
LockMissingEntry
LockVersionMismatch
ArtifactArchive
ToolComponentCompile
CapsuleCompile(String)
CreateWorkdir
WriteToolManifest
SystemPromptFileRead
CompactionSystemPromptFileRead
SystemPromptArtifactRead
SkillSourceNotFound
SkillSourceMissingSkillMd
SkillSourceRead
InvalidNetworkAllowEntry
InvalidFilesystemScope
ContainmentFloorUnmet
The declared containment floor is stronger than what this host’s kernel can back.
Raised in the stage/launch seam, before any registry pull, component compile or workdir
creation — achieved always comes from a live host probe, never from the manifest.
StagedRuntimeRequiresSealed
A capsule declares capabilities.shell.staged_runtime without an effective sealed
containment floor.
Deliberately distinct from Self::ContainmentFloorUnmet: that one compares the declared
floor against what the host can back, and its remedy is to lower the floor or move hosts.
This one is decided against the declared floor alone and never looks at the host at all, so
it fires identically on a machine that could deliver sealed — a staged runtime has no
composed root to be staged into unless the capsule asked for one, and quietly launching it
without the mount would leave the interpreter simply absent. Its remedy is to raise the
declared floor (or drop the grant), which is the opposite advice.
binaries names every offending staged_runtime binary so the operator does not have to
re-run to find the second one.
ShellBinaryPackageUnreachable
A sealed capsule allowlists a script whose interpreter’s package tree nothing declared
could make reachable inside the composed root.
Deliberately distinct from Self::StagedRuntimeRequiresSealed, which it sits next to in
stage_session: that one fires when a grant was declared at too low a floor, this one
fires when no grant was declared at all and the floor is already sealed. Their remedies
point in opposite directions — raise the floor there, add a grant here.
entries names every offending allowlist entry so an operator fixing this does not have to
re-run to discover the second script, following the same precedent.
Fields
entries: Vec<UnreachableEntrypoint>SealedRootConstructionFailed
A sealed session’s composed root could not be built in the forked child, after the
pre-launch probe reported the mechanism available.
Deliberately distinct from Self::ContainmentFloorUnmet: that one is a refusal decided
before anything is staged, on a host that never claimed to offer sealed. This one is a
host that claimed it and then failed to deliver — a race, a mount table that changed under
the runtime, or an edge case the cheap probe cannot catch. Conflating the two would tell an
operator to lower their declared floor when the real answer is that something moved.
detail is the message the child wrote to the pre_exec diagnostic pipe, which names the
exact step (unshare, a specific bind mount, pivot_root) and its errno.
This host cannot give a capsule’s native subprocess tree its own network namespace, so the
egress boundary that mediates capabilities.network.allow cannot be built.
Raised before any registry pull, component compile or workdir creation, and raised for
every Linux capsule that can spawn a subprocess — including one whose
capabilities.network.allow is empty. That breadth is the point: with the namespace
missing, an empty allowlist would mean unrestricted egress rather than none, because the
seccomp connect/sendto interception that used to back it was deleted as unsound rather
than kept as a fallback. There is deliberately no path that continues at reduced
enforcement.
Deliberately distinct from Self::ContainmentFloorUnmet, which this would otherwise
look like: that one compares a declared containment class against what the host can
back, and its remedy is to lower the declared floor. A network namespace is not part of
the containment ladder — every class needs it equally — so lowering the floor fixes
nothing here, and offering that advice would be actively misleading.
CapsuleExportMissing
ToolExportMissing
CapsuleTrap(String)
CapsuleDeadlineExceeded
CapsuleResourceLimit
ShellResourceLimitExceeded
WorkdirSizeExceeded
WasiInit
DriverNotConfigured
DriverNotInstalled(String)
AgentLoopFailed(String)
PortInUse
Runtime(String)
Implementations§
Trait Implementations§
Source§impl Debug for RuntimeError
impl Debug for RuntimeError
Source§impl Display for RuntimeError
impl Display for RuntimeError
Source§impl Error for RuntimeError
impl Error for RuntimeError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
Auto Trait Implementations§
impl !RefUnwindSafe for RuntimeError
impl !UnwindSafe for RuntimeError
impl Freeze for RuntimeError
impl Send for RuntimeError
impl Sync for RuntimeError
impl Unpin for RuntimeError
impl UnsafeUnpin for RuntimeError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more