Status: canonical
PSI-289/#3594reference record, updated 2026-03-14 after landing runtime manifests and session-claims bundles inpsionic-runtimeandpsionic-net.
This document records the first Psionic-owned contract for policy-meaningful networked execution identity.
Run the identity harness from the repo root:
scripts/release/check-psionic-network-execution-identity.shTwo previously planned Psionic-wide contracts now exist:
RuntimeManifestincrates/psionic-runtime/src/proof.rsSessionClaimsBundleincrates/psionic-net/src/lib.rs
Together they make the network lane say, in typed form:
- which runtime backend and toolchain were actually bound to the lane
- which environment and artifact refs were identity-relevant
- which static config changed execution identity
- which mutable variables were observed but intentionally excluded from the identity digest
- which peer key and transport path the claims were bound to
- whether the lane is claiming
none,best_effort, or proof-bearing posture
RuntimeManifest now owns the digest split that the architecture doc had only
described abstractly.
Identity-relevant inputs:
- runtime backend and toolchain
- selected device facts
- validation reference
- environment refs
- artifact bindings
- static config bindings
- claims profile identifier
Mutable-but-non-identity inputs:
- runtime variables such as env vars or live knobs that operators still need to see but that must not silently collapse into the same execution identity
The manifest now carries both:
identity_digestmanifest_digest
Changing only mutable variables changes manifest_digest while leaving
identity_digest stable.
SessionClaimsBundle is now carried inside the authenticated wire envelope in
psionic-net, which means the existing transport signature covers the claims
payload directly.
The bundle now binds:
- peer node id
- peer auth public key
- selected transport path kind
- relay id and session tag when the path is relay-bound
- runtime manifest
- proof posture
The current proof posture values are:
nonebest_effortproof_bearing
The current policy posture values are:
nonebest_effortrequired
The current enforcement point is authenticate_incoming_envelope in
psionic-net.
What it does now:
- accepts missing claims when posture is
none - accepts missing claims but marks posture unavailable when policy is
best_effort - rejects missing claims with
ClusterJoinRefusalReason::SessionClaimsMissingwhen policy isrequired - rejects detached claims with
ClusterJoinRefusalReason::SessionClaimsDetached - rejects invalid claims with
ClusterJoinRefusalReason::SessionClaimsInvalid
Operator-facing visibility now exists through PeerSnapshot.session_claims,
which surfaces:
- policy posture
- verification disposition
- runtime-manifest identity digest
- runtime-manifest digest
- claims profile id
- proof posture
- degraded detail when verification is unavailable, invalid, or detached
This issue does not yet implement:
- a separately signed inner claims object distinct from the authenticated wire envelope
- external manifest registries or policy-authority evaluation
- kernel or Nexus settlement policy over claims digests
- non-cluster service productization for sandbox or validator session identity
What it does do is close the Psionic-side gap: networked execution now has a typed manifest-plus-claims contract, explicit degraded modes, real required-path rejection, and operator-visible posture without reconstructing identity from raw logs.