docling-studio/document-parser/tests
Pier-Jean Malandrino 27e3323bff
Some checks failed
Auto-close issues on release branch merge / Close referenced issues (push) Has been cancelled
feat(#257): surface gating via STUDIO_MODE + RAG_PIPELINE master flags
Introduces two master feature flags that select which UI surface is
exposed, replacing the previous "delete legacy pages" approach with a
softer isolation:

- STUDIO_MODE_ENABLED  (default false) — legacy OCR-debug surface
- RAG_PIPELINE_ENABLED (default true)  — new doc-centric ingestion + viz

At least one master must be enabled (validated server-side at startup).
Sub-flags (inspect / linked / ask) are effective only when the RAG
pipeline master is on.

CHUNKS_MODE_ENABLED renamed to LINKED_MODE_ENABLED in anticipation of
T3 (Linked view replaces the Chunks tab). The DocMode union value
'chunks' is preserved for now and will be renamed in T3 alongside the
route segment, to keep this PR scoped.

Router-level guard added: requests to a route whose surface is disabled
are redirected to the other surface's landing page (or /home as a
defensive fallback). Logic extracted into a pure resolveSurface helper
with full test coverage.

i18n strings that pointed users to "Studio" rewritten to be surface-
agnostic ("from the library" / "depuis la bibliothèque") since Studio
is hidden by default in 0.6.1.

Backend:
- infra/settings.py: add studio_mode_enabled + rag_pipeline_enabled;
  rename chunks_mode_enabled → linked_mode_enabled; add at-least-one
  master validation in __post_init__
- api/schemas.py: HealthResponse exposes both master flags + renamed
  sub-flag
- main.py: health endpoint wires the new fields
- tests: surface-flag + renamed sub-flag assertions

Frontend:
- features/feature-flags/store: add studioMode + ragPipeline registry
  entries; rename chunksMode → linkedMode; sub-flags now require
  ragPipeline enabled; modeFlags() maps linkedModeEnabled → key 'chunks'
  (transitional)
- shared/routing/resolveSurface: pure helper + tests
- app/router: beforeEach guard consumes resolveSurface
- shared/i18n: Studio-pointing strings rewritten (en + fr) + test sync
- features/reasoning: stale "from StudioPage" comment generalized
2026-05-11 16:18:34 +02:00
..
neo4j fix(graph): collapse Docling InlineGroup and Picture children (#197) 2026-04-29 14:00:00 +02:00
__init__.py Add a stronger testing strategy 2026-03-18 14:46:37 +01:00
test_analysis_service.py feat(chunking): soft-delete chunk with confirmation dialog 2026-04-10 20:28:24 +02:00
test_api_endpoints.py feat(#257): surface gating via STUDIO_MODE + RAG_PIPELINE master flags 2026-05-11 16:18:34 +02:00
test_api_stores.py feat(#251): /api/stores router + wiring + schemas Pydantic + tests API 2026-05-05 09:38:39 +02:00
test_architecture.py feat: add hexagonal architecture tests with pytestarch (#177) 2026-04-29 14:00:00 +02:00
test_bbox.py Move bbox.py from domain/ to infra/ and unify coordinate logic 2026-04-03 13:17:26 +02:00
test_chunk_editing.py feat(#205): promote chunks to first-class entities + audit trail 2026-05-05 09:38:39 +02:00
test_chunk_repos.py feat(#205): promote chunks to first-class entities + audit trail 2026-05-05 09:38:39 +02:00
test_chunk_service.py feat(#256): add /api/documents/{id}/chunks routes + ChunkService 2026-05-11 15:00:57 +02:00
test_chunking.py feat(#202): introduce Document lifecycle state machine 2026-05-05 09:38:39 +02:00
test_docling_agent_reasoning.py refactor(audit): remediate 0.5.0 audit findings — clean architecture, security, DRY, SOLID, perf 2026-04-29 14:00:00 +02:00
test_docling_graph.py fix(graph): collapse Docling InlineGroup and Picture children (#197) 2026-04-29 14:00:00 +02:00
test_document_chunks_api.py feat(#256): add /api/documents/{id}/chunks routes + ChunkService 2026-05-11 15:00:57 +02:00
test_document_service.py fix(arch): inject repositories and extract domain logic 2026-04-10 11:44:33 +02:00
test_embedding_client.py feat: add embedding microservice and EmbeddingService port 2026-04-10 20:53:24 +02:00
test_graph_api.py feat(reasoning): reasoning-trace viewer v1 with SQLite-backed graph 2026-04-29 14:00:00 +02:00
test_hashing.py feat(#204): deterministic chunkset hash for auto-stale detection 2026-05-05 09:38:39 +02:00
test_ingestion_api.py feat(#180): feature-flag ingestion pipeline and add brainless one-liner Quick Start 2026-04-13 11:18:56 +02:00
test_ingestion_service.py refactor(audit): remediate 0.5.0 audit findings — clean architecture, security, DRY, SOLID, perf 2026-04-29 14:00:00 +02:00
test_lifecycle.py feat(#202): introduce Document lifecycle state machine 2026-05-05 09:38:39 +02:00
test_lifecycle_aggregation.py feat(#203): per (document, store) ingestion state 2026-05-05 09:38:39 +02:00
test_migrate_06.py chore(#206): backfill 0.6.0 doc-centric data model 2026-05-05 09:38:39 +02:00
test_models.py refactor(audit): remediate 0.5.0 audit findings — clean architecture, security, DRY, SOLID, perf 2026-04-29 14:00:00 +02:00
test_ollama_provider.py refactor(audit): remediate 0.5.0 audit findings — clean architecture, security, DRY, SOLID, perf 2026-04-29 14:00:00 +02:00
test_opensearch_store.py feat(infra): add OpenSearch adapter implementing VectorStore port 2026-04-10 20:48:50 +02:00
test_pipeline_options.py refactor(audit): remediate 0.5.0 audit findings — clean architecture, security, DRY, SOLID, perf 2026-04-29 14:00:00 +02:00
test_rate_limiter.py Add in-memory rate limiting middleware 2026-04-03 13:56:05 +02:00
test_reasoning_api.py refactor(audit): remediate 0.5.0 audit findings — clean architecture, security, DRY, SOLID, perf 2026-04-29 14:00:00 +02:00
test_repos.py feat(#202): introduce Document lifecycle state machine 2026-05-05 09:38:39 +02:00
test_robustness.py fix(clean-code): English mode strings, SRP extraction, rename getter 2026-04-10 13:45:13 +02:00
test_schemas.py Format backend codebase with ruff 2026-04-02 12:33:07 +02:00
test_serve_converter.py refactor(audit): remediate 0.5.0 audit findings — clean architecture, security, DRY, SOLID, perf 2026-04-29 14:00:00 +02:00
test_settings.py feat(settings): paste-image size/type limits for #195 (#196) 2026-04-29 14:00:00 +02:00
test_store_repo.py feat(#251): SqliteStoreRepository — update/delete/find_by_name/clear_default_except 2026-05-05 09:38:39 +02:00
test_store_service.py feat(#251): add Neo4j as a StoreKind 2026-05-05 09:38:39 +02:00
test_vector_schema.py feat(domain): add VectorStore port and SearchResult value object 2026-04-10 20:40:17 +02:00
test_vector_store_port.py feat(domain): add VectorStore port and SearchResult value object 2026-04-10 20:40:17 +02:00