Files
jobtrackingapp/docs/verification/career-002-cv-builder.md
T
cesnimda 5203ddea72
CI and Deploy / test (pull_request) Failing after 3m0s
CI and Deploy / deploy (pull_request) Has been skipped
feat(cv): harden multi-page builder
Wrap pathological content, paginate oversized entries, measure A4 and Letter previews correctly, unify section ordering, and gate stored-output actions on saved state.
2026-08-15 14:09:51 +02:00

5.5 KiB

CAREER-002 CV Builder redesign

Updated: 2026-08-15

Status: IMPLEMENTED — NOT VERIFIED. Repository, automated and pathological Chromium/PDF gates are complete; authenticated application-browser and production gates remain.

Revalidated capability matrix

Requirement Existing implementation Current status
Ordered section list Default plus persisted section order Implemented; browser pending
Expand/collapse Entry-based sections use explicit collapse controls Implemented; deeper tests pending
Inline editing Section title and per-entry title/subtitle/bullets overrides Implemented; validation depth pending
Add entries Explicit custom-section entries; master entries remain profile-owned Implemented; browser pending
Delete entries/sections Confirmed deletion for populated custom entries/sections; profile entries hide instead of mutating the profile Implemented; browser pending
Reorder sections/entries Native drag plus named up/down keyboard buttons Implemented and persistence-tested
Visibility Named section/entry/custom-section hide/show controls Implemented and persistence-tested
Save feedback Unsaved/Saving/Saved/failed badge existed Hardened in b58cc19
Navigation safety Debounced/failed state could be abandoned silently Hardened in b58cc19
Preview Debounced live server render beside editor; visible failure/retry; below editor on narrow layout Implemented; responsive/browser review pending
Versions/public/PDF Existing history/restore, public toggle/link and PDF export Preserved; regression/production gates remain

Multi-page/rendering increment

  • Removed page-level clipping and added wrapping/min-width protections for names, titles, employers, contact values, URLs, tags and two-column content.
  • Short entries remain intact. Large entries and large list items flow at safe internal boundaries instead of becoming unsplittable blocks taller than a page.
  • The legacy job-specific CV templates receive the same wrapping/pagination rules; sidebar values are now HTML-encoded consistently.
  • Preview measures both document/body height, uses the selected A4 or Letter dimensions, applies ceiling-based page counts, exposes real Fit/percentage controls, and reports horizontal overflow.
  • Three-page and longer CVs receive content-density guidance. Text size is not silently reduced.
  • Custom sections now participate in the same section order as master-profile sections.
  • Autosaves are serialized; stale preview responses are ignored; export/public actions save pending edits first.
  • CV deletion and version restore use the shared application dialog system.
  • The non-functional page-number switch is no longer advertised; ShowPageNumbers remains a backward-compatible exporter extension point until the Chromium CLI path supports controlled PDF footers.

Save-integrity increment

  • Latest settings/name are retained independently of render closures.
  • Monotonic save revisions prevent an older overlapping request from changing a newer edit to Saved or Save failed.
  • Blank names show inline validation and are not sent as misleading no-op renames.
  • Unsaved and failed states expose Save now; failed saves retry the latest settings.
  • Data-router navigation is blocked until the user explicitly confirms discarding pending/failed changes. Reload/tab close uses the browser's before-unload warning.
  • The debounce timer is cleared on intentional unmount. Existing version creation and API payloads are unchanged.

Interaction and error increments

  • Custom sections retain the existing string[] storage model but expose entries individually: add, multiline edit, inline empty validation, arrow reorder and confirmation before destructive deletion.
  • Custom sections can be reordered and hidden without changing the Career Profile. Deleting an original profile-backed entry is intentionally not offered; variant-specific hide/override preserves source-of-truth ownership.
  • Profile-backed section and entry controls include the affected section/entry name. Expand controls expose aria-expanded.
  • Preview failure no longer silently preserves stale output without explanation; an error state and in-context retry are available.

Verification to date

  • Focused Builder list/helper/deep-link/save/navigation: 3 suites, 21/21 tests; editor deep-link/interaction 9/9.
  • Focused renderer/template backend: 25/25 tests.
  • Full frontend: 49/49 suites, 184/184 tests.
  • Production build/TypeScript and git diff --check: pass.
  • Pathological Chromium render: 14 long roles, 75 long skills, oversized name/email/URL, zero horizontal-overflow elements, nine-page PDF (173,196 bytes) with extractable final-page content.
  • Implementation commits: b58cc19, a5b74e0, 2043349 plus the V-165 checkpoint.

Product research

Public current material for Reactive Resume, Resume.io, Enhancv, Novorésumé, FlowCV and Canva was reviewed. Repeated patterns and adopted/rejected decisions are recorded in docs/research/cv-builder-patterns.md. No authenticated/private competitor session was used or claimed.

Remaining verification

  • Run 375/768/1440, Light/Dark, keyboard/focus, empty/error and production synthetic-variant checks.
  • Recheck DOCX status honestly: the current architecture documents it as an extension point, while PDF/public rendering are implemented.

Rollback

Revert 2043349, a5b74e0 and b58cc19 in reverse order. No schema, dependency, configuration, CV data rewrite or version migration is involved.