pub enum PropertyClass {
ComplianceCoverage,
EffectRowSoundness,
CapabilityIsolation,
ResourceBounds,
ShieldHaltGuarantee,
CapabilityContainment,
ToolCallSoundness,
}Expand description
The closed catalog of properties a ProofTerm can certify.
§Fase 51.a ships Self::ComplianceCoverage. The §51.b-e classes
(EffectRowSoundness, CapabilityIsolation, ResourceBounds,
ShieldHaltGuarantee) land as the proof-term language generalizes
(D51.4 — “universal” is the architecture, shipped one class at a
time). Adding a variant here requires a matching witness variant +
checker arm — the §51.a drift gate pins this lockstep.
Variants§
ComplianceCoverage
Every regulatory class an apx/axonendpoint declares in
compliance: is (a) a known class in the closed
crate::esk::compliance registry and (b) backed by a present,
resolvable shield (shield_ref non-empty AND that shield exists
in the program IR). Catches phantom compliance classes (a
typo’d HIPPA) and compliance-claimed-without-enforcement
(declaring GDPR with no attached shield).
EffectRowSoundness
§51.b — every entry in a tool’s effects: <...> row is
well-formed: its base is in the closed effect catalog
(crate::pcc::effects::EFFECT_BASES); stream / trust
carry a qualifier (stream’s in the backpressure catalog); and
pure is exclusive (a tool cannot be both pure and
effectful). Catches phantom effects (typo’d network), bare
stream without a backpressure policy, and pure/impure
contradictions.
CapabilityIsolation
§51.c — every capability gate an axonstore declares (its
Pillar IV capability slug, §Fase 35.j) is a well-formed §32.g
capability scope (matches the closed grammar
^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$, via the OSS
axon_frontend::parser::is_valid_capability_slug). A malformed
gate is a Pillar IV defect: it can never match a properly-formed
bearer capability, so the store is either locked out or — worse,
if a consumer treats “unparseable gate” as “no gate” — silently
bypassed.
Scope (honest): this is the gate-integrity half. The
containment half — an apx’s reachable store gates ⊆ its declared
requires: set — needs the endpoint requires_capabilities
(AST / enterprise deploy metadata, NOT lowered to the frontend
IR) + flow→store reachability, and is deferred to §51.x
(enterprise PCC consumption, where requires lives).
ResourceBounds
§51.d — declared resource bounds are within sane limits:
an apx/axonendpoint’s retries is in [0, MAX_RETRIES]
(negative is nonsensical; above the ceiling is a retry storm),
and a socket carrying a DECLARED backpressure: credit(k)
has k >= 1 (a credit window of 0 deadlocks the §Fase 41.b
typed-resource gate). Unspecified socket credit is a legitimate
type state and is NOT refuted. timeout is out of scope by
design — it is a closed duration enum ({5s,15s,30s,60s})
already bounded at parse time, not an unbounded-resource risk.
ShieldHaltGuarantee
§51.e — a shield’s breach policy provides a real guarantee:
on_breach is a recognized policy (closed catalog — catches a
typo’d hault, which the parser does NOT reject since it reads
on_breach as a bare identifier), and a shield declaring
on_breach: halt actually scans something (a halt shield with
an empty scan: [] can never detect a breach, so the halt never
fires — a vacuous guarantee / security theater).
CapabilityContainment
§51.x — the CONTAINMENT half of capability isolation (the
deferral §51.c flagged): every capability gate on a store the
apx’s execute_flow REACHES is covered by the endpoint’s
declared requires: scopes. Otherwise the flow touches a store
gated by capability G the endpoint does not declare requiring
— a request satisfying the endpoint’s declared requires could
still reach a store it is not authorized for (capability leak /
privilege escalation). Reachability is a SOUND
over-approximation: every statically-reachable store op (both
conditional branches + the loop body) is counted. An
unresolvable execute_flow is REFUTED (cannot certify
containment for a flow the artifact does not contain).
ToolCallSoundness
§58.i — every structured use <Tool>(k = v, …) call satisfies the
called tool’s declared parameters: input schema: no argument
names a parameter the tool does not declare; no argument is
supplied twice; every required (non-optional) parameter is
supplied; and every UNAMBIGUOUS-LITERAL argument’s type aligns
with the declared type. This makes the §58.d CT-2 caller-blame
check an INDEPENDENTLY-VERIFIABLE proof — the tool schema rides
the bundle and the verifier re-derives the call’s soundness from
the artifact, never trusting the compiler that ran the type-check
(D1). Literal-type alignment is CONSERVATIVE (only Int/Float/Bool
literals; bare identifiers + ${…} interpolations are
runtime-resolved and skipped — zero false positives), so the
structural facts (unknown / duplicate / missing) are always
certified and the literal-type facts are certified where decidable
statically. A schema-less tool (no parameters:) and the legacy
use <Tool> on <arg> form carry no contract → no proof (D5).
Implementations§
Trait Implementations§
Source§impl Clone for PropertyClass
impl Clone for PropertyClass
Source§fn clone(&self) -> PropertyClass
fn clone(&self) -> PropertyClass
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PropertyClass
impl Debug for PropertyClass
Source§impl<'de> Deserialize<'de> for PropertyClass
impl<'de> Deserialize<'de> for PropertyClass
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for PropertyClass
Source§impl PartialEq for PropertyClass
impl PartialEq for PropertyClass
Source§fn eq(&self, other: &PropertyClass) -> bool
fn eq(&self, other: &PropertyClass) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for PropertyClass
impl Serialize for PropertyClass
impl StructuralPartialEq for PropertyClass
Auto Trait Implementations§
impl Freeze for PropertyClass
impl RefUnwindSafe for PropertyClass
impl Send for PropertyClass
impl Sync for PropertyClass
impl Unpin for PropertyClass
impl UnsafeUnpin for PropertyClass
impl UnwindSafe for PropertyClass
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,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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.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