profile: inherit ticket tools across roles

This commit is contained in:
Keisuke Hirata 2026-07-18 21:59:58 +09:00
parent 5f651755d8
commit 23234b96ca
No known key found for this signature in database
6 changed files with 12 additions and 21 deletions

View File

@ -895,7 +895,6 @@ fn builtin_profile_artifact(label: &str) -> Option<serde_json::Value> {
true, true,
true, true,
false, false,
false,
); );
Some(value) Some(value)
} }
@ -909,7 +908,6 @@ fn builtin_profile_artifact(label: &str) -> Option<serde_json::Value> {
true, true,
true, true,
false, false,
true,
false, false,
); );
Some(value) Some(value)
@ -925,7 +923,6 @@ fn builtin_profile_artifact(label: &str) -> Option<serde_json::Value> {
true, true,
true, true,
true, true,
true,
); );
Some(value) Some(value)
} }
@ -940,7 +937,6 @@ fn builtin_profile_artifact(label: &str) -> Option<serde_json::Value> {
true, true,
false, false,
false, false,
false,
); );
Some(value) Some(value)
} }
@ -955,7 +951,6 @@ fn builtin_profile_artifact(label: &str) -> Option<serde_json::Value> {
true, true,
false, false,
false, false,
false,
); );
Some(value) Some(value)
} }
@ -1009,19 +1004,16 @@ fn apply_role_profile(
memory: bool, memory: bool,
web: bool, web: bool,
workers: bool, workers: bool,
ticket: bool,
ticket_orchestration: bool, ticket_orchestration: bool,
) { ) {
value["slug"] = serde_json::Value::String(slug.to_string()); value["slug"] = serde_json::Value::String(slug.to_string());
value["description"] = serde_json::Value::String(description.to_string()); value["description"] = serde_json::Value::String(description.to_string());
value["feature"] = serde_json::json!({ value["feature"]["task"] = serde_json::json!({ "enabled": task });
"task": { "enabled": task }, value["feature"]["memory"] = serde_json::json!({ "enabled": memory });
"memory": { "enabled": memory }, value["feature"]["web"] = serde_json::json!({ "enabled": web });
"web": { "enabled": web }, value["feature"]["workers"] = serde_json::json!({ "enabled": workers });
"workers": { "enabled": workers }, value["feature"]["ticket_orchestration"] =
"ticket": { "enabled": ticket, "access": "lifecycle" }, serde_json::json!({ "enabled": ticket_orchestration });
"ticket_orchestration": { "enabled": ticket_orchestration }
});
} }
fn reject_manifest_shaped_profile(value: &serde_json::Value) -> Result<(), ProfileError> { fn reject_manifest_shaped_profile(value: &serde_json::Value) -> Result<(), ProfileError> {
@ -1441,12 +1433,13 @@ mod tests {
let companion = resolve("companion"); let companion = resolve("companion");
assert!(companion.feature.task.enabled); assert!(companion.feature.task.enabled);
assert!(companion.feature.workers.enabled); assert!(companion.feature.workers.enabled);
assert!(!companion.feature.ticket.enabled);
assert!(companion.scope.allow.is_empty()); assert!(companion.scope.allow.is_empty());
assert!(companion.scope.deny.is_empty()); assert!(companion.scope.deny.is_empty());
assert!(companion.delegation_scope.allow.is_empty()); assert!(companion.delegation_scope.allow.is_empty());
assert_eq!(companion.model.ref_.as_deref(), Some("codex-oauth/gpt-5.5")); assert_eq!(companion.model.ref_.as_deref(), Some("codex-oauth/gpt-5.5"));
assert!(companion.web.is_some()); assert!(companion.web.is_some());
assert!(companion.feature.ticket.enabled);
assert!(!companion.feature.ticket_orchestration.enabled);
assert_eq!( assert_eq!(
companion.compaction.as_ref().unwrap().threshold, companion.compaction.as_ref().unwrap().threshold,
Some(240000) Some(240000)
@ -1497,11 +1490,14 @@ mod tests {
assert_eq!(coder.model.ref_.as_deref(), Some("codex-oauth/gpt-5.5")); assert_eq!(coder.model.ref_.as_deref(), Some("codex-oauth/gpt-5.5"));
assert!(coder.web.is_some()); assert!(coder.web.is_some());
assert!(coder.compaction.is_some()); assert!(coder.compaction.is_some());
assert!(coder.feature.ticket.enabled);
assert!(!coder.feature.ticket_orchestration.enabled);
let reviewer = resolve("reviewer"); let reviewer = resolve("reviewer");
assert!(reviewer.feature.task.enabled); assert!(reviewer.feature.task.enabled);
assert!(!reviewer.feature.workers.enabled); assert!(!reviewer.feature.workers.enabled);
assert!(!reviewer.feature.ticket.enabled); assert!(reviewer.feature.ticket.enabled);
assert!(!reviewer.feature.ticket_orchestration.enabled);
assert!(reviewer.scope.allow.is_empty()); assert!(reviewer.scope.allow.is_empty());
assert!(reviewer.delegation_scope.allow.is_empty()); assert!(reviewer.delegation_scope.allow.is_empty());
assert_eq!(reviewer.model.ref_.as_deref(), Some("codex-oauth/gpt-5.5")); assert_eq!(reviewer.model.ref_.as_deref(), Some("codex-oauth/gpt-5.5"));

View File

@ -8,7 +8,6 @@ import "./default.dcdl" // {
memory = { enabled = true; }; memory = { enabled = true; };
web = { enabled = true; }; web = { enabled = true; };
workers = { enabled = false; }; workers = { enabled = false; };
ticket = { enabled = false; access = "lifecycle"; };
ticket_orchestration = { enabled = false; }; ticket_orchestration = { enabled = false; };
}; };
} }

View File

@ -8,7 +8,6 @@ import "./default.dcdl" // {
memory = { enabled = true; }; memory = { enabled = true; };
web = { enabled = true; }; web = { enabled = true; };
workers = { enabled = true; }; workers = { enabled = true; };
ticket = { enabled = false; access = "lifecycle"; };
ticket_orchestration = { enabled = false; }; ticket_orchestration = { enabled = false; };
}; };
} }

View File

@ -8,7 +8,6 @@ import "./default.dcdl" // {
memory = { enabled = true; }; memory = { enabled = true; };
web = { enabled = true; }; web = { enabled = true; };
workers = { enabled = false; }; workers = { enabled = false; };
ticket = { enabled = true; access = "lifecycle"; };
ticket_orchestration = { enabled = false; }; ticket_orchestration = { enabled = false; };
}; };
} }

View File

@ -8,7 +8,6 @@ import "./default.dcdl" // {
memory = { enabled = true; }; memory = { enabled = true; };
web = { enabled = true; }; web = { enabled = true; };
workers = { enabled = true; }; workers = { enabled = true; };
ticket = { enabled = true; access = "lifecycle"; };
ticket_orchestration = { enabled = true; }; ticket_orchestration = { enabled = true; };
}; };
} }

View File

@ -8,7 +8,6 @@ import "./default.dcdl" // {
memory = { enabled = true; }; memory = { enabled = true; };
web = { enabled = true; }; web = { enabled = true; };
workers = { enabled = false; }; workers = { enabled = false; };
ticket = { enabled = false; access = "lifecycle"; };
ticket_orchestration = { enabled = false; }; ticket_orchestration = { enabled = false; };
}; };
} }