use organism_adversarial::{
AnomalySkepticAgent, AssumptionBreakerAgent, ConstraintCheckerAgent, EconomicSkepticAgent,
OperationalSkepticAgent,
};
use crate::execution::{ExecutableSuggestorCatalog, FormationInstantiationError};
use crate::huddle::DisagreementMapper;
pub fn register_default_factories(
catalog: &mut ExecutableSuggestorCatalog,
) -> Result<(), FormationInstantiationError> {
catalog.register_factory("organism-assumption-breaker", AssumptionBreakerAgent::new)?;
catalog.register_factory(
"organism-constraint-checker",
ConstraintCheckerAgent::default_config,
)?;
catalog.register_factory(
"organism-economic-skeptic",
EconomicSkepticAgent::default_config,
)?;
catalog.register_factory(
"organism-operational-skeptic",
OperationalSkepticAgent::default_config,
)?;
catalog.register_factory(
"organism-anomaly-skeptic",
AnomalySkepticAgent::default_config,
)?;
catalog.register_factory("organism-disagreement-mapper", DisagreementMapper::new)?;
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_factories_register_without_error() {
let mut catalog = ExecutableSuggestorCatalog::new();
register_default_factories(&mut catalog).expect("default registration must succeed");
}
#[test]
fn default_factories_cover_the_documented_ids() {
let mut catalog = ExecutableSuggestorCatalog::new();
register_default_factories(&mut catalog).unwrap();
for id in [
"organism-assumption-breaker",
"organism-constraint-checker",
"organism-economic-skeptic",
"organism-operational-skeptic",
"organism-anomaly-skeptic",
"organism-disagreement-mapper",
] {
assert!(
catalog.contains(id),
"default registration missing id: {id}"
);
}
}
#[test]
fn duplicate_registration_returns_error_not_silent_override() {
let mut catalog = ExecutableSuggestorCatalog::new();
register_default_factories(&mut catalog).unwrap();
let result = register_default_factories(&mut catalog);
assert!(matches!(
result,
Err(FormationInstantiationError::DuplicateSuggestorFactory { .. })
));
}
}