lazyspec 0.8.0

A little TUI & CLI for project documentation.
Documentation
mod common;

use lazyspec::engine::document::DocType;
use lazyspec::engine::store::Filter;

fn setup() -> (common::TestFixture, lazyspec::engine::store::Store) {
    let fixture = common::TestFixture::new();
    fixture.write_doc(
        "docs/rfcs/RFC-001-auth.md",
        "---\ntitle: \"Auth Redesign\"\ntype: rfc\nstatus: review\nauthor: jkaloger\ndate: 2026-03-01\ntags: [security, auth]\n---\n\nAuth body.\n",
    );
    fixture.write_doc(
        "docs/rfcs/RFC-002-api.md",
        "---\ntitle: \"API Versioning\"\ntype: rfc\nstatus: draft\nauthor: jkaloger\ndate: 2026-03-02\ntags: [api]\n---\n\nAPI body.\n",
    );
    let store = fixture.store();
    (fixture, store)
}

#[test]
fn list_all_rfcs() {
    let (_fixture, store) = setup();
    let filter = Filter {
        doc_type: Some(DocType::new(DocType::RFC)),
        ..Default::default()
    };
    let results = store.list(&filter);
    assert_eq!(results.len(), 2);
}

#[test]
fn filter_by_tag() {
    let (_fixture, store) = setup();
    let filter = Filter {
        tag: Some("security".to_string()),
        ..Default::default()
    };
    let results = store.list(&filter);
    assert_eq!(results.len(), 1);
    assert_eq!(results[0].title, "Auth Redesign");
}

#[test]
fn resolve_shorthand_id() {
    let (_fixture, store) = setup();
    let doc = store.resolve_shorthand("RFC-001");
    assert!(doc.is_ok());
    assert_eq!(doc.unwrap().title, "Auth Redesign");
}