use crate::entities::AgenticSystemParts;
use crate::value_objects::{AgenticSystemValidationFinding, AgenticSystemValidationLocus};
use super::references;
pub(super) fn collect(
parts: AgenticSystemParts<'_>,
findings: &mut Vec<AgenticSystemValidationFinding>,
) {
for (role, profile) in parts.profiles {
if !parts.roles.contains_key(role) {
continue;
}
for capability in profile.required_capabilities() {
let supplied = references::participants_of_role(parts, role)
.any(|participant| participant.binding().supplies(capability));
if !supplied {
findings.push(AgenticSystemValidationFinding::refusal(
AgenticSystemValidationLocus::profile(role.clone()),
format!(
"role `{role}` requires capability `{capability}`, which no participant \
playing it declares"
),
));
}
}
}
}