fix(career): preserve reviewed profile values
CI and Deploy / test (pull_request) Successful in 4m39s
CI and Deploy / deploy (pull_request) Has been skipped

Keep extraction heuristics out of manual save, version, and import paths so reviewed locations, URLs, dates, and languages round-trip unchanged.
This commit is contained in:
cesnimda
2026-08-15 16:56:31 +02:00
parent a6cffe0473
commit f0b9b222ff
15 changed files with 277 additions and 37 deletions
+11
View File
@@ -159,6 +159,17 @@ Existing read paths (CV rendering, tailoring, match-score, cover letters) read
4. The eventual removal of the blob (once every reader is migrated to read relational) is a later
phase and out of scope here.
### Reviewed-value persistence boundary (2026-08-15)
Extraction payloads continue through `StructuredCvProfileJson.Normalize`, which applies heuristics
to reject parser noise and infer locations, URLs, roles, dates and languages. Once a profile reaches
the editable Career surface, it is reviewed user data: `NormalizeForPersistence`,
`SerializePersisted` and `DeserializePersisted` only trim/dedupe structural values and must not
reinterpret them. This separation prevents a manual website path, free-form date or location such
as "Remote across Europe" from changing on save, version restore, import merge or a legacy
projection read. `CareerProfileValidator` rejects oversized reviewed values explicitly instead of
silently discarding them.
This mirrors the additive, non-destructive philosophy of Phase 0/ADR-002: introduce the new model,
keep the old surface working via a derived projection, flip readers later.