Ce dossier contient des fichiers exemples complets pour le Markdown Task Manager, ainsi que la documentation détaillée du format Markdown utilisé.
examples/
├── kanban.md # Fichier principal avec config et tâches actives
├── archive.md # Archives des tâches terminées
└── README.md # Ce fichier (documentation du format)
Le Markdown Task Manager utilise deux fichiers Markdown pour organiser vos tâches :
| Fichier | Rôle | Chargement |
|---|---|---|
kanban.md |
Configuration + Tâches actives | Au démarrage |
archive.md |
Tâches archivées | À la demande |
# Kanban Board
<!-- Config: Last Task ID: 42 -->- Obligatoire : Compteur d'ID auto-incrémenté
- L'application lit ce nombre pour générer le prochain ID de tâche
- Modifié automatiquement par l'application
## ⚙️ Configuration
**Colonnes**: 📝 À faire (todo) | 🚀 En cours (in-progress) | 👀 En revue (in-review) | ✅ Terminé (done)
**Catégories**: Frontend, Backend, Design, DevOps, Tests, Documentation
**Utilisateurs**: @alice (Alice Martin), @bob (Bob Dupont), @charlie (Charlie Dubois)
**Priorités**: 🔴 Critique | 🟠 Haute | 🟡 Moyenne | 🟢 Basse
**Tags**: #bug #feature #ui #backend #urgent #refactor #docs #test #performance
---{Emoji} {Nom affiché} ({id-unique})
- Emoji : Optionnel mais recommandé pour l'interface
- Nom affiché : Texte visible dans le Kanban
- ID unique : Identifiant interne (lettres, chiffres, tirets)
Exemples :
📝 À faire (todo)
🚀 En cours (in-progress)
✅ Terminé (done)Liste séparée par des virgules :
**Catégories**: Frontend, Backend, Design@username (Nom Complet), @autre (Autre Nom)
- @username : Identifiant court pour mention
- Nom Complet : Nom complet entre parenthèses
{Emoji} {Nom} | {Emoji} {Nom} | ...
Les 4 priorités standard :
🔴 Critique | 🟠 Haute | 🟡 Moyenne | 🟢 BasseListe de tags séparés par des espaces :
**Tags**: #bug #feature #ui #backendChaque colonne Kanban a sa propre section :
## 📝 À faire
{Tâches de cette colonne...}
## 🚀 En cours
{Tâches de cette colonne...}
## ✅ Terminé
{Tâches de cette colonne...}Important :
- Le titre de la section doit correspondre au nom défini dans la configuration
- L'ordre des sections définit l'ordre d'affichage dans le Kanban
### TASK-001 | Titre de ma tâche
**Priorité**: Haute | **Catégorie**: Frontend | **Assigné**: @alice, @bob
**Créé**: 2025-01-20 | **Échéance**: 2025-02-15
**Tags**: #feature #ui
Description détaillée de la tâche en Markdown.
Vous pouvez utiliser **tout le Markdown standard** :
- Listes
- **Gras** et *italique*
- `Code inline`
- [Liens](https://example.com)
**Sous-tâches**:
- [ ] Première étape à faire
- [x] Étape terminée
- [ ] Dernière étape
**Notes**:
Notes additionnelles ou contexte...
---| Champ | Format | Description |
|---|---|---|
| ID | TASK-XXX |
Numéro unique auto-incrémenté |
| Titre | Texte après | |
Titre court de la tâche |
| Priorité | Critique|Haute|Moyenne|Basse | Niveau de priorité |
| Catégorie | Texte libre | Catégorie/projet |
| Créé | YYYY-MM-DD | Date de création |
| Champ | Format | Description |
|---|---|---|
| Assigné | @user1, @user2 |
Utilisateurs assignés (séparés par virgules) |
| Commencé | YYYY-MM-DD | Date de début effectif |
| Échéance | YYYY-MM-DD | Date limite |
| Terminé | YYYY-MM-DD | Date de complétion |
| Tags | #tag1 #tag2 |
Tags (avec #, séparés par espaces) |
| Sous-tâches | - [ ] ou - [x] |
Checklist Markdown |
| Notes | Texte libre | Notes additionnelles |
**Priorité**: Haute | **Catégorie**: Backend | **Assigné**: @alice, @bob- Séparées par
|(pipe entouré d'espaces) - Ordre flexible
- Les champs manquants sont omis
**Créé**: 2025-01-20 | **Commencé**: 2025-01-22 | **Échéance**: 2025-02-15- Format obligatoire :
YYYY-MM-DD(ISO 8601) - Séparées par
| - Seul
**Créé**est obligatoire
**Tags**: #bug #urgent #frontend- Commencent par
# - Séparés par des espaces
- Pas de virgules
**Sous-tâches**:
- [ ] Tâche non commencée
- [x] Tâche terminée
- [ ] Autre tâche- Format standard Markdown checkbox
[ ]= non fait[x]= fait- L'application calcule automatiquement la progression
---- Obligatoire entre chaque tâche
- Trois tirets sur une ligne seule
- Permet au parser de délimiter les tâches
# Archive des Tâches
> Ce fichier contient toutes les tâches terminées et archivées.
## ✅ Janvier 2025
### TASK-098 | Tâche archivée
**Priorité**: Haute | **Catégorie**: Frontend | **Assigné**: @alice
**Créé**: 2024-12-20 | **Commencé**: 2024-12-28 | **Terminé**: 2025-01-05
**Tags**: #feature #ui
Description de la tâche...
**Résultat**:
La tâche a été complétée avec succès.
---
### TASK-097 | Autre tâche archivée
...
---
## ✅ Décembre 2024
### TASK-090 | Tâche plus ancienne
...- Sections par mois :
## ✅ Janvier 2025 - Plus récent en haut : Les nouveaux mois sont ajoutés en haut
- Tâches par mois : Triées par date de fin décroissante
- Pas de section Configuration : Non nécessaire
- Sections par date : Plutôt que par colonne
- Champ Terminé obligatoire : Date de fin de la tâche
- Chargement différé : Fichier non lu au démarrage
- Ouvrir
kanban.mddans votre éditeur - Trouver le commentaire
<!-- Config: Last Task ID: X --> - Noter le numéro (ex: 42)
- Aller dans la section de colonne appropriée (ex:
## 📝 À faire) - Copier ce template :
### TASK-043 | Mon nouveau titre
**Priorité**: Moyenne | **Catégorie**: Backend | **Assigné**: @alice
**Créé**: 2025-01-20 | **Échéance**: 2025-02-01
**Tags**: #feature
Description de ma nouvelle tâche...
**Sous-tâches**:
- [ ] Étape 1
- [ ] Étape 2
---- Incrémenter le compteur dans le commentaire :
<!-- Config: Last Task ID: 43 --> - Sauvegarder
- Couper toute la section (de
###jusqu'au---inclus) - Coller dans une autre section de colonne
- Optionnel : Ajouter
**Commencé**si vous passez en "En cours" - Sauvegarder
- Couper la tâche complète de
kanban.md - Ouvrir
archive.md - Trouver ou créer la section du mois (ex:
## ✅ Janvier 2025) - Coller la tâche
- Ajouter le champ
**Terminé**: 2025-01-20dans la ligne des dates - Sauvegarder les deux fichiers
Remplacer [ ] par [x] :
**Sous-tâches**:
- [x] Étape terminée
- [ ] Étape en coursVous pouvez créer vos propres colonnes :
**Colonnes**: 📋 Backlog (backlog) | 📝 À faire (todo) | 🏗️ Dev (dev) | 🧪 Test (test) | ✅ Prod (prod)Puis créez les sections correspondantes :
## 📋 Backlog
...
## 📝 À faire
...Adaptez les catégories à votre projet :
**Catégories**: Interface, API, Base de données, Sécurité, Documentation, InfrastructureCréez vos propres conventions de tags :
**Tags**: #p0 #p1 #p2 #sprint-5 #customer-request #tech-debt #security### TASK-001 | Corriger le bug de connexion
**Priorité**: Critique | **Catégorie**: Backend | **Assigné**: @bob
**Créé**: 2025-01-20 | **Échéance**: 2025-01-21
**Tags**: #bug #urgent
Les utilisateurs ne peuvent pas se connecter depuis ce matin.
---### TASK-002 | Implémenter l'authentification OAuth
**Priorité**: Haute | **Catégorie**: Backend | **Assigné**: @alice, @bob
**Créé**: 2025-01-15 | **Commencé**: 2025-01-18 | **Échéance**: 2025-02-01
**Tags**: #feature #security
Ajouter le support OAuth 2.0 pour Google et GitHub.
**Sous-tâches**:
- [x] Recherche des librairies
- [x] Setup passport.js
- [ ] Implémenter Google OAuth
- [ ] Implémenter GitHub OAuth
- [ ] Tests d'intégration
- [ ] Documentation
**Notes**:
Utiliser passport-google-oauth20 et passport-github2
---### TASK-050 | Migration vers PostgreSQL
**Priorité**: Haute | **Catégorie**: Infrastructure | **Assigné**: @charlie
**Créé**: 2024-12-01 | **Commencé**: 2024-12-05 | **Terminé**: 2024-12-20
**Tags**: #database #migration
Migration complète de MySQL vers PostgreSQL 14.
**Résultat**:
- Migration réussie sans perte de données
- Performance améliorée de 40%
- Tous les tests passent
---// Last Task ID
const idMatch = content.match(/<!-- Config: Last Task ID: (\d+) -->/);
const lastTaskId = idMatch ? parseInt(idMatch[1]) : 0;
// Colonnes
const colMatch = content.match(/\*\*Colonnes\*\*:\s*(.+)/);
const columns = colMatch[1].split('|').map(col => {
const match = col.trim().match(/(.+?)\s*\(([^)]+)\)/);
return {
name: match ? match[1].trim() : col.trim(),
id: match ? match[2].trim() : col.trim().toLowerCase()
};
});
// Catégories
const catMatch = content.match(/\*\*Catégories\*\*:\s*(.+)/);
const categories = catMatch ? catMatch[1].split(',').map(c => c.trim()) : [];
// Utilisateurs
const userMatch = content.match(/\*\*Utilisateurs\*\*:\s*(.+)/);
const users = userMatch[1].split(',').map(u => {
const match = u.trim().match(/@(\w+)\s*\(([^)]+)\)/);
return match ? { id: match[1], name: match[2] } : { id: u.trim(), name: u.trim() };
});// Split par sections de colonnes
const sections = content.split(/^## /m).slice(1);
// Pour chaque section
sections.forEach(section => {
const [header, ...taskLines] = section.split('\n');
const columnMatch = header.match(/[📝🚀👀✅]\s*(.+)/);
const columnName = columnMatch ? columnMatch[1].trim() : header.trim();
// Split par tâches
const taskContent = taskLines.join('\n');
const tasks = taskContent.split(/^### TASK-/m).slice(1);
tasks.forEach(taskText => {
const task = parseTask('TASK-' + taskText);
// ...
});
});function parseTask(content) {
// ID et titre
const titleMatch = content.match(/^(\d+)\s*\|\s*(.+)/m);
const id = 'TASK-' + titleMatch[1];
const title = titleMatch[2].trim();
// Priorité, catégorie, assignés
const metaMatch = content.match(/\*\*Priorité\*\*:\s*(\w+)(?:\s*\|\s*\*\*Catégorie\*\*:\s*([^|]+))?(?:\s*\|\s*\*\*Assigné\*\*:\s*([^\n]+))?/);
const priority = metaMatch[1];
const category = metaMatch[2] ? metaMatch[2].trim() : '';
const assignees = metaMatch[3] ? metaMatch[3].split(',').map(a => a.trim()) : [];
// Dates
const dateMatch = content.match(/\*\*Créé\*\*:\s*(\d{4}-\d{2}-\d{2})(?:\s*\|\s*\*\*Commencé\*\*:\s*(\d{4}-\d{2}-\d{2}))?(?:\s*\|\s*\*\*Échéance\*\*:\s*(\d{4}-\d{2}-\d{2}))?/);
const created = dateMatch[1];
const started = dateMatch[2] || null;
const due = dateMatch[3] || null;
// Tags
const tagsMatch = content.match(/\*\*Tags\*\*:\s*(.+)/);
const tags = tagsMatch ? tagsMatch[1].split(/\s+/).map(t => t.replace('#', '')) : [];
// Description
const descMatch = content.match(/\*\*Tags\*\*:.*?\n\n([\s\S]*?)(?:\n\*\*|---)/);
const description = descMatch ? descMatch[1].trim() : '';
// Sous-tâches
const subtasks = [];
const subtaskMatches = content.matchAll(/- \[([ x])\] (.+)/g);
for (const match of subtaskMatches) {
subtasks.push({ completed: match[1] === 'x', text: match[2] });
}
return { id, title, priority, category, assignees, created, started, due, tags, description, subtasks };
}| Fichier | Taille max | Tâches max | Parsing |
|---|---|---|---|
| kanban.md | 500 KB | 1000 | < 100ms |
| archive.md | Illimité | Illimité | Lazy load |
- Archivage régulier : Déplacez les vieilles tâches vers archive.md
- Sections courtes : Pas plus de 200-300 tâches par colonne
- Cache : L'application garde les tâches en mémoire
- Lazy loading : archive.md n'est chargé qu'à la demande
- Commentaire
<!-- Config: Last Task ID: X -->présent - Section
## ⚙️ Configurationavec toutes les colonnes - Chaque colonne a sa section
## {Nom Colonne} - Chaque tâche commence par
### TASK-{num} | - Toutes les tâches ont Priorité, Catégorie, Créé
- Dates au format YYYY-MM-DD
- Séparateur
---après chaque tâche - Pas d'ID dupliqué
- IDs séquentiels : Ne sautez jamais de numéro, n'en réutilisez jamais
- Dates ISO : Toujours YYYY-MM-DD pour la cohérence
- Archivage régulier : Au moins une fois par mois
- Git-friendly : Committez après chaque batch de modifications
- Catégories cohérentes : Définissez-les dans la config d'abord
- Tags normalisés : Créez une convention pour votre équipe
- Backup : Vos fichiers MD sont précieux, sauvegardez-les
Version du format : 1.0 Dernière mise à jour : 2025-11-08