diff --git a/CHANGELOG.md b/CHANGELOG.md index ec4587d..faa0723 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # Changelog +## 0.10.0 — 2026-10-11 + +### Nouveautés +- **Mode Triage** (issue #11) : vider un backlog au clavier, façon + « inbox zero ». `/triage` liste les projets actifs et la taille + de leur backlog ; `/triage/{owner}/{repo}` présente les cartes + du Backlog **une par une, plein cadre** (titre, extrait du corps, + étiquettes, âge), file embarquée côté client — aucun rechargement + entre cartes. Décisions : `1`–`5` envoient dans À faire / En + cours / QA / Révision / Terminé, `X` ferme, `L` ouvre le panneau + d'étiquettes (bascule via l'API existante), `A` s'assigne l'issue + (nouvel endpoint `POST /api/issues/{o}/{r}/{n}/assign-self`, + idempotent), `Entrée` passe à la suivante, `Z` annule le dernier + déplacement. Barre de progression « Carte n / N » et résumé final + par décision. Les raccourcis sont affichés en permanence et + cliquables. Points d'entrée : bouton « Triage du backlog » sur le + board et action dans la palette Ctrl+K. + +6 tests ajoutés (133 au total). + ## 0.9.0 — 2026-10-11 ### Nouveautés diff --git a/README.md b/README.md index 515a2d7..8083c27 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ - ⏳ **Vieillissement + limites WIP** — badge d'ancienneté par colonne et limites souples configurables - 🎯 **Vue Focus** — tout ce qui est En cours / en QA / En révision, tous projets confondus (`/focus`) - 🖥️ **Wallboard** — mode TV plein écran (`/wall`) : rotation automatique entre les projets actifs, cartes en vol et compteurs en très grands caractères, rafraîchi en direct ; `?repo=Proprietaire/depot` fige un seul projet +- 📥 **Mode Triage** — `/triage` : le backlog se vide carte par carte, plein cadre, au clavier (`1-5` colonnes, `L` étiquettes, `A` s'assigner, `X` fermer, `Entrée` suivante, `Z` annuler), progression et résumé de session ; décisions via les mêmes API que le board - 🔄 **Board dynamique** — aucun refresh manuel : toute modification (autre session, Gitea, capture) est diffusée en SSE et appliquée **en place** avec animation des cartes (`/api/board/{owner}/{repo}` en JSON + fragments rendus serveur, diff DOM/FLIP) ; repli par sondage de 45 s sans webhooks ; drag local, filtres et panneau détail préservés - ⌨️ **Palette de commandes** — `Ctrl+K` (ou le bouton ⌨️) sur toutes les pages : actions, projets et recherche d'issues globale, 100 % clavier - 🧠 **Digest hebdo → ObsiGate** — résumé markdown de la semaine (journal + focus) composé automatiquement, **livré seulement sur approbation** (page `/digest`) vers le serveur MCP d'ObsiGate (client MCP intégré, outil et gabarit d'arguments configurables) ou un webhook générique @@ -168,6 +169,8 @@ kanbante/ | GET | `/capture` | Page de capture éclair (formulaire + statut + instructions) | | GET | `/api/palette` | Données de la palette Ctrl+K (projets + recherche d'issues `?q=`) | | GET | `/api/board/{owner}/{repo}` | Board en JSON + fragments HTML des cartes (base du board dynamique, `?milestone=` accepté) | +| GET | `/triage` · `/triage/{owner}/{repo}` | Mode Triage : sélecteur de projet puis session clavier sur le backlog | +| POST | `/api/issues/{o}/{r}/{n}/assign-self` | S'assigner une issue (utilisateur du jeton) | | GET | `/digest` | Digest hebdo : aperçu, statut des cibles, approbation d'envoi | | POST | `/digest/send` | Livrer le digest (cible `obsigate` ou `webhook`) — approbation explicite | | POST | `/api/capture` | Capture machine-à-machine (jeton `X-Capture-Token`, JSON ou texte : 1re ligne = titre) | diff --git a/app/config.py b/app/config.py index 116bb94..82ae288 100644 --- a/app/config.py +++ b/app/config.py @@ -76,7 +76,7 @@ from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent -APP_VERSION = "0.9.0" +APP_VERSION = "0.10.0" def _env_bool(name: str, default: bool) -> bool: diff --git a/app/digest.py b/app/digest.py index 7977a17..f53c5a2 100644 --- a/app/digest.py +++ b/app/digest.py @@ -143,7 +143,7 @@ async def _mcp_session(client: httpx.AsyncClient, url: str, token: str) -> None: { "protocolVersion": MCP_PROTOCOL_VERSION, "capabilities": {}, - "clientInfo": {"name": "kanbante", "version": "0.9.0"}, + "clientInfo": {"name": "kanbante", "version": "0.10.0"}, }, req_id=1, ) diff --git a/pyproject.toml b/pyproject.toml index 93d93fd..948c81b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "kanbante" -version = "0.9.0" +version = "0.10.0" description = "Kanban project manager integrated with Gitea" requires-python = ">=3.11" dependencies = [