43 lines
7.7 KiB
Markdown
43 lines
7.7 KiB
Markdown
# CV-QA-01 source-backed mapping and new records
|
|
|
|
26 October 2026. Entry gap: the old review could only accept/correct fields emitted by extraction. An unmatched extracted record could already be added; a missing record/field could not. This distinction is independently tested rather than treating updates as creation proof.
|
|
|
|
## Implemented contract
|
|
|
|
Owned review now includes source blocks, an allowlisted field catalog with current contact/list values, and existing-record targets with their actual affected values. The user can create a missing record, select its section/destination, assign literal source values, explicitly mark corrections, add list fields and approve the mapped record. Selecting evidence proposes its literal text only into an empty value; it never overwrites a correction or approves anything. Changing fields/target clears approval. Narrow screens reuse the existing MUI review layout, labels and EN/Bokmål translations.
|
|
|
|
`apply-reviewed` accepts optional mappings `{clientId,category,targetIndex,fields:[{name,value,sourceBlockId,corrected}]}`. Null target deliberately creates an object record; contact updates selected singleton leaves; scalar lists append. Existing targets are validated against the owned canonical snapshot/revision before extracted merge. On 409, local values survive, all confirmations and prior target indices reset, and comparison must be reviewed again. Actual current values are shown before updating an existing target. Caller metadata/IDs/derived dates/arbitrary JSON paths are never accepted.
|
|
|
|
The same canonical contracts cover contact/labelled links; summary; work title/employer/location/literal dates/current flag/bullets/skills; education qualification/stated level/institution/location/dates/details; certificates name/issuer/location/date/details; project name/role/location/dates/bullets/skills; languages/name/explicit level/notes; skills; interests/awards/publications/organisations/references and custom title/items (including courses). Canonical structured skill categories/proficiency and arbitrary new entities remain unsupported; original source can be retained as custom/detail text.
|
|
|
|
Every assigned value requires an owned source block. Whole-token boundaries reject `Py` from `Python`, `SQL` from `NoSQL`, and `2020` from `12020`. Explicit corrections may differ and are labelled `user-correction`; literal user assignments are `user-source-mapping`, distinct from algorithmic extraction. Block/page/artifact/run/file hash metadata is stamped server-side. Limits:25 mappings,200 total fields,8000 characters/value; unknown categories/fields/targets/evidence, duplicate client IDs/scalar writes and invalid booleans/link pairs fail closed. Existing list values retain their original evidence and unrelated data survives.
|
|
|
|
Mappings participate in the existing canonical expectedVersion/atomic transaction/history/children/Identity projection and idempotency acknowledgement. Original candidates remain unchanged; actual decisions/mappings are retained in review audit. Old unmapped request hashes remain compatible with historical replay. No schema/storage/profile ownership was duplicated.
|
|
|
|
## Checkpoint evidence
|
|
|
|
- `mapping-red-01.log`: missing mapping contracts reproduced before implementation. `mapping-target-red-01.log`: missing existing-value comparison/catalog contracts. Whole-token tests were added before implementation.
|
|
- `mapping-green-02.log`:77 focused backend cases PASS, zero skips, including mapping-only apply, invalid input, current values, date precision, old review/provenance/preservation contracts. Focused counts overlap other suites.
|
|
- `mapping-mariadb-01`:72/72 actual MariaDB12.2.2 PASS, zero skips, isolated startup/test/cleanup exits0. Two new provider cases exercise17 explicitly mapped groups into an EMPTY canonical profile: two jobs, two education records, two languages, project, certification, contacts/portfolio, skills/summary and long-tail/custom sections. Independent database readback confirms relational child counts, source identity, absent language level, literal year dates and rejected original SQL proposal absent. Identical replay creates one revision only. Injected Identity failure leaves no canonical children/history/acknowledgement and the review stays pending.
|
|
- `ui-review-mapping-red.log`, `ui-target-values-red.log`, `ui-source-fill-red.log`: missing UI flow/comparison/proposal behavior reproduced first. UI review/mapping tests and TypeScript/lint pass; complete browser/mobile/new-user qualification is tracked in later checkpoints.
|
|
|
|
This is bounded mapping/new-record implementation evidence, not whole-CV acceptance. A separate source audit identified apply/discard/retention lifecycle concurrency risks for real-provider reproduction/remediation at CV-QA-04. No release decision is made here. Missing models/human qualifications remain independent.
|
|
|
|
## Current field coverage addendum — 27 October
|
|
|
|
The entry matrix in ARCHITECTURE_AND_COVERAGE.md is historical. The following classifications separate canonical mapping from automatic extraction and complete field-specific browser output evidence.
|
|
|
|
| Canonical supported fields | Current mapping / database evidence | Field-specific connected browser evidence |
|
|
|---|---|---|
|
|
| Contact name/email/phone/headline/location/website/LinkedIn/GitHub/labelled links | Source-backed missing-field authoring and selected-leaf updates; service/controller/provider coverage | Name/email/phone/location and corrected name through profile/editor/PDF; other contacts retain incomplete individual browser evidence |
|
|
| Jobs title/company/location/start/end/current/bullets/skills | Typed allowlist; new and selected existing records, explicit false/current, literal incomplete dates and relational readback | New/mapped/repeated jobs, dates, details, CV-only titles and conflict/replay covered; every optional field combination is not independently browser-tested |
|
|
| Education institution/qualification/stated level/location/dates/details | New/multiple records and supported field mapping; level never inferred | Mapped missing education and extracted multiple qualifications through CV-only edit/PDF; every optional field combination remains incompletely sampled |
|
|
| Skills and languages/name/stated level/notes | Canonical lists/language records; missing level remains unknown | Extracted skills/languages and retained CV/PDF journey; all language-note combinations not independently sampled |
|
|
| Summary/interests/awards/publications/organisations/references | Source-backed scalar-list mapping and conservative append/preservation, provider readback | Generic controls and existing editor contracts; incomplete per-field end-to-end import output evidence |
|
|
| Certifications/name/issuer/location/date/details and projects/name/role/location/dates/bullets/skills | Supported missing-record mapping and actual provider persistence; ambiguous extraction retained for review | Incomplete dedicated per-field import/browser/PDF evidence; no universal auto-extraction claim |
|
|
| Courses/custom title/items | Existing supported custom sections, explicit source mapping, provider readback | Generic review/editor integration; incomplete per-custom-field connected evidence |
|
|
| Skill categories/proficiency, derived experience duration, caller-authored IDs/metadata | Unsupported by design or internal-only: no new canonical entity is invented | Not offered as imported canonical fields |
|
|
| Real AI relationships/OCR layouts | Blocked by external qualification / OCR disabled | Not tested or accepted as model extraction |
|
|
|
|
All rows retain source evidence and explicit approval. Mapping into canonical storage is distinct from a claim that the deterministic parser can discover every field from every layout. The current lifecycle races are remediated and verified in MARIA_DB_AND_RD21.md; historical checkpoint observations above are preserved.
|