Files
kanbante/CHANGELOG.md
T
Spark 3cac4fe9c3
CI / test (push) Successful in 1m39s
chore(release): Kanbante 0.3.0
Version, CHANGELOG (palier 1) et README (fonctionnalités,
KANBANTE_WIP_LIMITS / KANBANTE_AGING_DAYS, nouvelles routes).
2026-10-11 10:05:51 -04:00

105 lines
5.4 KiB
Markdown

# 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
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.