From 3cac4fe9c3f15a9a67ef42ba1a840f3f25bf1c3c Mon Sep 17 00:00:00 2001 From: Spark Date: Sun, 11 Oct 2026 10:05:51 -0400 Subject: [PATCH] chore(release): Kanbante 0.3.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Version, CHANGELOG (palier 1) et README (fonctionnalités, KANBANTE_WIP_LIMITS / KANBANTE_AGING_DAYS, nouvelles routes). --- CHANGELOG.md | 31 +++++++++++++++++++++++++++++++ README.md | 10 ++++++++++ pyproject.toml | 2 +- 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3adc17f..5241f0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,36 @@ # Changelog +## 0.3.0 — 2026-10-11 + +« Palier 1 » : voir ce qui se passe sur les boards. + +### Ajouts +- **Journal d'événements** (`board_events`, append-only) : chaque + création, déplacement, fermeture, réouverture et commentaire est + horodaté. Il alimente la page **`/activity`** (fil tous projets), + `GET /api/events` et `GET /api/metrics` (débit par type et temps de + cycle moyen : entrée en « En cours » → fermeture). Les fermetures + détectées lors de la réconciliation avec Gitea sont aussi journalisées + (source `gitea`). Un reclassement dans la même colonne n'écrit pas + d'événement. +- **Panneau détail de carte** : un clic sur une carte ouvre un panneau + latéral avec le corps de l'issue rendu en markdown (marked + DOMPurify, + vendorés), ses commentaires, assignés, milestone et échéance ; on peut + **commenter directement dans Gitea** depuis le panneau + (`GET /api/issues/{owner}/{repo}/{n}`, `POST .../comments`, 404 propre + si l'issue n'existe pas). +- **Vieillissement des cartes** : badge « ⏳ N j » dès qu'une carte reste + dans sa colonne au-delà de `KANBANTE_AGING_DAYS` (défaut 7, rouge au + double). Le temps en colonne vient du journal, avec repli sur + `board_state.updated_at` puis sur la date de création de l'issue. +- **Limites WIP** : `KANBANTE_WIP_LIMITS="in_progress:5,review:3"` — + l'en-tête de colonne affiche `n/limite`, passe en rouge en dépassement + et un toast avertit au dépôt. Limites souples : jamais bloquantes. + +### Tests +- 16 tests ajoutés (52 au total) : journal et métriques, détail et + commentaires, vieillissement, WIP. + ## 0.2.0 — 2026-10-11 Consolidation complète à partir d'un audit du code 0.1.0 (chaque correctif diff --git a/README.md b/README.md index 8e71cab..90b124b 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,9 @@ - 🎯 **Drag & Drop** — glisse les issues entre colonnes ; en cas d'échec, la carte est replacée - 🔗 **Gitea Sync bidirectionnelle** — « Terminé » ferme l'issue dans Gitea, la ressortir la rouvre ; l'état local est réconcilié à chaque chargement - ➕ **Création d'issues** depuis le board, filtres texte + étiquettes, cartes liées à Gitea +- 🗂️ **Panneau détail** — clic sur une carte : corps markdown, commentaires, et réponse postée dans Gitea sans quitter le board +- 📰 **Journal d'événements** — chaque mouvement est horodaté : fil d'activité (`/activity`), métriques de débit et de temps de cycle (`/api/metrics`) +- ⏳ **Vieillissement + limites WIP** — badge d'ancienneté par colonne et limites souples configurables - 🎯 **Vue Focus** — tout ce qui est En cours / En révision, tous projets confondus (`/focus`) - 📝 **Notes** — bloc-notes par projet - 🔐 **Authentification** Basic Auth intégrée + protection CSRF (voir Sécurité) @@ -92,6 +95,8 @@ sudo systemctl enable --now docker | `KANBANTE_CACHE_TTL` | `30` | Secondes de cache des listes Gitea (dépôts, issues) | | `KANBANTE_MAX_NOTE_CHARS` | `20000` | Taille maximale d'une note de projet | | `KANBANTE_SYNC_GITEA` | `1` | `0` = les déplacements ne ferment/rouvrent plus les issues Gitea | +| `KANBANTE_WIP_LIMITS` | *(vide)* | Limites souples par colonne, ex. `in_progress:5,review:3` (affichage `n/limite`, rouge en dépassement, jamais bloquant) | +| `KANBANTE_AGING_DAYS` | `7` | Jours dans la même colonne avant le badge « ⏳ » sur une carte (rouge au double) | ## Sécurité @@ -134,8 +139,13 @@ kanbante/ | GET | `/` | Dashboard tous les projets | | GET | `/board/{owner}/{repo}` | Kanban board | | GET | `/focus` | En cours + En révision, tous projets actifs | +| GET | `/activity` | Fil d'activité (journal d'événements, tous projets) | | POST | `/api/move` | Déplacer une issue (ordre persisté, synchro Gitea) | | POST | `/api/issues` | Créer une issue Gitea depuis le board | +| GET | `/api/issues/{owner}/{repo}/{n}` | Détail d'une issue + commentaires (panneau) | +| POST | `/api/issues/{owner}/{repo}/{n}/comments` | Commenter l'issue dans Gitea | +| GET | `/api/events` | Derniers événements du journal (`?repo=`, `?limit=`) | +| GET | `/api/metrics` | Débit + temps de cycle moyen (`?repo=`, `?window=`) | | POST | `/api/notes` | Sauvegarder des notes | | GET | `/api/stats` | Statistiques JSON | | GET | `/api/projects` | Projets JSON (actifs / inactifs / archivés) | diff --git a/pyproject.toml b/pyproject.toml index 831eef0..8eab17e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "kanbante" -version = "0.2.0" +version = "0.3.0" description = "Kanban project manager integrated with Gitea" requires-python = ">=3.11" dependencies = [