Spaces:
Sleeping
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é :
- Lot 0 — cadrage repo
- Lot 1 — backend socle
- Lot 2 — frontend socle
- Lot 3 — intégration Mirador minimale
- Lot 4 — import manuel + manifest-by-url
- Lot 5 — connecteur Gallica
- Lot 6 — connecteurs Bodleian + Europeana
- Lot 7 — ranking, cache, partial failures, provenance
- Lot 8 — couche MCP
- Lot 9 — Docker + Hugging Face Spaces
- 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.mddocs/specs.mddocs/mvp-scope.mddocs/architecture.mddocs/acceptance-checklist.mdREADME.mdminimal- 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
BaseConnectorConnectorRegistrySearchOrchestrator- 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/importfonctionne ; - 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_itemresolve_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/sourcesreflè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_itemsget_itemresolve_manifestopen_in_miradorlist_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-scaffoldfeat/backend-corefeat/frontend-shellfeat/miradorfeat/import-manifestfeat/connector-gallicafeat/connectors-bodleian-europeanafeat/ranking-cache-observabilityfeat/mcpfeat/deploy-hfchore/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.