5203ddea72
Wrap pathological content, paginate oversized entries, measure A4 and Letter previews correctly, unify section ordering, and gate stored-output actions on saved state.
72 lines
5.5 KiB
Markdown
72 lines
5.5 KiB
Markdown
# 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.
|