Files
jobtrackingapp/docs/cv-import/QUALITY.md
T

50 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Accuracy, supported inputs and resource evidence
26 October 2026. Development qualification; near-100% factual accuracy remains an aspirational target. Current deterministic limitations are material and require user review.
## Supported document matrix
| Input | Current behavior | Qualification limit |
|---|---|---|
| Text PDF, 1–40 pages, at most 5 MiB | Real Docling native text blocks/page evidence | Native reading order; no layout/table inference model |
| DOCX, at most 5 MiB | Real Docling paragraphs/headings/lists/table text | Physical page numbers unavailable; complex relationships need review |
| Multiple columns/tables | Converts within bounds; warnings and evidence remain visible | PDF cell relationships can be lost; not semantic acceptance |
| EN / Norwegian Bokmål | Deterministic headings/labels/date strings and source review | Human language quality and broad document diversity open |
| Partial dates/current markers | Original precision, explicit current normalization | No invented full dates or experience duration |
| Scanned/image-only PDF | Clean no-text rejection | OCR disabled; no unapproved OCR/model downloads |
| Encrypted/active/oversized/malformed/bomb documents | Rejected | Parser isolation does not establish safety against every future exploit |
| Legacy text/images | Existing legacy path preserved | Not new Docling extraction acceptance |
## Frozen synthetic benchmark
Actual artifact manifest: `.artifacts/cv-import/corpus-02/manifest.json`. Real parser outputs: `extraction-benchmark-final`; current C# harness outputs: `benchmark-{pdf,docx}-final.json`. Oracle: checked-in exhaustive annotations and record-aware evaluator, with 11 generator/oracle self-tests passing.
| Format / split | Completed | Field precision | Field recall | Extra / missing annotated claims |
|---|---:|---:|---:|---:|
| PDF development | 6/6 | 90.00% | 90.00% | 7 / 7 |
| PDF frozen | 7/8 | 97.50% | 98.73% | 2 / 1 |
| PDF total | 13/14 | 94.00% | 94.63% | 9 / 8 |
| DOCX development | 6/6 | 100% | 100% | 0 / 0 |
| DOCX frozen | 7/7 | 100% | 100% | 0 / 0 |
| DOCX total | 13/13 | 100% | 100% | 0 / 0 |
The scan is an expected rejected PDF with no annotated facts. PDF differences are seven table-category/relationship errors and two long-name/unclassified-fragment errors; source words remain visible. There are no newly invented words in these discrepancies, but **nine unsupported or mis-associated field claims** remain a factual mapping failure and must not be reported as zero hallucination risk. DOCX's small synthetic exact match is not a population estimate. Employment categories matched 13/14 PDF and 13/13 DOCX; education 12/14 and 13/13, including empty categories. Date and skill per-case results are in the machine-readable reports. Conservative duplicate matching, partial dates, list provenance and source-grounding have separate application regressions; no statistically calibrated duplicate score is claimed.
Date/current-marker facts: PDF 30 correct / 30 predicted / 33 expected (precision 100%, recall 90.91%); DOCX 33/33/33. Original precision is part of the oracle. Skill attribution/normalization exact matches all 13 text-bearing cases per format; the scan has no approved facts. These are the fixed synthetic cases, not calibrated population results.
Review burden: 150 PDF and 149 DOCX proposed field decisions across completed cases; none automatically approved. Human review time/correction burden is NOT MEASURED. No model inference occurred, and synthetic adapter tests count only as integration/security tests.
Earlier attempts remain retained: corpus-01 wrongly styled short DOCX body sentences as headings; evaluator association tests caught swapped bullets for repeated employer/title with distinct dates. The first DOCX final scoring subset was accidentally read using the Windows default encoding; UTF-8 subset `corpus-docx-final-02.json` and `metrics-docx-final-02.json` supersede that invalid score. No extraction or frozen annotation was changed to improve the score.
## Performance and limits
Development generator environment: Windows 11 build 26200, CPython 3.12.14, ReportLab 4.4.9, python-docx 1.2.0, Pillow 12.3.0, pypdf 6.10.0 (`benchmark-runtime.json`). Conversion uses the separate exact Docling lock in SIDECAR.md. Frozen file hashes, rather than regenerated DOCX ZIP timestamps, bind benchmark comparisons.
27 sequential actual child conversions on this Windows development host: `extraction-resources-final/resources.json`, measured inside the real interpreter rather than its Windows venv launcher. Wall median 2.283 s (2.051–2.549), CPU median 1.891 s (1.688–2.125), peak working set median 144,257,024 bytes, maximum 146,079,744 bytes. Includes Python/import startup. Earlier `extraction-benchmark-final/resources.json` CPU/memory sampled the launcher only and is invalid for parser resource claims; its wall/input/output measurements remain valid.
Corpus input total 777,032 bytes; parser JSON output total 27,371 bytes. These are document/result disk measurements, **not peak temporary/cache disk usage**. Conversion options disable image/OCR/model artifacts; private work cleanup is covered by tests. Maximum temporary disk, load under concurrent users and upload network timings require broader resource qualification. Do not infer production capacity from these small fixtures.
Current C# interpretation maximum 60.071 ms PDF / 64.377 ms DOCX. Actual MariaDB reviewed apply sample 36.446 ms includes validation, merge, transaction and Identity projection (`provider-review-06/mariadb.trx`); a single sample is not a latency percentile. Final real import browser journeys took 19.6 s / 10.1 s including upload, polling, refresh, review actions, editor and PDF export, not isolated upload latency. Generative model time/VRAM/accuracy are BLOCKED. Reported historical production hardware was not probed or requalified.
Concurrency remains existing admission + one sidecar parser child, bounded worker leases/deadlines, 40-second default conversion deadline, 30-second CPU allowance, 1 GiB POSIX address-space ceiling and configurable bounded limits. Windows wall/process termination is implemented; kernel-enforced Windows memory isolation remains open. See SECURITY.md.