Clafoutis / PLANS.md
maribakulj
Add development plan in PLANS.md
be42a4a unverified
# 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.