GET /api/analyses?documentId=X retournait toutes les analyses (le query
param était ignoré). Le frontend prenait alors la première COMPLETED de
la réponse, qui pouvait être celle d'un autre doc → bboxes d'un autre
doc projetées sur l'image en cours.
Backend
- analysis_repo: nouvelle méthode find_by_document(document_id, limit, offset)
- analysis_service: expose find_by_document
- api/analyses: GET /api/analyses accepte ?documentId=... (alias Pydantic
pour respecter la règle ruff N803). Si présent, filtre via la nouvelle
méthode; sinon comportement inchangé.
- test: test_list_analyses_filtered_by_document vérifie le routing vers
find_by_document quand le query param est fourni.
Frontend (defensive)
- DocInspectTab / DocAskTab: filtre client-side
analyses.find(a => a.documentId === requestedId && a.status === 'COMPLETED')
pour rester safe même si un backend antérieur ignore le param.
Quand l'utilisateur naviguait d'un doc à un autre via /docs/:id, Vue
réutilisait l'instance du composant — onMounted ne se redéclenchait pas,
laissant l'analyse précédente (et donc les bbox du StructureViewer)
visibles tant que le nouveau fetch n'était pas terminé.
- DocWorkspacePage: watch props.id pour recharger le doc + :key sur les
onglets (forçe un remount propre, reset l'état interne du
StructureViewer comme selectedPage/hiddenTypes).
- DocInspectTab / DocAskTab: watch props.docId avec immediate:true,
reset l'état au début du load + guard de race condition (ignore les
réponses pour un docId obsolète).