//! Audit display: resolve the raw signing keys in a methodology record to //! human-readable principals via a roster. //! //! Run: `cargo run -p joule-code-identity --example audit` use joule_code_identity::{did_key, ActorKind, Identity, Roster}; fn main() { // three distinct principals — an author and two reviewers let alice = Identity::from_seed([1; 32], "alice@openie.dev", ActorKind::Human); let structural = Identity::from_seed([2; 32], "structural-reviewer", ActorKind::Agent); let semantic = Identity::from_seed([3; 32], "granite-reviewer-v1", ActorKind::Agent); // the roster: the team's naming of known signers (a convention, not a trust root) let mut roster = Roster::default(); roster.register(alice.principal()); roster.register(structural.principal()); roster.register(semantic.principal()); // an op's author key and two reviewer keys, as they'd appear in artifacts println!("op authored by: {}", roster.describe(&alice.verifying_key())); println!("spec-compliance: {}", roster.describe(&structural.verifying_key())); println!("quality review: {}", roster.describe(&semantic.verifying_key())); // a signer the roster doesn't name is still fully traced by its did:key let stranger = Identity::from_seed([9; 32], "?", ActorKind::Agent); println!("an unknown signer: {}", roster.describe(&stranger.verifying_key())); println!(" (its trace is authoritative regardless: {})", did_key(&stranger.verifying_key())); }