Repository navigation
Releases: livezingy/DocuVision
Release list
v1.12.0 - P-029 evidence verification layer
P-029 — Evidence-grounded extraction verification layer (gates A/B/C)
Ported the RCT-validated three-gate method (verbatim quote grounding / hedge fidelity / PICO slot completeness) from sciextract handover assets into an in-process �ackend/app/services/evidence/ layer: findings_schema (FindingRecord contract, evidence-findings/1.0, PROMPT_VERSION=v3), closed_lists.json (single-source closed word lists, EN 14 hedge seed), normalize + verifier (V0-V6 ladder, pinned near_match criterion, never silently corrected), gate (fail-closed export + failure ledger + HITL routing). Optional pipeline hook evidence_step gated by EVIDENCE_ENABLED (default off). Golden-set ratchet sentinel: 45 records (35 verbatim_exact / 3 near_match / 7 unsupported, 38/38 faithful, 0 overclaim). Offline QA tools under scripts/qa/.
See CHANGELOG [1.12.0] for full details.
v1.10.0 — Closure (table alignment 3-layer rework + measurement/gate family)
Release 1.10.0 notes
Tag: v1.10.0
Date: 2026-09-30
Train: Closure batch — table cell alignment rework + measurement / gate family
Cut: docs-only, on top of a179f09 (the code tree is byte-identical to b4e4a55)
Summary
v1.10.0 closes the P-002 / P-020…P-027 track. The only backend behaviour change is P-002 (table cell
alignment): the single "uniform grid geometric containment" path in table_backfill becomes three layers —
T1 value match (row-band + column-window anchored) → T2 geometric (unchanged) → T3 text cluster — with a
backfill sanity gate in front of the amber (value-replacement) branch. Everything else is measurement tooling,
documentation gates, promotion of R&D conclusions, and Lite-era clean-up. Cloud validation ran three gates
(G4/G5/G6) with real before/after numbers.
Added
- P-002 — three-layer table cell alignment (value match → geometric → cluster) (2026-09-29): see Summary.
New host modulebackend/app/services/table_alignment.py(zero migration: the three existing functions stay put,
one-way importbackfill → alignment). Contract additions are purely additive:cell_align_reason(per-cell
8-value reason grid;nullfor non-candidate cells),quality.table_backfill.align_reason_counts(8 keys always
present,sum == candidates),reasononmismatch_details[]and on debug records, a 6th review-table column,
andsibling_bboxessibling-table neighbourhood exclusion.
Geometry constants calibrated on real layouts:EXP_X_MIN_RATIO0.15 → 0.05; the other three unchanged.
Golden pins: bank 12×value_match(was 6 green / 6 red), symbol 4×value_match(was 4 red), and a new
non-uniform gold sample at 5 green / 2 honest red.
Correctness evidence: the old funnel silently mis-filled 4 cells on mamba p12 (e.g. a numeric cell backfilled
with a column-header label); the new sanity gate blocks all four as reviewable red. - P-020 — OCR quality measurement harness M1+M2 (2026-09-22): a machine-local bypass instrument under
scripts/measure/(deliberately not versioned). It never imports the app — it consumes the pipeline's result
JSON — so historical results stay re-measurable on the same scale. Degraded-specimen synthesis from one forward
affine matrix, weak GT from a born-digital text layer, line-level CER (micro/corpus/macro), LCS reading order,
table / non-table / digit slices, cell accuracy, a pinned 15-column CSV and an HTML report. Pinned design points
D2 (char-only edit-distance DP with a fixed equal-cost tie-break), D7 (GT quad-ised through the same forward
affine, exact clipping) and D8 (char-level provenance declared structurally unmeasurable). - P-022 — retired-reference (tombstone) gate (2026-09-24): an outward-facing doc that references a path / port /
command / module deleted by a past retirement fails, unless the same line states that it was retired — a notice
is documentation, a stale instruction is a defect. Literal substring tokens only: no regex, nosubprocess, no
writes. Scope is an allow-list; archived material is exempt with a printed reason. Wired by import into
audit_agent_ops.py, so the existing requiredagent-ops-auditcheck runs it — no CI configuration change. - P-023 — test stub scope is now both a rule and a gate (2026-09-25): born from a P-021 CI run that reddened
Phase A in a file the branch never touched, because a module-levelsys.modules["paddle"]stub is installed at
collection time and outlived the test that needed it.scripts/test_registry_audit.pygains check 5
(check_stub_scope, stdlib AST, fail-closed on unparsable files), wired into the required audit check, and the
kernel testing doc states the criterion plus both failure modes. - P-026 — public quality case study (2026-09-26):
docs/demo/QUALITY_CASE_STUDY.mdtells the P-021 story end to
end — a silent OCR coordinate defect (scale drift 1.1084–1.2257, non-rigid, rotations flattened) found by the
local measurement harness, traced to one engine preprocessing default, fixed by one init parameter, and locked by
contract tests. Before/after: 12/15 fixture×spec combos improved, 0 regressions, text volume recovered up to 2.1×,
and 26/26 responses byte-identical across two independent cloud runs. - P-027 — table-structure GT reconciliation on WTW (P-018 P2) (2026-09-28): the local harness gains a
structure-side scale for tables on the public WTW dataset (ICCV 2021; 14,581 photographed / scanned / web table
images) — an XML→GT adapter, a self-implemented structure-only TEDS (APTED-style ordered-tree distance with pinned
insert/delete/update costs), and anevaluate-tableCLI scoring detection recall/IoU, row/column/merge occupancy
agreement, and S-TEDS. Predictions are captured once into a content-addressed cache, so metric revisions cost no
GPU time. Baseline (2026-09-28, 300-image stratified subset, seed=42):grid_exact145/300,grid_f1mean 0.8989,
mean_s_teds0.8399,table_recall0.8300. WTW's ground truth carries no cell text, so the content dimension is
out of scope here; scores are reported as our own protocol, not an official leaderboard.
Removed
- Lite track references stripped from all outward-facing material (documentation catching up with the v1.8 code
deletion, not a capability change), and dead Lite instructions removed from the living docs. - Lite-era files deleted (explicitly authorized, second pass): the 2.9 MB
DocVision_Lite.gif, the dead
lite-preview.e2e.jsspec, the brokenbootstrap_lite_models.{py,sh}, the orphan
packages/docuvision-core/models/tree, and two stale test-support files. Verified after deletion: core
pytest -qstill reports 13 passed, matching the v1.8 baseline. .zcode/retired by user decision (expected unused for the next six months), together with its.gitignorerule
and PENDING P-006.- ZCode retired from the agent roster; review duty becomes "whoever takes the round", not a named agent.
Changed
- Acceptance material explicitly archived: the v1.3.0/1.3.1/1.4/1.5/1.6 cloud checklists each got an
Archived / frozen (2026-09-24)header. Bodies are deliberately untouched — frozen is not the same as rewritten. - P-022 promoted out of PENDING into a living doc (
docs/architecture/doc-governance.md), registered as
DOC-1 / DOC-2. The token list deliberately stays inscripts/docs_refs_audit.pyas the single source. - P-024 — the "propose a new chat" rule gains forced trigger points instead of pure introspection; every
commit / PR and every CHANGELOG / PENDING write carries oneSession-check:line, zero counts included. - P-025 — R&D promotion becomes a gate (DOC-3: every PENDING entry carries one
> status:line, and a
landedentry older than 90 days warns) plus a checkpoint (onePromotion-check:line per PENDING / CHANGELOG
write). Deliberately not machine-checked, with the reason written down. - E2 — the unit suite can no longer shrink silently (
scripts/unit_suite_pin.py; first pin 7 files / 67 case
declarations / 0 skips), wired into the required audit check. - OCR quality-measurement harness promoted into a living doc (
docs/architecture/ocr-quality-harness.md); the
two transitional local-only drafts were deleted anddocs/R&D/README.mdwas corrected in the same pass. - CI core install line de-Lite'd and then dropped (it was installing nothing); stale CI workflow-comment figures
replaced by pointers at their pins.
Fixed
- P-021 —
POST /api/v1/ocrreturned polygons outside the uploaded pixel frame (fix landed 2026-09-24):
ocr_service._init_enginebuilt the engine withoutuse_doc_unwarping, so PaddleOCR's doc preprocessor ran
UVDoc unwarping (default on) and the returned polygons described a warped canvas rather than the input image
(measured as a non-rigid frame: scale 1.11–1.23 per probe, rotations flattened). One-line fix, net-zero on lines;
locked bybackend/tests/test_ocr_service_engine_params.py(stubspaddle, no GPU / Paddle) with a negative
control. Post-fix cloud readings: scale 0.9992–1.0001, residual 0.6–1.1 px, rotation amplitude preserved; text
usability 12 improved / 0 regressions / 3 unchanged. Accepted side effect:book.jpg(a genuinely curved spread)
loses 27% of its text. - Two
kind: fulltest files no longer leak theirpaddle/cv2stubs (P-023; found by the new check 5 on its
first real run) — the local suite had been red for that reason alone. - P-019 — module-map §6 A3 row single-sourced: the row's own copies of five §3 infra numbers are gone (one had
already drifted); §3 is now the single numeric source.
Verification
| Gate | Result |
|---|---|
| G4 (cloud) | judge 1-6/9 PASS; judge 7 (golden-diff whitelist) closed with the approved whitelist; judges 8/9 covered by G1 unit tests + golden pins |
| G5 (cloud) | INV-A1 / A2 / A3 zero violations; candidate-cell set identical before/after; red rate p12 58.2% → 0.8%, p29 97% → 25.4% |
| G6 (cloud) | WTW sentinel PASS — re-scoring the same cache is byte-identical and wtw_metrics.csv sha256 matches the P-027 baseline |
| Local | pytest 442 passed; audit / lint / docs_refs 0 error / 0 warning |
Full detail — including the honest boundaries and the execution-time rulings X1–X5 — is in the CHANGELOG
[1.10.0] section and docs/architecture/provenance-review.md §4/§5.
Upgrade / migration
- No schema, API or configuration migration.
- Contract additions are purely additive (new reason grid + counts +
reasonfields + a 6th review-table column),
so existing consumers keep working. Consumers that assert an exactreview_listshape or a fixed review-table
column count must add the new column. - Known discrepancy:
APP_VERSION...
v1.9.0 — Frontend train (KIE meta-row fix + giant-function splits)
Release 1.9.0 notes
Tag: v1.9.0
Date: 2026-09-20
Train: Frontend batch — scope, per-item evidence and acceptance records live in docs/architecture/v1.9-roadmap.md
Version: APP_VERSION 1.8.4 → 1.9.0
Summary
v1.9.0 is a frontend-only batch. S1 fixes the KIE metadata rows shown on non-KIE tasks, S2 splits six giant
functions by module (verbatim moves, zero behaviour change), S3 closes as a conclusion-only evaluation, and S4
wires-or-retires the two registered orphans. No backend contract change. The train deliberately adds no cloud
GPU gate, because it has no GPU-dependent work (recorded as an honest note in the roadmap).
Fixed
- P-007 — non-KIE tasks no longer render KIE metadata. The result panel's
KIE confidence/KIE fields
summary rows now key offkie_confidence_source: the backend guarantees that field is non-empty only when
attempted && succeeded, solayouttasks and theruntime_error/skipped_doc_typefailure paths no longer
show a false0%. The KIE warning block (failure / skip reason) still renders perkieAttempted, because there
it carries real information.
Coverage added in the same batch: vitest 4 states + 1 e2e case, including an e2e mockqualitypreset extension —
the quality panel's visible render path previously had zero e2e coverage.
Removed
- Floating progress card (D11) retired: the
#floatingProgressCardmarkup inindex.htmland itsstyles.css
rules are gone. The card had had no JS driver since v1.8.2 (its module was never imported and never loaded by the
browser) — dead UI. The only user-visible effect is one block of markup that never displayed. modules/utils/geometry.jsretired: its only production importer had already been removed as a dead import in
the v1.8.3 clean-up, and its five geometry helpers had no remaining caller. The unit tests that covered it only
(paper coverage over dead code) were removed with it.
Internal (no product behaviour change)
- Six giant functions split by feature (
result-panels/{text,tables,figures},overlay-render,pipeline/run) —
verbatim moves, zero behaviour change. Thepipelinedomain gains a same-domain siblingtask-socket.jsholding
the WebSocket / fallback-polling implementation (forced by the file line budget; see roadmap §S2 for the ruling). - Governance / CI entries are deliberately not merged into this section (2026-09-20 merge policy: the governance
batch had already been staunched byv1.8.4). The CI and gate changes made during this train (vitest into CI,
lint F6/F7 guards, the tsc evaluation conclusion) are recorded in roadmap §S0 / §S3 and the commit history.
Verification
| Layer | Result |
|---|---|
| vitest | suite runs inside the required lint job; green on the landing tree |
| e2e | Playwright suite green |
| Gate | audit_agent_ops.py 0 error / 0 warning |
The full per-item acceptance command list and the adversarial section are in docs/architecture/v1.9-roadmap.md.
Upgrade / migration
APP_VERSIONis now1.9.0(reported by/healthand as the OpenAPI version).- No schema, API or configuration migration.
v1.5.0 — Queue persistence (Batch + HITL SQLite)
Release 1.5.0 notes
Tag: v1.5.0
Date: 2026-08-05
Train: Queue persistence (Batch + HITL) — first minor with SQLite-backed restart recovery
Summary
v1.5.0 adds single-file SQLite persistence for Pro Batch jobs and HITL review items so queue state survives :8000 process restarts. Runtime memory remains the live cache; DB is crash-recovery only. No Redis / Alembic / multi-replica.
Added
backend/app/services/persistence/queue_store.py:QueueStoreProtocol +SqliteQueueStore(WAL,threading.Lock, column registry forbatch_jobs/hitl_reviews).BatchService.attach_store/load_from_db/_persist/_persist_async: upsert on create and status flips;processing→paused(taskprocessing→pending) on load; no auto GPU resume.HitlReviewQueue.attach_store/load_from_db/ asyncenqueue/resolve(..., edited_fields=): persist human corrections inedited_fields+resolved_at; originalpayloadunchanged.- Config
SQLITE_DB_PATH(defaultdata/docuvision.sqlite, relative tobackend/cwd);.gitignorebackend/data/. - Tests:
backend/tests/test_queue_persistence.py(local-runnable, no paddle). - Cloud gate: MERGE_MAIN_v1.5_CLOUD_CHECKLIST.md (BATCH-PERSIST-001, HITL-PERSIST-001).
Fixed
resume_batch: when no pending tasks remain after restart demotion, finalize tocompleted/failed/cancelledinstead of sticking inPROCESSING.
Changed
APP_VERSIONdefault 1.5.0.hitl_queue.enqueue/resolveare async (orchestrator + resolve route await them).- Living doc: v1.5-roadmap.md Schema + Adversarial check (
edited_fieldscolumn).
Out of scope
tasksdict inmain.py(single-task results) still in-memory.- Webhook subscription persistence, Redis, task-level SQL query, HITL edit history/diff.
Verification (hard gate passed 2026-08-05)
| Layer | Result |
|---|---|
| Local mock | pytest backend/tests/test_queue_persistence.py — 7 passed |
| BATCH-PERSIST-001 | Cloud path B: batch completed survives restart |
| HITL-PERSIST-001 | Cloud: seed → resolve(edited_fields) → restart → sqlite intact |
| CI | PR #12 — KIE Phase A kie-contract SUCCESS |
Upgrade / migration
- First start creates tables via
CREATE TABLE IF NOT EXISTS(no Alembic). - Ensure process cwd is
backend/(or setDOCUVISION_SQLITE_DB_PATHto an absolute path). - After unexpected kill of a mid-flight batch, UI/API may show
paused; callPOST /api/v1/batch/{id}/resumeto continue or finalize.
v1.4.0 — Table mapping + HITL + PDF Tools + backend hardening
Release 1.4.0 notes
Tag: v1.4.0
Date: 2026-06-30
Train: table mapping productization + HITL editable review + PDF Tools UI + backend hardening (webhook auth/SSRF, Phase1 form parity, dead-config cleanup)
Summary
v1.4 delivers vertical table column mapping for born-digital PDFs (table_template → mapped_table_rows), a Table mapping processing mode in Analysis Options with document-profile eligibility, an editable Reviews (HITL) tab for KIE validation failures, a PDF Tools nav tab (merge / split / metadata), and batch MappedRows Excel export. Backend hardening: webhook registration gated by DOCUVISION_WEBHOOK_ENABLED + admin token + SSRF guard; Phase1 /api/v1/documents:analyze Form parity with legacy /analyze; dead config removed (chart/ocr/financial_report/table_areas); debug directory traversal hardened; fake make_searchable_pdf replaced with 501.
Added
| Area | Detail |
|---|---|
| Table mapping | Processing mode table_mapping + templates bank_statement, invoice_line_items; analyze with enable_layout=false, table_template; UI Mapped rows tab. |
| Document profile | Upload pre-scan via POST /document/profile; eligibility hint (Ready for table mapping / scan blocked). |
| HITL Reviews UI | Editable field grid, Save (PATCH /api/v1/tasks/{id}/kie-fields), Approve/Reject; hitl_policy (full / lite / off). |
| PDF Tools UI | Top nav tab: merge (≥2 PDF), split, metadata JSON. |
| Batch mapped export | XLSX MappedRows sheet; manifest mapped_bank_statement_3; MAPPED-BATCH-001 script. |
| Phase1 form parity | POST /api/v1/documents:analyze now accepts full Form set (layout/table/formula/seal/KIE toggles, engine overrides, formula thresholds, table_template, enable_hitl) — matches legacy /api/v1/analyze. |
| Tests / CI | Backend/core contract tests; Phase A workflow extended; Playwright process-table-mapping.e2e.js (UI-TM-), process-pdf-tools.e2e.js (UI-PT-); test_phase1_analyze_form.py, test_webhook_service.py extended. |
| Ops | accelerate for KIE device_map=auto; KIE model path discovery; GET /api/v1/health for AI Studio. |
Changed
APP_VERSIONdefault 1.4.0.- Table mapping analyze path:
document_type=general, no KIE — does not enqueue HITL (Reviews tab serves KIE validation failures only). batch_export_service._task_kie_fields: removed deadqualitybranch.- Debug artifact download (
GET /api/v1/jobs/{job_id}/debug/{filename}):Path.is_relative_toreplacesstartswithto block sibling-directory traversal. - Cloud merge gate: MERGE_MAIN_v1.4_CLOUD_CHECKLIST.md.
Security
- Webhook registration hardened (breaking). Two-layer gating:
DOCUVISION_WEBHOOK_ENABLED(defaultfalse): disabled →GET/POST /api/v1/webhooksreturn404,dispatch_event_asyncreturns[].DOCUVISION_WEBHOOK_ADMIN_TOKEN: enabled →X-DocuVision-Admin-Tokenheader required; fail-closed when token empty.
- SSRF guard: webhook URL host resolved and rejected if private/loopback (
127/10/169.254/192.168/172.16/::1/fc00::/7/fe80::/10). Does not defend DNS rebinding (v1.5+).
Removed
enable_ocrper-block OCR dead config (standalone/api/v1/ocrunchanged).chart_step/enable_chart/ChartService(no callers).financial_reportdocument type (breaking:unsupported_document_type).table_areasROI across Pro/Lite/core (breaking: Lite/extract/autono longer acceptstable_areas).POST /api/v1/pdf-tools/searchable→501(fakemake_searchable_pdfdeleted; searchable PDF deferred to v1.5+).
Not in v1.4.0 (explicit deferrals)
| Item | Target |
|---|---|
table_areas ROI UI |
v1.5+ |
| Custom column alias API | post-v1.4 |
| Webhook subscription UI | v1.5+ |
| Webhook DNS-rebinding defense | v1.5+ |
| PDF searchable / form-fill productization | v1.5+ (v1.5-roadmap.md) |
| Batch / HITL / Webhook persistence | v1.5+ |
Upgrade / migration
- Integrators: optional analyze form field
table_template=bank_statement|invoice_line_itemswithenable_layout=0,enable_table=1,enable_kie=0for ETL-style mapped rows. - Webhook users (breaking): set
DOCUVISION_WEBHOOK_ENABLED=true+DOCUVISION_WEBHOOK_ADMIN_TOKEN=<secret>to register; passX-DocuVision-Admin-Tokenheader. - Batch: use manifest
mapped_bank_statement_3or setoptions.table_templatein batchoptionsJSON. - HITL: queue remains in-memory; restart clears pending reviews.
- Cloud validation: run v1.4 checklist (extends v1.3.1 gate with MAP-TEMPLATE-001 + MAPPED-BATCH-001 + webhook/Phase1/traversal hardening).
Verification minimum
| Layer | Command |
|---|---|
| Phase A v1.4 | Pro + core file set in CLOUD_VALIDATION.md §阶段 A (incl. test_phase1_analyze_form.py, test_webhook_service.py) |
| Pro UI (no GPU) | cd frontend && npm run test:unit && npm run test:e2e (includes UI-TM-* / UI-PT-*) |
| Lite | cd apps/lite/backend && pytest tests/ -q; npm run test:e2e:lite |
| Table mapping (GPU/CPU) | MAP-TEMPLATE-001 in MERGE_MAIN_v1.4_CLOUD_CHECKLIST.md |
| Batch mapped | pwsh -File test_data/scripts/run_batch_mapped_acceptance.ps1 |
| Webhook hardening | pytest tests/test_webhook_service.py -q; manual 404/401/400/200 chain (see checklist §9) |
Full gate: MERGE_MAIN_v1.4_CLOUD_CHECKLIST.md.
Related (unchanged from v1.3.x)
- Pro pdf_digital → docuvision-core table path (CORE-PDF-001).
- Lite server-side preview (LITE-PREVIEW-001).
- KIE field validation (KIE-VAL-001).
See KNOWN_LIMITATIONS.md for MVP bounds (English headers, memory queues, scan PDF blocked for table mapping).
maintenance on v1.3.0 P0 baseline — scope trim + Lite preview hardening
v1.3.1 removes unused Lite/Pro surface area introduced or planned in v1.3.0, replaces Lite client-side PDF rendering with a server-side preview API (aligned with Pro page-image flow), and fixes Pro Playwright E2E mocks after UI/API deletions.
v1.2.0 — Multipage KIE + Batch UI
Release 1.2.0 — Multipage KIE + Batch Processing UI
Date: 2026-06-12
Tag: v1.2.0
Baseline: v1.1.0 (Pro KIE query fields on main)
Highlights
kie_pages(PDF):1, ranges, orall(max 5 pages). Per-page VL + document-level merge;kie_fields_by_pageandquality.kie_pages_*.- Batch API: full orchestrator pipeline;
GET /batch/{id}/export.csv(kie/summary/failures) andexport.json. - Pro UI: Batch Processing tab — multi-file upload, progress, pause/resume/retry, CSV/JSON download. Options snapshot from Process tab Analysis Options.
- Queue fixes: run selected queue item first; multipage preview page count; layout +
kie_pages=allon raster no longer 400.
Cloud acceptance
Merge gate (2026-06-12): Phase A 37/37, MP-002, H-Batch 6/6 kie_production_hit, layout batch, pause/resume, UI smoke — see MERGE_MAIN_v1.2_CLOUD_CHECKLIST.md and KIE_TEST_RUN_TRACKER.md.
Not in this release
- Batch Excel export; Lite batch API.
- Generic field validation engine;
document_type=custom; field bbox overlay. - Playwright UI E2E (planned in
test_data/AutoTest/PRO_UI_E2E_PLAN.md).
Upgrade
- Pull
mainat tagv1.2.0or mergefeature/batch-ui. APP_VERSION//healthapi_version→1.2.0; restartpython run.pyafter deploy.- Batch
optionsmust includedocument_typewhen KIE is enabled (notauto). - Re-run CLOUD_VALIDATION.md Phase A + MP + H-Batch if you customize KIE or batch locally.
Next (post-1.2)
Field validation (feature/kie-field-validation), Playwright E2E P0, optional MP 3p standalone — see RELEASE_1.1_CHECKLIST.md §6.
Pro KIE query fields
Release 1.1.0 — Pro KIE query fields
Date: 2026-06-04
Tag: v1.1.0
Baseline: v1.0.1 (Pro + Lite on main)
Highlights
kie_query_fields: extend built-in KIE YAML schema at runtime (Azure Query Fields style, max 20 fields, extend-only).- API:
POST /api/v1/analyze,POST /api/v1/documents:analyze, batchoptions. - Pro UI: Analysis Options → Advanced → Additional KIE fields.
- Quality:
kie_query_fields_requested/kie_query_fields_filled(query fill rate does not affect KIE-ACCEPT-002).
Cloud acceptance
- Phase F:
testfiles/invoices/sample-invoice.pngwithCustomerName,OurReference— 001/002 pass. - See KIE_TEST_RUN_TRACKER.md and kie-custom-fields.md.
Not in this release
- Full
document_type=custom, template persistence, field bbox overlay. - Batch Processing product UI, multi-page PDF KIE, generic validation engine.
Upgrade
- Pull
mainat tagv1.1.0or merge PR fromfeature/pro-v1.1-custom-fields. - No breaking change to fixed 5-type KIE without
kie_query_fields. - Re-run CLOUD_VALIDATION.md Phase A–F if you customize KIE prompts locally.
Next (post-1.1)
See RELEASE_1.1_CHECKLIST.md §6 — Batch UI, field validation, multi-page KIE.
DocuVision 1.0.1
Maintenance release: DocuVision Lite on main, dead-code cleanup, CI/docs alignment. Pro KIE scope unchanged from 1.0.
v1.0.0 — Layout + Qwen KIE baseline
All notable changes to this project are documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.