use super::Fx;
use crate::prompt::{ChildDispatchRequest, child_dispatch};
use crate::workspace::{agent_worktree, fixture};
fn write_models(fx: &Fx) {
std::fs::write(fx.cfg.path().join("models.yaml"), "adapter: /bin/true\n").unwrap();
}
#[test]
fn resolve_derives_a_dispatched_compactors_role_soul_and_toolset() {
use crate::prompt::resolve::{ConfigSource, resolve_worker};
let (_h, ws) = fixture::workspace();
let parent = "20260101-r1";
fixture::spawn_root(&ws, parent);
let fx = Fx::new();
write_models(&fx);
let parent_wt = agent_worktree(&ws, parent);
let req = ChildDispatchRequest {
repo: &ws,
parent_branch: parent,
parent_worktree: &parent_wt,
role: "compactor",
goal: "compact",
name: None,
fork_point: None,
pins: crate::prompt::PinnedDocs::none(),
};
let child = child_dispatch::run(&req, &fx.git, &fx.clock, &fx.id, &fx.launcher).unwrap();
let cfg = resolve_worker(&ws, ConfigSource::Agent(&child), &fx.deps()).unwrap();
assert_eq!(cfg.role, "compactor");
assert_eq!(cfg.model_id, "claude-haiku-4-5");
assert!(cfg.tools.is_empty(), "compactor declares no such tools");
assert!(cfg.soul.to_lowercase().contains("compact"), "{}", cfg.soul);
}
#[test]
fn resolve_defaults_a_root_agent_to_the_worker_role() {
use crate::prompt::resolve::{ConfigSource, resolve_worker};
let (_h, ws) = fixture::workspace();
let root = "20260101-r2";
fixture::spawn_root(&ws, root);
let fx = Fx::new();
write_models(&fx);
let cfg = resolve_worker(&ws, ConfigSource::Agent(root), &fx.deps()).unwrap();
assert_eq!(cfg.role, "worker");
assert_eq!(cfg.model_id, "claude-sonnet-5");
}