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.