docling-studio/CHANGELOG.md
Pier-Jean Malandrino e203fe8b71 chore(release): cut 0.5.0 — bump frontend version + complete CHANGELOG
Lifts the audit 11 CRIT blocker (missing CHANGELOG [0.5.0] section) and
the matching MAJ on the frontend version pin.

Refs #200
2026-04-29 14:00:00 +02:00

8.1 KiB

Changelog

All notable changes to Docling Studio will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.5.0] - 2026-04-28

Added

  • Reasoning-trace viewer: SQLite-backed graph built from document_json, iteration-by-iteration overlay on the document outline (StructureViewer + GraphView), bidirectional PDF ↔ graph focus
  • Live reasoning runner via docling-agent (Ollama backend): POST /api/documents/:id/reasoning returns answer + iteration trace + convergence flag (gated by REASONING_ENABLED, off by default)
  • LLMProvider port abstraction with OllamaProvider adapter — opens the door to alternate LLM backends once docling-agent supports them
  • Neo4j graph storage pipeline: TreeWriter + ChunkWriter adapters, schema bootstrap, graph fetch endpoint, Maintain step with cytoscape-based graph visualization
  • Architecture decision record (ADR-001): graph visualization library choice and 200-page endpoint cap
  • Remote chunking: enabled in Docling Serve mode (previously local-only)
  • Hexagonal architecture tests powered by pytestarch (CI-enforced)
  • Centralized magic numbers for page dimensions, limits, and timeouts
  • Paste image size/type limits (env vars MAX_PASTE_IMAGE_SIZE_MB, PASTE_ALLOWED_IMAGE_TYPES); surfaced in /api/health

Changed

  • Breaking — RAG_* env vars renamed to REASONING_*: RAG_ENABLEDREASONING_ENABLED, RAG_MODEL_IDREASONING_MODEL_ID. Health response field ragAvailablereasoningAvailable. New LLM_PROVIDER_TYPE env var (default ollama) materializes the LLM-provider abstraction.
  • Breaking — reasoning endpoint renamed /rag/reasoning: POST /api/documents/:id/rag is now POST /api/documents/:id/reasoning. Aligns with frontend reasoning feature naming.
  • api/reasoning.py refactored to depend on ReasoningRunnerPort; concrete docling-agent integration moved to infra/docling_agent_reasoning.py (clean architecture)
  • Frontend reasoning feature flag now reads reasoningAvailable from /api/health; sidebar entry hides when the backend is not wired (instead of failing with 503 on click)
  • Documented that docker-compose.yml ships dev-only defaults (Neo4j changeme password, OpenSearch DISABLE_SECURITY_PLUGIN=true); operators must harden their own production deployments
  • Backend logs a loud warning at boot if Neo4j is wired (NEO4J_URI set) with the default changeme password, so prod operators can't silently inherit it
  • DocumentConverter port exposes supports_page_batching: bool so the analysis service no longer relies on isinstance(converter, ServeConverter) (LSP fix)
  • VectorStore port gains a ping() method; IngestionService.ping() now goes through the port instead of reaching into _vector_store._client (encapsulation)
  • API path parameters renamed {job_id}{analysis_id} across api/analyses.py and api/ingestion.py to align the OpenAPI surface with the user-facing terminology (URL paths unchanged)
  • Centralised localStorage keys (docling-theme, docling-locale) into frontend/src/shared/storage/keys.ts (STORAGE_KEYS)
  • Removed the dead apiUrl ref from the settings store and its orphan settings.apiUrl i18n entries
  • Document-status string "uploaded" extracted to DOCUMENT_STATUS_UPLOADED in api/schemas.py
  • PDF preview endpoint (GET /api/documents/{id}/preview) now offloads the synchronous file read + rasterisation to a worker thread (asyncio.to_thread), unblocking the FastAPI event loop

Fixed

  • Graph: collapse Docling InlineGroup and Picture children to avoid empty leaf nodes (#197)
  • Neo4j: rewrite fetch_graph using CALL subqueries for proper relationship traversal
  • CI: install pytestarch in backend tests job (#177)
  • CI: ignore CVE-2026-40393 (Mesa) with expiry — Debian has no backport (#190)
  • Reasoning: re-scroll PDF when re-clicking the active iteration
  • infra/docling_tree.py:101 migrated isinstance(bbox, (list, tuple)) to PEP 604 union (Ruff UP038)
  • Cross-feature integration test moved out of features/history/ into src/__tests__/integration/ so feature folders stay self-contained
  • Tightened terminal assert X is not None checks in domain/repo/service tests to compare the value (e.g. isinstance(.., datetime) after mark_running()/mark_completed())

[0.4.0] - 2026-04-13

Added

  • Inline chunk text editing: double-click or edit button to modify chunk text, with save/cancel and "modified" badge
  • Docker Compose dev stack (docker-compose.dev.yml) with OpenSearch, Dashboards, hot-reload backend and Vite frontend
  • Soft-delete chunks: delete button with confirmation dialog, chunks hidden from UI but preserved in data
  • Vector index metadata schema: IndexedChunk domain model, OpenSearch mapping builder, configurable embedding dimension
  • VectorStore port (Protocol): ensure_index, index_chunks, search_similar, get_chunks, delete_document
  • OpenSearch adapter (OpenSearchStore): kNN vector search, full-text search, bulk indexing, document CRUD
  • Embedding microservice (embedding-service/): sentence-transformers REST API with batch processing and Dockerfile
  • EmbeddingService port and EmbeddingClient HTTP adapter for remote embedding generation
  • Orchestrated ingestion pipeline: Docling → chunking → embedding → OpenSearch indexing (idempotent)
  • Ingestion REST API: POST /api/ingestion/{jobId}, DELETE /api/ingestion/{docId}, GET /api/ingestion/status
  • Production docker-compose with OpenSearch and embedding service
  • E2E Karate test for full ingestion workflow (PDF → chunks in OpenSearch)
  • My Documents screen: search, filter (all/indexed/not indexed), sort (name/date), ingestion status badges
  • Ingest button in Studio: one-click ingestion from completed analysis with progress feedback

Fixed

Changed

[0.3.1] - 2026-04-09

Added

  • Batch conversion progress: segmented progress bar with ring indicator and per-batch visual feedback
  • Inline mini progress bar in the top banner during analysis
  • Informational notice in Prepare mode when chunking is unavailable (batch mode)
  • BATCH_PAGE_SIZE environment variable forwarded in Docker Compose

Fixed

  • Batch progress reset to null on completion (progress_current/progress_total overwritten by stale in-memory job object)
  • Regression test for batch progress preservation in _run_analysis_inner flow
  • E2E assertion on final progress values in batch-progress feature

[0.3.0] - 2026-04-07

Added

  • Chunking support: domain objects, persistence, API endpoints, and frontend Prepare mode
  • Chunk-to-bbox hover highlighting in Prepare mode
  • Page filtering and collapsible config in Prepare mode
  • Feature flipping mechanism
  • Reusable pagination composable and PaginationBar component
  • Version display in sidebar, settings page, and health endpoint

Fixed

  • Feature flag health check blocked by CORS
  • Zombie jobs and unprotected JSON parse
  • Upload error not displayed in DocumentUpload component
  • Serve API contract: send to_formats as repeated form fields
  • Audit findings: security, robustness, dead code, domain-infra violation

Changed

  • Refactored backend to hexagonal architecture for converter extensibility
  • Added ServeConverter adapter for remote Docling Serve integration
  • Moved @vitest/mocker from dependencies to devDependencies

[0.2.0] - 2025-05-14

Added

  • Multi-arch Docker image release pipeline (GitHub Actions)
  • Docker image published to ghcr.io/scub-france/Docling-Studio

[0.1.0] - 2025-01-01

Added

  • Initial release of Docling Studio
  • PDF upload and document management
  • Configurable Docling pipeline (OCR, tables, code, formulas, images)
  • Bounding box visualization with color-coded overlays
  • Per-page results synchronized with PDF viewer
  • Markdown and HTML export
  • Analysis history with re-visit capability
  • Dark/Light theme support
  • French and English localization
  • Docker and Docker Compose deployment
  • CI/CD with GitHub Actions (tests + multi-arch Docker build)
  • Health check endpoint (/health)
  • SQLite-backed persistence