# 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.
