pub struct DisagreementInput {
pub assessment: String,
pub positions: Vec<DisagreementPosition>,
pub divergent_assumptions: Vec<String>,
pub discriminating_question: String,
pub experiment: Option<String>,
}Expand description
Advisors, or an advisor and the executor, disagree.
A disagreement names the question whose answer decides between the positions; until
a ResolutionInput settles it with evidence, the store refuses every conclusion on
its assessment. It needs at least two positions, each from its own source.
use majordomus_cli::reasoning::availability::{ModeResolution, ReasoningMode};
use majordomus_cli::reasoning::record::*;
use majordomus_cli::reasoning::store::{admit, Admission, Loaded};
let mode = ModeResolution { mode: ReasoningMode::Standard, source: "default".into() };
let admission = Admission { mode: &mode, availability: &[] };
let mut loaded = Loaded::default();
loaded.records.push(ReasoningRecord {
schema: RECORD_SCHEMA.into(),
version: RECORD_VERSION,
id: "assessment-1".into(),
task: "t".into(),
recorded_at: "2026-10-01T00:00:01Z".into(),
head: None,
redacted: vec![],
body: ReasoningBody::Assessment(AssessmentInput {
subject: "lock scope".into(),
..Default::default()
}),
});
let lonely = DisagreementInput {
assessment: "assessment-1".into(),
positions: vec![DisagreementPosition {
source: "primary".into(),
position: "keep the lock".into(),
}],
divergent_assumptions: vec![],
discriminating_question: "does any caller hold it across an await?".into(),
experiment: None,
};
let refused = admit(ReasoningInput::Disagreement(lonely), &loaded, &admission).unwrap_err();
assert_eq!(refused.0, "a disagreement has at least two positions");Fields§
§assessment: StringThe assessment it is about.
positions: Vec<DisagreementPosition>The positions; at least two.
divergent_assumptions: Vec<String>The assumptions the positions divide on.
discriminating_question: StringThe question whose answer decides between them.
experiment: Option<String>The experiment proposed to answer it.
Trait Implementations§
Source§impl Clone for DisagreementInput
impl Clone for DisagreementInput
Source§fn clone(&self) -> DisagreementInput
fn clone(&self) -> DisagreementInput
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for DisagreementInput
impl Debug for DisagreementInput
Source§impl<'de> Deserialize<'de> for DisagreementInput
impl<'de> Deserialize<'de> for DisagreementInput
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl JsonSchema for DisagreementInput
impl JsonSchema for DisagreementInput
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Returns a string that uniquely identifies the schema produced by this type. Read more
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Generates a JSON Schema for this type. Read more
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
Whether JSON Schemas generated for this type should be included directly in parent schemas,
rather than being re-used where possible using the
$ref keyword. Read moreAuto Trait Implementations§
impl Freeze for DisagreementInput
impl RefUnwindSafe for DisagreementInput
impl Send for DisagreementInput
impl Sync for DisagreementInput
impl Unpin for DisagreementInput
impl UnsafeUnpin for DisagreementInput
impl UnwindSafe for DisagreementInput
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more