--- name: push-tickets-lesstime description: Use after full-project-review to push TICKETS.md tickets into Lesstime project management via MCP. Triggers on "push tickets", "envoyer tickets", "creer les tickets dans lesstime", "sync tickets lesstime", "pousser les tickets". --- # Push Tickets to Lesstime ## Overview Prend le fichier `TICKETS.md` genere par le skill `full-project-review` et cree les taches correspondantes dans Lesstime via le **MCP `lesstime`** (`mcp__lesstime__*`). Chaque ticket devient une tache avec la bonne priorite, le bon groupe et la description complete. ## When to Use - Apres un `full-project-review` qui a genere un `TICKETS.md` - L'utilisateur demande de "pousser", "sync", "envoyer" les tickets dans Lesstime - L'utilisateur veut creer les taches dans son gestionnaire de projet ## Prerequis - Un fichier `TICKETS.md` doit exister dans le repertoire courant (genere par `full-project-review`) - Le MCP `lesstime` doit etre disponible (verifier `mcp__lesstime__list-projects` retourne du contenu). Si non, signaler le probleme a l'utilisateur — ne pas fallback sur curl. ## Outils MCP utilises | Operation | Tool MCP | |-----------|----------| | Lister projets | `mcp__lesstime__list-projects` | | Lister users | `mcp__lesstime__list-users` | | Lister statuts (globaux) | `mcp__lesstime__list-statuses` | | Lister priorites (globales) | `mcp__lesstime__list-priorities` | | Lister tags (globaux) | `mcp__lesstime__list-tags` | | Lister groupes d'un projet | `mcp__lesstime__list-groups` (`projectId` optionnel) | | Creer un groupe | `mcp__lesstime__create-group` | | Creer une tache | `mcp__lesstime__create-task` | ## Champs `create-task` | Champ | Type | Description | |------|------|-------------| | `projectId` | int (required) | Cible du ticket | | `title` | string (required) | Titre du ticket | | `description` | string | Markdown complet | | `statusId` | int | Defaut "A faire" = 1 | | `priorityId` | int | Voir `list-priorities` | | `effortId` | int | S/M/L — voir `list-efforts` | | `assigneeId` | int | User assignee | | `collaboratorIds` | int[] | Collaborateurs | | `groupId` | int | Groupe (per-project) | | `tagIds` | int[] | Tags globaux | | `deadline` | string (ISO date) | Optionnel | **Tous les IDs sont des entiers** — pas d'IRI a construire, le MCP s'occupe de la conversion. ## IDs verifies (cache — toujours reconfirmer via les outils `list-*`) | Type | Label | ID | |------|-------|----| | Statut | A faire | 1 | | Statut | En cours | 2 | | Statut | Bloque | 3 | | Statut | En attente de validation | 4 | | Statut | Termine | 5 | | User | admin | 2 | | User | Tristan | 3 | | User | Lucile | 4 | | User | Matthieu | 5 | | User | matteo | 6 | | User | kevin | 7 | | User | geoffrey | 8 | | User | Julie | 10 | | Projet | Lesstime | 5 | | Projet | Coltura | 6 | | Projet | Inventory | 7 | | Projet | Ferme | 8 | | Projet | Malio UI | 11 | | Projet | SIRH | 12 | | Projet | Infrastructure | 13 | | Projet | Qualiopi | 14 | | Projet | ADMIN | 16 | | Projet | Maintenance-LIOT | 17 | | Projet | Vaultwarden | 18 | | Projet | ednotif-bundle | 19 | | Projet | Formation | 20 | ## Process ```dot digraph push_flow { rankdir=TB; "1. Lire TICKETS.md" -> "2. Discovery MCP (parallele)"; "2. Discovery MCP (parallele)" -> "3. Demander projet cible + config"; "3. Demander projet cible + config" -> "4. Mapper priorites P0/P1/P2/P3"; "4. Mapper priorites P0/P1/P2/P3" -> "5. create-group si besoin"; "5. create-group si besoin" -> "6. create-task pour chaque ticket"; "6. create-task pour chaque ticket" -> "7. Resume au user"; } ``` ### Phase 1 — Lire et parser TICKETS.md Lire le fichier `TICKETS.md` du repertoire courant. Extraire : - La liste des tickets avec leur ID (T-001, T-002, ...) - Le titre de chaque ticket - La priorite (P0, P1, P2, P3) — derivee de la section dans laquelle se trouve le ticket - Le corps complet (Pourquoi + A faire + Fichiers) — sera la description de la tache **Parsing :** - Les sections `## P0`, `## P1`, `## P2`, `## P3` delimitent les groupes de priorite - Chaque `### T-XXX -- {Titre}` est un ticket - Tout le contenu entre deux `### T-XXX` constitue la description du ticket ### Phase 2 — Discovery MCP (appels paralleles) Appeler en parallele : - `mcp__lesstime__list-projects` - `mcp__lesstime__list-users` - `mcp__lesstime__list-statuses` - `mcp__lesstime__list-priorities` - `mcp__lesstime__list-tags` Apres le choix du projet : `mcp__lesstime__list-groups` avec `projectId`. ### Phase 3 — Demander le projet cible Presenter a l'utilisateur la liste des projets Lesstime et lui demander : 1. **Quel projet ?** (`projectId`) 2. **Quel statut initial ?** (`statusId`, defaut "A faire" = 1) 3. **Creer des groupes par priorite ?** (ex: "P0 - Urgents", "P1 - Importants") 4. **Assigner a quelqu'un ?** (`assigneeId`, optionnel) 5. **Tags a ajouter ?** (`tagIds`, optionnel) ### Phase 4 — Mapper les priorites Mapper les priorites du TICKETS.md aux priorites Lesstime via `list-priorities` : - P0 → priorite la plus haute disponible (ex: "Urgent", "Critical") - P1 → priorite haute - P2 → priorite moyenne - P3 → priorite basse Si le mapping n'est pas evident, demander confirmation a l'utilisateur. ### Phase 5 — Creer les groupes (si demande) Si l'utilisateur veut des groupes par priorite et qu'ils n'existent pas, appeler `mcp__lesstime__create-group` pour chacun : ``` create-group({ projectId: , title: "P0 - Urgents (securite)", color: "#D32F2F" }) create-group({ projectId: , title: "P1 - Importants", color: "#F57C00" }) create-group({ projectId: , title: "P2 - Documentation", color: "#FBC02D" }) create-group({ projectId: , title: "P3 - Nice to have", color: "#388E3C" }) ``` Stocker les `id` retournes pour les reutiliser dans la phase suivante. ### Phase 6 — Creer les taches Pour chaque ticket dans TICKETS.md : 1. Construire le titre : `"T-XXX -- {titre}"` 2. Construire la description : corps complet du ticket (Pourquoi + A faire + Fichiers) 3. Appeler `mcp__lesstime__create-task` avec `projectId`, `statusId`, `priorityId`, `assigneeId`, `groupId`, `tagIds` **Gestion d'erreurs :** si un `create-task` echoue, logguer l'erreur et continuer avec le suivant. Reporter toutes les erreurs en fin de batch. ### Phase 7 — Resume Afficher au user : - Nombre de taches creees - Repartition par groupe / priorite - Lien `http://project.malio-dev.fr/my-tasks` si assignees au user login - Taches echouees avec raison ## Mapping par defaut (groupes) | TICKETS.md | Lesstime Group | Couleur | |------------|----------------|---------| | P0 | "P0 - Urgents (securite)" | `#D32F2F` | | P1 | "P1 - Importants" | `#F57C00` | | P2 | "P2 - Documentation" | `#FBC02D` | | P3 | "P3 - Nice to have" | `#388E3C` | ## Common Mistakes - **Bypasser le MCP** : ne jamais retomber sur curl + JWT REST. Si le MCP est down, signaler a l'utilisateur. - **Oublier la phase Discovery** : les IDs (statuts, priorites, groupes) peuvent varier — toujours `list-*` avant de creer. - **Ne pas demander confirmation** : toujours valider le projet cible et le mapping avec l'utilisateur avant de creer. - **Creer sans groupes** : les groupes rendent la vue Lesstime beaucoup plus lisible. - **Description trop courte** : inclure le corps complet du ticket, pas juste le titre. - **Oublier les groupes existants** : toujours `list-groups` avant `create-group` pour eviter les doublons. - **Ne pas gerer les erreurs** : si une tache echoue, continuer avec les suivantes et reporter a la fin.