# JOBS-002 application table and workspace verification

Updated: 2026-08-15

## Confirmed baseline

- `JobTable` owned search, filters, sort and page only in React state.
- `?open=` opened the legacy quick dialog and was immediately removed from the URL.
- “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.

## Superseded overlay increment

- 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.
- The header bell opens a theme-aware notification popover anchored to the bell. It supports loading/error/empty states, mark-read, dismiss, notification-owned destinations and a separate link to the global Operations page.
- Return navigation preserves the complete URL-owned list state, including when a workspace section changes.

## Increment 3 — application-package parity and navigation safety

- Application answers and recruiter messages are editable on the dedicated page beside the versioned cover-letter workflow. Empty saves intentionally clear drafts.
- Internal application-answer markers no longer render in Job Details or the general edit dialog. Editing ordinary notes preserves the stored answer instead of deleting it.
- Cover-letter and application-draft dirty state blocks section, Back/Forward and exit navigation through the shared confirmation dialog; hard refresh/close receives the browser unload warning.
- Returning with the workspace Back action restores keyboard focus to the originating row/card.
- The application-drafts mutation and workspace aggregate are tenant-filtered; direct cross-owner reads/writes return not found.

## Verification

- Focused Jest: workspace/assets/storage helpers and legacy compatibility — 28/28 pass; focused route/focus/dirty regression 6/6 pass.
- Focused backend workspace/application-draft/controller behavior — 30/30 pass.
- Full backend 647/647; full frontend 54 suites and 227/227 tests; optimized production build/TypeScript pass.
- Real Chromium application journey passes at 375/768/1440 in explicit light and dark modes with no horizontal overflow. It covers keyboard row entry, Back/Forward, dark refresh, saved draft reload, unsaved-change cancel, long company/title/advert/URL content, focus return, valid section deep links and a missing-job error state.
- Complete Playwright suite: 7/7 pass.
- Notification/AppShell/Operations focused Jest: 3 suites and 6/6 pass.
- Evidence: V-158–V-163 in `docs/audits/verification-log.md`.

## Remaining before production completion

- Run the authenticated production application/workspace smoke after this branch is merged and deployed.
- Native screen-reader/mobile assistive-technology behavior is not claimed by Chromium automation and remains an operator/device spot check.
