d424633f95
Refresh extraction runs without reloading controlled profile fields. Keep stored-profile AI actions gated until pending edits are saved.
58 lines
4.8 KiB
Markdown
58 lines
4.8 KiB
Markdown
# 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.
|