Files
jobtrackingapp/docs/verification/career-001-career-workspace.md
T
cesnimda d424633f95
CI and Deploy / test (pull_request) Failing after 2m59s
CI and Deploy / deploy (pull_request) Has been skipped
fix(career): preserve edits during polling
Refresh extraction runs without reloading controlled profile fields. Keep stored-profile AI actions gated until pending edits are saved.
2026-08-15 13:49:58 +02:00

4.8 KiB
Raw Blame History

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-117V-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.