# P5-00 — Shell readiness gates Source checkpoint: `c325eb68c6f6f293be92ecbbbb09b705a7da5033`, branch `codex/ui-redesign-phase4`. Local verification: 2026-09-20–21, Windows, disposable API/SQLite and Chromium. The containing commit is discoverable with `git log -- docs/redesign/phase-5/p5-00`. This is the five-condition [G-SHELL readiness slice](../READINESS_GATES.md#g-shell--p5-00-before-p5-01-starts), not the visible AppShell redesign. **P5-01 and B07 have not started. F04 remains open.** No route, provider, permission, data, API, schema, dependency or CI configuration changes are included. ## Readiness decision **GO for P5-01.** The five shell conditions have independent regression/visual oracles and are ready: mobile labels/focus and breakpoint lifecycle; admin-header reflow; command semantics; shared Tooltip accessibility; bottom-action toast clearance. Mapping a PRES group does not certify every workflow in that group. P5-00-D01 was closed on 2026-09-21 by injecting the test's existing `MutableTimeProvider(FixedNow)` into the rules worker. The complete backend suite then passed **916/916** with no production worker change. F04 remains an independent production gate; package, CV and later-slice gates are unchanged. **B07 was not begun.** ## Reproduction and implementation | Gate / original evidence | Root cause and bounded correction | Preserved behavior | |---|---|---| | P4-06-O01 mobile labels/focus | The persisted desktop collapse flag also hid mobile text and changed its padding; the app bar was above the modal drawer. Mobile now has its own presentation decision, named navigation dialog/items and `aria-current`. The temporary drawer stays above the header; MUI retains focus trapping/restoration. After its entry transition, focus enters the first destination only if the paper still owns focus. | Same destinations, active-route lookup, permission filtering, 254/84px widths, desktop storage key, callbacks and route handling. No navigation regrouping. | | Related breakpoint mismatch, independently reproduced before repair | Controls used 768px while drawer display used MUI `md` (1024px), leaving 768–1023px without either navigation form. Controls and both drawer variants now share `theme.breakpoints.down("md")`: temporary navigation below 1024px, permanent navigation at/above 1024px. | Original permanent-sidebar threshold, desktop collapse preference and existing page content width below 1024px. Table/cards and Settings tabs/select keep their separate, unchanged consumer breakpoints. | | P4-06-O02 narrow admin metadata | The synthetic long version badge shared the narrow logo/control row. On phones, the same version/commit appears in the existing account menu as a non-interactive MUI `ListSubheader`; it is skipped by menu keyboard selection. Desktop badge is retained. | Admin-only metadata is still supplied by the unchanged App owner; no new request, destination or public metadata exposure. | | Related wrapped-header occlusion, confirmed in rendered 768px view | Existing fixed spacers assumed 68/76px even when admin controls wrapped into a taller header. A native `ResizeObserver` measures the existing header; its two inert spacers follow that height. | Existing control ordering, responsive wrap, typography, page-width and header/content owners. No header redesign. | | P4-02-D01 command list semantics | A `ul` contained direct `div role=button` results and a `div` empty state. Existing result buttons and empty text now use MUI `ListItem` children. | Six static commands, native job/company search, query reset, exact job ID / company `?edit=id` destinations, Tab/Enter/Escape, Add opens review without POST. No new command catalogue or arrow-navigation model. | | P4-03-D01 light Redo Tooltip, reproduced at 3.89:1 | The inherited translucent default Tooltip background composed into a weak light-theme pair. Shared Tooltip foreground/background now use opaque existing `background.paper`/`text.primary` semantic roles in inverse order; the arrow uses the same background. | Existing MUI tooltips, names, placement, timings and P4 focus. No feature color constants or new tokens. Only the repaired narrow contrast exception is removed. | | P4-04-O01 bottom-action toast overlap | Moving the fixed toast upward alone could still cover Connections. Keep the original bottom/right placement and reserve a stable 96px bottom feedback lane in the shell; the existing Snackbar's measured wrapped height can increase that clearance. Matching root `scroll-padding-bottom` keeps native focus/scrolling out of that lane. Safe-area insets are included. | Original 3500ms lifetime, click-away/Escape/dismiss, hover/focus pause, explicit action callback, content/severity, provider order and session disposal. No toast queue or overlay framework. | Toast clearance is layout space, not a new notification feature. The stable minimum prevents the bottom action from being initially positioned underneath delayed feedback; measurement handles ordinary wrapped translations and resizing. It is not a guarantee that a floating toast can never visually overlap arbitrary mid-page content. Very large messages, software keyboards, third-party fixed widgets and non-shell public pages remain separate interaction cases. The repaired bottom Connections action and toast close action are both hit-testable while the toast is open; waiting for dismissal is not the oracle. A later complete run reproduced the 390px dark/English Connections overlap despite the reserved space: native scrolling could still align the control with the viewport bottom, under the fixed toast. Root scroll padding is therefore required as well as physical page padding. The regression deliberately uses native `scrollIntoView({ block: "end" })` while the toast is open, then hit-tests both actions. This prevents an accidentally favorable prior scroll position from hiding the defect. Message duration is unchanged. The first complete regression run caught an incorrect intermediate choice: extending the **permanent** sidebar down to 768px produced 106px horizontal overflow in the unchanged populated Job Workspace. That run is retained as initial evidence, not accepted. The correction aligns controls to the original permanent-sidebar `md` threshold instead. The original workspace overflow assertion is unchanged and its two theme sweeps now additionally cover 900/1023/1024px. No workspace application code was edited, no `overflow-x: hidden` mask was added, and no forced collapse preference was introduced. Manual open-drawer 900→1024 testing also reproduced an empty accessibility tree: CSS hid the temporary drawer but its still-open MUI modal kept the desktop page `aria-hidden`. Its `open` prop now requires the temporary layout, and entering desktop closes the parent's temporary-drawer state. Returning to phone leaves it closed until explicitly opened. The four locale/theme shell tests cover this transition, desktop keyboard access and phone reopen/Escape return. Desktop collapse storage and unsaved page state remain independent. ## Changed owners Application files, all under `job-tracker-ui/src/`: - `layout/AppShell.tsx`: mobile label/stacking/current-state/focus, shared breakpoint, admin metadata disclosure, measured header spacers and feedback clearance only. - `components/QuickCommandDialog.tsx`: valid list children; existing callbacks retained. - `theme.ts`: shared semantic Tooltip pair/arrow only. - `toast.tsx`: measure the mounted Snackbar, expose its clearance through a CSS custom property and use matching native root scroll padding; retain normal bottom placement with safe-area support. No private content is stored in that property. - `i18n/translations.ts`: Navigation and Application version labels in English/Bokmål. Regression files: - `src/shell-readiness.test.tsx`: two localized shell controls and two toast behavior cases. - `src/quick-command-preservation.test.tsx`: one populated/empty semantic-list case, retaining all prior action cases. - `e2e/shell-readiness.spec.ts`: fourteen real-App cases: shell/reflow, command semantics and Tooltip/open-toast journeys in all four theme/locale pairs, plus two dirty-editor journeys. - `e2e/account-isolation.spec.ts`: one additional real multi-tab account-switch case. Its pre-existing unsupported `Playwright` type import is replaced with the installed `PlaywrightWorkerArgs["playwright"]` type to type-check this now-edited test; no runtime auth change. - `e2e/smoke.spec.ts`: extend the existing populated Job Workspace light/dark viewport sweeps with 900/1023/1024px to prevent recurrence of the intermediate sidebar/content regression; assertions and workflow unchanged, no additional test case. - `e2e/table-density.spec.ts`: correct inherited navigation timing/return-path oracles found by the full run. Wait for the actual workspace heading before browser Back, then assert the documented local-density reset and preserved query. Separately require row-focus restoration through the existing workspace Back button. No table/navigation application code or density contract changes; this validation-only adjustment is necessary to make the shared-shell regression check reliable. - `e2e/named-controls-modal-state.spec.ts`, `e2e/builder-preview-keyboard.spec.ts`: remove only the repaired command-list and light-Tooltip expected-rule branches. Existing unrelated workspace checks and P2-D01 remain unchanged. ## Preservation trace All IDs refer to their original complete [Phase 2 contracts](../../phase-2/PRESERVATION_MATRIX.md). The rows below identify only the affected sub-workflows. Application routes/`App.tsx` and provider tree are unchanged. | PRES → existing behavior | P5-00 change / protection | Automated evidence | Visual/UX evidence | |---|---|---|---| | E07 → collapse, drawer, active destination, commands | Separate mobile from stored desktop collapse; named/current items; valid command lists | `shell-readiness` unit/browser: collapse→reload→320, first/last target, focus trap/Escape/route selection, expanded control; exactly one appropriate navigation control at 767/768/900/1023/1024px; original `sidebar-active-nav` | VS-SHELL drawer, account menu and 768/900px header; VS-UTILITY populated/empty command list | | E05/E09 → logout and account-private disposal | No identity/provider changes; protect open utility lifetime | Additional `account-isolation`: A command/company, account menu and notification open in three tabs; logout→B removes them; fresh B search cannot see A; original B02 cases retained | Manual shell controls plus browser DOM absence; native API ownership tests, not screenshots, prove the security boundary | | E08 → light/dark, EN/NB, feedback/dialogs | Semantic Tooltip and non-obscured bottom feedback; existing focus system | Four theme/locale browser pairs; toast timer/dismiss/action units; existing theme/dialog tests | Redo Tooltip, notification Close Tooltip, open toast and focused controls | | S02 → notification entry/actions | Existing entry/name/permissions unchanged | Original `notifications-popover` / `app-shell-notifications`; account-switch notification content fixture | Actual Close Tooltip and popover entry; no new producer or task semantics | | S03 → Settings/theme/language | Same Settings consumer; header clearance and footer space | Existing Settings fixture; dirty CV survives real language toggles and another tab's Settings theme change | Settings title/reflow, bottom Connections action in both themes/locales | | S05 → protected account export | No export code changes; use its real success feedback | One native ZIP per Tooltip journey; replay identical local response for additional viewport checks to respect account-data rate limits; original backend export coverage | Toast visible concurrently with Connections at desktop/390/320 | | A03 → admin build metadata | Retain version/commit in phone account menu and desktop badge | Real admin fixture long synthetic version/name; first account action focused; non-admin account-switch fixture has no badge; original admin tests | VS-SHELL 1440/1024/1023/900/768/767/390/320 reflow; mobile account metadata | | J03/J08 → Add review and job/company command entry | Structural wrapper only | Native job URL/company edit dialog; Add opens without creating a second job; prior unit callback tests | Command dialog populated/empty/keyboard; company workflow itself unchanged | | J05/C06 → shared tooltip consumers and editor navigation | Tooltip only; no table/editor persistence changes | Inherited table-density/preview fixtures; new Redo hover/focus; dirty CV failed-save→language/theme→Cancel retains content, Discard leaves without writing | Actual loaded CV Redo, Settings control page; preview geometry is not certified | No other PRES contract is intentionally changed. Complete inherited frontend/backend/browser coverage remains the broader regression check, with the baseline limitation below stated explicitly. ## Test design and evidence limits Native authentication, ownership, profile/variant/job/company reads and exports use a disposable local API. External browser requests are blocked in the new fixtures. Notification text in the account-switch test is a single synthetic response, not proof of notification production. Dirty-editor PUT deliberately returns 503; existing draft ownership/confirmation logic runs unchanged. One native ZIP is replayed for additional viewport captures; this is placement proof, not a bypass or redesign of the existing two-per-minute account export limiter. The new loaded scans use WCAG 2 A/AA and 2.1 A/AA tags and fail on any violation in the actual drawer/account-menu/command/Tooltip scope. Violations and incomplete rules are retained separately. Generic inherited route scans and incomplete contrast results are not complete accessibility passes. The historical unrelated mobile job-workspace scroll finding remains explicitly recognized in its existing test. Final P5-00 scoped results: **24 scans, zero violations**; eight scans retain incomplete `color-contrast` checks and eight retain incomplete `aria-valid-attr-value` checks. These are not claimed as completed passes. Across the inherited loaded fixtures, two `scrollable-region-focusable` findings remain in the already-deferred workspace scope, with other incomplete rules retained in `RESULTS.json`. The visual index contains **32 unedited screenshots**. ### Inherited density navigation oracle corrected The first complete run on the final application code reported one unexpected light/Bokmål density failure: after opening a job and going Back, expected Compact but received Comfortable. Three unchanged focused repetitions passed, so repeating until green would conceal the race. A temporary probe waiting for the actual workspace heading reproduced the failure deterministically. `App.tsx` uses separate `/jobs` and `/jobs/:id` route elements; `JobTable` owns component-local density. Both are unchanged from the source checkpoint. The [P4-05 contract](../../phase-4/p4-05/README.md#density-contract) and its permanent unit test explicitly require reset on unmount. The browser test's comment claiming the table remained mounted was incorrect: an immediate Back sometimes beat the suspended route's commit. The permanent test now waits for the loaded workspace, uses browser Back, requires the original query and expects Comfortable. This also exposed **P5-00-D02**: browser Back does not restore row focus after the table actually unmounts. A second complete run reproduced this in all four theme/locale cases. The existing unit contract restores row focus through the workspace's **Back to applications** button, whose `close()` passes `focusJobId`; browser history returns to an earlier entry without that field. The browser test now additionally reopens the workspace and requires query and row focus after that explicit button. It retains the existing focus assertion on the actual supported path rather than claiming browser Back has that behavior. P5-00-D02 remains open for P5-03/08 navigation accessibility work; `App.tsx`, `JobTable` and `ApplicationWorkspacePage` are unchanged from the source checkpoint. It does not block unchanged shell migration, but browser-Back focus must not be called verified. The initial failures/probe are retained in `RESULTS.json`; no retry, exclusion or expected-failure annotation hides them. The full suite is rerun after this test-only correction. No density persistence or navigation application behavior is added here. Manual local browser review supplements Playwright: 320px Bokmål drawer labels, Tab focus ring above the dimmed header, Escape return; 768px dark Bokmål Settings title/header; dark command input→Tab→Escape with focus return; light English 1440px controls. Screen-reader AX observations are not an NVDA/Narrator session. Physical touch/software keyboard, native screen reader announcements, OS forced colors and 200%/400% browser zoom remain unverified operator checks, not passes. ## Visual and responsive evidence The final screenshot/result index is [RESULTS.json](RESULTS.json). Captures use synthetic local data; no authentication storage, browser traces, credentials or production content are committed. The index records exact test/state names and image hashes. Screenshots complement the native behavioral assertions, rather than proving ownership or persistence by appearance. | Theme / locale | Intermediate header | Focused phone navigation | Commands | Loaded Tooltip | Open phone toast | |---|---|---|---|---|---| | Light / English | [768px](visual/admin-768-light-en.png) | [320px](visual/drawer-light-en.png) | [Input focus](visual/commands-light-en.png) | [Redo](visual/redo-tooltip-light-en.png) | [320px](visual/open-toast-320-light-en.png) | | Light / Bokmål | [768px](visual/admin-768-light-nb.png) | [320px](visual/drawer-light-nb.png) | [Input focus](visual/commands-light-nb.png) | [Redo](visual/redo-tooltip-light-nb.png) | [320px](visual/open-toast-320-light-nb.png) | | Dark / English | [768px](visual/admin-768-dark-en.png) | [320px](visual/drawer-dark-en.png) | [Input focus](visual/commands-dark-en.png) | [Redo](visual/redo-tooltip-dark-en.png) | [320px](visual/open-toast-320-dark-en.png) | | Dark / Bokmål | [768px](visual/admin-768-dark-nb.png) | [320px](visual/drawer-dark-nb.png) | [Input focus](visual/commands-dark-nb.png) | [Redo](visual/redo-tooltip-dark-nb.png) | [320px](visual/open-toast-320-dark-nb.png) | Additional representative captures include 900/1440px headers, phone admin metadata, desktop open-toast placement and dirty-editor Cancel dialogs. Dirty-dialog filenames identify the starting theme; their capture occurs after the deliberate cross-tab theme switch, so the visible theme is the opposite one. The automated shell sweep checks **320, 390, 767, 768, 900, 1023, 1024 and 1440px**. Below 1024px there is one named temporary-navigation trigger; at/above 1024px there is one desktop collapse/expand control and a reachable permanent destination. The 768/900/1023px cases open and close the drawer by keyboard. Open-drawer resizing restores desktop accessibility, then phone reopen/Escape returns correctly. The populated workspace's original no-overflow assertions also run at 375/768/900/1023/1024/1440 in both themes. Review specifically retains the existing header control ordering, sidebar spacing/groups, provisional identity, Settings sections and bottom feedback presentation. The 768/900px layout keeps the page's full content width and readable labels. Mobile metadata remains available without occupying the logo row; its first actual action receives focus. The focused navigation outline is visible above the dimmed header. Connections and the toast close button are simultaneously visible and hit-testable. Existing desktop header wrapping, page styling, broad shell composition and command appearance are deferred to P5-01/02, not silently redesigned here. The final rebuilt open-toast phone images were inspected in all four theme/locale pairs, plus representative desktop pairs. Some post-axe dark/Bokmål desktop captures still show the previously recorded missing glyph/icon fragments; those images are incomplete visual evidence for typography/navigation rendering, not a pass for the affected pixels. Raw captures are retained, not retouched. Phone text/control views and native hit-test assertions remain separate evidence. Carry this known capture-quality limitation into P5-01 visual review; no speculative application repair was made. ## Final validation The complete baseline runs use the final application candidate. The earlier focused breakpoint proof is identified separately and its cases are repeated in the final main browser suite. No retry, skip or expected-failure annotation was added to conceal a new failure. | Check | Inherited | Final result / change | |---|---|---| | Backend Release tests | 916 passing | **915 pass / 1 fail / 916 total**; unchanged clock-dependent fixture P5-00-D01 below; no tests added/removed/skipped | | Frontend Jest | 354 / 75 suites | **359 / 76 suites pass**; +2 localized shell cases, +2 toast behavior cases, +1 command list case | | Main Chromium browser suite | 51 actual passes + P2-D01 expected failure | **66 actual passes + unchanged P2-D01 expected failure**, zero unexpected failures/skips/retries; reporter says 67 passed because it includes the expected failure. +15 cases (14 readiness journeys + one account-switch case), no inherited case removed | | Focused breakpoint/workspace proof, before final scroll-padding change | — | **5 pass**; four theme/locale shell journeys and the unchanged workspace overflow assertion with extra widths; repeated in the final main suite | | Focused final Tooltip/toast native-scroll proof | — | **4 pass**; all theme/locale pairs, each at 1440/390/320px while feedback is open | | B04 rate-limit HTTP suite | 9 | **9 pass** | | Production-mode ingress HTTP suite | 6 | **6 pass**; local API/proxy metadata proof, not deployed F04 closure | | B03 PDF admission HTTP suite | 1 | **1 pass** | | Effective Compose/configuration | 3 | **3 pass**, real Compose rendering plus adversarial mutations | | Standalone TypeScript / edited E2E typecheck / lint | Pass | **Pass**; historical TS2571 is absent, not an expected failure | | Frontend production / API Release builds | Pass | **Pass**; API zero warnings/errors | | Supply-chain script / model-evaluation harness / extension | 3 / 5 / 3 | **3 / 5 / 3 pass**; no live provider certification | | Secret / whitespace / current Markdown links | Pass | **Pass**; staged tracked-secret scan, working/staged whitespace checks, 132 current/root Markdown documents with zero missing local file targets | B01–B05 coverage remains in the executed backend and HTTP/browser suites: import destinations, ownership/session isolation, render admission, rate partitions and CSV export. The sole backend failure is identified below, not in those security contracts. Dependencies, package scripts, CI gates, auth, API and deployment configuration are unchanged. ### Commands Root commands (SDK path is this machine's existing SDK): ```powershell rtk proxy C:/Users/Connor/.dotnet/dotnet.exe test JobTrackerApi.Tests/JobTrackerApi.Tests.csproj --configuration Release --no-restore --logger "trx;LogFileName=p5-00.trx" --results-directory .artifacts/redesign-p5-00 -- xUnit.parallelizeTestCollections=false xUnit.maxParallelThreads=1 rtk proxy C:/Users/Connor/.dotnet/dotnet.exe build JobTrackerApi/JobTrackerApi.csproj --configuration Release --no-restore -warnaserror rtk proxy python scripts/test-ingress.py rtk proxy python scripts/test-supply-chain.py rtk proxy python scripts/test-ollama-evaluation.py rtk proxy node --test browser-extension/tests/*.test.mjs rtk proxy python scripts/supply-chain.py scan-secrets rtk proxy git diff --check rtk proxy git diff --cached --check rtk proxy python .artifacts/p4-04-check-doc-links.py ``` In `job-tracker-ui`, `DOTNET_ROOT=C:/Users/Connor/.dotnet`, `DOTNET_HOST_PATH=C:/Users/Connor/.dotnet/dotnet.exe`, `NEXT_PUBLIC_API_BASE_URL=http://localhost:5302/api`, `NEXT_TELEMETRY_DISABLED=1`, `PLAYWRIGHT_STATIC_EXPORT=true`, `PLAYWRIGHT_PREBUILT_EXPORT=true`: ```powershell rtk proxy npm test -- --runInBand --json --outputFile=../.artifacts/p5-00-jest.json rtk proxy npm run typecheck rtk proxy npm run lint rtk proxy npm run build rtk proxy node node_modules/typescript/bin/tsc --project ../.artifacts/p5-00-e2e-tsconfig.json --noEmit rtk proxy node node_modules/@playwright/test/cli.js test --grep "mobile labels|the dedicated application workspace" --reporter=list,json --output=../.artifacts/p5-00-resize-results rtk proxy node node_modules/@playwright/test/cli.js test e2e/table-density.spec.ts --reporter=list,json --output=../.artifacts/p5-00-density-final-results rtk proxy node node_modules/@playwright/test/cli.js test e2e/shell-readiness.spec.ts --grep "real Tooltip" --reporter=list,json --output=../.artifacts/p5-00-scroll-final-results rtk proxy node node_modules/@playwright/test/cli.js test --config=playwright.rate-limits.config.ts --reporter=list,json --output=../.artifacts/p5-00-rate-limits-results rtk proxy node node_modules/@playwright/test/cli.js test --config=playwright.ingress.config.ts --reporter=list,json --output=../.artifacts/p5-00-ingress-results rtk proxy node node_modules/@playwright/test/cli.js test --config=playwright.pdf.config.ts --reporter=list,json --output=../.artifacts/p5-00-pdf-results rtk proxy node node_modules/@playwright/test/cli.js test --reporter=list,json ``` Each Playwright run sets `PLAYWRIGHT_JSON_OUTPUT_FILE` to its `.artifacts/p5-00-{resize-final,density-final,scroll-padding-final,rate-limits,ingress,pdf,browser}.json` result. Security suites run sequentially against their own disposable API. The extra temporary E2E tsconfig extends the application's tsconfig, disables incremental output, sets Node types/typeRoots to the installed UI dependencies, and includes the six edited/new E2E specs plus `src/mui-theme.d.ts`; it changes no project/CI configuration. The existing local Markdown checker resolves relative file targets in current/root documents, excluding historical archives; it does not certify remote URLs or anchor correctness. In nested Windows PowerShell, `npm.cmd` runs the same npm scripts without depending on the host's `.ps1` execution policy. ### P5-00-D01 — unrelated date-dependent backend fixture On 2026-09-20 and again in the final 2026-09-21 run, the unchanged `BackgroundWorkerTenantTests.Rules_worker_uses_each_owners_settings_and_is_idempotent` fails at line 79: expected `Applied`, actual `Ghosted`. Its fixture seeds `DateApplied = FixedNow.AddDays(-30)` (2026-07-16), but the rules worker receives `TimeProvider.System`. The real clock has crossed the second owner's 60-day threshold. The production worker is applying that configured rule; this test mixes fixed data and a moving clock. The original P5-00 checkpoint executed all 916 tests: 915 passed, one failed, none skipped. The follow-up prerequisite checkpoint changed only this test to pass the already existing `MutableTimeProvider(FixedNow)` to the worker. The rerun passed **916/916** in 19 seconds. Production code, rules and schedules are unchanged; no skip or expected-failure annotation was added. This is distinct from P2-D01, SQLite write contention and the remaining P5-00-D02 Jobs browser-Back focus debt. An earlier overlapping API/build attempt encountered Windows apphost file locking. Runs were subsequently serialized. That tooling conflict is not the cause of the assertion above. The interrupted browser run was replaced by a complete final run, not combined into a fabricated aggregate. ## Deferred scope - F04/B06 production ingress evidence remains open: no host, firewall, DNS, TLS or deployed topology proof was collected. - P2-D01 remains the identified native SQLite package/tailoring expected failure. No archive success is claimed and its later assertions remain blocked. - P4-02-D02 company modal error feedback, D03 workspace progress scrolling, D04 literal AI context, P4-04-O02 SQLite contention, P4-05-O01 raw status/date localization remain separately scoped. - P5-00-D02: loaded Job Workspace → browser Back preserves the query but loses row focus. The explicit workspace Back button's focus contract is separately protected. Resolve browser-history focus before affected P5-03/08 navigation migration; no Jobs implementation was changed here. - CV revision integrity, rendering/margins/templates, package preservation and Table/Board query parity gates are unchanged. No backend/calendar/billing/worker redesign or B07 work. - The actual Redo Tooltip capture still shows the CV preview's horizontal-overflow warning. It is retained as G-CV-RENDER evidence, not hidden or treated as a tooltip failure; P5-00 does not certify preview geometry. - P5-01 owns visible grouped navigation; P5-02 owns command catalogue/presentation extensions and search error states. Dashboard/Jobs/CV visual redesign has not begun.