CI / test (push) Successful in 1m39s
Version, CHANGELOG (palier 1) et README (fonctionnalités, KANBANTE_WIP_LIMITS / KANBANTE_AGING_DAYS, nouvelles routes).
5.4 KiB
5.4 KiB
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/eventsetGET /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 (sourcegitea). 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 surboard_state.updated_atpuis 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 affichen/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_PATHest enfin lue par le code — la base SQLite atterrit dans le volume/datacomme prévu. - Authentification : Basic Auth optionnelle mais recommandée
(
KANBANTE_AUTH_USER/KANBANTE_AUTH_PASSWORD,KANBANTE_REQUIRE_AUTH=1pour 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=0pour 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 drapeauarchivedde 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_statene plante plus sur une colonne inconnue ; migration automatique des bases 0.1.0 (colonneposition,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/readinessteste réellement SQLite et Gitea,/api/healthreste 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
Authorizationseulement si un jeton est configuré, uid résolu via/user(plus deuid=1ni d'utilisateur codés en dur),.envchargé 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),
lifespanFastAPI à la place deon_eventdéprécié, imports nettoyés. - CSS : fond des badges corrigé (
color-mix()remplace l'invalidevar(--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.