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