Skip to main content

explain

Function explain 

Source
pub fn explain(loaded: &Loaded, id: &str) -> Option<ReasoningExplanation>
Expand description

Explain one record: its assessment and the whole chain of that assessment.

The chain is derived over every task, so a record is explained with everything it rests on wherever that was recorded. An unknown id explains nothing.

use majordomus_cli::reasoning::state::{explain, ReasoningPhase};
use majordomus_cli::reasoning::store::Loaded;

let mut loaded = Loaded::default();
loaded.records.push(rec("assessment-1", 1, json!({ "kind": "assessment", "subject": "s" })));
loaded.records.push(rec("attempt-2", 2, json!({
    "kind": "attempt", "attempt": "unrelated", "observed_failure": "x",
})));
loaded.records.push(rec("conclusion-3", 3, json!({
    "kind": "conclusion", "assessment": "assessment-1", "decision": "A", "rationale": "r",
    "reviewed_by": [], "independent_review_count": 0,
})));

let e = explain(&loaded, "conclusion-3").unwrap();
assert_eq!(e.assessment.as_deref(), Some("assessment-1"));
let phases: Vec<ReasoningPhase> = e.chain.iter().map(|s| s.phase).collect();
assert_eq!(phases, [ReasoningPhase::Uncertainty, ReasoningPhase::Conclusion]);
assert!(explain(&loaded, "conclusion-9").is_none());