fix(templates): open_project ne rétro-synchronise plus les permissions agents vers les templates — #244 (QA verte)

Suppression du backfill agent→template au open_project (cause racine de la non-persistance des permissions MCP/system des templates) et couverture de régression : create/read/update des default permissions + test dédié open_project sans backfill.
This commit is contained in:
2026-08-23 13:03:07 +02:00
parent 4b206402d7
commit 0a7d7f844e
3 changed files with 189 additions and 78 deletions

View File

@ -202,8 +202,8 @@ mod tests {
};
use domain::ports::{EventBus, EventStream, IdGenerator, StoreError, TemplateStore};
use domain::{
AgentTemplate, DomainEvent, MarkdownDoc, ProfileId, ProjectId, ProjectPath, RemoteRef,
TemplateVersion,
AgentTemplate, DomainEvent, MarkdownDoc, McpToolPolicy, NetworkPolicy, ProfileId,
ProjectId, ProjectPath, RemoteRef, SystemPermissionSet, TemplateVersion,
};
use uuid::Uuid;
@ -314,12 +314,24 @@ mod tests {
"name": "Base",
"content": "v1",
"defaultProfileId": profile_id,
"defaultAgentName": "Base Agent",
"defaultSystemPermissions": { "network": "allow" },
"defaultMcpToolPermissions": { "allowedTools": ["idea_template_read"] },
}),
)
.await
.unwrap();
let template_id = created["id"].as_str().unwrap().to_owned();
assert_eq!(created["version"], json!(TemplateVersion::INITIAL));
assert_eq!(created["defaultAgentName"], "Base Agent");
assert_eq!(
created["defaultSystemPermissions"],
json!({ "network": "allow" })
);
assert_eq!(
created["defaultMcpToolPermissions"],
json!({ "allowedTools": ["idea_template_read"] })
);
let read = provider
.handle_template_tool(
@ -332,6 +344,15 @@ mod tests {
.unwrap();
assert_eq!(read["name"], "Base");
assert_eq!(read["contentMd"], "v1");
assert_eq!(read["defaultAgentName"], "Base Agent");
assert_eq!(
read["defaultSystemPermissions"],
json!({ "network": "allow" })
);
assert_eq!(
read["defaultMcpToolPermissions"],
json!({ "allowedTools": ["idea_template_read"] })
);
let listed = provider
.handle_template_tool(&project(), "agent", "idea_template_list", json!({}))
@ -344,12 +365,48 @@ mod tests {
&project(),
"agent",
"idea_template_update",
json!({ "templateId": template_id, "content": "v2" }),
json!({
"templateId": template_id,
"content": "v2",
"defaultSystemPermissions": { "network": "deny" },
"defaultMcpToolPermissions": { "allowedTools": ["idea_template_update"] },
}),
)
.await
.unwrap();
assert_eq!(updated["contentMd"], "v2");
assert_eq!(updated["version"], json!(2));
assert_eq!(updated["defaultAgentName"], "Base Agent");
assert_eq!(
updated["defaultSystemPermissions"],
json!({ "network": "deny" })
);
assert_eq!(
updated["defaultMcpToolPermissions"],
json!({ "allowedTools": ["idea_template_update"] })
);
assert_eq!(
store
.get(TemplateId::from_uuid(
Uuid::parse_str(&template_id).unwrap()
))
.await
.unwrap()
.default_system_permissions,
Some(SystemPermissionSet::new(Some(NetworkPolicy::Deny)))
);
assert_eq!(
store
.get(TemplateId::from_uuid(
Uuid::parse_str(&template_id).unwrap()
))
.await
.unwrap()
.default_mcp_tool_policy,
Some(McpToolPolicy {
allowed_tools: vec!["idea_template_update".to_owned()]
})
);
assert!(matches!(
events.events.lock().unwrap().as_slice(),
[DomainEvent::TemplateUpdated { .. }]