feat(jobs): add dedicated workspace page
CI and Deploy / test (pull_request) Failing after 2m51s
CI and Deploy / deploy (pull_request) Has been skipped

Make /jobs/:id the canonical application workspace while preserving list state and compatibility links. Replace popup and expandable-row navigation with accessible whole-row routing and richer job details.
This commit is contained in:
cesnimda
2026-08-15 13:33:00 +02:00
parent 0dfaac18a1
commit 109745edb0
18 changed files with 310 additions and 266 deletions
@@ -1,6 +1,6 @@
# JOBS-002 application table and workspace verification
Updated: 2026-08-10
Updated: 2026-08-15
## Confirmed baseline
@@ -9,25 +9,31 @@ Updated: 2026-08-10
- “Open application workspace” navigated to `/applications/:id`; its Back control always navigated to a fresh `/jobs`.
- The existing full-page workspace already composes the owner-scoped checklist, intelligence, CV, cover-letter, attachment, correspondence and interview components. It is reused rather than duplicated.
## Increment 1 — route-backed overlay
## Superseded overlay increment
- Table row Open now creates `/jobs?workspace={id}` and renders the existing workspace inside an accessible MUI dialog.
- Workspace sections update `section=` with replacement navigation; opening is a pushed entry, so Back closes and Forward reopens without losing the mounted list state.
- A direct `/jobs?workspace={id}&section={section}` opens the requested application and closes by safely removing only workspace query keys.
- MUI owns focus trap/restoration. The dialog is full-screen below 768px and links to `/applications/:id?section=...` as the full-page fallback.
- Legacy `?open=` quick-dialog links continue to work; their workspace action enters the same overlay route.
- The route-backed overlay was a verified intermediate design, but the user explicitly requested a dedicated page instead of a popup.
- DEC-068 supersedes DEC-065. No new navigation emits `?open=` or `?workspace=`.
## Increment 2 — canonical dedicated workspace
- `/jobs/:id` is the canonical workspace route; `/applications/:id` is a query-preserving compatibility redirect.
- The entire desktop row and mobile card navigate to the workspace. Buttons, links, checkboxes and menus remain independent controls; keyboard users can open a focused row with Enter or Space.
- Expandable detail rows and the legacy popup are removed from the applications-list flow. The table now prioritises company, role, location, status, applied date, elapsed days, deadline and optional source URL.
- The workspace aggregate now includes discovery date, full/translated advert text, language, tags, notes and available source/country provenance. Job Details renders these without overflowing and exposes the existing editor.
- Workflow, quick-command, correspondence and Gmail-review links route to the appropriate dedicated workspace section.
- Correspondence and Gmail Review are removed from primary sidebar navigation; the global inbox routes remain available for compatibility and genuinely global review work.
- Return navigation preserves the complete URL-owned list state, including when a workspace section changes.
## Verification
- Focused Jest: `src/application-workspace-overlay.test.tsx` — 2/2 pass.
- Full frontend Jest: 51 suites and 206/206 tests pass; existing force-exit notice remains.
- Production build and TypeScript: pass.
- Evidence: V-158 and V-159 in `docs/audits/verification-log.md`.
- Focused Jest: workspace/table and workflow routing — 8/8 pass.
- Focused backend workspace aggregate: 9/9 pass.
- Production build: pass. Standalone repository-wide `tsc --noEmit` still exposes pre-existing React Router test-prop and target errors; no new application-source error was reported.
- Evidence: V-158V-162 in `docs/audits/verification-log.md`.
## Remaining before completion
- URL-owned list state is implemented for search, status, company, location, follow-up, readiness, deleted visibility, sort/direction and page. Direct hydration and overlay Back/Forward pass focused tests; real-browser refresh/history remains.
- URL-owned list state is implemented for search, status, company, location, follow-up, readiness, deleted visibility, sort/direction and page. Direct hydration and dedicated-page return pass focused tests; real-browser refresh/history remains.
- Add a shared dirty-edit close/navigation guard for workspace sections that own unsaved content.
- Improve the table's scan-priority data without adding every available field.
- Add real-browser 375/768/1440, light/dark, keyboard/focus restoration, refresh/history, error and long-content evidence.
- Run tenant-authorization regressions and the production smoke gate.