pub fn admit(
input: ReasoningInput,
loaded: &Loaded,
admission: &Admission<'_>,
) -> Result<ReasoningBody, Refusal>Expand description
Admit an input against the records already durable: the body to store, or why not.
This is where every rule of the module header is enforced. Admission reads, never
writes: the caller redacts, names and writes the body it returns. A plan is computed
here from admission; a conclusion’s review count is computed here from the
consultations it cites.
use majordomus_cli::reasoning::availability::{ModeResolution, ReasoningMode};
use majordomus_cli::reasoning::policy::Materiality;
use majordomus_cli::reasoning::record::{AssessmentInput, ReasoningInput};
use majordomus_cli::reasoning::store::{admit, Admission, Loaded};
let mode = ModeResolution { mode: ReasoningMode::Standard, source: "default".into() };
let admission = Admission { mode: &mode, availability: &[] };
// evidence comes before opinion: a material assessment without it is refused
let bare = ReasoningInput::Assessment(AssessmentInput {
subject: "the wire format of a public record".into(),
materiality: Materiality::Material,
..Default::default()
});
let refused = admit(bare, &Loaded::default(), &admission).unwrap_err();
assert!(refused.0.starts_with("a material assessment carries the evidence"));
// trivia needs none
let trivial = ReasoningInput::Assessment(AssessmentInput {
subject: "a local variable's name".into(),
materiality: Materiality::Trivial,
..Default::default()
});
assert_eq!(admit(trivial, &Loaded::default(), &admission).unwrap().kind(), "assessment");