# CAREER-001 Career Workspace redesign Updated: 2026-08-15 Status: `IMPLEMENTED — NOT VERIFIED`. State-focused component tests, the full frontend suite and the production build pass. Browser and production checks remain. ## Revalidated execution path - `/career` renders `CareerWorkspacePage`, which delegates the master-profile state to `CareerProfilePage`. - `CareerProfilePage` loads `/career/profile`, `/auth/me`, `/profile-cv/runs` and version history. Active durable operations are polled; pending-review diffs are loaded separately. - CV import/rebuild/improve/reprocess create durable processing runs. Extracted changes are not written into the career profile until the user selects **Apply changes**; **Discard** remains available. - The previous wrapper presented a duplicate page heading, a large explanatory alert and one CV Builder action. Recent CV documents, first-run guidance, missing information and resumable import states were not visible at workspace level. - General documents live at `/career/builder`; job-specific selection/attachment lives in a saved job workspace. CV variants already carry optional `jobApplicationId` ownership metadata. ## Implemented contract - The workspace starts with one `h1`, a short next-step prompt and an explicit CV Builder action. The requested long explanatory paragraph was removed. - Four responsive action cards lead to career-profile editing, CV import/review, general CV creation and the saved-job path for job-specific CVs. - Completeness and up to three missing areas are visible before the editor. The former duplicate completeness panel is hidden on this route while version restore remains available. - Durable import state is summarized as import, processing, review or failure and links to the existing run history/actions. - First-run, profile-load error, recent-CV loading/error/empty and returning-user states are explicit. Recent CVs are sorted by update time and show job-specific context. - Anchor targets use scroll margins; action navigation is native keyboard-focusable links. The grid collapses at small widths. - Existing profile persistence, extraction diff, low-confidence selection, Apply/Discard approval and version restore behavior are unchanged. ## Edit-persistence correction - Active CV processing used to poll by calling the full profile loader every four seconds. That replaced `structuredCv` and raw CV text with the last saved API response, so any controlled input could appear editable and then reset. - Profile/account loading and extraction-run loading are now separate. Initial load and explicit restore/apply still refresh authoritative profile data; background polling, queue, cancel, retry and discard refresh run status only. - Every career-profile editor mutation now sets a shared unsaved state. The UI shows this state, prevents imported changes from overwriting it, and prevents rebuild/improve actions from using stale server-side profile text. - The import pipeline already follows the proposed hybrid design: Python/local libraries extract PDF/DOCX/image text, Ollama is the default local normalizer/classifier, then deterministic C# normalization, plausibility checks, diffing and explicit review return validated structured data to the system. An LLM does not replace binary parsing/OCR because that would be slower, less deterministic and less safe. ## Verification - Focused Career Workspace and Career Profile: 2 suites, 17/17 tests. - State coverage includes first-run, returning/incomplete profile, recent general/job-specific CVs, queued processing, pending review, failure, loading and load error. - Existing pending-review test proves changes are applied only after the explicit accept request. - Full frontend: 49/49 suites, 178/178 tests. - Production frontend build and TypeScript: pass. - C# extraction/diff regressions: 8/8 pass. AI-sidecar extraction/routing contract: 22/22 pass (global Python environment; the repository `.venv` does not contain pytest). - `git diff --check`: pass apart from repository line-ending notices. ## Remaining gates - Required 375/768/1440, Light/Dark, keyboard/focus, Norwegian and rendered error/processing checks remain for this latest correction. - Synthetic-account production smoke and deployed route/anchor behavior remain unavailable without production access. - The saved-job path explains where a job-specific CV is managed; the deeper CV Builder/application interaction redesign remains CAREER-002/JOBS-001 scope. ## Evidence - Evidence index: `docs/audits/evidence/career-001/README.md` - Commands/results: `docs/audits/verification-log.md` V-117–V-119 - Focused tests: `job-tracker-ui/src/career-workspace-page.test.tsx`, `job-tracker-ui/src/profile-page.test.tsx` - Implementation commit: `268b3a0` ## Rollback Revert `268b3a0`. No schema, dependency, configuration, provider or stored profile/CV data changes are involved.