--- issueRef: "#244" version: 9 updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} updatedAt: 1787564815023 --- 2026-08-24 - Repro QA confirmée sur le ticket #244. - Scénario minimal: ouvrir Templates, éditer un template, cocher une permission MCP (ex. `idea_ticket_read`), sauvegarder, fermer, rouvrir: la case est de nouveau décochée. - QA a démontré que le bug ne vient pas du pur UI local: le test frontend de réouverture avec `MockTemplateGateway` passe. - QA a isolé une rouge backend de contrat: `update_template` ne désérialise pas actuellement la clé frontend `mcpToolPermissions`; le DTO backend n'accepte que `defaultMcpToolPermissions` / `defaultMcpToolPolicy`. - Test rouge de référence initial: `cargo test -p app-tauri --test dto_templates update_template_request_does_not_currently_deserialise_frontend_mcp_tool_permissions_key -- --exact`. - Architect a cadré le fix minimal: backend pur au niveau DTO request, avec `mcpToolPermissions` comme entrée canonique et tolérance d'alias legacy en entrée. - Git a ouvert la branche `fix/244-mcp-tool-permissions-dto` depuis `develop` @ `592f248`. - DevBackend a implémenté le fix dans `crates/backend/src/dto.rs`: désérialisation manuelle `CreateTemplateRequestDto` et `UpdateTemplateRequestDto` pour accepter `mcpToolPermissions` en priorité puis `defaultMcpToolPermissions` et `defaultMcpToolPolicy`; mapping interne conservé vers `default_mcp_tool_policy`. - DevBackend a aussi ajouté/ajusté les garde-fous dans `crates/app-tauri/tests/dto_templates.rs` et conservé le test frontend `frontend/src/features/templates/templates.test.tsx`. - QA a revalidé en vert: - `cargo test -p app-tauri --test dto_templates update_template_request_does_not_currently_deserialise_frontend_mcp_tool_permissions_key -- --exact` → **1 passed** - `cargo test -p app-tauri --test dto_templates` → **22 passed** - `cd frontend && npm test -- --run src/features/templates/templates.test.tsx -t "reopening an edited template preserves saved MCP tool permissions in the editor"` → **1 passed** - Git a intégré localement: - commit fix `69129a9` - commit miroir `a6a97fd` - merge local vers `develop` `7f445cb` - aucun push. - Statut décidé: ticket remis en **QA**. La preuve automatisée est verte et le fix est mergé localement dans `develop`; la prochaine preuve finale attendue est la validation live du parcours édition/sauvegarde/réouverture d'un template avec permissions MCP.