Files

7.5 KiB
Raw Permalink Blame History

P5-03 — Jobs Table and mobile cards

Source: approved Phase 5 plan. Checkpoint starts at 0f54007 and changes the shared /jobs and /trash renderer only. It does not start Board presentation or Table/Board integration.

Scope and preservation

The existing JobTable remains the list, filter, sort, selection, bulk-action, paging, density and Trash owner. SavedViewsMenu retains account-scoped browser storage. The redesign gives the filter toolbar, selection bar, table and phone cards restrained semantic surfaces, borders and typography; desktop remains a table, phones remain cards. P4-05 Comfortable/Compact spacing remains local to the mounted view. All optional columns, status labels, row actions, listing links, workflow chips, 15/20/25 page sizes, native API mutations and route/query contracts remain available. The Add/import, Board and dedicated job workspace implementations are unchanged.

Contracts Retained behavior → P5-03 change Automated evidence Visual evidence
PRES-J05/J06, PRES-S03 Filters/saved views, owner scope, sort/page/columns/density, selection and partial bulk retry, edit/status/delete/Trash restore → clearer existing controls without new data contract job-table-density.test.tsx, e2e/table-density.spec.ts, backend Jobs authorization/controller tests Four locale/theme Jobs captures in both densities and desktop/phone; selected, error and Trash states
PRES-W01/W02 Job opening, workflow signals and explicit workspace Back → browser Back now restores the originating list row after the workspace unmounts Real-App browser Back and explicit Back assertions; job workspace tests Focused row/scroll captures
PRES-E07/E08/E09 Shell navigation, EN/Bokmål, light/dark and owner-private saved views → existing shell remains; table labels and dates use UI language Saved-view account switch, locale/status API-value regression, shell and session suites Four theme/language combinations
PRES-J03/J04/J08–J10 Existing capture and nearby navigation entry points → no workflow changes Existing quick-capture, account, import and link tests Shell destination visibility in Jobs captures

Browser Back focus previously depended on the explicit workspace Back button passing focusJobId. Opening a row now stores only its numeric focus target on the current list history entry before navigation; on return the existing row-focus effect consumes that target after data loads. The latest opened row wins when a user re-enters a different job. The query, scroll target and ordinary browser history remain intact. This is navigation metadata only, never owner identity or job data.

P4-05-O01 is addressed at the display boundary: standard status names in filter, bulk/quick actions, toast and saved-view summaries use existing pipeline.statusLabel; API values remain raw keys and custom labels remain raw. Applied/deadline dates use the current EN/Bokmål UI locale; no stored timestamp or timezone conversion contract changed. Custom status deep links retain their raw filter value and an explicit dropdown option. Result-changing filter/sort/page transitions clear selection before old IDs can be bulk-mutated. A partial bulk outcome refreshes successful mutations and keeps only failed, still-visible IDs selected for retry.

Validation and visual review

The inherited backend count 916→918 is accounted for by the two tests in commit 57a6bd0 (Concurrent_rule_reads_share_the_single_created_settings_row and Concurrent_checklist_reads_share_the_single_default_item_set), added before P5-01. The inherited P5-02 baseline is backend 918, frontend 373, browser 74 actual passes + unchanged P2-D01 expected failure, rate-limit 9, ingress 6, PDF 1, configuration 3.

Final post-change results: backend 918/918, frontend 377/377 (+4 focused Jobs tests), and production-static Playwright 74 actual passes + unchanged P2-D01 expected failure (75 reported passed, zero unexpected failures). Rate-limit 9/9, ingress 6/6, PDF admission 1/1, configuration 3/3. TypeScript (app and E2E), ESLint, frontend production build and API Release build passed. Supply-chain 3/3, model eval 5/5, browser-extension 3/3, tracked secret scan and git diff --check passed. The first rate-limit invocation could not find the local .NET SDK; rerun with DOTNET_ROOT=C:/Users/Connor/.dotnet and DOTNET_HOST_PATH=C:/Users/Connor/.dotnet/dotnet.exe passed 9/9. No application code changed after the successful full rerun.

The browser fixture exercises the actual /jobs and /trash routes with 18 native owner-created jobs, a long Norwegian title, a custom status, all optional columns, a page boundary, both densities, status mutation, listing-link isolation, keyboard row opening, browser and explicit Back, soft delete/restore, loading, 503/Retry, 1440/1024/768 table and 390/320 card widths. It runs light/dark × English/Bokmål and checks 32px desktop/44px phone targets, overflow, semantic sort, visible scroll focus and scoped axe. Screenshots and manual review: pending final production-build run.

Manual review of the final rendered production build found the populated table and phone cards readable in light/dark and EN/Bokmål, with the original data density intact. The selected phone action bar now groups the five unchanged status mutations in one labelled menu instead of pushing the first job card far below the fold. The 320px Compact capture retains labelled actions and wraps long titles; desktop Compact retains all columns. The error capture keeps Retry visible. Keyboard focus on the quick-status action is visibly outlined; Browser Back restores the originating row after data reload. The browser fixture checks no page-level overflow at 1440/1024/768/390/320px and scoped axe in the tested states. The horizontally scrollable desktop table can show its far-edge actions only after horizontal scroll; this existing density/column trade-off was retained rather than dropping data. The occasional malformed Norwegian glyph in headless captures is the pre-existing screenshot-font limitation, not a changed stored value or DOM text.

Visual evidence: light English desktop, light English phone, light Bokmål desktop, light Bokmål phone, dark English desktop, dark English phone, dark Bokmål desktop, dark Bokmål phone, desktop Compact, 320px Compact, error/retry, focused row action.

P5-00-D02 Browser Back focus and P4-05-O01 table display-localisation debt are closed for the tested Jobs/Trash boundary; Table/Board parity remains for P5-04b. Automated axe results are not manual screen-reader proof. P5-02-D01 remains an explicitly open command/notification spoken-name and live-announcement acceptance item for P5-15. P2-D01 remains an expected native-package browser failure, and F04 remains open pending production ingress evidence. SQLite contention, CV rendering fidelity and other separately owned debt are unchanged.

Rollback boundary: revert JobTable presentation/display/focus/selection changes and SavedViewsMenu status display together. There is no schema, API, provider or route migration.