pub enum TrustLevel {
Trusted,
Untrusted,
}Expand description
How far a workload’s code is trusted — the declared input from which
admission derives a minimum ExecSubstrate (R894).
§Absent means trusted, and that is only safe because of where it is stamped
The default direction is the trap this axis exists to close, so it is worth
stating exactly. Every WorkloadSpec in the tree today is built by operator
code — a reconciler, an appliance builder, a qed dispatcher — and none of
them declares trust. Making the absent key mean untrusted would refuse the
entire fleet on the day this lands; making it mean trusted is correct for
exactly that population and wrong for any other.
So the rule is not “absent means trusted”. It is: the single choke point
that ingests code the operator did not write stamps
TRUST_UNTRUSTED_VALUE as it builds the spec
(WorkloadSpec::stamp_untrusted), and a spec that reaches admission
without having passed through operator-authored construction cannot exist.
A tenant does not hand yah a WorkloadSpec; it hands yah an image and an
argv, which yah’s own code puts into a spec. That is why the marker is not
self-attestable: the untrusted party never holds the pen.
R823 (untrusted camp vending on microVMs) is the first such choke point. If
a second one appears, it stamps too — and the rule to apply is that any
constructor taking third-party bytes calls
stamp_untrusted in the same function that
takes them, not in a caller that might be forgotten.
Variants§
Trusted
Operator-authored code. No substrate floor.
Untrusted
Third-party code. Must not share a kernel with the fleet.
Implementations§
Source§impl TrustLevel
impl TrustLevel
Sourcepub fn minimum_substrate(self) -> ExecSubstrate
pub fn minimum_substrate(self) -> ExecSubstrate
The weakest substrate this trust level may run on.
TrustLevel::Untrusted maps to ExecSubstrate::MicroVm because a
container shares the node’s kernel, and “untrusted code never shares a
kernel with the fleet” is the rule this axis makes checkable. W344’s
isolation table says “containerd or microVM” for higher-risk code; the
2026-09-11 operator call resolved that disjunction to the strict side
for code the operator did not write.
TrustLevel::Trusted maps to ExecSubstrate::Native, the bottom of
the ordering — i.e. no constraint, which is what every workload running
today has.
Trait Implementations§
Source§impl Clone for TrustLevel
impl Clone for TrustLevel
impl Copy for TrustLevel
Source§impl Debug for TrustLevel
impl Debug for TrustLevel
Source§impl Default for TrustLevel
impl Default for TrustLevel
impl Eq for TrustLevel
Source§impl Hash for TrustLevel
impl Hash for TrustLevel
Source§impl Ord for TrustLevel
impl Ord for TrustLevel
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
1.21.0 (const: unstable) · Source§fn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for TrustLevel
impl PartialEq for TrustLevel
Source§impl PartialOrd for TrustLevel
impl PartialOrd for TrustLevel
impl StructuralPartialEq for TrustLevel
Auto Trait Implementations§
impl Freeze for TrustLevel
impl RefUnwindSafe for TrustLevel
impl Send for TrustLevel
impl Sync for TrustLevel
impl Unpin for TrustLevel
impl UnsafeUnpin for TrustLevel
impl UnwindSafe for TrustLevel
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.