v0.6.1 — Audit-remediated release
Release date : 2026-05-25
Audit verdict : GO — score 90.27/100, 0 CRIT, 3 MAJ planifiés pour 0.7.0
Full audit report : docs/audit/reports/release-0.6.1-reaudit/summary.md
Highlights
Per-document workspace (#263–#268)
The legacy single-page /studio editor gives way to a DocWorkspacePage shell with four dedicated tabs: Parse (preview + LAYERS filters + focus mode + tree color-coding), Chunk (Strategy popover for inline rechunk, decoupled "Generate chunks" CTA), Inspect (Markdown / Elements / Images), Compare. Every doc keeps its own state; navigation no longer leaks bbox or analysis context between documents.
Version history with paired snapshots (#267)
Every analysis run and rechunk now writes a frozen (analysis, chunks) snapshot. The History drawer lists them and lets you switch the active analysis on the fly — no more lost intermediates.
Backend goes DDD-granular (#256, #269)
New ChunkService exposes 9 doc-scoped routes under /api/documents/{id}/chunks/*. The no-UX-shaped-routes rule is now codified — every existing /api/* route is classified in docs/design/269-backend-ddd-audit.md.
Stores get real connection credentials (#279)
Stores are no longer pinned to env-var-only connections. Each store row carries its own connection_uri / connection_username / connection_password, with passwords sealed at rest via Fernet (STORE_SECRET_KEY). Per-(uri, user) connection pools for both Neo4j and OpenSearch. New "Test connection" button in the store form.
Ingest tab + push history (#225, #283, #285)
Workspace gets a proper Ingest view: history-driven shell, pending-push badge on the CTA, hierarchical doc tree with per-tab CTAs and ingest-targets popover. Backend exposes GET /api/documents/{id}/chunks/pushes for the history feed.
Master surface flags (#257)
Two new env-vars gate two opt-in surfaces:
STUDIO_MODE_ENABLED— re-enables the legacy/studiopage (kept around until 0.7.0 ships its rewrite)RAG_PIPELINE_ENABLED— gates the reasoning pipeline
Both default to false in production (see BREAKING below).
Karate UI e2e suite
First batch of UI regression coverage lands under e2e/ui/ — driven by Karate UI, not Playwright. CI runs @critical tagged scenarios on main.
⚠️ BREAKING CHANGES — read before upgrading
1. POST /api/documents/{id}/chunks/push response field
- { "jobId": "...", "summary": { ... } }
+ { "pushId": "...", "summary": { ... } }Frontend consumers and any external script that calls this endpoint must update.
2. Surface flags default off in production
STUDIO_MODE_ENABLED and RAG_PIPELINE_ENABLED were implicitly on before 0.6.1. If you rely on the legacy /studio page or the RAG pipeline, set them explicitly:
# docker-compose.yml or .env
STUDIO_MODE_ENABLED: "true"
RAG_PIPELINE_ENABLED: "true"3. STORE_SECRET_KEY required for sealed stores
Any 0.6.0 deployment that already created store rows with sealed passwords will fail to boot on 0.6.1 until STORE_SECRET_KEY is provided.
Generate a Fernet key and pin it in the environment:
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"Rotating the key invalidates every existing sealed value — keep it stable.
4. i18n keys renamed
Any external translation override file must update:
| Old key | New key |
|---|---|
chunks.pushedJob |
chunks.pushDispatched |
chunks.stale.jobDispatched |
chunks.stale.pushDispatched |
docs.jobDispatched |
docs.pushDispatched |
Placeholder {jobId} → {pushId} in all three.
5. No auto-migration from 0.5.x (carried over from 0.6.0)
The SQLite schema is bootstrapped fresh from _SCHEMA. Upgrading from a 0.5.x database requires either (a) re-importing your documents into a fresh DB, or (b) hand-rolling the catch-up DDL.
Installation
Docker (recommended)
# Pull the new image (pick remote OR local)
docker pull ghcr.io/scub-france/docling-studio:0.6.1-local
# or
docker pull ghcr.io/scub-france/docling-studio:0.6.1-remote
# Multi-arch: linux/amd64 + linux/arm64Docker Compose
Update your docker-compose.yml (or .env) per the BREAKING CHANGES section above, then:
docker compose pull
docker compose up -d --wait
curl -s http://localhost:3000/api/health | jq .
# Expected: {"status":"ok","version":"0.6.1","engine":"...","deploymentMode":"self-hosted"}See docs/release/deployment-checklist.md for the full deploy + smoke-test procedure.
Quality gate
This release is the first to ship after a full 12-point audit + remediation cycle. Initial verdict was NO-GO (4 CRIT, 11 MAJ, score 79.12/100). After remediation, re-audit verdict is GO (0 CRIT, 3 MAJ planifiés pour 0.7.0, score 90.27/100).
| Audit dimension | Score |
|---|---|
| 01 Clean Architecture (Hexagonal) | 97/100 — GO |
| 02 DDD | 97/100 — GO |
| 03 Clean Code | 72/100 — GO CONDITIONNEL |
| 04 KISS | 87.5/100 — GO |
| 05 DRY | 75/100 — GO CONDITIONNEL |
| 06 SOLID | 100/100 — GO |
| 07 Decoupling | 73/100 — GO CONDITIONNEL |
| 08 Security | 100/100 — GO |
| 09 Tests | 96/100 — GO |
| 10 CI / Build | 100/100 — GO |
| 11 Documentation | 100/100 — GO |
| 12 Performance | 85.7/100 — GO |
Validation pipeline shipped green : backend 733 pytest, frontend 400 vitest, Karate API 39 e2e (12 features), Ruff + ESLint + Prettier + vue-tsc clean, Docker compose stack Healthy, multi-arch images built.
Full per-audit reports under docs/audit/reports/release-0.6.1-reaudit/.
Full changelog
See CHANGELOG.md § 0.6.1 for the unabridged Added / Changed / Fixed / Security / BREAKING CHANGES sections.
Diff : v0.5.1...v0.6.1