use super::*;
fn soul() -> String {
let raw = crate::template::TEMPLATE
.get_file("souls/reviewer.md")
.expect("the template ships souls/reviewer.md")
.contents_utf8()
.expect("souls/reviewer.md is UTF-8");
raw.split_whitespace().collect::<Vec<_>>().join(" ")
}
fn asserts(text: &str, phrases: &[&str], what: &str) {
for phrase in phrases {
assert!(
text.contains(phrase),
"the {what} no longer says {phrase:?} — it reads:\n{text}"
);
}
}
#[test]
fn the_reviewer_soul_carries_the_four_look_fors() {
asserts(
&soul(),
&[
"User corrections",
"Reusable debugging or operational techniques",
"A loaded skill that failed or is outdated",
"A workflow worth packaging",
"as a script, template or reference",
],
"reviewer soul",
);
}
#[test]
fn the_reviewer_soul_carries_the_two_warnings() {
asserts(
&soul(),
&[
"Do not bias toward finding something to save",
"an empty proposal is the expected common outcome",
"Never record an unresolved failure as a proven workflow",
],
"reviewer soul",
);
}
#[test]
fn the_reviewer_soul_states_the_ownership_rule() {
asserts(
&soul(),
&[
"Pool skills are not yours to edit",
"Prefer patching one broad existing workspace skill",
"one-line subject",
],
"reviewer soul",
);
}
#[test]
fn the_shipped_reviewer_grant_is_its_confinement() {
let raw = crate::template::TEMPLATE
.get_file("providers.yaml")
.expect("the template ships providers.yaml")
.contents_utf8()
.expect("providers.yaml is UTF-8");
let shipped = crate::config::PerRepoProviders::parse(raw, Path::new("template/providers.yaml"))
.expect("the shipped template parses");
let reviewer = &shipped.roles["reviewer"];
let mut granted = reviewer.tools.clone();
granted.sort();
assert_eq!(granted, vec!["apply_patch", "read_file"]);
assert_eq!(reviewer.model, shipped.roles["compactor"].model);
}
#[test]
fn the_shipped_reviewer_entry_composes_its_subject() {
let raw = crate::template::TEMPLATE
.get_file("manifest.yaml")
.expect("the template ships manifest.yaml")
.contents_utf8()
.expect("manifest.yaml is UTF-8");
let shipped =
crate::config::manifest::Manifest::parse(raw, Path::new("template/manifest.yaml"))
.expect("the shipped template parses");
let reviewer = &shipped.roles["reviewer"];
assert_eq!(reviewer.pinned, vec!["goal.md", "soul.md"]);
assert_eq!(reviewer.order, vec!["summary/**", "skills/**"]);
}