fix: lock project role feature surfaces
This commit is contained in:
parent
2fd37afb9e
commit
507863f86a
|
|
@ -5,7 +5,7 @@ return base {
|
|||
description = "Companion role profile: GPT-5.5 with bundled default behavior",
|
||||
model_ref = "codex-oauth/gpt-5.5",
|
||||
feature = {
|
||||
task = { enabled = true },
|
||||
task = { enabled = false },
|
||||
memory = { enabled = true },
|
||||
web = { enabled = true },
|
||||
pods = { enabled = false },
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ return base {
|
|||
description = "Intake role profile: GPT-5.5 with bundled default behavior",
|
||||
model_ref = "codex-oauth/gpt-5.5",
|
||||
feature = {
|
||||
task = { enabled = true },
|
||||
task = { enabled = false },
|
||||
memory = { enabled = true },
|
||||
web = { enabled = true },
|
||||
pods = { enabled = false },
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ return base {
|
|||
description = "Orchestrator role profile: GPT-5.5 with bundled default behavior",
|
||||
delegation_scope = scope.workspace_write(),
|
||||
feature = {
|
||||
task = { enabled = true },
|
||||
task = { enabled = false },
|
||||
memory = { enabled = true },
|
||||
web = { enabled = true },
|
||||
pods = { enabled = true },
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ return base {
|
|||
description = "Reviewer role profile: GPT-5.5 with bundled default behavior",
|
||||
model_ref = "codex-oauth/gpt-5.5",
|
||||
feature = {
|
||||
task = { enabled = true },
|
||||
task = { enabled = false },
|
||||
memory = { enabled = true },
|
||||
web = { enabled = true },
|
||||
pods = { enabled = false },
|
||||
|
|
|
|||
|
|
@ -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#"
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user