pub struct WalRecord {
pub seq: u64,
pub at: Tick,
pub instance: InstanceId,
pub principal: Principal,
pub action_type_code: TypeCode,
pub action_bytes: Vec<u8>,
pub caps_bits: u64,
pub auth_decision: AuthDecisionAnnotation,
pub prev_chain_hash: [u8; 32],
pub this_chain_hash: [u8; 32],
pub signature: Option<Vec<u8>>,
pub signature_pqc: Option<Vec<u8>>,
/* private fields */
}Expand description
Single committed step recorded in the WAL.
Fields§
§seq: u64Monotonic record sequence within this WAL.
at: TickTick at which the producing step() ran.
instance: InstanceIdInstance the action ran against.
principal: PrincipalPrincipal under which the action was submitted.
action_type_code: TypeCodeType code of the executed action.
action_bytes: Vec<u8>Canonical action bytes (replay deserializes from these).
caps_bits: u64CapabilityMask bits in effect during step().
auth_decision: AuthDecisionAnnotationAuth-decision summary for this step’s Ops.
prev_chain_hash: [u8; 32]Previous record’s this_chain_hash (or zero for record 0).
this_chain_hash: [u8; 32]blake3::keyed(chain_key, prev_chain_hash || canonical(body)).
signature: Option<Vec<u8>>Ed25519 signature over the canonical WalRecordBody bytes
(the same bytes hashed into this_chain_hash). None when the
owning WAL was created with SignatureClass::None. Stored as
Vec<u8> (always exactly 64 bytes when present) because serde’s
array deserializer caps at 32 — same workaround as the header’s
domain_separation_context.
signature_pqc: Option<Vec<u8>>PQC signature bytes for Hybrid signing modes (envelope slot for
ML-DSA 65 or other PQC algorithms). Paired with signature for
dual-sign verification under Hybrid policy. None for non-Hybrid
configurations. Stored as Vec<u8> because PQC signatures exceed
the serde 32-byte fixed-array limit (ML-DSA 65 signature = 3309
bytes).