use wintercount::{from_ledger, policy_hash, PolicySet};
fn main() {
let v1 = policy_hash(b"allow: read\nrequire_approval: false");
let v2 = policy_hash(b"allow: read\nrequire_approval: true");
let ledger = vec![
format!(r#"{{"ts":100,"type":"tool_call","data":{{"policy_hash":"{v1}","tool":"read_file"}}}}"#),
format!(r#"{{"ts":150,"type":"tool_call","data":{{"policy_hash":"{v1}","tool":"write_file"}}}}"#),
format!(r#"{{"ts":200,"type":"policy_reload","data":{{"policy_hash":"{v2}"}}}}"#),
format!(r#"{{"ts":250,"type":"tool_call","data":{{"policy_hash":"{v2}","tool":"write_file"}}}}"#),
];
let wc = from_ledger(ledger.into_iter());
let mut registry = PolicySet::new();
registry.register(b"allow: read\nrequire_approval: false".to_vec(), "policy-v1.yaml");
registry.register(b"allow: read\nrequire_approval: true".to_vec(), "policy-v2.yaml");
println!("the robe:");
for m in wc.marks() {
println!(" t={:4} governed by {} ({})", m.ts, &m.policy_hash[..12], m.label.as_deref().unwrap_or("-"));
}
println!("\ntransitions:");
for (ts, old, new) in wc.transitions() {
println!(" t={ts}: {} → {}", old.as_deref().unwrap_or("founding"), &new[..12]);
}
println!("\nwhat governed at t=175? {}", &wc.policy_at(175).unwrap()[..12]);
println!("what governed at t=225? {}", &wc.policy_at(225).unwrap()[..12]);
let foreign = wc.foreign_marks(®istry, true);
println!("\nmarks under unrecognized policy: {}", foreign.len());
}