maribakulj commited on
Commit
be42a4a
·
unverified ·
1 Parent(s): ebf47e1

Add development plan in PLANS.md

Browse files

This document outlines the development plan divided into short, testable batches suitable for a workflow with Codex. Each batch is designed to be handled in a separate branch or worktree.

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