levi-core 0.4.3

Entities, status resolution, and ranking for levi, the git-aware issue tracker
Documentation
mod applied;
mod claim;
mod comment;
mod commit_fact;
mod dependency;
mod log_entry;
mod project;
mod ref_fact;
mod status_change;
mod task;

pub use applied::*;
pub use claim::*;
pub use comment::*;
pub use commit_fact::*;
pub use dependency::*;
pub use log_entry::*;
pub use project::*;
pub use ref_fact::*;
pub use status_change::*;
pub use task::*;

#[cfg(test)]
mod tests {
    use super::*;
    use myko::wire::{MEvent, MEventType};

    #[test]
    fn task_event_cbor_roundtrip() {
        let t = Task {
            id: "abc123".into(),
            project_id: "p".into(),
            title: "T".into(),
            body: String::new(),
            priority: Priority::P1,
            labels: vec!["x".into()],
            created_by_dev: "d@e".into(),
            created_by_machine: "m".into(),
            created: "2026-07-18T00:00:00Z".into(),
        };
        let ev = MEvent::from_item(&t, MEventType::SET, "m");
        let mut buf = Vec::new();
        ciborium::into_writer(&ev, &mut buf).unwrap();
        let back: MEvent = ciborium::from_reader(buf.as_slice()).unwrap();
        let t2: Task = serde_json::from_value(back.item.clone()).unwrap();
        assert_eq!(t, t2);
        assert_eq!(back.item_type, "Task");
    }

    #[test]
    fn priority_orders_p0_first() {
        assert!(Priority::P0.rank() < Priority::P3.rank());
        assert_eq!(Priority::default(), Priority::P2);
    }
}