Files
Claude-config/commands/push-tickets-lesstime.md
Matthieu ea27f27f7f chore : initial claude-config repo
- global CLAUDE.md (time tracking via MCP lesstime)
- workspace CLAUDE.md (dev_malio inventory)
- commands : ticket-writer, push-tickets-lesstime, full-project-review, bump-version
- MCP install guide (Code + Desktop) + .mcp.json.example
- scripts/install.sh + sync.sh
2026-05-13 17:03:07 +02:00

190 lines
7.4 KiB
Markdown

---
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: <id>, title: "P0 - Urgents (securite)", color: "#D32F2F" })
create-group({ projectId: <id>, title: "P1 - Importants", color: "#F57C00" })
create-group({ projectId: <id>, title: "P2 - Documentation", color: "#FBC02D" })
create-group({ projectId: <id>, 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.