Files
jobtrackingapp/docs/cv-import/CV-QA-01.md
T

6.6 KiB

CV-QA-01 integration handoff

26 October 2026. Import development proceeds from accepted CV-UX development history 4a0af62 on feature/cv-import-docling-ai. No merge to main or production deployment is authorised by this handoff. Final lane decisions are in ACCEPTANCE.md; this handoff does not promote conditional acceptance.

Delivered journey

Previously, uploaded CV text went through legacy heuristic extraction and whole-profile acceptance. PDF/DOCX now enter a signature/archive-validated owned artifact, durable processing job and real Docling child; ordered evidence reaches a conservative canonical interpreter. The user observes actual server stages, reviews source/fields, corrects and explicitly selects facts, resolves existing-value differences, then applies under the canonical revision. Only confirmed durable changes display success. The existing CV Editor consumes the Career Profile through its normal supported mechanism; variants, old versions, submitted packages and letters are preserved.

Read PLAN.md for the original-system matrix/data flow; SIDECAR.md for exact dependency/runtime boundary; BACKEND.md for schema/field mapping/persistence; REVIEW.md for UI/merge; SECURITY.md for privacy/retention; QUALITY.md and benchmarks/ for accuracy/resources. Historical CV-UX acceptance records are preserved.

Repeatable integration acceptance

  1. Use only a disposable development account/database and synthetic documents. Install the separate hash-locked Docling runtime; preserve existing legacy model pins. Build the isolated development image from an inspected immutable local base and hash-verified wheels, with network disabled during build. Do not modify live services or caches.
  2. Start the sidecar with loopback-only port, read-only root, private bounded tmpfs, explicit CPU/memory/PID limits, model loading disabled. Set CV_IMPORT_SIDECAR_URL to that local endpoint. Publish/build current API/UI with the repository's normal test environment; serialize build/browser/PDF lanes.
  3. Generate a fresh fixture corpus or reuse the frozen manifest. Run job-tracker-ui/playwright.cv-import.config.ts, retries zero. CV_IMPORT_FIXTURE_ROOT selects the corpus directory; the default is .artifacts/cv-import/corpus-02.
  4. Verify upload → genuine processing → refresh/recovery → source review/correction → canonical apply/history → existing variant preservation → CV Editor → actual PDF. Confirm foreign-owner source/result requests fail and no canonical save occurs before Apply. Test conflict refresh resets confirmations, cancellation/retry/deadline/expiry, duplicate IDs/records and late worker leases using backend/provider regressions.
  5. Run the actual full backend/frontend/ordinary-browser/contracts/RD21/provider/Python/type/lint/build/security/PDF suites, with native exits, source/runtime identity, discoveries and immutable attempt directories. Do not add focused reruns to full totals. Run PDF oracles after all document producers stop.

Required owner actions and remaining qualification

Model/security operator: provide a separately approved immutable, verified model artifact and isolated inference runtime without production cache/service changes. Document artifact SHA, origin/license/security qualification, runtime/library/driver versions, CPU/GPU limits, offline egress controls and permission. The adapter is disabled and disconnected from active import. No permanent general-purpose model is selected.

Then qualify actual Ollama protocol/schema compatibility, malformed/partial/time-out outputs, unavailable service, cancellation and bounded memory/VRAM; compare candidates on identical frozen manifests/prompts/oracles. Include EN/Bokmål chronology, repeated employers with different dates, tables/columns, incomplete dates, overlapping roles, long names, skills attribution and missing language levels. Test malicious source instructions, copied unsupported claims, record swaps and source spans with correct words but wrong relationships. Measure factual precision/recall/record/date/skill accuracy, unsupported claims, review burden, runtime and resource cost separately from deterministic extraction. No mock result can close this gate. Only after qualification should an explicitly reviewed change connect model suggestions to the active pipeline.

Document extraction owner: qualify a broader independently annotated CV corpus. Native PDF table and long-name failures remain open; selectively enabling layout/OCR requires approved immutable dependencies/artifacts, resource tests, network/privacy proof and its own benchmark. Current scan rejection is expected. The synthetic 100% DOCX result is not a guarantee for arbitrary DOCX.

The current deterministic grammar recognizes explicit labelled/delimited records; ordinary unlabelled multiline jobs may remain unclassified source. Missing typed records/reclassification require the existing Career Profile editor. Extend and qualify those common layouts and an in-review missing-record interaction before claiming broad automatic work-history import acceptance. Do not hide this limitation behind the exact synthetic DOCX score.

Human QA: keyboard-only entire journey including drag/drop alternative, correction/conflict focus, errors and source tabs; NVDA/JAWS/VoiceOver, zoom/reflow/high contrast/reduced motion; real desktop/tablet/phone/touch orientation; native PDF viewer/download behavior; EN/Bokmål labels and expectations; printing CV/letter in both locales/themes/paper sizes. Automated axe/browser screenshots do not mark these complete. Headless screenshots do not render the embedded native PDF viewer; original-byte access and textual evidence are tested separately.

Human/device checklist State
Complete keyboard-only import/conflict/recovery OPEN
Screen readers and announcements/focus OPEN
Real desktop/tablet/phone/touch/orientation OPEN
Zoom/high contrast/reduced motion OPEN for human acceptance
Native PDF viewer and original download usability OPEN
English/Bokmål language review OPEN
Manual CV/letter printing OPEN

Infrastructure/security owner: resolve inherited filesystem integrity, off-disk backup/restore, legacy Python/model/cache security, hosted MariaDB/isolation and deployed identity gates. Windows kernel memory containment, peak temporary disk and sustained concurrent-load qualification remain open. No production probes or changes were performed here.

Production remains NO-GO until all mandatory inherited/current gates have independent evidence and explicit release approval. Do not begin Phase 10, FINN/NAV, LinkedIn, unrelated product work, merge main or deploy as part of CV-QA-01 preparation.