test(cv-import): qualify regression and hand off conditional acceptance

This commit is contained in:
cesnimda
2026-10-26 19:09:43 +01:00
parent b62962c68a
commit ef425c288b
11 changed files with 438 additions and 5 deletions
+98
View File
@@ -0,0 +1,98 @@
# CV-IMPORT-01 acceptance and CV-QA-01 handoff
26 October 2026. Branch: `feature/cv-import-docling-ai`, descendant of CV-UX-01 `4a0af6273b4d45f652c7e0dee69c2c668e1a9ac5`.
**Overall: CONDITIONAL GO for development/QA of the implemented workflow. CV-QA-01: CONDITIONAL GO. Production: NO-GO.** All selected model-independent automated regression lanes passed. This does not close partial extraction/review coverage, live-model qualification, human acceptance or inherited infrastructure/security gates. It is not broad factual-accuracy or production acceptance.
## Delivered workflow and source
Before: legacy uploaded text/heuristic extraction and whole-profile acceptance. After: bounded PDF/DOCX admission → owned artifact and durable job → actual Docling structural extraction → conservative grounded interpretation/validation → original/source evidence plus explicit review/corrections → revision-aware transactional Career Profile application → existing CV Editor and PDF export. No proposed fact is implicitly approved. CV variants, frozen/submitted documents, cover letters and unrelated profile information remain protected by existing owners.
The active interpreter is deterministic. A configurable, disabled self-hosted Ollama adapter supplies prompts, schema/grounding validation, failure handling and synthetic test seams; it is **not connected to active processing** and no real model inference was qualified. No permanent general-purpose model was selected. Docling slim 2.142.1 uses the supported model-free native PDF/Word interfaces in a separate hash-locked runtime; OCR/layout models remain disabled.
Product source was committed at `e941b3c`; provider regression at `cd67c0d`; benchmark/security checkpoint at `b62962c`. Final publication adds documentation/evidence and a three-line test-only seeder schema correction. Windows and Linux source binding passed despite documentation-only HEAD differences. The final tested fixture is included in source hashes; no application change is inferred from a documentation commit.
| Checkpoint | Pushed commit |
|---|---|
| CV-IMPORT-00 audit/plan | `5118a58` (ledger `731536d`) |
| CV-IMPORT-01 secure extraction | `3ea8ff9` |
| CV-IMPORT-02 grounded interpretation/apply | `e8f76a9` |
| CV-IMPORT-03 lifecycle/retention/recovery | `9e1726c` |
| CV-IMPORT-04 review/corrections | `e941b3c` |
| CV-IMPORT-05 provider persistence | `cd67c0d` |
| CV-IMPORT-06 evaluation/security | `b62962c` |
| CV-IMPORT-07 acceptance/handoff | Final publication commit containing this report |
Each completed checkpoint was pushed without force and local/remote HEAD equality checked. No main merge, production deployment, live schema/service/model/cache modification, registry publication, Phase 10 or unrelated integration occurred.
## Independent decisions
| Criterion | Decision | Scope / unfinished qualification |
|---|---|---|
| Secure Upload | PASS | Automated local admission/signature/archive/XML/ownership/bounds tests |
| Docling Extraction | PARTIAL | Actual native PDF/DOCX; no OCR/layout-model qualification; table/name ordering failures |
| Structured Career Data Mapping | PARTIAL | Actual canonical schema/provenance; limited labelled/delimited grammar, some conventional multiline records remain unclassified |
| Processing Progress and Recovery | PASS | Persisted stages, leases, refresh, cancel/retry/expiry/stale-worker tests; no timer-generated completion |
| User Review and Approval | PARTIAL | Tested explicit decisions/corrections/compare/conflict flow; missing typed-record creation/reclassification uses Career Profile editor; human usability open |
| MariaDB Persistence | PASS | Actual local 12.2.2, transactions/history/rollback/idempotency/stale/ownership/migrations; hosted qualification remains separate |
| RD21 Revision Safety | PASS | Canonical revision/atomic apply plus retained diagnostics and volume lanes |
| Security and Privacy | CONDITIONAL | Inherited qualification unresolved; native parser/Windows memory/load/privacy-retention review open |
| Deterministic Extraction Accuracy | PARTIAL | Fixed synthetic results below; not arbitrary-document acceptance |
| Real AI Model Compatibility | BLOCKED | No approved isolated immutable inference artifact/environment qualified |
| Real AI Extraction Accuracy | BLOCKED | Synthetic adapter responses are not model accuracy |
| CV-IMPORT-01 Overall | CONDITIONAL GO | Implemented development workflow and QA handoff only; partial criteria above remain unfinished |
| CV-QA-01 Readiness | CONDITIONAL GO | Exact qualification work and owner actions in CV-QA-01.md |
| Production | NO-GO | No release promotion or production operations authorised |
## Final regression evidence
[evidence-summary.json](evidence-summary.json) commits counts, source/runtime bindings, immutable image identity and 84 raw report/hash entries. Large logs/PDFs/screenshots and failed attempts remain in this checkout. Main root: `.artifacts/cv-import/`; the unchanged Linux helper requires fresh children under `.artifacts/cv-ux-01/`, specifically **cv-import-linux-image-01** and **cv-import-linux-final-01**. No historical Linux result was substituted.
| Independent lane | Current result | Evidence |
|---|---:|---|
| Full Release backend | 1,260 PASS, zero skipped | `final-01/backend/backend.trx` |
| Full frontend | 990 PASS / 108 suites, zero pending | `frontend-full-03.json`, `frontend-final-process.json` |
| TypeScript / lint / static build | PASS, native exits 0 | `typecheck-03.log`, `lint-03.log`, `frontend-build-03.log` |
| Ordinary Chromium / preservation contracts | 364 PASS, zero skips/retries | `final-01/ordinary-{1,3,4}.json`, `final-03/ordinary-2.json`, exact discovery membership |
| Actual Docling import → review → profile → editor → PDF | 2 PASS, zero retries; review axe zero violations | `import-browser-final.json`, two corrected searchable/rendered PDFs |
| CV AI authorization/recovery (controlled responses) | 2 PASS | `final-03/ai.json`; not real AI inference |
| Authentication recovery | 2 PASS | `final-03/auth.json` |
| Rate limits | 9 PASS | `final-03/rate.json` |
| Ingress | 6 PASS | `final-03/ingress.json` |
| PDF admission/cancellation | 1 PASS | `final-03/pdf-admission.json`; inert child contract |
| Preferences concurrency | 3 PASS | `final-03/preferences.json` |
| RD21 persistence diagnostics | 6 PASS | `final-03/rd21.json` |
| Phase 9 diagnostics | 18 PASS | `final-03/diagnostics.json` |
| Phase 9 volume / RD21 volume | 3 / 3 PASS | `final-03/{volume,rd21-volume}.json` |
| Actual local MariaDB 12.2.2 | 70 PASS, zero skipped; cleanup 0 | `provider-review-06/{mariadb.trx,run.json}` |
| Offline sidecar application/security/grounding/adapter | 76 PASS | `python-offline-final.log`; immutable existing runtime, no models/network |
| Real Docling parser/security partition | 14 PASS | `python-docling-final.log`; separate slim runtime |
| Corpus generator/oracle self-tests | 11 PASS | `python -m unittest discover -s docs/cv-import/benchmarks -p test_*.py -v` |
| Node helper contracts | 25 PASS | `node-helper-contracts.log` |
| Linux harness offline contracts | 11 PASS | `linux-helper-contracts.log` |
| Legacy seeder safety self-checks | 24 PASS | `final-03/seed-helper.log` |
| Linux native renderer | 6 PASS, zero skips/retries | `cv-import-linux-final-01/linux-renderer.json` |
| Windows original CV oracle | 24 documents / 60 pages PASS | `final-01/windows/native-pdf.json` |
| Linux original CV oracle | 24 documents / 60 pages PASS | `cv-import-linux-final-01/linux-pdf.json` |
| Windows / Linux letter oracle | Each 4 documents / 14 pages PASS | Respective `letter-fidelity/fidelity-results.json` |
| npm / NuGet API / new Python lock advisory checks | Zero reported known vulnerabilities | `npm-audit-01.json`, `dotnet-audit-01.json`, `pip-audit-01.json`; does not close inherited Python/model gates |
Compared with the verified CV-UX report at the starting history: backend 1,234 → 1,260; frontend 981/107 → 990/108; ordinary browser 364 → 364; actual MariaDB 64 → 70. Focused tests, scenarios, physical documents and auxiliary suites are not added to those totals. Browser contract tests remain within the ordinary count. Python partitions 76 and 14 are disjoint; the focused 27-case parser/adapter rerun overlaps them.
### Failed attempts and exact recovery accounting
`final-01` ran all ordinary cases: **359 passed / 5 failed**. All five stopped before product assertions because the isolated insert-only legacy seeder enforced the old schema. The fix adds only the two exact nullable columns and an assertion they remain null. Unknown schema/type/nullability, owner/path/trigger and insert-only protections remain. No tests were deleted or relaxed.
`final-03` replaces the **entire 87-case affected shard**, not just its failures, and runs all ten separate lanes. Its binding permits exactly that one helper change, verifies identical application/runtime, and proves the helper is referenced only by the affected spec. The unchanged passed shards contain 100 + 88 + 89 cases; corrected shard 2 contains 87. Both discovery reports reconcile to **364 unique cases**. Earlier 82 passes from failed shard 2 and focused reruns are not counted again. Both attempt source/runtime freezes passed. `final-02` stopped before tests on a wrapper path-separator assertion and supplies no test evidence.
Other retained failures/corrections are documented in BACKEND.md, REVIEW.md, SIDECAR.md and QUALITY.md: redundant SQLite startup repair on MariaDB, provider test fixtures, canonical/projection revision drift, stale worker publication, nested/normalized provenance, bounded errors, test readiness/mobile preview assumptions, native child HOME/platform preparation, corpus heading generation and invalid Windows-encoded DOCX scoring subset. Failed attempts are retained rather than overwritten. Two pytest configuration warnings remain visible. Production/live-model/human checks were **NOT RUN / BLOCKED / OPEN**, not silently skipped or counted as passing.
Linux image: `sha256:09f856d2bfed7894b5722a1456dae26f35f48aeff6af654d0a1fd7d9cef9896d`. It layers current portable API over the inspected cached native runtime; this is not a hermetic OS rebuild. Build/run source SHA: `a85b4d6966f3485fabd6ae656665a48e6cc710357fb43b9cc4afdfed1f3f3223`. Native image/source/DLL/migration identity and owned API/schema/database/network cleanup passed. The owned Docling test container was removed after its last import test; source/image/limits and cleanup are recorded. No production cleanup ran.
## Accuracy, limitations and owner actions
The fixed synthetic corpus contains 14 logical cases / 27 actual documents with separate development/frozen splits. DOCX: 13/13 completion, 100% annotated field precision/recall, zero extra/missing annotated claims. PDF: 13/14 completion (scan deliberately refused), **94.00% precision / 94.63% recall**, nine extra/mis-associated and eight missing claims. PDF date/current-marker precision 100%, recall 90.91%; DOCX 100%/100%. PDF table relationships and a split long name explain the remaining failures. No real-model score exists. See QUALITY.md for exact records, limitations, review burden and actual CPU/memory/timing evidence.
Required owner actions: qualify broader independently annotated conventional CV layouts and missing-record/reclassification UX; approve an immutable model artifact and isolated safe runtime before actual model compatibility/accuracy work; perform human keyboard/screen-reader/device/language/native-viewer/printing acceptance; resolve inherited hosted-provider/security/filesystem/backup/recovery/release gates. Applied candidate history retention, Windows kernel memory containment, peak temporary disk and sustained load remain explicit qualification items. Historical production hardware/health was not probed or assumed current.
[CV-QA-01.md](CV-QA-01.md) contains the exact reproducible integration/model tests and human checklist. Production remains withheld; no conditional development decision is promoted to release acceptance. Stop at this handoff.
+15 -1
View File
@@ -17,6 +17,20 @@ The additive `20261026090000_AddCvImportReviewEvidence` migration adds nullable
Canonical `StructuredCvProfile` is authoritative: contact (including GitHub and labelled links), summary, jobs, education, certifications, projects, skills, languages, interests, awards, publications, organisations, references and custom sections. Courses and other unsupported typed domains remain custom section items. Existing schema has no separate experience-duration or arbitrary qualification records.
| Source / canonical mapping | Current deterministic interpretation | Limit |
|---|---|---|
| `contact.fullName/headline/email/phone/location/website/linkedIn/gitHub/links` | EN/NB labelled contact lines; email regex; Docling title as name; labelled portfolio link | Unlabelled phone/location/title may remain unclassified |
| `summary[]` | Recognized summary heading, original text | No generated professional background |
| `jobs[].title/company/start/end/isCurrent/bullets` | Explicit pipe-delimited title/employer/date record; following lines as details | Ordinary unlabelled multiline title/employer/date layouts may remain custom source; job location/skills are not inferred |
| `education[].qualification/institution/start/end/details` | Explicit delimited qualification/institution/date record | Specialism can remain original detail; no inferred degree level/location |
| `certifications[].name/issuer/date` | Delimited source values | PDF table cells can become separate proposed names; review warning is mandatory |
| `projects[].name/role/bullets` | Delimited named record / following text | Project dates/location/skills not inferred |
| `skills[]`, `languages[].name/level` | Explicit lists and language:level | No skill attribution from unrelated prose; missing level null |
| `interests/awards/publications/organisations/references[]` | Explicit recognized section lines | No reclassification of unfamiliar headings based on guesses |
| `otherSections[].title/items[]` | Courses, unfamiliar/ambiguous/unclassified source | Review can retain/correct/skip; reclassifying to a missing typed record requires existing Career Profile editing |
This is a deliberately limited deterministic grammar, not broad qualification of arbitrary conventional CV layouts. The review/schema layer supports all existing canonical fields, but automatic extraction does not populate every possible field. Missing typed records cannot currently be created inside import review. These are explicit PARTIAL mapping/review acceptance items for CV-QA-01, separate from completed transaction and approval safety.
`CvDocumentInterpreter` interprets structural blocks/headings and labelled fields conservatively. Clear delimited employment/education records retain source date strings and current markers. Unknown employment stays as reviewable source rather than inventing a role or employer. Missing language proficiency remains null. Unclassified source remains visible. The current deterministic grammar is bounded; unconventionally arranged documents may require corrections. Native PDF table structure is explicitly limited.
`CvDocumentReview.Ground` removes unsupported candidate strings, refuses inferred date precision and attaches source block/page/snippet to significant fields. Fixed heuristic confidence percentages are not used in this path. Current employment is a labelled normalization of a supported source marker. The original extraction is stored on the run; approved/corrected profile metadata and the actual reviewed decisions preserve their origin. No AI-generated facts enter the active deterministic path.
@@ -42,7 +56,7 @@ The new hosted retention sweep runs on startup and hourly. New import source fil
- `parser-red-01`: three real structural-parser failures before the block interpreter; successor `parser-green-01` passed 46 focused cases.
- `retention-green-01`: 50 focused cases PASS. `link-merge-red` reproduced unrelated-link replacement; `review-safe-green-01` passed 51 focused cases after correction.
Focused runs overlap full regression and each other. They must never be added together. Final source-frozen regression/provider acceptance is still a separate checkpoint.
Focused runs overlap full regression and each other. They must never be added together. Final source-bound regression/provider decisions and the fixture-only recovery accounting are recorded in ACCEPTANCE.md.
## Provider and review addendum
+43
View File
@@ -0,0 +1,43 @@
# 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.
+1 -1
View File
@@ -33,7 +33,7 @@ flowchart LR
Queue --> Child[Bounded parser child: Docling]
Child --> Blocks[Structured blocks and provenance]
Blocks --> Interpret[Deterministic interpretation]
Blocks -. explicitly enabled local provider .-> Suggestions[Schema-constrained grounded suggestions]
Blocks -. future qualified local provider integration .-> Suggestions[Schema-constrained grounded suggestions]
Suggestions --> Review[Owned review with corrections and decisions]
Interpret --> Review
Review --> Transaction[Expected revision + atomic CareerProfileService]
+4
View File
@@ -30,12 +30,16 @@ Actual artifact manifest: `.artifacts/cv-import/corpus-02/manifest.json`. Real p
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.
+17
View File
@@ -0,0 +1,17 @@
# CV import rebuild
Development branch: `feature/cv-import-docling-ai`, based on CV-UX-01 `4a0af62`. Production remains NO-GO. Live-model compatibility and extraction accuracy remain BLOCKED.
- [Audit, implementation matrix, data flow and checkpoints](PLAN.md)
- [Docling versions, bounded runtime and inactive AI seam](SIDECAR.md)
- [Canonical schema mapping, lifecycle, provenance, revision and retention](BACKEND.md)
- [Review, corrections and conservative merge](REVIEW.md)
- [Security and privacy assessment](SECURITY.md)
- [Supported documents, accuracy and performance evidence](QUALITY.md)
- [Reusable synthetic benchmark and annotations](benchmarks/README.md)
- [Checkpoint ledger](TODO.md)
- [CV-QA-01 integration and model/human qualification handoff](CV-QA-01.md)
- [Final independent decisions and full regression](ACCEPTANCE.md)
- [Machine-readable evidence/hash index](evidence-summary.json)
Historical CV-UX acceptance reports are preserved in `docs/cv-redesign/` and remain conditional. Current development/QA acceptance is CONDITIONAL GO, with partial mapping/review coverage and model/human/infrastructure gates explicitly open.
+2
View File
@@ -11,3 +11,5 @@ Review matches records conservatively using complete identity/date keys; incompl
Independent code review identified stale-worker publication, nested merge provenance, duplicate targets, old pending-review visibility and benchmark record association defects. Regressions reproduced them before fixes. Additional tests cover DOCX DTD rejection, inert document hyperlinks, bounded errors, per-field source identity and canonical rather than legacy projection revision numbering. Failed attempts are retained under `.artifacts/cv-import/`; focused suites overlap and are not added to final totals.
The dedicated real import browser lane uses the actual isolated FastAPI/Docling child, durable API worker, reviewed transactional save, unchanged pre-existing CV variant, redesigned editor and actual PDF export. It exercises English/light/desktop PDF and Bokmål/dark/mobile DOCX, source ownership, refresh, no implicit save, corrections and automated accessibility. Browser automation does not qualify physical devices, human assistive technology, translation quality or printing.
Final current-source lane: `.artifacts/cv-import/import-browser-final.json`, 2/2 passed, zero retries; review axe checks zero violations. Both generated PDFs were extracted to confirm `Reviewed Åse Example` and rendered through Poppler for agent visual inspection: correct Norwegian glyphs, legible aligned text, no observed clipping/overlap. These two synthetic exports are separate from the unchanged 24-CV/four-letter per-platform fidelity corpus. Headless review screenshots do not render the native embedded PDF viewer; that viewer remains a human usability qualification.
+1 -1
View File
@@ -14,7 +14,7 @@
| Stale/lost writes | Canonical expected revision, existing atomic transaction/history/children/projection, lease-conditioned publication/status, idempotent apply | Actual MariaDB stale/rollback/idempotency, RD21 regressions; successful response follows durable commit |
| Privacy/retention | Original source private/no-store/nosniff, authenticated blob preview, safe owned paths, bounded sanitized parser errors, cleanup retry and reparse/root checks | Retention/orphan/cancel/expiry tests; account export/delete reuse existing owners |
Original import files and extraction evidence last up to seven days (one day for failed/cancelled/discarded work), plus up to the hourly sweep interval while the application is running. Startup sweep catches expired work after downtime. Pending work is revoked before deletion; failed deletion retains the reference for retry. Original source becomes unavailable after expiration. Approved canonical facts, review history and approved evidence snippets follow existing account-retention/deletion policy; they are not silently deleted with the temporary source. Operators must account for normal backup retention separately.
Original import files, raw extracted text and document-block JSON last up to seven days (one day for failed/cancelled/discarded work), plus up to the hourly sweep interval while the application is running. Startup sweep catches expired work after downtime. Pending work is revoked before deletion; failed deletion retains the reference for retry. Original source becomes unavailable after expiration. Unapplied structured candidates are cleared. Applied runs retain their structured candidate (including unselected extracted fields/evidence), decision acknowledgement and approved canonical facts/history under existing account-retention/deletion policy; they are not deleted with the temporary source. This audit-history retention must be included in privacy review; account deletion removes it. Operators must account for normal backup retention separately.
No production services, Docker configuration, MariaDB schema, filesystem, model cache, Ollama model or deployment was changed. Test containers use owned disposable identities and synthetic documents. Test service port is loopback-only. New dependencies were installed only into isolated development runtimes and hash-verified wheel contexts. Current dependency checks: npm 881 dependencies / zero reported vulnerabilities, NuGet API no reported vulnerable packages, CV-import Python lock 48 dependencies / zero skipped / zero reported vulnerabilities. Evidence: `.artifacts/cv-import/{npm-audit-01.json,dotnet-audit-01.json,pip-audit-01.json}`. Advisory queries are point-in-time checks, not proof against all vulnerabilities.
+4 -2
View File
@@ -7,7 +7,7 @@
- [x] CV-IMPORT-04: review/corrections/conflicts/source UI; final integrated regression tracked separately.
- [x] CV-IMPORT-05: revisioned transactional Career Profile persistence; actual MariaDB 70/70 and cleanup passed.
- [x] CV-IMPORT-06: reproducible corpus/oracle, measured deterministic accuracy/resources, security assessment; limitations and model block explicit.
- [ ] CV-IMPORT-07: full regression, acceptance and CV-QA-01 handoff.
- [x] CV-IMPORT-07: reconciled regression, unchanged Windows/Linux PDF oracles, independent conditional acceptance and CV-QA-01 handoff. Production NO-GO.
Evidence: entry actual MariaDB 64/64 PASS, no skips; `.artifacts/cv-import/entry-mariadb-01`.
@@ -17,4 +17,6 @@ Extraction subcheckpoint pushed `3ea8ff9`. Backend reviewed integration focused
CV-IMPORT-03 evidence: `lifecycle-green-01` 52 focused backend PASS; `backend-full-01` 1,250 PASS, zero skips. Expired-operation cancellation regression failed before the shared status guards. Linux real sidecar API attempt 03 passed PDF/DOCX and refused the scan in network-disabled/read-only isolation. Earlier attempts remain failed: Linux platform metadata subprocess and missing private HOME were fixed at the child boundary. Source retention includes orphan generated upload files and preserves unrelated files. Original source inspection is unavailable after expiry; approved canonical history is retained.
CV-IMPORT-04: full frontend attempt 03 passed 990 tests / 108 suites, zero skips; TypeScript/lint passed. Current offline sidecar partitions passed 76 + 14 disjoint tests; focused review/source/lease regressions passed. Real import browser attempt 04 passed 2/2 before final review corrections; fresh current-source integrated rerun remains required. See REVIEW.md and BACKEND.md for retained failure corrections.
CV-IMPORT-04: full frontend attempt 03 passed 990 tests / 108 suites, zero skips; TypeScript/lint/build passed. Current offline sidecar partitions passed 76 + 14 disjoint tests; focused review/source/lease regressions passed. Final current-source real import browser passed 2/2, with zero review axe violations and two inspected corrected PDFs. See REVIEW.md and BACKEND.md for retained failure corrections.
CV-IMPORT-07 retained attempt: `final-01` backend 1,260 PASS; ordinary shards 1/3/4 all PASS. Shard 2 had 82 PASS / 5 FAIL because the insert-only legacy-review seeder's exact schema guard lacked the two new nullable columns. Only that helper was updated, retaining exact schema/ownership/path/insert-only guards and adding null-evidence assertions. Its 24 self-checks pass. `final-03` reruns the entire affected shard and remaining lanes; binding rejects any product/runtime change or any source delta beyond that helper. Unchanged passed shards are retained, not rerun or double-counted. `final-02` stopped before tests on Windows path-separator normalization in the evidence wrapper. No application regression is inferred from the fixture failure.
+250
View File
@@ -0,0 +1,250 @@
{
"production": "NO-GO",
"realAiCompatibility": "BLOCKED",
"realAiAccuracy": "BLOCKED",
"fixtureRecovery": {
"previousAttempt": "final-01",
"changedInputs": [
"job-tracker-ui\\e2e\\helpers\\seed-career-review.py"
],
"applicationAndRuntimeUnchanged": true,
"reusedPassingShards": [
1,
3,
4
],
"replacedFailedShard": 2,
"note": "Seeder helper is used only by phase7-career-import-review.spec.ts in shard 2; exact schema updated, no product/test assertions removed."
},
"ordinaryBrowser": 364,
"separateBrowserLanes": {
"ai": 2,
"auth": 2,
"rate": 9,
"ingress": 6,
"pdf-admission": 1,
"preferences": 3,
"rd21": 6,
"diagnostics": 18,
"volume": 3,
"rd21-volume": 3
},
"backend": {
"passed": 1260,
"sha256": "07ffb98ab9a4dd3c06d31ff8669924ec64af8cd39e7c8652e49fcb944ea27096"
},
"frontend": {
"tests": 990,
"suites": 108,
"sha256": "82a3a4662198db85d7d0d27269a7914bf8f62f0d10d7040b37345229b6e80cba",
"checks": [
{
"name": "frontend-full-03",
"exitCode": 0
},
{
"name": "typecheck-03",
"exitCode": 0
},
{
"name": "lint-03",
"exitCode": 0
},
{
"name": "frontend-build-03",
"exitCode": 0
}
]
},
"mariaDb": {
"passed": 70,
"sha256": "f8976105b33a6fc009d4f4af908d35a76e9af3fa030b00acfa94b5ea980ec71c"
},
"importBrowser": 2,
"python": {
"python-offline-final": {
"passed": 76,
"sha256": "f85721ad6297871853d9a47004014c616c1d44bd10ac9800d4e31e1f4d4bf27c"
},
"python-docling-final": {
"passed": 14,
"sha256": "a65b42a3d79aafbc6ff852860dcb20d79780c1ecb8451892e60d42828f70bb19"
}
},
"sidecar": {
"containerId": "81605648797ac8659c6e4513e8166b42ee65834c40aa5d122226080252ca56f2",
"imageId": "sha256:8a29cb90fcc2817b0d784826d55a172c943f5ad7e1b6105e690a2d79ee15fe87",
"imageTag": "jobtracker-cv-import-sidecar:dev-04",
"readOnly": true,
"memory": 1073741824,
"cpus": 2000000000,
"pids": 128,
"tmpfs": {
"/tmp": "rw,size=512m"
},
"ports": {
"8001/tcp": [
{
"HostIp": "127.0.0.1",
"HostPort": "18041"
}
]
},
"sources": {
"tools\\summarizer\\app.py": "ef75652a4f48e0add3085aceca006c8542cd84753344cc2c42a939ecd0239c69",
"tools\\summarizer\\parser_child.py": "74fe65dab49f579c2246b96a079289ba904a136169457f3b78f9481fe6247daf",
"tools\\summarizer\\cv_import_ai.py": "2869bd726780bee5e8d2b3842c155416333d8bf1948ede93890ae7970fa6977e",
"tools\\summarizer\\requirements-cv-import.lock": "7c0c48cf9e8a20a3fe22f5848c4fe1c8eb647561667cfeb0bad9f993c1087223",
"tools\\summarizer\\Dockerfile.cv-import-dev": "8003bd754bd241e8ae79965d3c96239d9cba1f5645fc462c8184120a6b8ffc6a"
}
},
"auxiliaryContracts": [
{
"name": "node-helper-contracts",
"exitCode": 0
},
{
"name": "linux-helper-contracts",
"exitCode": 0
}
],
"legacySeedSelfChecks": 24,
"linuxImage": "sha256:09f856d2bfed7894b5722a1456dae26f35f48aeff6af654d0a1fd7d9cef9896d",
"linuxBuildHead": "b62962c68a8fb051c229eeece3d4bc0b6c243504",
"windowsFreezeHead": "cd67c0df21592351bb298d3848793d0e1f3e47c6",
"sourceFileCount": 901,
"pdf": {
"windows": {
"cvDocuments": 24,
"cvPages": 60,
"letterDocuments": 4,
"letterPages": 14,
"proofSha256": "083aa32796aa4d133920861f155807d464a2693a1470dadfc230827f7d54f06b"
},
"linux": {
"cvDocuments": 24,
"cvPages": 60,
"letterDocuments": 4,
"letterPages": 14,
"proofSha256": "1c900a9a5146691fdaf9f83aa3b80e0b3e95ec38acf55c58fc0b159afddfa1f3"
}
},
"deterministicBenchmark": {
"pdf": {
"caseCount": 14,
"completion": 0.9285714285714286,
"microPrecision": 0.94,
"microRecall": 0.9463087248322147,
"unsupportedClaimCount": 9,
"missingClaimCount": 8,
"employmentExactCases": 13,
"educationExactCases": 12,
"realAiAccuracy": "BLOCKED",
"mockedAiCountsAsModelAccuracy": false,
"limits": "Synthetic exhaustive annotations only. Unsupported claims include association errors, not necessarily invented text. No population accuracy estimate, human acceptance or model inference is implied.",
"sha256": "12878f4866ded2776fc537de9f2fc76968bdb3f44f338b4624512fdb0ac757d0"
},
"docx": {
"caseCount": 13,
"completion": 1.0,
"microPrecision": 1.0,
"microRecall": 1.0,
"unsupportedClaimCount": 0,
"missingClaimCount": 0,
"employmentExactCases": 13,
"educationExactCases": 13,
"realAiAccuracy": "BLOCKED",
"mockedAiCountsAsModelAccuracy": false,
"limits": "Synthetic exhaustive annotations only. Unsupported claims include association errors, not necessarily invented text. No population accuracy estimate, human acceptance or model inference is implied.",
"sha256": "23001fc9634f2264f67b9f9577e41970683be0fa8b33d8b805fdffc5a2ef8ae0"
}
},
"sidecarContainerRemoved": true,
"rawEvidence": {
".artifacts\\cv-import\\final-01\\backend-process.json": "d7081fa02df855db84d004dde11e61b79c514ff67d122ee9d376b5e6e335405b",
".artifacts\\cv-import\\final-01\\discovery-process.json": "01546faa69b380741b32102060f4f97f4be765d43461cd296bd2078ad98416c2",
".artifacts\\cv-import\\final-01\\discovery.json": "f812e54df31f5199fc69fa92247dc3a848d32e2fcf4413045f66f4b1907c4444",
".artifacts\\cv-import\\final-01\\git.json": "17e2346f91f1e3131a9557a2e9ed2c1ea67b68ee627eb068bfe93183764b3292",
".artifacts\\cv-import\\final-01\\ordinary-1-process.json": "6c3f476ecc83471d82be9017c36725c580565b655fb3d0aadd0ff06a38c7eb3b",
".artifacts\\cv-import\\final-01\\ordinary-1.json": "33ce3a2da0b331489e647c983a71c8a84d09664cf9bbe7d7159d8da4445ec864",
".artifacts\\cv-import\\final-01\\ordinary-2-process.json": "3b4c7c5a1c7ace72a5dabd846a714e143a7faeaea6beaf132d7d16e0cfddc445",
".artifacts\\cv-import\\final-01\\ordinary-2.json": "66212b7e63b68aab2944ad30e8154f14f6df005d8f7ac33c76fcb60ef6bccb6d",
".artifacts\\cv-import\\final-01\\ordinary-3-process.json": "c76e349bbeed92eb17a1eed3d85e23409c7895ef7e30b3b7e58fd1a2d38553ba",
".artifacts\\cv-import\\final-01\\ordinary-3.json": "5cf32aa155b5e7e20045717778730f51b91acd16e3fa5b7ab076929ac3309f8d",
".artifacts\\cv-import\\final-01\\ordinary-4-process.json": "6431c106696c90c2e32030bd3194e6d09e3ee7f85f9954f9c6ba93f40ff1232b",
".artifacts\\cv-import\\final-01\\ordinary-4.json": "9fae73c6f2c1bd2755e5b35c9f070be0baf409d5cb99646fce40a4ab836306c6",
".artifacts\\cv-import\\final-01\\process.json": "8dde33145bd5e6540875e5546172b2c1416b0162127055d3fb315b18e23371ff",
".artifacts\\cv-import\\final-01\\runtime-after.json": "de9a0405d8bbb31b9fe9dac676c3ebd36102484962e17360153044bfa56c66dd",
".artifacts\\cv-import\\final-01\\runtime-before.json": "de9a0405d8bbb31b9fe9dac676c3ebd36102484962e17360153044bfa56c66dd",
".artifacts\\cv-import\\final-01\\source-after.json": "c0414a0b8f543559572d92f3f5c3404316100e4282eb5e0246812099df21a692",
".artifacts\\cv-import\\final-01\\source-before.json": "c0414a0b8f543559572d92f3f5c3404316100e4282eb5e0246812099df21a692",
".artifacts\\cv-import\\final-01\\backend\\backend.trx": "07ffb98ab9a4dd3c06d31ff8669924ec64af8cd39e7c8652e49fcb944ea27096",
".artifacts\\cv-import\\provider-review-06\\run.json": "91d0cd053a0689c9c6651b6118375c52e8eae6663ca04b60f53f61fcb8fb6e4b",
".artifacts\\cv-import\\provider-review-06\\mariadb.trx": "f8976105b33a6fc009d4f4af908d35a76e9af3fa030b00acfa94b5ea980ec71c",
".artifacts\\cv-import\\provider-review-06\\compose-cleanup.log": "af66d99559599b8ee945991cbd8b3ac9539c47743aad82fb5497eb91ae8c7a57",
".artifacts\\cv-import\\frontend-full-03.json": "82a3a4662198db85d7d0d27269a7914bf8f62f0d10d7040b37345229b6e80cba",
".artifacts\\cv-import\\frontend-final-process.json": "ccb103c76a9221dc6001f660d4accce5e3bdfd77a6d0a4eeea75a01854ba868f",
".artifacts\\cv-import\\import-browser-final.json": "d5c346d205506a419b22418e360c65105fdc051281cc52cb6f069e02cd0e80c1",
".artifacts\\cv-import\\imported-pdf-text-final.json": "6e16c762bea4fa29121e3949f8b3d6cd52c730b03e958f2a4aec0b674296ed4f",
".artifacts\\cv-import\\sidecar-runtime-final.json": "ba3aca067da8f6e19145ba35ff76c3297b83b48bc6953161f9710fcc3d238940",
".artifacts\\cv-import\\corpus-02\\manifest.json": "6707e91d01763fe0ed8a560921c0d5d4c232c2eee02e9547f54cbe9fe714ab23",
".artifacts\\cv-import\\extraction-resources-final\\resources.json": "85b2d2778c4e45e968ab8e033a53e5e2f70059e4fa96740279569d605c5cf6e2",
".artifacts\\cv-import\\date-metrics-final.json": "ab476481b4a61f2fcc67d4bc5d328fc5a3dc9efac27cf208e22ec181611de3b4",
".artifacts\\cv-import\\benchmark-runtime.json": "37f75544bd8f286995ce68764f7655ba9e9c7b1caad490ab6ef09f14fb919195",
".artifacts\\cv-import\\metrics-pdf-final.json": "12878f4866ded2776fc537de9f2fc76968bdb3f44f338b4624512fdb0ac757d0",
".artifacts\\cv-import\\metrics-docx-final-02.json": "23001fc9634f2264f67b9f9577e41970683be0fa8b33d8b805fdffc5a2ef8ae0",
".artifacts\\cv-import\\npm-audit-01.json": "f1d5768c8fa8c618f203bf12678044049029aef84ef1fb7a605d9047d5826dae",
".artifacts\\cv-import\\dotnet-audit-01.json": "7fecc0be102f77c2d18f6c27db3cf9e7d94dda96fbb33235afba91782658e284",
".artifacts\\cv-import\\pip-audit-01.json": "1ed91ca41c75d0ce389cf2de68fdcbfff78799a9edca98519cf4a0c46f4c9a45",
".artifacts\\cv-import\\python-offline-final.log": "f85721ad6297871853d9a47004014c616c1d44bd10ac9800d4e31e1f4d4bf27c",
".artifacts\\cv-import\\python-docling-final.log": "a65b42a3d79aafbc6ff852860dcb20d79780c1ecb8451892e60d42828f70bb19",
".artifacts\\cv-import\\node-helper-contracts.log": "5f4c72d62e0958443b08af700cfdd104f0ebce75737b3e947ab8e467dec417de",
".artifacts\\cv-import\\linux-helper-contracts.log": "39198d427131cc57cbbc56457ae47cded184553d3c591b0a55bac4dcce48c6ce",
".artifacts\\cv-import\\helper-contracts-process.json": "5a4ccedd122702841ad82b898451d42639081152e12ee971fb35a393033df87b",
".artifacts\\cv-ux-01\\cv-import-linux-image-01\\build.json": "b05e89801693919033e7f3f10b8a21e121db4d45f9092ef6b9ae03430daab8c6",
".artifacts\\cv-ux-01\\cv-import-linux-final-01\\process.json": "599d1ccfbaee9934dd2dc6c1a7f7cedc14a7412ab41f514830c0ace9077fc1c1",
".artifacts\\cv-ux-01\\cv-import-linux-final-01\\linux-renderer.json": "291df1c550e0fdc102b2b70ae9d970bfb1a90c0569f36efb10887c711d60168a",
".artifacts\\cv-import\\final-01\\windows\\native-pdf.json": "083aa32796aa4d133920861f155807d464a2693a1470dadfc230827f7d54f06b",
".artifacts\\cv-import\\final-01\\windows\\letter-fidelity\\fidelity-results.json": "9096ba0c70445609ab186c0517d656ad20699254d8d606a7e0ad940f81a6928a",
".artifacts\\cv-ux-01\\cv-import-linux-final-01\\linux-pdf.json": "1c900a9a5146691fdaf9f83aa3b80e0b3e95ec38acf55c58fc0b159afddfa1f3",
".artifacts\\cv-ux-01\\cv-import-linux-final-01\\letter-fidelity\\fidelity-results.json": "4f9d8e992425d3eaedf40255f73541e67ce828bcac6d950cb373f5a73b2ac685",
".artifacts\\cv-import\\followups-01\\sidecar-cleanup.log": "ac8842ddd6131de93af714f2849073ae09b61f49d51d0b7bab8791fd8eaab4aa",
".artifacts\\cv-import\\run-final.py": "a9824664728b73abd8e0c29beb933cc3af33ef89811c42df03f3ab415b305f63",
".artifacts\\cv-import\\final-followups.py": "c8caf088fa183495984448539e9948c4e411b978a824516347bbaa3903c98d7b",
".artifacts\\cv-import\\collect-final.py": "0a5467aebba8dfeb0cc071d08ca4db4008dc44c4418258ed93ac4c52517880a7",
".artifacts\\cv-import\\final-03\\ai-process.json": "9e8f40c2023e6fce1a47f5e0d579917555dde3a76505d7463052eb9f3ba6ef22",
".artifacts\\cv-import\\final-03\\ai.json": "849a7df270237654d72ff45a2d6feb5068cc41050b05118844c2fd3920812306",
".artifacts\\cv-import\\final-03\\auth-process.json": "a15c6e958fa62b56040049762ea2c8b9d69f1427cfce1f4da1a2416a1f6f4122",
".artifacts\\cv-import\\final-03\\auth.json": "0cb2bb84a8971d7fb5e13b2b859cd983d5e607213e9b48d6914a125b7915afa6",
".artifacts\\cv-import\\final-03\\binding.json": "0e048331f6aa4e17328b5a61f87be0eb0834a7d362ca2110f618d0f52af83bea",
".artifacts\\cv-import\\final-03\\diagnostics-process.json": "65465311280abcf97e6435364a4aa09a90da7e0d02c1458e4a7563b2bff8a2bb",
".artifacts\\cv-import\\final-03\\diagnostics.json": "2994061d306f8a6693f36d199b64f4678f442df377d89290e1cdc6983a547cc9",
".artifacts\\cv-import\\final-03\\discovery-process.json": "118f2efb2c9a07515ccf49daa2387f59b4c975e64de227d0b20cce4851c07659",
".artifacts\\cv-import\\final-03\\discovery.json": "cbcca864e4f3b3c6f4d46953bcd107ff30d17fcc092c9c669fb9364caf6887b6",
".artifacts\\cv-import\\final-03\\ingress-process.json": "805d9b3cd827cfbeafbb8b36c862339f99e5fcce062aebe27e9d0dce12781bb5",
".artifacts\\cv-import\\final-03\\ingress.json": "cbe15296664d0b224dc88bdb5c2d09792286463a53ecde27951dc63ff80d7d8b",
".artifacts\\cv-import\\final-03\\ordinary-2-process.json": "ca35486da95e46480faefd69d9aaf5ccbcafaa31717518da82901dc1d43eb5cd",
".artifacts\\cv-import\\final-03\\ordinary-2.json": "3a7fad6372248ef9764ab4c30f54b49acf815923c889e374e72e0c936b098870",
".artifacts\\cv-import\\final-03\\pdf-admission-process.json": "a46d9f954f4317db54fa018c0b15b22030eb404c81d8ce392fd8eec4db5dcbf3",
".artifacts\\cv-import\\final-03\\pdf-admission.json": "2aadc7f11c1d9ed3ecd5b6a1e53c2ed900f71349dd153064234f0e1181c1049d",
".artifacts\\cv-import\\final-03\\preferences-process.json": "96438dd57cb46c371ee8d7f6a8b6c404a974050e75bc59d489cbc3220a2ecfaa",
".artifacts\\cv-import\\final-03\\preferences.json": "8bc259c8d2b373bafcf0bf7bd9aca8dc574382b9dbe264bd533073e348e112b0",
".artifacts\\cv-import\\final-03\\process.json": "cbe89bea0fe98912fde778311a3b948558ca6b735c3069e9d42eb347f304d45a",
".artifacts\\cv-import\\final-03\\rate-process.json": "dce72308742cf0bcb7d74df61c64b01c8cf62a5c8a31e35c487574a2aef3f6ba",
".artifacts\\cv-import\\final-03\\rate.json": "ae255a17e4872765a8d68bb60c7a20161111bc0eb04cb7f234254002b4821270",
".artifacts\\cv-import\\final-03\\rd21-process.json": "f23df61211808760bbca9b34afbaf0bfa7d51fd65a433d9dd004601cad6d2d0c",
".artifacts\\cv-import\\final-03\\rd21-volume-process.json": "1289b15b5d1aed188edc862451b0b8e08e954b0eb0701faa587bb80bebb797ee",
".artifacts\\cv-import\\final-03\\rd21-volume.json": "89c3eaf1989e398483c84c2a61fe5bbda1ebe47f4b6f402e486319846d5698f5",
".artifacts\\cv-import\\final-03\\rd21.json": "2db528c9d13e630e4f44f799b7e7014b585aca126c700aeda688bdb440775827",
".artifacts\\cv-import\\final-03\\runtime-after.json": "de9a0405d8bbb31b9fe9dac676c3ebd36102484962e17360153044bfa56c66dd",
".artifacts\\cv-import\\final-03\\runtime-before.json": "de9a0405d8bbb31b9fe9dac676c3ebd36102484962e17360153044bfa56c66dd",
".artifacts\\cv-import\\final-03\\seed-helper-process.json": "a1d3e5801fea28a8d51e6a39f7a178fad63fda42c05726c9db6d44e27c29c98d",
".artifacts\\cv-import\\final-03\\source-after.json": "91e54b5fdf97f7830b0ae9d143c153a44931ead7a2ec1bd5f135b504eafbde6d",
".artifacts\\cv-import\\final-03\\source-before.json": "91e54b5fdf97f7830b0ae9d143c153a44931ead7a2ec1bd5f135b504eafbde6d",
".artifacts\\cv-import\\final-03\\volume-process.json": "578c75df74fffdce84e990b8e1430ab1712ca962e29e85772f343b612ef14c8a",
".artifacts\\cv-import\\final-03\\volume.json": "c81881549d7f13d3105da0b4836daeafd769efb5714f095e3717503dd62474b7",
".artifacts\\cv-import\\resume-final.py": "85e007f45c4a4f24488d5677caf2a35c2fee1232cf9adc871f12036654238f3b",
".artifacts\\cv-import\\final-03\\seed-helper.log": "dea940e89d677b5e877c4332b698f80262e41e4670e0c3a378904f2abd540cfa"
},
"status": "AUTOMATED_EVIDENCE_RECONCILED"
}