CI / test (push) Successful in 1m45s
Version, CHANGELOG (palier 3 points 7-9 + board) et README (fonctionnalités, variables ntfy/briefing, nouvelles routes, branchement d'un client MCP).
193 lines
9.7 KiB
Markdown
193 lines
9.7 KiB
Markdown
# Changelog
|
|
|
|
## 0.5.0 — 2026-10-11
|
|
|
|
« Palier 3 » (points 7 à 9) + board enrichi.
|
|
|
|
### Ajouts
|
|
- **Recherche globale** (`/search`) : recherche d'issues dans tous les
|
|
projets via l'API Gitea, résultats groupés par projet avec la colonne
|
|
Kanban de chaque issue. **Mes issues** (`/my`) : les issues ouvertes
|
|
assignées à l'utilisateur du jeton, tous projets confondus.
|
|
- **Briefing quotidien** : page `/briefing` (encours, activité 24 h,
|
|
cartes vieillissantes, milestones proches), `GET /api/briefing`, et
|
|
envoi **ntfy** manuel (`POST /api/briefing/send`) ou automatique à
|
|
`KANBANTE_BRIEFING_TIME` via un planificateur interne (mémoire
|
|
d'envoi en base, aucun doublon après redémarrage).
|
|
- **Serveur MCP** (lecture seule) : JSON-RPC 2.0 sur `POST /mcp`
|
|
(initialize, tools/list, tools/call, ping) avec 7 outils —
|
|
`list_projects`, `get_board`, `get_issue`, `get_focus`,
|
|
`search_issues`, `get_activity`, `get_metrics`. Aucune écriture,
|
|
conformément au principe « lectures d'abord ». `GET /mcp` décrit le
|
|
serveur.
|
|
- **Gestion des étiquettes sur le board** : modale de gestion
|
|
(lister / créer avec palette de couleurs / supprimer les étiquettes
|
|
du dépôt dans Gitea) et, dans le panneau détail, ajout / retrait
|
|
d'étiquettes sur l'issue en un clic, avec mise à jour immédiate de
|
|
la carte. API : `GET|POST /api/repos/{o}/{r}/labels`,
|
|
`DELETE /api/repos/{o}/{r}/labels/{id}`,
|
|
`POST /api/issues/{o}/{r}/{n}/labels`.
|
|
|
|
### Améliorations
|
|
- **Panneau Notes du projet** : repliable (bouton ⤢, état mémorisé par
|
|
projet), **largeur ajustable** par glisser (mémorisée), et
|
|
**sauvegarde automatique** après 1,2 s sans frappe avec indicateur
|
|
d'état (le bouton manuel reste). Le formulaire quitte HTMX pour le
|
|
même `board.js` que le reste du board.
|
|
- Navigation unifiée enrichie sur toutes les pages : Mes issues,
|
|
Briefing, Recherche.
|
|
|
|
### Tests
|
|
- 19 tests ajoutés (84 au total) : recherche et mes issues, briefing
|
|
(page, API, envoi ntfy, format), protocole MCP, API étiquettes,
|
|
marqueurs du board. Un doublon de déclaration JS attrapé par
|
|
`node --check` avant livraison.
|
|
|
|
## 0.4.0 — 2026-10-11
|
|
|
|
« Palier 2 » : temps réel et visible dans Gitea — plus une refonte
|
|
complète de l'interface.
|
|
|
|
### Ajouts
|
|
- **Webhooks Gitea + rafraîchissement en direct** : `POST /webhooks/gitea`
|
|
(signature HMAC-SHA256 vérifiée quand `KANBANTE_WEBHOOK_SECRET` est
|
|
défini) invalide le cache de lecture, applique les fermetures /
|
|
réouvertures faites dans Gitea (idempotent : l'écho de nos propres
|
|
appels ne double jamais le journal) et pousse un événement SSE sur
|
|
`GET /api/stream`. Le navigateur se recharge en douceur quand c'est
|
|
sûr (onglet visible, pas de panneau ouvert, pas de saisie en cours,
|
|
pas de drag) ; sinon une pastille « Nouvelle activité » propose
|
|
l'actualisation.
|
|
- **Synchro par étiquettes** : les colonnes intermédiaires sont
|
|
reflétées dans Gitea par des étiquettes `kanban:todo`,
|
|
`kanban:in_progress`, `kanban:review` (créées au besoin, ajout /
|
|
retrait granulaires — les étiquettes de l'utilisateur ne sont jamais
|
|
touchées ; backlog et done = aucune étiquette). Désactivable :
|
|
`KANBANTE_SYNC_LABELS=0`.
|
|
- **Boards par milestone** : `GET /board/{owner}/{repo}?milestone=<titre|id>`
|
|
filtre le board, avec bandeau d'échéance et progression
|
|
(issues fermées du milestone / total). Sélecteur de milestones
|
|
au-dessus du board.
|
|
|
|
### Interface (refonte complète)
|
|
- Nouveau design system : en-tête vitré sticky avec navigation en
|
|
pastilles (état actif), halos d'ambiance, cartes projets qui se
|
|
soulèvent au survol, barres de progression, coins plus doux,
|
|
anneau de focus visible partout, `prefers-reduced-motion` respecté.
|
|
- Dashboard : hero avec tuiles de synthèse (projets actifs, issues
|
|
fermées et déplacements sur 30 jours, temps de cycle moyen — depuis
|
|
le journal), états vides guidés pour chaque onglet, raccourci `/`
|
|
pour la recherche (aussi sur le filtre du board).
|
|
- Board : pastille « live » en cas d'activité externe, colonnes à
|
|
défilement indépendant, placeholders de colonnes vides, panneau de
|
|
notes explicité, drawer animé.
|
|
- Cohérence : même navigation sur les 5 pages, responsive retravaillé.
|
|
|
|
### Tests
|
|
- 13 tests ajoutés (65 au total) : hub SSE et générateur de flux,
|
|
webhooks (transition, idempotence, signature, JSON invalide),
|
|
synchro d'étiquettes, boards par milestone, marqueurs de la refonte.
|
|
|
|
## 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
|
|
marqué « confirmé » avait été reproduit par un test avant correction).
|
|
|
|
### Critiques corrigés
|
|
- **Perte de données en Docker** : `KANBANTE_DB_PATH` est enfin lue par le
|
|
code — la base SQLite atterrit dans le volume `/data` comme prévu.
|
|
- **Authentification** : Basic Auth optionnelle mais recommandée
|
|
(`KANBANTE_AUTH_USER` / `KANBANTE_AUTH_PASSWORD`, `KANBANTE_REQUIRE_AUTH=1`
|
|
pour refuser de servir sans), protection CSRF (double-submit) sur tous
|
|
les POST, avertissement bruyant au démarrage quand l'auth est absente.
|
|
- **Synchro bidirectionnelle** : déplacer une carte vers « Terminé » ferme
|
|
l'issue dans Gitea, la ressortir la rouvre (`KANBANTE_SYNC_GITEA=0` pour
|
|
désactiver). L'état local est réconcilié à chaque chargement de board
|
|
(fermées → Terminé, supprimées → purgées).
|
|
|
|
### Importants corrigés
|
|
- Classification des projets : fenêtre d'activité glissante configurable
|
|
(`KANBANTE_ACTIVE_WINDOW_DAYS`, défaut 365) et vrai drapeau `archived`
|
|
de Gitea — fini l'année codée en dur et l'onglet « Archivés » mensonger.
|
|
- Pagination complète des appels Gitea (le plafond serveur de 50 réponses
|
|
par page ne tronque plus les dépôts ni les issues, en silence).
|
|
- `get_board_state` ne plante plus sur une colonne inconnue ; migration
|
|
automatique des bases 0.1.0 (colonne `position`, `notes.updated_at`,
|
|
nettoyage des lignes invalides).
|
|
- Gitea injoignable → page d'erreur 502 propre (JSON pour l'API) au lieu
|
|
d'un 500 brut ; `/api/readiness` teste réellement SQLite et Gitea,
|
|
`/api/health` reste un liveness sans dépendance.
|
|
- Dockerfile : installation après copie du code (le package installé
|
|
n'est plus vide), utilisateur non-root, `HEALTHCHECK`, `.dockerignore`.
|
|
|
|
### Ajouts
|
|
- **Ordre des cartes persisté** dans chaque colonne (aller-retour
|
|
glisser-déposer → rechargement).
|
|
- **Création d'issues** depuis le board (`POST /api/issues`).
|
|
- **Vue Focus** (`/focus`) : tout ce qui est En cours / En révision,
|
|
tous projets actifs confondus.
|
|
- Filtres par texte et par étiquette sur le board ; les cartes lient
|
|
vers l'issue Gitea ; les pull requests ne sont plus affichées comme
|
|
des issues.
|
|
- Suite de tests `pytest` (modèles, client Gitea, API, auth/CSRF) et
|
|
CI Gitea Actions (`.gitea/workflows/ci.yml`).
|
|
- Fichier `LICENSE` (MIT, annoncé par le README depuis la 0.1.0).
|
|
|
|
### Détails
|
|
- Client Gitea entièrement asynchrone (les routes ne bloquent plus la
|
|
boucle d'événements), cache mémoire court des listes, en-tête
|
|
`Authorization` seulement si un jeton est configuré, uid résolu via
|
|
`/user` (plus de `uid=1` ni d'utilisateur codés en dur), `.env` chargé
|
|
depuis la racine du projet seulement.
|
|
- Bibliothèques JS (HTMX, Alpine, SortableJS) **vendorées** dans
|
|
`static/vendor/` : plus aucune dépendance CDN à l'exécution.
|
|
- Glisser-déposer : en cas d'échec serveur, la carte est replacée et le
|
|
toast d'erreur est rouge ; les déplacements envoient l'ordre complet
|
|
des colonnes source et destination.
|
|
- API : codes HTTP corrects (400 colonne invalide, 403 CSRF, 413 note
|
|
trop longue — limite configurable), `lifespan` FastAPI à la place de
|
|
`on_event` déprécié, imports nettoyés.
|
|
- CSS : fond des badges corrigé (`color-mix()` remplace l'invalide
|
|
`var(--accent)20`).
|
|
- Recherche du dashboard : le nom des dépôts passe par un attribut
|
|
`data-search` échappé, plus aucune interpolation dans du JS.
|
|
- `docker-compose.yml` : clé `version:` obsolète retirée, variables
|
|
d'auth exposées, healthcheck.
|
|
|
|
## 0.1.0 — 2026-07-07
|
|
|
|
Version initiale : dashboard des projets Gitea, board Kanban 5 colonnes
|
|
par dépôt (glisser-déposer SortableJS), notes par projet, état local
|
|
SQLite, thème sombre, Dockerfile + docker-compose.
|