fix: lock project role feature surfaces

This commit is contained in:
2026-06-09 21:31:33 +09:00
parent 2fd37afb9e
commit 507863f86a
5 changed files with 96 additions and 4 deletions
+92
View File
@@ -303,6 +303,98 @@ permission = "write"
assert!(!names.iter().any(|name| name == "MemoryRead"));
}
#[tokio::test]
async fn project_role_tool_surfaces_keep_task_disabled_and_pods_role_scoped() {
struct Case {
role: &'static str,
pods_enabled: bool,
}
let cases = [
Case {
role: "orchestrator",
pods_enabled: true,
},
Case {
role: "coder",
pods_enabled: false,
},
Case {
role: "intake",
pods_enabled: false,
},
Case {
role: "reviewer",
pods_enabled: false,
},
Case {
role: "companion",
pods_enabled: false,
},
];
for case in cases {
let delegation = if case.pods_enabled {
r#"
[[delegation_scope.allow]]
target = "/tmp"
permission = "write"
"#
} else {
""
};
let manifest = format!(
r#"
[pod]
name = "role-surface-{role}"
pwd = "./"
[model]
scheme = "anthropic"
model_id = "test-model"
[worker]
max_tokens = 100
[feature.task]
enabled = false
[feature.pods]
enabled = {pods_enabled}
[[scope.allow]]
target = "./"
permission = "write"
{delegation}
"#,
role = case.role,
pods_enabled = case.pods_enabled,
delegation = delegation,
);
let client = MockClient::new(simple_text_events());
let client_for_assert = client.clone();
let pod = make_pod_with_pwd_and_manifest(client, &manifest).await.0;
let handle = spawn_controller(pod).await;
handle.send(Method::run_text("Hello")).await.unwrap();
wait_for_status(&handle, PodStatus::Idle).await;
let request = wait_for_captured_request(&client_for_assert).await;
let names = request_tool_names(&request);
assert!(
!names.iter().any(|name| name == "TaskCreate"),
"{} role must not expose Task tools: {names:?}",
case.role
);
assert_eq!(
names.iter().any(|name| name == "SpawnPod"),
case.pods_enabled,
"{} role Pod tool exposure mismatch: {names:?}",
case.role
);
}
}
#[tokio::test]
async fn pods_feature_requires_delegation_scope() {
let manifest = r#"