diff --git a/docs/superpowers/plans/2026-05-19-mail-phase6-task-integration.md b/docs/superpowers/plans/2026-05-19-mail-phase6-task-integration.md new file mode 100644 index 0000000..dbc79cc --- /dev/null +++ b/docs/superpowers/plans/2026-05-19-mail-phase6-task-integration.md @@ -0,0 +1,1509 @@ +# Mail Integration — Phase 6 : Intégration Tâches + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Brancher l'intégration mail ↔ tâches : modal "Créer tâche depuis mail" (pré-remplie subject+body), modal "Lier mail à tâche existante" (autocomplete), nouvel onglet "Mails" dans `TaskModal.vue` listant les mails liés. + +**Architecture:** 3 nouveaux composants modals sous `components/mail/`, modification de `TaskModal.vue` pour ajouter un onglet `mails` à côté des onglets `details` et `planning` existants, branchement des handlers placeholders dans `pages/mail.vue`. Pas de nouveau backend (endpoints Phase 3 déjà en place). + +**Contexte codebase important :** +- Il n'y a pas de `TaskDrawer.vue` — le composant principal est `TaskModal.vue` (`frontend/components/task/TaskModal.vue`), qui contient un système d'onglets `details` / `planning`. +- `TaskModal.vue` est ouvert via `v-model: boolean` (prop `modelValue`) et reçoit la tâche complète via la prop `task: Task | null`. +- Le service `useMailService()` expose déjà : `createTaskFromMail(mailId, input)`, `linkTask(mailId, taskId)`, `listMailsForTask(taskId)`. +- `MailCreateTaskInput` est `{ projectId: number; taskGroupId?: number | null; priority?: string | null }` — le backend dérive titre/description du mail, le frontend passe uniquement les affectations. +- `useProjectService().getAll()`, `useTaskGroupService().getByProject(projectId)`, `useTaskPriorityService().getAll()` sont les services de sélection. +- Le projet est SPA (SSR off) — pas de guard `import.meta.client` nécessaire pour DOM. +- Pattern modal existant : `` + `` + backdrop click pour fermer (voir `TaskModal.vue`). +- `MalioSelect` requiert `{ label: string, value: number | null }` — utiliser `