cc1caa9671
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
5.4 KiB
5.4 KiB
Migration Dash 3.4 → 4.4 — Design (#101)
Statut : design validé le 2026-07-09. Prêt pour le plan d'implémentation. Issues liées : #101 (cette migration), #41 (AG Grid, suite), #111 (serveur MCP, nécessite Dash ≥ 4.3).
1. Objectif & périmètre
Monter la dépendance dash de 3.4.0 à 4.4.x, sans changement fonctionnel de l'application.
Dans le périmètre :
- Consolidation et bump de la déclaration
dashdanspyproject.toml. - Validation et, si nécessaire, bump des libs de l'écosystème Dash (
dash-leaflet,dash-extensions,dash[testing]). - Acceptation du nouveau style des composants DCC de Dash 4 ; retrait du CSS custom qui entre en conflit.
- Corrections des cassures fonctionnelles éventuelles.
Hors périmètre (issues dédiées) :
- Migration DataTable → AG Grid → #41. Les
dash_table.DataTablerestent en place. Elles sont dépréciées mais fonctionnelles en Dash 4.x (retrait prévu seulement en Dash 5.0). - Serveur MCP des données sous auth → #111 (nécessite Dash ≥ 4.3, donc cette migration en est le prérequis).
- Toute nouvelle fonctionnalité tirant parti de Dash 4.
2. Contexte technique constaté
pyproject.tomldéclaredashde façon dédoublée :"dash==3.4.0"et"dash[compress]"(non épinglé). À consolider.- Version installée :
dash3.4.0,dash-bootstrap-components2.0.4,dash-leaflet1.1.3,dash-extensions2.0.5. - Aucun usage de
run_server,long_callback,LogoutButton,_set_react_versiondanssrc/nirun.py→ les ruptures Dash 3.0 sont déjà absorbées. React 18.3.1 est déjà le défaut depuis Dash 3. - Composants DCC utilisés que Dash 4 restyle :
dcc.Dropdown(×11, filtres et sélecteurs de colonnes),dcc.Input(×23),dcc.Loading(×5),dcc.Checklist(×2),dcc.RadioItems(×1). Pas deSlider,DatePicker,Tabs,TextArea→ surface visuelle limitée. DataTableest utilisé dansrecherche,tableau,acheteur,titulaire,observatoire,admin/liste, et sous-classé danssrc/figures.py(class DataTable(dash_table.DataTable)).src/utils/table_sql.pytraduit le DSL de filtre DataTable en SQL DuckDB. Tout cela reste inchangé (relève de #41).
3. Décisions de design
- Régressions visuelles : accepter le look Dash 4. On ne corrige que les cassures fonctionnelles (débordement, illisibilité, comportement rompu). Le CSS custom qui entre en conflit avec le restyling DCC est retiré plutôt que patché.
- Épinglage : pin exact sur la dernière 4.4.x, cohérent avec le style actuel (
dash==3.4.0). Ligne consolidée en"dash[compress]==4.4.x". - Bump des libs tierces : seulement si nécessaire. On ne monte
dash-leaflet/dash-extensionsque si la compat Dash 4 l'exige. - Approche de séquencement : bump groupé (A), dans un worktree isolé basé sur
dev. Une seule PR. Justifié par le périmètre contenu et l'absence de ruptures majeures.
4. Étapes d'implémentation (haut niveau)
Le détail sera produit par le skill writing-plans. Séquence prévue :
- Validation de compat (premier, car seul vrai risque). Dans le worktree : consolider/bumper
dashdanspyproject.toml,uv sync,uv run run.py. Observer la résolution des dépendances et le démarrage. Point le plus à risque : les cartes Leaflet (dash-leaflet+ clustering viadash-extensions). Bumper ces libs si cassées.- Si un blocage dur apparaît (lib tierce sans release compatible Dash 4), arrêt et réévaluation avant d'aller plus loin.
- Corrections fonctionnelles. Vérifier les 11
dcc.Dropdownface aux nouveaux défauts Dash 4 (optionHeight='auto',closeOnSelectdistinct en multi-select) ; corriger uniquement si comportement cassé. - Nettoyage CSS. Retirer de
src/assets/css/les overrides devenus inutiles ou cassants suite au restyling DCC. - Alignement
dash[testing]sur la même version dans le groupedev.
5. Vérification (definition of done)
pre-commitexécuté (ruff) avant toutgit add/ commit (cf. CLAUDE.md).uv run pytestvert (suite pytest/Selenium, nécessite Chrome/Chromium).uv run run.pydémarre l'app sans erreur.- Smoke test manuel local des 6 pages principales :
/,/acheteur,/titulaire,/tableau,/marche,/observatoire, plus cartes Leaflet et exports (xlsx/csv).
6. Livraison
- Worktree isolé basé sur
dev→ une PR versdev. - Le merge dans
devdéclenche l'auto-deploy vers test.colibre.fr (validation en conditions réelles = bonus, hors DoD strict).
7. Risques & mitigations
| Risque | Mitigation |
|---|---|
dash-leaflet / dash-extensions incompatibles Dash 4 |
Étape 1 le révèle tôt ; bump ciblé ; blocage dur → réévaluation avant de continuer |
| Régressions des cartes non couvertes par les tests | Smoke manuel explicite dans la DoD (cartes Leaflet) |
| CSS custom cassant un composant DCC restylé | Retrait de l'override plutôt que patch |
Conflits de peer-dependencies (React/Dash) à uv sync |
Détectés à l'étape 1 ; résolus par alignement des versions écosystème |