Spaces:
Sleeping
Sleeping
File size: 7,289 Bytes
be42a4a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 | # PLANS.md
## But
Ce document découpe le développement en lots courts, testables et adaptés à un workflow avec Codex.
Chaque lot doit pouvoir être traité dans une branche ou worktree séparé.
---
## Vue d’ensemble
Ordre recommandé :
1. Lot 0 — cadrage repo
2. Lot 1 — backend socle
3. Lot 2 — frontend socle
4. Lot 3 — intégration Mirador minimale
5. Lot 4 — import manuel + manifest-by-url
6. Lot 5 — connecteur Gallica
7. Lot 6 — connecteurs Bodleian + Europeana
8. Lot 7 — ranking, cache, partial failures, provenance
9. Lot 8 — couche MCP
10. Lot 9 — Docker + Hugging Face Spaces
11. Lot 10 — hardening final
---
## Lot 0 — cadrage repo
### Objectif
Poser la structure de travail, les conventions et la documentation de référence.
### Livrables
- `AGENTS.md`
- `docs/specs.md`
- `docs/mvp-scope.md`
- `docs/architecture.md`
- `docs/acceptance-checklist.md`
- `README.md` minimal
- arborescence vide du monorepo
### Critères de validation
- l’arborescence cible est claire ;
- les conventions sont écrites ;
- les lots suivants peuvent être lancés sans ambiguïté.
---
## Lot 1 — backend socle
### Objectif
Créer le noyau backend stable avant les connecteurs réels.
### Inclus
- FastAPI bootable
- config minimale
- modèles Pydantic
- `BaseConnector`
- `ConnectorRegistry`
- `SearchOrchestrator`
- endpoints :
- `/api/health`
- `/api/sources`
- `/api/search`
- `/api/item/{id}`
- `/api/resolve-manifest`
- `/api/import`
- connecteur mock de démonstration
- tests unitaires et intégration de base
### Exclu
- vrais connecteurs complexes
- logique MCP
- cache avancé
### Critères de validation
- l’API démarre ;
- les modèles sont stables ;
- les routes répondent ;
- les succès partiels sont prévus ;
- le frontend peut déjà se brancher dessus.
---
## Lot 2 — frontend socle
### Objectif
Mettre en place l’interface de base branchée sur le backend socle.
### Inclus
- React + TypeScript
- Tailwind
- navigation principale :
- Recherche
- Lecture
- Import
- Sources
- À propos
- store global
- barre de recherche
- filtres basiques
- galerie de résultats
- composant `ResultCard`
- gestion loading / empty / error
- page Sources
- branchement API backend
### Exclu
- connecteurs réels complexes
- ranking avancé
- features post-MVP
### Critères de validation
- le frontend build ;
- une recherche mock affiche des cartes ;
- la navigation est stable ;
- l’ouverture vers Lecture est préparée.
---
## Lot 3 — intégration Mirador minimale
### Objectif
Intégrer Mirador proprement comme viewer de lecture.
### Inclus
- composant `MiradorWorkspace`
- ouverture d’un manifest
- ouverture de plusieurs manifests
- mode simple / compare
- stockage léger des manifests ouverts
- lien entre résultats sélectionnés et page Lecture
### Exclu
- logique de recherche dans Mirador
- persistance avancée de session
### Critères de validation
- un manifest URL peut être ouvert ;
- plusieurs manifests peuvent être affichés ;
- la sélection depuis la galerie alimente bien Mirador.
---
## Lot 4 — import manuel + connecteur manifest-by-url
### Objectif
Créer le chemin le plus robuste de démonstration fonctionnelle.
### Inclus
- page Import
- validation d’URL
- détection manifest direct
- heuristiques simples de notice -> manifest
- connecteur `manifest_by_url`
- tests de sécurité basiques
- tests d’import
### Critères de validation
- coller une URL de manifest ouvre Mirador ;
- l’API `/api/import` fonctionne ;
- les URLs invalides sont rejetées proprement.
---
## Lot 5 — connecteur Gallica
### Objectif
Ajouter la première source réelle prioritaire.
### Inclus
- connecteur Gallica
- mapping vers `NormalizedItem`
- recherche simple
- `get_item`
- `resolve_manifest`
- mode mock ou fixtures
- tests unitaires du mapping
- tests d’intégration ciblés
### Critères de validation
- une requête simple renvoie des résultats Gallica normalisés ;
- les manifests Gallica sont résolus quand disponible ;
- l’échec Gallica n’empêche pas la réponse globale.
---
## Lot 6 — connecteurs Bodleian + Europeana
### Objectif
Porter la fédération à trois sources réelles minimum.
### Inclus
- connecteur Bodleian
- connecteur Europeana
- normalisation cohérente
- capacités déclaratives
- modes mock ou fixtures
- tests unitaires par connecteur
### Critères de validation
- au moins trois sources fonctionnent ;
- `/api/sources` reflète correctement les capacités ;
- la galerie fusionne les résultats sans casser l’UI.
---
## Lot 7 — ranking, cache, partial failures, provenance
### Objectif
Améliorer la robustesse et la lisibilité des résultats.
### Inclus
- score simple agrégé
- déduplication légère non agressive
- cache mémoire
- journal de provenance
- temps de réponse par source
- `partial_failures`
- timeouts configurables
### Critères de validation
- les temps de réponse sont mieux maîtrisés ;
- les erreurs sont visibles mais non bloquantes ;
- les résultats sont mieux ordonnés ;
- la provenance est consultable.
---
## Lot 8 — MCP
### Objectif
Exposer les fonctions métier via MCP sans créer de deuxième backend.
### Inclus
- outils :
- `search_items`
- `get_item`
- `resolve_manifest`
- `open_in_mirador`
- `list_sources`
- documentation minimale
- exemple client
- tests de non-régression si simple
### Exclu
- logique métier dupliquée
- nouveaux modèles indépendants de REST
### Critères de validation
- MCP appelle les mêmes services que REST ;
- les réponses sont cohérentes ;
- aucun fork de logique n’apparaît.
---
## Lot 9 — Docker + Hugging Face Spaces
### Objectif
Rendre le projet réellement déployable.
### Inclus
- Dockerfile
- `.env.example`
- config dev/prod
- scripts de démarrage
- instructions Hugging Face Spaces
- healthcheck de conteneur
### Critères de validation
- build Docker OK ;
- démarrage local OK ;
- documentation de déploiement claire.
---
## Lot 10 — hardening final
### Objectif
Nettoyer et stabiliser avant démonstration.
### Inclus
- revue architecture
- nettoyage dépendances
- vérification typage
- vérification tests
- audit SSRF/import
- polissage UX minimal
- README final
- checklist MVP finale
### Critères de validation
- le MVP est démontrable ;
- la doc est lisible ;
- la structure est propre ;
- les limites connues sont documentées.
---
## Stratégie Git recommandée
### Branches ou worktrees
- `feat/repo-scaffold`
- `feat/backend-core`
- `feat/frontend-shell`
- `feat/mirador`
- `feat/import-manifest`
- `feat/connector-gallica`
- `feat/connectors-bodleian-europeana`
- `feat/ranking-cache-observability`
- `feat/mcp`
- `feat/deploy-hf`
- `chore/hardening`
### Règle
Un lot majeur = une branche ou un worktree.
Ne pas mélanger :
- frontend shell et connecteurs réels dans la même branche ;
- MCP et refonte backend dans la même branche ;
- déploiement et refactoring profond dans la même branche.
---
## Definition of done par lot
Avant merge, vérifier :
- code compilable ;
- tests pertinents passants ;
- docs mises à jour ;
- pas de duplication ;
- pas de débordement de périmètre ;
- limites restantes listées noir sur blanc.
|