Skip to main content

prior_on_subject

Function prior_on_subject 

Source
pub fn prior_on_subject<'a>(
    loaded: &'a Loaded,
    assessment: &ReasoningRecord,
) -> Option<&'a ReasoningRecord>
Expand description

A standing conclusion on the same subject as an assessment, from any task: what a later session reuses instead of asking again.

Subjects match when they are equal after collapsing whitespace and ignoring case. The latest other assessment with a standing conclusion wins; an assessment never finds itself, and a record that is not an assessment finds nothing.

use majordomus_cli::reasoning::record::*;
use majordomus_cli::reasoning::store::{prior_on_subject, Loaded};

fn record(id: &str, at: &str, body: ReasoningBody) -> ReasoningRecord {
    ReasoningRecord {
        schema: RECORD_SCHEMA.into(),
        version: RECORD_VERSION,
        id: id.into(),
        task: "t".into(),
        recorded_at: at.into(),
        head: None,
        redacted: vec![],
        body,
    }
}
let assessment = |s: &str| {
    ReasoningBody::Assessment(AssessmentInput { subject: s.into(), ..Default::default() })
};
let mut loaded = Loaded::default();
loaded.records.push(record("assessment-1", "2026-10-01T00:00:01Z", assessment("Lock  scope")));
loaded.records.push(record(
    "conclusion-1",
    "2026-10-01T00:00:02Z",
    ReasoningBody::Conclusion(StoredConclusion {
        input: ConclusionInput {
            assessment: "assessment-1".into(),
            decision: "keep the lock".into(),
            rationale: "measured".into(),
            ..Default::default()
        },
        reviewed_by: vec![],
        independent_review_count: 0,
    }),
));
let later = record("assessment-2", "2026-10-02T00:00:00Z", assessment("lock scope"));
assert_eq!(prior_on_subject(&loaded, &later).unwrap().id, "conclusion-1");

let other = record("assessment-3", "2026-10-02T00:00:00Z", assessment("retry policy"));
assert!(prior_on_subject(&loaded, &other).is_none());