pub struct SessionProof {
pub version: u32,
pub session_id: String,
pub timestamp: String,
pub user_prompts: Vec<UserPrompt>,
pub semantic_context: Vec<SemanticSearchResult>,
pub events: Vec<SessionEvent>,
pub files_read: Vec<FileSnapshot>,
pub files_written: Vec<FileSnapshot>,
pub files_root: [u8; 32],
pub signature: [u8; 64],
pub signer_public_key: [u8; 32],
pub device_id: [u8; 16],
}Expand description
A session proof captures everything the AI touched in a single turn.
Unlike a search ProofReceipt (which proves what search results the AI got),
a SessionProof proves which files the AI read and wrote during a response,
what the user asked, and what the semantic substrate contained.
This is the thing git CAN’T do — git tracks diffs, Canon tracks cognition: what the AI’s understanding of the codebase looked like at decision time.
Fields§
§version: u32§session_id: String§timestamp: String§user_prompts: Vec<UserPrompt>What the user asked the AI
semantic_context: Vec<SemanticSearchResult>Semantic search results for each user prompt — the AI’s “knowledge state”
events: Vec<SessionEvent>Tool call events in chronological order (with input/output previews)
files_read: Vec<FileSnapshot>Files the AI read (with content hashes)
files_written: Vec<FileSnapshot>Files the AI wrote or edited (with content hashes)
files_root: [u8; 32]Merkle root of all file hashes (reads + writes, sorted by path)
signature: [u8; 64]Ed25519 signature
signer_public_key: [u8; 32]Signer’s public key
device_id: [u8; 16]Signer’s device ID
Implementations§
Source§impl SessionProof
impl SessionProof
Sourcepub fn signing_bytes(&self) -> Vec<u8> ⓘ
pub fn signing_bytes(&self) -> Vec<u8> ⓘ
Compute deterministic bytes for signing.
Layout: version (4) || session_id_hash (32) || prompts_hash (32) || semantic_hash (32) || files_root (32)
Total: 164 bytes
Sourcepub fn verify_signature(&self) -> Result<()>
pub fn verify_signature(&self) -> Result<()>
Verify the Ed25519 signature.
Sourcepub fn verify_files_root(&self) -> Result<()>
pub fn verify_files_root(&self) -> Result<()>
Verify the files Merkle root matches the file snapshots.
Sourcepub fn verify_all(&self) -> Result<()>
pub fn verify_all(&self) -> Result<()>
Verify everything: signature + files root.
Trait Implementations§
Source§impl Clone for SessionProof
impl Clone for SessionProof
Source§fn clone(&self) -> SessionProof
fn clone(&self) -> SessionProof
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more