diff --git a/docs/ui-modernisation/UI-10.md b/docs/ui-modernisation/UI-10.md
index c88e4d54..cb128eaa 100644
--- a/docs/ui-modernisation/UI-10.md
+++ b/docs/ui-modernisation/UI-10.md
@@ -12,3 +12,9 @@
OPEN: granular per-user Ghosted pause lacks a persisted rules contract. Mounted AI entitlement refresh requires investigation that preserves current server authority and form lifetimes; blindly dispatching auth-changed resets authResolved and can unmount drafts. No inferred client-side entitlement grant or weakened auth guard is authorised as a shortcut. Native-language/human/device, real provider/model and hosted/production checks remain separate. The autonomous backlog orchestrator stays paused and untouched.
Initial bounded qualification: headline review caption fixed using the existing EN/NB label; fresh61 studio cases passed, including language-switch preservation. Combined with63 assets/attachments cases,124 distinct cases/three suites.16 controlled AI-review configurations/scans passed with zero writes and synthetic proposals only. Source census passed:57 unchanged preservation groups/34 registered route patterns; historical statuses not promoted. Independent review found no actionable issues. See CROSS_APP_LOCALISATION.md. Broader secondary-route/browser/combined qualification remains OPEN; this is not complete IM10 or a new acceptance request.
+
+Secondary checkpoint7aa54bff1fe376b798922b9da75feafa202dbb76 is published/remotely verified:85 cases/seven suites,16 controlled journeys/96 scoped scans,23 source/100 evidence hashes matched committed bytes. All57 preservation rows reconciled. See SECONDARY_VALIDATION.md and PRESERVATION_RECONCILIATION.md. Initial IM10 checkpointccf8d264 is also published/verified. No complete IM10 acceptance requested.
+
+Active bounded fix (uncommitted): AI privacy Save now invokes an optional refresh callback; App rereads /auth/me and updates only same-owner, validated plan/entitlements without resetting authResolved or dispatching auth-changed. Lifetime/session/sequence guards reject stale completion; general auth refresh invalidates the availability lane. Card distinguishes saved preferences from refresh failure and preserves its mounted draft.39 selected tests/three suites,types/lint/build passed; browser pilot is being corrected to respect existing API identity-mismatch invalidation (session reset, not an inline warning). Targeted malformed-entitlement and same-owner/no-reload journeys must pass before publication. No backend/model/provider changes. Do not discard the active regression/fix files or claim the display gap closed until its actual evidence is qualified.
+
+4 November successor: the owner added global flat visual correction and a whole-application definition of done. These extend approved IM10; earlier functional approvals remain evidence, not visual parity. Shared compact shell/open CV studio/flat continuous Settings sections are implemented. Mounted availability gap now has16 successful controlled journeys/64 scans with node/draft retention, malformed-grant rejection and wrong-identity session reset. CV visual matrix:36 configurations/108 scans/captures across all nine required widths, EN/NB and themes. Failed NB notice/tablet overlap attempts retained and fixed. Types/lint/build/census passed; independent source review found no actionable findings. The full34-route visual review, connected workflows, human/device/native language and final visual approval remain OPEN. See visual-correction/VALIDATION.md and DISCREPANCIES.md. Next eligible work: remaining route review and bounded remediation, beginning six secondary routes. Do not request final IM10 acceptance yet.
diff --git a/docs/ui-modernisation/a3-entitlement-boundary-tests.json b/docs/ui-modernisation/a3-entitlement-boundary-tests.json
new file mode 100644
index 00000000..f586ee88
--- /dev/null
+++ b/docs/ui-modernisation/a3-entitlement-boundary-tests.json
@@ -0,0 +1 @@
+{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":5,"numPassedTests":30,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":5,"numTotalTests":30,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793734802482,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":["account-scoped browser state"],"duration":365,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account-scoped browser state keeps saved views private to the account that created them","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793734807595,"status":"passed","title":"keeps saved views private to the account that created them"},{"ancestorTitles":["account-scoped browser state"],"duration":54,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account-scoped browser state does not show a previous account's cached companies after account switching","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793734807961,"status":"passed","title":"does not show a previous account's cached companies after account switching"}],"endTime":1793734808017,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\account-scoped-state.test.tsx","startTime":1793734804045,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":682,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en hybrid navigation has five labelled destinations and retains secondary tools","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793734808929,"status":"passed","title":"en hybrid navigation has five labelled destinations and retains secondary tools"},{"ancestorTitles":[],"duration":569,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb hybrid navigation has five labelled destinations and retains secondary tools","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793734809611,"status":"passed","title":"nb hybrid navigation has five labelled destinations and retains secondary tools"},{"ancestorTitles":[],"duration":366,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career/builder/42 selects its primary destination and keyboard route focus survives","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793734810181,"status":"passed","title":"/career/builder/42 selects its primary destination and keyboard route focus survives"},{"ancestorTitles":[],"duration":287,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/applications/42 selects its primary destination and keyboard route focus survives","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793734810547,"status":"passed","title":"/applications/42 selects its primary destination and keyboard route focus survives"},{"ancestorTitles":[],"duration":346,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/jobs/42 selects its primary destination and keyboard route focus survives","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793734810835,"status":"passed","title":"/jobs/42 selects its primary destination and keyboard route focus survives"},{"ancestorTitles":[],"duration":648,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"desktop retains labelled collapse, persistence, and all secondary destinations","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793734811182,"status":"passed","title":"desktop retains labelled collapse, persistence, and all secondary destinations"},{"ancestorTitles":[],"duration":531,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"choosing the current destination from More closes the drawer and focuses its heading","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793734811830,"status":"passed","title":"choosing the current destination from More closes the drawer and focuses its heading"}],"endTime":1793734812361,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\a3-navigation.test.tsx","startTime":1793734808033,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":25,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalidated session shows en feedback outside the private provider tree","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793734814607,"status":"passed","title":"invalidated session shows en feedback outside the private provider tree"},{"ancestorTitles":[],"duration":3,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalidated session shows nb-NO feedback outside the private provider tree","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793734814633,"status":"passed","title":"invalidated session shows nb-NO feedback outside the private provider tree"}],"endTime":1793734814637,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\session-boundary-message.test.tsx","startTime":1793734812374,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":484,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E07 E08 A03] en mobile names/current route ignore desktop collapse and retain metadata","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793734815485,"status":"passed","title":"[P5-00 PRES-E07 E08 A03] en mobile names/current route ignore desktop collapse and retain metadata"},{"ancestorTitles":[],"duration":826,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E07 E08 A03] nb mobile names/current route ignore desktop collapse and retain metadata","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793734815969,"status":"passed","title":"[P5-00 PRES-E07 E08 A03] nb mobile names/current route ignore desktop collapse and retain metadata"},{"ancestorTitles":[],"duration":235,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E08 S05] toast retains its full existing display duration and dismiss action","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793734816796,"status":"passed","title":"[P5-00 PRES-E08 S05] toast retains its full existing display duration and dismiss action"},{"ancestorTitles":[],"duration":54,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E08] toast action is explicit and executes once","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793734817031,"status":"passed","title":"[P5-00 PRES-E08] toast action is explicit and executes once"}],"endTime":1793734817089,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\shell-readiness.test.tsx","startTime":1793734814649,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":26,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"writes carry the page's server-issued context and preserve the same account","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793734817457,"status":"passed","title":"writes carry the page's server-issued context and preserve the same account"},{"ancestorTitles":[],"duration":25,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"cookie switch rejects a stale callback before transport and never adopts B's context","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793734817484,"status":"passed","title":"cookie switch rejects a stale callback before transport and never adopts B's context"},{"ancestorTitles":[],"duration":5,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"cross-tab storage event authUserKey invalidates and aborts outstanding requests","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793734817510,"status":"passed","title":"cross-tab storage event authUserKey invalidates and aborts outstanding requests"},{"ancestorTitles":[],"duration":4,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"cross-tab storage event authUserKey invalidates and aborts outstanding requests","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793734817515,"status":"passed","title":"cross-tab storage event authUserKey invalidates and aborts outstanding requests"},{"ancestorTitles":[],"duration":6,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"cross-tab storage event authSessionContext invalidates and aborts outstanding requests","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793734817519,"status":"passed","title":"cross-tab storage event authSessionContext invalidates and aborts outstanding requests"},{"ancestorTitles":[],"duration":6,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"cross-tab storage event null invalidates and aborts outstanding requests","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793734817525,"status":"passed","title":"cross-tab storage event null invalidates and aborts outstanding requests"},{"ancestorTitles":[],"duration":6,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"another session cannot be adopted even if the readable cookie signal is unchanged","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793734817531,"status":"passed","title":"another session cannot be adopted even if the readable cookie signal is unchanged"},{"ancestorTitles":[],"duration":4,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"same-account reauthentication also discards the old page","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793734817537,"status":"passed","title":"same-account reauthentication also discards the old page"},{"ancestorTitles":[],"duration":6,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a delayed private response cannot repopulate caches after invalidation","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793734817541,"status":"passed","title":"a delayed private response cannot repopulate caches after invalidation"},{"ancestorTitles":[],"duration":8,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a late bootstrap read/error cannot overwrite or sign out a newly bound session (error=false)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793734817548,"status":"passed","title":"a late bootstrap read/error cannot overwrite or sign out a newly bound session (error=false)"},{"ancestorTitles":[],"duration":5,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a late bootstrap read/error cannot overwrite or sign out a newly bound session (error=true)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793734817556,"status":"passed","title":"a late bootstrap read/error cannot overwrite or sign out a newly bound session (error=true)"},{"ancestorTitles":[],"duration":6,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"server precondition failure clears the page without silently retrying a mutation","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793734817561,"status":"passed","title":"server precondition failure clears the page without silently retrying a mutation"},{"ancestorTitles":[],"duration":5,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"BFCache restoration invalidates old private state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793734817568,"status":"passed","title":"BFCache restoration invalidates old private state"},{"ancestorTitles":[],"duration":3,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"anonymous public-page history does not require a new login","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793734817573,"status":"passed","title":"anonymous public-page history does not require a new login"},{"ancestorTitles":[],"duration":4,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"cookie fallback still works without a cross-tab storage event","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793734817576,"status":"passed","title":"cookie fallback still works without a cross-tab storage event"}],"endTime":1793734817581,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\session-boundary.test.ts","startTime":1793734817104,"status":"passed","summary":""}],"wasInterrupted":false}
diff --git a/docs/ui-modernisation/a3-entitlement-refresh-red.json b/docs/ui-modernisation/a3-entitlement-refresh-red.json
new file mode 100644
index 00000000..4f5e157c
--- /dev/null
+++ b/docs/ui-modernisation/a3-entitlement-refresh-red.json
@@ -0,0 +1 @@
+{"numFailedTestSuites":1,"numFailedTests":2,"numPassedTestSuites":0,"numPassedTests":2,"numPendingTestSuites":0,"numPendingTests":6,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":1,"numTotalTests":10,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793733960456,"success":false,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":4226,"failing":false,"failureDetails":[{"matcherResult":{"message":"expect(jest.fn()).toHaveBeenCalledTimes(expected)\n\nExpected number of calls: 1\nReceived number of calls: 0","pass":false}}],"failureMessages":["Error: expect(jest.fn()).toHaveBeenCalledTimes(expected)\n\nExpected number of calls: 1\nReceived number of calls: 0\n\nIgnored nodes: comments, script, style\n\u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[0mControl AI processing for your account. External processing is off unless both you and an administrator explicitly allow it.\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mApproved external processing may be used only for Pro tasks when server policy permits it.\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n\u001b[36m\u001b[39m\n at toHaveBeenCalledTimes (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\ai-privacy-settings.test.tsx:24:39)\n at runWithExpensiveErrorDiagnosticsDisabled (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\config.js:47:12)\n at checkCallback (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\wait-for.js:124:77)\n at checkRealTimersCallback (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\wait-for.js:118:16)\n at Timeout.task [as _onTimeout] (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jsdom\\lib\\jsdom\\browser\\Window.js:579:19)\n at listOnTimeout (node:internal/timers:635:17)\n at processTimers (node:internal/timers:571:7)"],"fullName":"a persisted AI preference refreshes server availability after the save acknowledgement","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793733965469,"status":"failed","title":"a persisted AI preference refreshes server availability after the save acknowledgement"},{"ancestorTitles":[],"duration":4093,"failing":false,"failureDetails":[{"matcherResult":{"message":"expect(jest.fn()).toHaveBeenCalledWith(...expected)\n\nExpected: undefined, \"warning\"\nReceived: \"AI privacy settings saved.\", \"success\"\n\nNumber of calls: 1","pass":false}}],"failureMessages":["Error: expect(jest.fn()).toHaveBeenCalledWith(...expected)\n\nExpected: undefined, \"warning\"\nReceived: \"AI privacy settings saved.\", \"success\"\n\nNumber of calls: 1\n\nIgnored nodes: comments, script, style\n\u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[0mControl AI processing for your account. External processing is off unless both you and an administrator explicitly allow it.\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mApproved external processing may be used only for Pro tasks when server policy permits it.\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n\u001b[36m\u001b[39m\n at toHaveBeenCalledWith (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\ai-privacy-settings.test.tsx:32:41)\n at runWithExpensiveErrorDiagnosticsDisabled (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\config.js:47:12)\n at checkCallback (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\wait-for.js:124:77)\n at checkRealTimersCallback (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\wait-for.js:118:16)\n at Timeout.task [as _onTimeout] (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jsdom\\lib\\jsdom\\browser\\Window.js:579:19)\n at listOnTimeout (node:internal/timers:635:17)\n at processTimers (node:internal/timers:571:7)"],"fullName":"availability refresh failure does not misreport an acknowledged save or repeat its write","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793733969711,"status":"failed","title":"availability refresh failure does not misreport an acknowledged save or repeat its write"},{"ancestorTitles":[],"duration":189,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed AI preference writes do not refresh availability","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793733973805,"status":"passed","title":"failed AI preference writes do not refresh availability"},{"ancestorTitles":[],"duration":70,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"an unmounted preference save cannot refresh a later account view","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793733973994,"status":"passed","title":"an unmounted preference save cannot refresh a later account view"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] failed initial read has a read-only Retry and no perpetual loading","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793733974064,"status":"pending","title":"[P7-09 privacy] failed initial read has a read-only Retry and no perpetual loading"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] submitted acknowledgement preserves a newer edit and serializes Save","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793733974064,"status":"pending","title":"[P7-09 privacy] submitted acknowledgement preserves a newer edit and serializes Save"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] a failed save retains the draft and never replays through read recovery","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793733974064,"status":"pending","title":"[P7-09 privacy] a failed save retains the draft and never replays through read recovery"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] unmount ignores an old save acknowledgement and success notification","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793733974064,"status":"pending","title":"[P7-09 privacy] unmount ignores an old save acknowledgement and success notification"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] pending save uses the current language without refetching the draft","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793733974064,"status":"pending","title":"[P7-09 privacy] pending save uses the current language without refetching the draft"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] local-only capability permits revoking a historical external consent","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793733974064,"status":"pending","title":"[P7-09 privacy] local-only capability permits revoking a historical external consent"}],"endTime":1793733974082,"message":" ● a persisted AI preference refreshes server availability after the save acknowledgement\n\n expect(jest.fn()).toHaveBeenCalledTimes(expected)\n\n Expected number of calls: 1\n Received number of calls: 0\n\n Ignored nodes: comments, script, style\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[0mControl AI processing for your account. External processing is off unless both you and an administrator explicitly allow it.\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mApproved external processing may be used only for Pro tasks when server policy permits it.\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n\n 22 | mount({ onSaved }); await screen.findByRole('switch', { name: translations.en.settingsAiEnabled });\n 23 | fireEvent.click(screen.getByRole('button', { name: translations.en.settingsAiSave }));\n > 24 | await waitFor(() => expect(onSaved).toHaveBeenCalledTimes(1)); expect(order).toEqual(['save', 'refresh']);\n | ^\n 25 | });\n 26 |\n 27 | test('availability refresh failure does not misreport an acknowledged save or repeat its write', async () => {\n\n at toHaveBeenCalledTimes (src/ai-privacy-settings.test.tsx:24:39)\n at runWithExpensiveErrorDiagnosticsDisabled (node_modules/@testing-library/dom/dist/config.js:47:12)\n at checkCallback (node_modules/@testing-library/dom/dist/wait-for.js:124:77)\n at checkRealTimersCallback (node_modules/@testing-library/dom/dist/wait-for.js:118:16)\n at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:579:19)\n\n ● availability refresh failure does not misreport an acknowledged save or repeat its write\n\n expect(jest.fn()).toHaveBeenCalledWith(...expected)\n\n Expected: undefined, \"warning\"\n Received: \"AI privacy settings saved.\", \"success\"\n\n Number of calls: 1\n\n Ignored nodes: comments, script, style\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[0mControl AI processing for your account. External processing is off unless both you and an administrator explicitly allow it.\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mApproved external processing may be used only for Pro tasks when server policy permits it.\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n\n 30 | mount({ onSaved }); await screen.findByRole('switch', { name: translations.en.settingsAiEnabled });\n 31 | fireEvent.click(screen.getByRole('button', { name: translations.en.settingsAiSave }));\n > 32 | await waitFor(() => expect(mockToast).toHaveBeenCalledWith(translations.en.settingsAiRefreshFailed, 'warning'));\n | ^\n 33 | expect(api.put).toHaveBeenCalledTimes(1); expect(screen.queryByText(translations.en.settingsAiSaveFailed)).not.toBeInTheDocument();\n 34 | });\n 35 |\n\n at toHaveBeenCalledWith (src/ai-privacy-settings.test.tsx:32:41)\n at runWithExpensiveErrorDiagnosticsDisabled (node_modules/@testing-library/dom/dist/config.js:47:12)\n at checkCallback (node_modules/@testing-library/dom/dist/wait-for.js:124:77)\n at checkRealTimersCallback (node_modules/@testing-library/dom/dist/wait-for.js:118:16)\n at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:579:19)\n","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\ai-privacy-settings.test.tsx","startTime":1793733961850,"status":"failed","summary":""}],"wasInterrupted":false}
diff --git a/docs/ui-modernisation/a3-entitlement-refresh-tests.json b/docs/ui-modernisation/a3-entitlement-refresh-tests.json
new file mode 100644
index 00000000..3225fef9
--- /dev/null
+++ b/docs/ui-modernisation/a3-entitlement-refresh-tests.json
@@ -0,0 +1 @@
+{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":3,"numPassedTests":39,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":3,"numTotalTests":39,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793734169783,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":263,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a persisted AI preference refreshes server availability after the save acknowledgement","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793734175544,"status":"passed","title":"a persisted AI preference refreshes server availability after the save acknowledgement"},{"ancestorTitles":[],"duration":125,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"availability refresh failure does not misreport an acknowledged save or repeat its write","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793734175808,"status":"passed","title":"availability refresh failure does not misreport an acknowledged save or repeat its write"},{"ancestorTitles":[],"duration":131,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed AI preference writes do not refresh availability","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793734175934,"status":"passed","title":"failed AI preference writes do not refresh availability"},{"ancestorTitles":[],"duration":78,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"an unmounted preference save cannot refresh a later account view","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793734176065,"status":"passed","title":"an unmounted preference save cannot refresh a later account view"},{"ancestorTitles":[],"duration":133,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] failed initial read has a read-only Retry and no perpetual loading","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793734176143,"status":"passed","title":"[P7-09 privacy] failed initial read has a read-only Retry and no perpetual loading"},{"ancestorTitles":[],"duration":131,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] submitted acknowledgement preserves a newer edit and serializes Save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793734176276,"status":"passed","title":"[P7-09 privacy] submitted acknowledgement preserves a newer edit and serializes Save"},{"ancestorTitles":[],"duration":128,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] a failed save retains the draft and never replays through read recovery","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793734176407,"status":"passed","title":"[P7-09 privacy] a failed save retains the draft and never replays through read recovery"},{"ancestorTitles":[],"duration":60,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] unmount ignores an old save acknowledgement and success notification","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793734176535,"status":"passed","title":"[P7-09 privacy] unmount ignores an old save acknowledgement and success notification"},{"ancestorTitles":[],"duration":109,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] pending save uses the current language without refetching the draft","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793734176595,"status":"passed","title":"[P7-09 privacy] pending save uses the current language without refetching the draft"},{"ancestorTitles":[],"duration":60,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] local-only capability permits revoking a historical external consent","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793734176705,"status":"passed","title":"[P7-09 privacy] local-only capability permits revoking a historical external consent"}],"endTime":1793734176767,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\ai-privacy-settings.test.tsx","startTime":1793734171233,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":148,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account data entry selects a supported initial section (data)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793734178665,"status":"passed","title":"account data entry selects a supported initial section (data)"},{"ancestorTitles":[],"duration":316,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account data entry selects a supported initial section (unknown)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793734178814,"status":"passed","title":"account data entry selects a supported initial section (unknown)"},{"ancestorTitles":[],"duration":1139,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"each selected Settings section has a named panel linked to its tab and remains selectable on phones","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793734179130,"status":"passed","title":"each selected Settings section has a named panel linked to its tab and remains selectable on phones"},{"ancestorTitles":[],"duration":709,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"settings view has no accent picker and uses one follow-up section, one notification section","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793734180269,"status":"passed","title":"settings view has no accent picker and uses one follow-up section, one notification section"},{"ancestorTitles":[],"duration":257,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AI privacy settings are server-backed and external processing is local-only by default","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793734180978,"status":"passed","title":"AI privacy settings are server-backed and external processing is local-only by default"},{"ancestorTitles":[],"duration":4560,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] failed notification save preserves the draft for an explicit retry","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793734181236,"status":"passed","title":"[PRES-S03] failed notification save preserves the draft for an explicit retry"},{"ancestorTitles":[],"duration":728,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 PRES-W11] saving one follow-up rule preserves the other scenarios","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793734185797,"status":"passed","title":"[PRES-S03 PRES-W11] saving one follow-up rule preserves the other scenarios"},{"ancestorTitles":[],"duration":465,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 PRES-J05] table and theme preferences keep their independent callbacks","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793734186526,"status":"passed","title":"[PRES-S03 PRES-J05] table and theme preferences keep their independent callbacks"},{"ancestorTitles":[],"duration":1009,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 W11] the Settings session retains independent pending Rules fields across tab unmounts","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793734186992,"status":"passed","title":"[PRES-S03 W11] the Settings session retains independent pending Rules fields across tab unmounts"},{"ancestorTitles":[],"duration":1472,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] failed Rules save remains actionable after tab return and explicit retry clears dirty state","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793734188001,"status":"passed","title":"[PRES-S03] failed Rules save remains actionable after tab return and explicit retry clears dirty state"},{"ancestorTitles":[],"duration":1618,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] invalid and empty Rules input and associated validation survive internal navigation","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793734189473,"status":"passed","title":"[PRES-S03] invalid and empty Rules input and associated validation survive internal navigation"},{"ancestorTitles":[],"duration":831,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] explicit discard resets only the Rules draft to its saved baseline without writing","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793734191091,"status":"passed","title":"[PRES-S03] explicit discard resets only the Rules draft to its saved baseline without writing"},{"ancestorTitles":[],"duration":1271,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] later edits stay dirty when an earlier Rules save completes after a tab switch","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793734191922,"status":"passed","title":"[PRES-S03] later edits stay dirty when an earlier Rules save completes after a tab switch"},{"ancestorTitles":[],"duration":994,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 E09] leaving the Settings session disposes its draft and pending responses","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793734193193,"status":"passed","title":"[PRES-S03 E09] leaving the Settings session disposes its draft and pending responses"},{"ancestorTitles":[],"duration":912,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] switching locale while Rules is hidden does not reload or overwrite its pending draft","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793734194187,"status":"passed","title":"[PRES-S03] switching locale while Rules is hidden does not reload or overwrite its pending draft"},{"ancestorTitles":[],"duration":612,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] Rules draft updates do not refetch an unrelated notification preference","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793734195099,"status":"passed","title":"[PRES-S03] Rules draft updates do not refetch an unrelated notification preference"},{"ancestorTitles":[],"duration":794,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en Automation reuses the saved notification preference and explicit save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793734195711,"status":"passed","title":"en Automation reuses the saved notification preference and explicit save"},{"ancestorTitles":[],"duration":823,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb Automation reuses the saved notification preference and explicit save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793734196505,"status":"passed","title":"nb Automation reuses the saved notification preference and explicit save"},{"ancestorTitles":[],"duration":504,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Automation AI entry moves focus into existing settings without an AI request","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793734197329,"status":"passed","title":"Automation AI entry moves focus into existing settings without an AI request"},{"ancestorTitles":[],"duration":592,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] initial notification failure offers a single GET Retry and recovers its vanished focused action","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793734197833,"status":"passed","title":"[P7-09 preferences] initial notification failure offers a single GET Retry and recovers its vanished focused action"},{"ancestorTitles":[],"duration":1232,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] notification drafts survive internal sections and locale changes without a GET or save","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793734198426,"status":"passed","title":"[P7-09 preferences] notification drafts survive internal sections and locale changes without a GET or save"},{"ancestorTitles":[],"duration":1503,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] one held notification save acknowledges its snapshot and preserves later edits across sections","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793734199658,"status":"passed","title":"[P7-09 preferences] one held notification save acknowledges its snapshot and preserves later edits across sections"},{"ancestorTitles":[],"duration":1055,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] failed notification save keeps its current-locale draft and retries only the original Save","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793734201161,"status":"passed","title":"[P7-09 preferences] failed notification save keeps its current-locale draft and retries only the original Save"},{"ancestorTitles":[],"duration":1006,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] discarding a notification draft leaves the independent Rules draft untouched","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793734202216,"status":"passed","title":"[P7-09 preferences] discarding a notification draft leaves the independent Rules draft untouched"},{"ancestorTitles":[],"duration":940,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] a disposed notification save cannot publish into surviving providers or a new Settings session","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793734203222,"status":"passed","title":"[P7-09 preferences] a disposed notification save cannot publish into surviving providers or a new Settings session"},{"ancestorTitles":[],"duration":740,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] Rules load failure follows locale without reloading and Retry retains the six-field contract","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793734204162,"status":"passed","title":"[P7-09 preferences] Rules load failure follows locale without reloading and Retry retains the six-field contract"}],"endTime":1793734204903,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\settings-view.test.tsx","startTime":1793734176784,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":14,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"English and Bokmål expose the same UI message keys","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793734205288,"status":"passed","title":"English and Bokmål expose the same UI message keys"},{"ancestorTitles":[],"duration":7,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Bokmål preserves every English substitution variable","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793734205302,"status":"passed","title":"Bokmål preserves every English substitution variable"},{"ancestorTitles":[],"duration":3,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"supported UI catalogues contain no blank messages","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793734205309,"status":"passed","title":"supported UI catalogues contain no blank messages"}],"endTime":1793734205313,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\translation-catalogue.test.ts","startTime":1793734204919,"status":"passed","summary":""}],"wasInterrupted":false}
diff --git a/docs/ui-modernisation/evidence/cross-app/PRESERVATION_CENSUS.json b/docs/ui-modernisation/evidence/cross-app/PRESERVATION_CENSUS.json
index 2bc82b7e..69957fdf 100644
--- a/docs/ui-modernisation/evidence/cross-app/PRESERVATION_CENSUS.json
+++ b/docs/ui-modernisation/evidence/cross-app/PRESERVATION_CENSUS.json
@@ -1,7 +1,7 @@
{
"base": "d3d338376444b8abdcaf7200f682faa3daf1ad10",
"policy": "Source membership and unchanged criteria only; no acceptance promotion.",
- "sourceSha256": "a176e52d81c4b6ded63c5f38cb27e853aa09312f2cc45fc7e5b5e44573e0fef3",
+ "sourceSha256": "d0dedb54af35b312d7f9194f74f8db8a493375b6397b52a87872f498ab0b0dd4",
"registerSha256": "a4c2a5a0244ea89381008218de32daee1f615a250eb3808b60e0ee103c674d4d",
"groups": [
{
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/BROWSER-A11Y-FAILURE.json b/docs/ui-modernisation/evidence/entitlement-refresh/browser/BROWSER-A11Y-FAILURE.json
new file mode 100644
index 00000000..253e4b3e
--- /dev/null
+++ b/docs/ui-modernisation/evidence/entitlement-refresh/browser/BROWSER-A11Y-FAILURE.json
@@ -0,0 +1,260 @@
+{
+ "screens": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "light",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "light",
+ "state": "malformed-grant-rejected",
+ "violations": [
+ {
+ "id": "scrollable-region-focusable",
+ "impact": "serious",
+ "tags": [
+ "cat.keyboard",
+ "wcag2a",
+ "wcag211",
+ "wcag213",
+ "TTv5",
+ "TT4.a",
+ "EN-301-549",
+ "EN-9.2.1.1",
+ "EN-9.2.1.3",
+ "RGAAv4",
+ "RGAA-7.3.2"
+ ],
+ "description": "Ensure elements that have scrollable content are accessible by keyboard in Safari",
+ "help": "Scrollable region must have keyboard access",
+ "helpUrl": "https://dequeuniversity.com/rules/axe/4.13/scrollable-region-focusable?application=playwright",
+ "nodes": [
+ {
+ "any": [
+ {
+ "id": "focusable-content",
+ "data": null,
+ "relatedNodes": [],
+ "impact": "serious",
+ "message": "Element should have focusable content"
+ },
+ {
+ "id": "focusable-element",
+ "data": null,
+ "relatedNodes": [],
+ "impact": "serious",
+ "message": "Element should be focusable"
+ }
+ ],
+ "all": [],
+ "none": [],
+ "impact": "serious",
+ "html": "
KI-hjelp er utilgjengelig Du kan fortsette å redigere manuelt. Se gjennom KI-innstillingene og forbruket ditt før du prøver igjen.
",
+ "target": [
+ ".css-xf0dje > .MuiAlert-message.css-127h8j3"
+ ],
+ "failureSummary": "Fix any of the following:\n Element should have focusable content\n Element should be focusable"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "journeys": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ }
+ ],
+ "errors": [],
+ "unexpectedWrites": [],
+ "preferenceWrites": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "light",
+ "enabled": true
+ }
+ ],
+ "wrongIdentities": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light"
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark"
+ }
+ ],
+ "malformedEntitlements": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light"
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark"
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "light"
+ }
+ ],
+ "previewReads": 5,
+ "blockedExternal": [
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com"
+ ],
+ "unavailableReads": [
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview"
+ ],
+ "limits": [
+ "Preferences, identity and preview responses are fixtures. No model/provider activation, real entitlement/security/production qualification.",
+ "Only the expected synthetic privacy PUTs are accepted; no generation/apply/document/canonical-profile writes."
+ ]
+}
\ No newline at end of file
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/BROWSER.json b/docs/ui-modernisation/evidence/entitlement-refresh/browser/BROWSER.json
new file mode 100644
index 00000000..8736c20b
--- /dev/null
+++ b/docs/ui-modernisation/evidence/entitlement-refresh/browser/BROWSER.json
@@ -0,0 +1,1255 @@
+{
+ "screens": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "light",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "light",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "light",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "light",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "dark",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "dark",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "dark",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "dark",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "light",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "light",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "light",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "light",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "dark",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "dark",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "dark",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "dark",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "light",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "light",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "light",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "light",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "dark",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "dark",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "dark",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "dark",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "light",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "light",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "light",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "light",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "dark",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "dark",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "dark",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "dark",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "light",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "light",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "light",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "light",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "dark",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "dark",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "dark",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "dark",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "light",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "light",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "light",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "light",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "dark",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "dark",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "dark",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "dark",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "light",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "light",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "light",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "light",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "dark",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "dark",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "dark",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "dark",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ }
+ ],
+ "journeys": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "light",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "dark",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "light",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "dark",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "light",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "dark",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "light",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "dark",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "light",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "dark",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "light",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "dark",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "light",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "dark",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ }
+ ],
+ "errors": [],
+ "unexpectedWrites": [],
+ "preferenceWrites": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "dark",
+ "enabled": false
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "dark",
+ "enabled": true
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "dark",
+ "enabled": false
+ }
+ ],
+ "wrongIdentities": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light"
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark"
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "light"
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "dark"
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "light"
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "dark"
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "light"
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "dark"
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "light"
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "dark"
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "light"
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "dark"
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "light"
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "dark"
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "light"
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "dark"
+ }
+ ],
+ "malformedEntitlements": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light"
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "dark"
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "light"
+ },
+ {
+ "width": 320,
+ "language": "nb",
+ "mode": "dark"
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "light"
+ },
+ {
+ "width": 390,
+ "language": "en",
+ "mode": "dark"
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "light"
+ },
+ {
+ "width": 390,
+ "language": "nb",
+ "mode": "dark"
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "light"
+ },
+ {
+ "width": 768,
+ "language": "en",
+ "mode": "dark"
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "light"
+ },
+ {
+ "width": 768,
+ "language": "nb",
+ "mode": "dark"
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "light"
+ },
+ {
+ "width": 1440,
+ "language": "en",
+ "mode": "dark"
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "light"
+ },
+ {
+ "width": 1440,
+ "language": "nb",
+ "mode": "dark"
+ }
+ ],
+ "previewReads": 32,
+ "blockedExternal": [
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com"
+ ],
+ "unavailableReads": [
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview",
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview"
+ ],
+ "limits": [
+ "Preferences, identity and preview responses are fixtures. No model/provider activation, real entitlement/security/production qualification.",
+ "Only the expected synthetic privacy PUTs are accepted; no generation/apply/document/canonical-profile writes."
+ ]
+}
\ No newline at end of file
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/PILOT-IDENTITY-EXPECTATION.json b/docs/ui-modernisation/evidence/entitlement-refresh/browser/PILOT-IDENTITY-EXPECTATION.json
new file mode 100644
index 00000000..b184a5b8
--- /dev/null
+++ b/docs/ui-modernisation/evidence/entitlement-refresh/browser/PILOT-IDENTITY-EXPECTATION.json
@@ -0,0 +1,47 @@
+{
+ "screens": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "state": "saved-without-unmount",
+ "violations": []
+ }
+ ],
+ "journeys": [],
+ "errors": [],
+ "unexpectedWrites": [],
+ "preferenceWrites": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "enabled": true
+ }
+ ],
+ "wrongIdentities": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light"
+ }
+ ],
+ "previewReads": 0,
+ "blockedExternal": [
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com"
+ ],
+ "unavailableReads": [
+ "/api/companies"
+ ],
+ "limits": [
+ "Preferences, identity and preview responses are fixtures. No model/provider activation, real entitlement/security/production qualification.",
+ "Only the expected synthetic privacy PUTs are accepted; no generation/apply/document/canonical-profile writes."
+ ]
+}
\ No newline at end of file
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/PILOT.json b/docs/ui-modernisation/evidence/entitlement-refresh/browser/PILOT.json
new file mode 100644
index 00000000..db209ef4
--- /dev/null
+++ b/docs/ui-modernisation/evidence/entitlement-refresh/browser/PILOT.json
@@ -0,0 +1,100 @@
+{
+ "screens": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "state": "saved-without-unmount",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "state": "malformed-grant-rejected",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "state": "same-owner-refreshed",
+ "violations": []
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "state": "wrong-owner-session-reset",
+ "violations": []
+ }
+ ],
+ "journeys": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "formNodeAndDraftRetained": "PASS",
+ "malformedGrantRejected": "PASS",
+ "wrongIdentityResetsPrivateSession": "PASS",
+ "validServerAvailabilityWithoutReload": "PASS",
+ "noInference": "PASS"
+ }
+ ],
+ "errors": [],
+ "unexpectedWrites": [],
+ "preferenceWrites": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "enabled": false
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "enabled": true
+ },
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light",
+ "enabled": false
+ }
+ ],
+ "wrongIdentities": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light"
+ }
+ ],
+ "malformedEntitlements": [
+ {
+ "width": 320,
+ "language": "en",
+ "mode": "light"
+ }
+ ],
+ "previewReads": 2,
+ "blockedExternal": [
+ "https://fonts.googleapis.com",
+ "https://fonts.googleapis.com"
+ ],
+ "unavailableReads": [
+ "/api/companies",
+ "/api/cv/themes/modern/preview",
+ "/api/cv/themes/modern/preview"
+ ],
+ "limits": [
+ "Preferences, identity and preview responses are fixtures. No model/provider activation, real entitlement/security/production qualification.",
+ "Only the expected synthetic privacy PUTs are accepted; no generation/apply/document/canonical-profile writes."
+ ]
+}
\ No newline at end of file
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-dark-1440.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-dark-1440.png
new file mode 100644
index 00000000..a601fc64
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-dark-1440.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-dark-320.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-dark-320.png
new file mode 100644
index 00000000..5496756c
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-dark-320.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-dark-390.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-dark-390.png
new file mode 100644
index 00000000..e2f1773e
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-dark-390.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-dark-768.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-dark-768.png
new file mode 100644
index 00000000..5ac40eab
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-dark-768.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-light-1440.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-light-1440.png
new file mode 100644
index 00000000..667b0a6e
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-light-1440.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-light-320.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-light-320.png
new file mode 100644
index 00000000..07251d04
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-light-320.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-light-390.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-light-390.png
new file mode 100644
index 00000000..d6a1c13f
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-light-390.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-light-768.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-light-768.png
new file mode 100644
index 00000000..72bb2467
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-light-768.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-dark-1440.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-dark-1440.png
new file mode 100644
index 00000000..3f302a53
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-dark-1440.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-dark-320.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-dark-320.png
new file mode 100644
index 00000000..97b68afb
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-dark-320.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-dark-390.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-dark-390.png
new file mode 100644
index 00000000..27a608ee
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-dark-390.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-dark-768.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-dark-768.png
new file mode 100644
index 00000000..9ee60187
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-dark-768.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-light-1440.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-light-1440.png
new file mode 100644
index 00000000..f5537dda
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-light-1440.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-light-320.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-light-320.png
new file mode 100644
index 00000000..85b9373f
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-light-320.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-light-390.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-light-390.png
new file mode 100644
index 00000000..03524752
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-light-390.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-light-768.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-light-768.png
new file mode 100644
index 00000000..f2baa406
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-light-768.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-dark-1440.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-dark-1440.png
new file mode 100644
index 00000000..0b2e6936
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-dark-1440.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-dark-320.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-dark-320.png
new file mode 100644
index 00000000..c949640c
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-dark-320.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-dark-390.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-dark-390.png
new file mode 100644
index 00000000..9503753c
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-dark-390.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-dark-768.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-dark-768.png
new file mode 100644
index 00000000..df7bc186
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-dark-768.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-light-1440.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-light-1440.png
new file mode 100644
index 00000000..90b302c4
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-light-1440.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-light-320.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-light-320.png
new file mode 100644
index 00000000..46cad809
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-light-320.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-light-390.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-light-390.png
new file mode 100644
index 00000000..6e3db06d
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-light-390.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-light-768.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-light-768.png
new file mode 100644
index 00000000..864ac782
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-light-768.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-dark-1440.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-dark-1440.png
new file mode 100644
index 00000000..8d8e71b8
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-dark-1440.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-dark-320.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-dark-320.png
new file mode 100644
index 00000000..c89409df
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-dark-320.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-dark-390.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-dark-390.png
new file mode 100644
index 00000000..e97f9c87
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-dark-390.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-dark-768.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-dark-768.png
new file mode 100644
index 00000000..bc766f6c
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-dark-768.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-light-1440.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-light-1440.png
new file mode 100644
index 00000000..cbcd25fc
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-light-1440.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-light-320.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-light-320.png
new file mode 100644
index 00000000..989f30ba
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-light-320.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-light-390.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-light-390.png
new file mode 100644
index 00000000..c7a47365
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-light-390.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-light-768.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-light-768.png
new file mode 100644
index 00000000..376eddb5
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-light-768.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-dark-1440.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-dark-1440.png
new file mode 100644
index 00000000..5f212440
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-dark-1440.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-dark-320.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-dark-320.png
new file mode 100644
index 00000000..34607999
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-dark-320.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-dark-390.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-dark-390.png
new file mode 100644
index 00000000..190bb94c
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-dark-390.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-dark-768.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-dark-768.png
new file mode 100644
index 00000000..d1bac492
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-dark-768.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-light-1440.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-light-1440.png
new file mode 100644
index 00000000..615ca4cb
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-light-1440.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-light-320.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-light-320.png
new file mode 100644
index 00000000..3976017b
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-light-320.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-light-390.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-light-390.png
new file mode 100644
index 00000000..1c9618e4
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-light-390.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-light-768.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-light-768.png
new file mode 100644
index 00000000..f5abef7a
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-light-768.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-dark-1440.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-dark-1440.png
new file mode 100644
index 00000000..7889b190
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-dark-1440.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-dark-320.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-dark-320.png
new file mode 100644
index 00000000..d628b39e
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-dark-320.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-dark-390.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-dark-390.png
new file mode 100644
index 00000000..488972cd
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-dark-390.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-dark-768.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-dark-768.png
new file mode 100644
index 00000000..2bbf9ae8
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-dark-768.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-light-1440.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-light-1440.png
new file mode 100644
index 00000000..0b36f774
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-light-1440.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-light-320.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-light-320.png
new file mode 100644
index 00000000..efdc97cc
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-light-320.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-light-390.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-light-390.png
new file mode 100644
index 00000000..989af6b2
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-light-390.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-light-768.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-light-768.png
new file mode 100644
index 00000000..26b3512e
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-light-768.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-dark-1440.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-dark-1440.png
new file mode 100644
index 00000000..d2dd98a9
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-dark-1440.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-dark-320.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-dark-320.png
new file mode 100644
index 00000000..585db09f
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-dark-320.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-dark-390.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-dark-390.png
new file mode 100644
index 00000000..669310fd
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-dark-390.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-dark-768.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-dark-768.png
new file mode 100644
index 00000000..78dbe0d7
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-dark-768.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-light-1440.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-light-1440.png
new file mode 100644
index 00000000..73900f53
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-light-1440.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-light-320.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-light-320.png
new file mode 100644
index 00000000..4eff377f
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-light-320.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-light-390.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-light-390.png
new file mode 100644
index 00000000..61527e96
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-light-390.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-light-768.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-light-768.png
new file mode 100644
index 00000000..53f878a6
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-light-768.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-dark-1440.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-dark-1440.png
new file mode 100644
index 00000000..ef1f967a
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-dark-1440.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-dark-320.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-dark-320.png
new file mode 100644
index 00000000..4153501c
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-dark-320.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-dark-390.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-dark-390.png
new file mode 100644
index 00000000..edcd575b
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-dark-390.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-dark-768.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-dark-768.png
new file mode 100644
index 00000000..f3984801
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-dark-768.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-light-1440.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-light-1440.png
new file mode 100644
index 00000000..87beb7ea
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-light-1440.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-light-320.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-light-320.png
new file mode 100644
index 00000000..12075dd0
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-light-320.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-light-390.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-light-390.png
new file mode 100644
index 00000000..6ef2c2d5
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-light-390.png differ
diff --git a/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-light-768.png b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-light-768.png
new file mode 100644
index 00000000..acfbc0f7
Binary files /dev/null and b/docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-light-768.png differ
diff --git a/docs/ui-modernisation/visual-correction/COMBINED_TESTS.json b/docs/ui-modernisation/visual-correction/COMBINED_TESTS.json
new file mode 100644
index 00000000..3f0931fc
--- /dev/null
+++ b/docs/ui-modernisation/visual-correction/COMBINED_TESTS.json
@@ -0,0 +1 @@
+{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":13,"numPassedTests":147,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":13,"numTotalTests":147,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793747874876,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":1274,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Strict Mode groups a typing burst into one undo step and preserves redo through autosave","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747878528,"status":"passed","title":"Strict Mode groups a typing burst into one undo step and preserves redo through autosave"},{"ancestorTitles":[],"duration":721,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a pause between typing bursts leaves a separate undo step","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747879802,"status":"passed","title":"a pause between typing bursts leaves a separate undo step"},{"ancestorTitles":[],"duration":206,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"tablet width keeps both editing and preview available in the stacked document flow","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747880523,"status":"passed","title":"tablet width keeps both editing and preview available in the stacked document flow"},{"ancestorTitles":[],"duration":891,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"mobile studio navigation exposes complete section labels and retains edits across preview and history","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793747880729,"status":"passed","title":"mobile studio navigation exposes complete section labels and retains edits across preview and history"},{"ancestorTitles":[],"duration":887,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"document shortcuts undo and redo renaming, preserve native input undo and discard branched redo","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747881620,"status":"passed","title":"document shortcuts undo and redo renaming, preserve native input undo and discard branched redo"},{"ancestorTitles":[],"duration":490,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a revision conflict disables document history without silently writing an undo","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747882507,"status":"passed","title":"a revision conflict disables document history without silently writing an undo"},{"ancestorTitles":[],"duration":780,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"switching documents hides the previous draft while loading and starts fresh history","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747882997,"status":"passed","title":"switching documents hides the previous draft while loading and starts fresh history"},{"ancestorTitles":[],"duration":597,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"explicit blank editing excludes master content and includes a profile section only after an Add action","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747883777,"status":"passed","title":"explicit blank editing excludes master content and includes a profile section only after an Add action"},{"ancestorTitles":[],"duration":510,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a blank CV can deliberately add an additional Career Profile section","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747884374,"status":"passed","title":"a blank CV can deliberately add an additional Career Profile section"},{"ancestorTitles":[],"duration":930,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a historical restore response from the previous document cannot change the newly opened CV","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747884884,"status":"passed","title":"a historical restore response from the previous document cannot change the newly opened CV"},{"ancestorTitles":[],"duration":279,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"content sections follow the editing-region heading without mutating CV settings","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747885814,"status":"passed","title":"content sections follow the editing-region heading without mutating CV settings"},{"ancestorTitles":[],"duration":376,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"settings history explains current Career Profile resolution without writing data","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747886093,"status":"passed","title":"settings history explains current Career Profile resolution without writing data"},{"ancestorTitles":[],"duration":603,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"PDF export locks immediately, rejects a newer unsaved draft, and keeps that draft recoverable","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747886469,"status":"passed","title":"PDF export locks immediately, rejects a newer unsaved draft, and keeps that draft recoverable"},{"ancestorTitles":[],"duration":630,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"edits during a held PDF response prevent an older document download","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747887073,"status":"passed","title":"edits during a held PDF response prevent an older document download"},{"ancestorTitles":[],"duration":533,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"moving a section to the first position announces its actual order and focuses its row","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747887703,"status":"passed","title":"moving a section to the first position announces its actual order and focuses its row"},{"ancestorTitles":[],"duration":2652,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"section navigation opens and focuses omitted/custom sections without changing their data","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793747888237,"status":"passed","title":"section navigation opens and focuses omitted/custom sections without changing their data"},{"ancestorTitles":[],"duration":814,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keyboard move controls retain focus and persist the same section order shown by navigation","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747890889,"status":"passed","title":"keyboard move controls retain focus and persist the same section order shown by navigation"},{"ancestorTitles":[],"duration":630,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"secondary duplicate action saves the current draft before creating the copy","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747891703,"status":"passed","title":"secondary duplicate action saves the current draft before creating the copy"},{"ancestorTitles":[],"duration":396,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pane navigation focuses the existing preview without changing the pending draft","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747892333,"status":"passed","title":"pane navigation focuses the existing preview without changing the pending draft"},{"ancestorTitles":[],"duration":117,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"deep link loads the exact variant named in the route","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747892729,"status":"passed","title":"deep link loads the exact variant named in the route"},{"ancestorTitles":[],"duration":24,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a variant that does not exist shows a safe error instead of an empty editor","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747892846,"status":"passed","title":"a variant that does not exist shows a safe error instead of an empty editor"},{"ancestorTitles":[],"duration":39,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"another user's variant is refused by the server and never rendered","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747892870,"status":"passed","title":"another user's variant is refused by the server and never rendered"},{"ancestorTitles":[],"duration":34,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a denied CV read has localized permission context without a write or retry","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747892909,"status":"passed","title":"a denied CV read has localized permission context without a write or retry"},{"ancestorTitles":[],"duration":303,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a temporary CV opening failure retries reads and restores focus to the editor without saving","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747892943,"status":"passed","title":"a temporary CV opening failure retries reads and restores focus to the editor without saving"},{"ancestorTitles":[],"duration":545,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Bokmål history localizes known sources while preserving unknown metadata and versions","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793747893246,"status":"passed","title":"Bokmål history localizes known sources while preserving unknown metadata and versions"},{"ancestorTitles":[],"duration":279,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid names are explained and are not silently autosaved","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747893791,"status":"passed","title":"invalid names are explained and are not silently autosaved"},{"ancestorTitles":[],"duration":819,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed autosave is visible and can be retried with the latest data","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747894070,"status":"passed","title":"failed autosave is visible and can be retried with the latest data"},{"ancestorTitles":[],"duration":859,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"session undo and redo restore content edits before autosave","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793747894889,"status":"passed","title":"session undo and redo restore content edits before autosave"},{"ancestorTitles":[],"duration":686,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"queued saves use acknowledged server versions without replacing newer local editing state","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747895748,"status":"passed","title":"queued saves use acknowledged server versions without replacing newer local editing state"},{"ancestorTitles":[],"duration":1724,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"revision conflict retains the draft and blocks later autosaves until explicit reload","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793747896434,"status":"passed","title":"revision conflict retains the draft and blocks later autosaves until explicit reload"},{"ancestorTitles":[],"duration":1141,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"edits made while a confirmed reload is in flight remain recoverable","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747898158,"status":"passed","title":"edits made while a confirmed reload is in flight remain recoverable"},{"ancestorTitles":[],"duration":1192,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"restoring history uses the current version and never replaces edits made during the request","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793747899299,"status":"passed","title":"restoring history uses the current version and never replaces edits made during the request"},{"ancestorTitles":[],"duration":805,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Content is the primary studio panel and all advanced tabs retain their controls","invocations":1,"location":null,"numPassingAsserts":14,"retryReasons":[],"startAt":1793747900491,"status":"passed","title":"Content is the primary studio panel and all advanced tabs retain their controls"},{"ancestorTitles":[],"duration":1208,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"choosing a template restores its own structure instead of inheriting the previous template layout","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747901296,"status":"passed","title":"choosing a template restores its own structure instead of inheriting the previous template layout"},{"ancestorTitles":[],"duration":718,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"editor sections, design controls and document settings render in Bokmål","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793747902505,"status":"passed","title":"editor sections, design controls and document settings render in Bokmål"},{"ancestorTitles":[],"duration":768,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"internal navigation warns and can be cancelled before discarding a pending edit","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747903223,"status":"passed","title":"internal navigation warns and can be cancelled before discarding a pending edit"},{"ancestorTitles":[],"duration":6052,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"custom entries can be added, edited, reordered and deleted with confirmation","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793747903991,"status":"passed","title":"custom entries can be added, edited, reordered and deleted with confirmation"},{"ancestorTitles":[],"duration":1638,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C01 C07] source-backed entry edits identify their scope and save only this CV","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793747910043,"status":"passed","title":"[P5-10 PRES-C01 C07] source-backed entry edits identify their scope and save only this CV"},{"ancestorTitles":[],"duration":2326,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C07 C10] resetting one entry field preserves omission, sibling override and order and supports undo","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793747911681,"status":"passed","title":"[P5-10 PRES-C07 C10] resetting one entry field preserves omission, sibling override and order and supports undo"},{"ancestorTitles":[],"duration":1422,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C07 C10 E08] omitted entries remain editable and retain their draft after a failed save","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793747914007,"status":"passed","title":"[P5-10 PRES-C07 C10 E08] omitted entries remain editable and retain their draft after a failed save"},{"ancestorTitles":[],"duration":1379,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C01 C07] section content reset inherits source without changing omission or presentation","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793747915429,"status":"passed","title":"[P5-10 PRES-C01 C07] section content reset inherits source without changing omission or presentation"},{"ancestorTitles":[],"duration":3482,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile-backed sections expand, reorder, hide and persist variant-only overrides","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747916808,"status":"passed","title":"profile-backed sections expand, reorder, hide and persist variant-only overrides"},{"ancestorTitles":[],"duration":999,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"focusing a preview retry control keeps its pointer target stationary","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747920290,"status":"passed","title":"focusing a preview retry control keeps its pointer target stationary"},{"ancestorTitles":[],"duration":1123,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"preview failure is visible and retryable without leaving the editor","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793747921289,"status":"passed","title":"preview failure is visible and retryable without leaving the editor"},{"ancestorTitles":[],"duration":370,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 E08] automatic fit attaches when the asynchronously loaded preview pane appears","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793747922412,"status":"passed","title":"[P5-11 PRES-C06 E08] automatic fit attaches when the asynchronously loaded preview pane appears"},{"ancestorTitles":[],"duration":571,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 C12] page count is announced only after the renderer has settled","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793747922782,"status":"passed","title":"[P5-11 PRES-C06 C12] page count is announced only after the renderer has settled"},{"ancestorTitles":[],"duration":2361,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 E09] overlapping preview successes and failures cannot replace the newest document","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793747923353,"status":"passed","title":"[P5-11 PRES-C06 E09] overlapping preview successes and failures cannot replace the newest document"},{"ancestorTitles":[],"duration":564,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 C10 E08] returning from preview focuses the existing editor without changing the pending draft","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793747925715,"status":"passed","title":"[P5-11 PRES-C06 C10 E08] returning from preview focuses the existing editor without changing the pending draft"},{"ancestorTitles":[],"duration":454,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"changing whole-document output language discards the previous-language review without applying it","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793747926279,"status":"passed","title":"changing whole-document output language discards the previous-language review without applying it"},{"ancestorTitles":[],"duration":761,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"whole-document review labels follow UI language without translating or discarding the proposal","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793747926733,"status":"passed","title":"whole-document review labels follow UI language without translating or discarding the proposal"},{"ancestorTitles":[],"duration":1028,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11 PRES-C07] whole-document AI Apply changes only an explicitly accepted CV override","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793747927494,"status":"passed","title":"[PRES-C11 PRES-C07] whole-document AI Apply changes only an explicitly accepted CV override"},{"ancestorTitles":[],"duration":868,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11 PRES-C07] whole-document AI Reject changes only an explicitly accepted CV override","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793747928522,"status":"passed","title":"[PRES-C11 PRES-C07] whole-document AI Reject changes only an explicitly accepted CV override"},{"ancestorTitles":[],"duration":676,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11] unsafe whole-document response (invalid JSON) cannot be applied","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793747929390,"status":"passed","title":"[PRES-C11] unsafe whole-document response (invalid JSON) cannot be applied"},{"ancestorTitles":[],"duration":879,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11] unsafe whole-document response (missing original ID) cannot be applied","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793747930066,"status":"passed","title":"[PRES-C11] unsafe whole-document response (missing original ID) cannot be applied"},{"ancestorTitles":[],"duration":816,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11] unsafe whole-document response (duplicate original ID) cannot be applied","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793747930945,"status":"passed","title":"[PRES-C11] unsafe whole-document response (duplicate original ID) cannot be applied"},{"ancestorTitles":[],"duration":2892,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"bound document generation saves the pending draft, reviews server Original, and accepted AI remains undoable","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793747931761,"status":"passed","title":"bound document generation saves the pending draft, reviews server Original, and accepted AI remains undoable"},{"ancestorTitles":[],"duration":1603,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a newer draft is flushed before stale proposal acceptance fails without rebasing or changing content","invocations":1,"location":null,"numPassingAsserts":13,"retryReasons":[],"startAt":1793747934653,"status":"passed","title":"a newer draft is flushed before stale proposal acceptance fails without rebasing or changing content"},{"ancestorTitles":[],"duration":1792,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"late document proposals cannot return after tab unmount or a source undo","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793747936256,"status":"passed","title":"late document proposals cannot return after tab unmount or a source undo"},{"ancestorTitles":[],"duration":1717,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"bound section:skills assistant sends explicit scope and edited wording to server acceptance","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747938048,"status":"passed","title":"bound section:skills assistant sends explicit scope and edited wording to server acceptance"},{"ancestorTitles":[],"duration":2209,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"bound custom:sample assistant sends explicit scope and edited wording to server acceptance","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747939765,"status":"passed","title":"bound custom:sample assistant sends explicit scope and edited wording to server acceptance"},{"ancestorTitles":[],"duration":2008,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"bound entry:experience:job-1 assistant sends explicit scope and edited wording to server acceptance","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747941974,"status":"passed","title":"bound entry:experience:job-1 assistant sends explicit scope and edited wording to server acceptance"},{"ancestorTitles":[],"duration":1539,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"user edits made during server acceptance are retained instead of overwritten by its late saved response","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793747943982,"status":"passed","title":"user edits made during server acceptance are retained instead of overwritten by its late saved response"}],"endTime":1793747945523,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\cv-builder-deep-link.test.tsx","startTime":1793747875801,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":72,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account data entry selects a supported initial section (data)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747946284,"status":"passed","title":"account data entry selects a supported initial section (data)"},{"ancestorTitles":[],"duration":161,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account data entry selects a supported initial section (unknown)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747946356,"status":"passed","title":"account data entry selects a supported initial section (unknown)"},{"ancestorTitles":[],"duration":489,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"each selected Settings section has a named panel linked to its tab and remains selectable on phones","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793747946518,"status":"passed","title":"each selected Settings section has a named panel linked to its tab and remains selectable on phones"},{"ancestorTitles":[],"duration":209,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"settings view has no accent picker and uses one follow-up section, one notification section","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793747947007,"status":"passed","title":"settings view has no accent picker and uses one follow-up section, one notification section"},{"ancestorTitles":[],"duration":75,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AI privacy settings are server-backed and external processing is local-only by default","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747947217,"status":"passed","title":"AI privacy settings are server-backed and external processing is local-only by default"},{"ancestorTitles":[],"duration":3986,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] failed notification save preserves the draft for an explicit retry","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793747947292,"status":"passed","title":"[PRES-S03] failed notification save preserves the draft for an explicit retry"},{"ancestorTitles":[],"duration":431,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 PRES-W11] saving one follow-up rule preserves the other scenarios","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793747951278,"status":"passed","title":"[PRES-S03 PRES-W11] saving one follow-up rule preserves the other scenarios"},{"ancestorTitles":[],"duration":194,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 PRES-J05] table and theme preferences keep their independent callbacks","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747951709,"status":"passed","title":"[PRES-S03 PRES-J05] table and theme preferences keep their independent callbacks"},{"ancestorTitles":[],"duration":393,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 W11] the Settings session retains independent pending Rules fields across tab unmounts","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793747951903,"status":"passed","title":"[PRES-S03 W11] the Settings session retains independent pending Rules fields across tab unmounts"},{"ancestorTitles":[],"duration":531,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] failed Rules save remains actionable after tab return and explicit retry clears dirty state","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793747952296,"status":"passed","title":"[PRES-S03] failed Rules save remains actionable after tab return and explicit retry clears dirty state"},{"ancestorTitles":[],"duration":567,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] invalid and empty Rules input and associated validation survive internal navigation","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793747952827,"status":"passed","title":"[PRES-S03] invalid and empty Rules input and associated validation survive internal navigation"},{"ancestorTitles":[],"duration":290,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] explicit discard resets only the Rules draft to its saved baseline without writing","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747953394,"status":"passed","title":"[PRES-S03] explicit discard resets only the Rules draft to its saved baseline without writing"},{"ancestorTitles":[],"duration":285,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] later edits stay dirty when an earlier Rules save completes after a tab switch","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747953684,"status":"passed","title":"[PRES-S03] later edits stay dirty when an earlier Rules save completes after a tab switch"},{"ancestorTitles":[],"duration":430,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 E09] leaving the Settings session disposes its draft and pending responses","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747953969,"status":"passed","title":"[PRES-S03 E09] leaving the Settings session disposes its draft and pending responses"},{"ancestorTitles":[],"duration":305,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] switching locale while Rules is hidden does not reload or overwrite its pending draft","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747954399,"status":"passed","title":"[PRES-S03] switching locale while Rules is hidden does not reload or overwrite its pending draft"},{"ancestorTitles":[],"duration":139,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] Rules draft updates do not refetch an unrelated notification preference","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747954704,"status":"passed","title":"[PRES-S03] Rules draft updates do not refetch an unrelated notification preference"},{"ancestorTitles":[],"duration":230,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en Automation reuses the saved notification preference and explicit save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747954843,"status":"passed","title":"en Automation reuses the saved notification preference and explicit save"},{"ancestorTitles":[],"duration":450,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb Automation reuses the saved notification preference and explicit save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747955074,"status":"passed","title":"nb Automation reuses the saved notification preference and explicit save"},{"ancestorTitles":[],"duration":239,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Automation AI entry moves focus into existing settings without an AI request","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747955524,"status":"passed","title":"Automation AI entry moves focus into existing settings without an AI request"},{"ancestorTitles":[],"duration":146,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] initial notification failure offers a single GET Retry and recovers its vanished focused action","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793747955764,"status":"passed","title":"[P7-09 preferences] initial notification failure offers a single GET Retry and recovers its vanished focused action"},{"ancestorTitles":[],"duration":400,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] notification drafts survive internal sections and locale changes without a GET or save","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793747955911,"status":"passed","title":"[P7-09 preferences] notification drafts survive internal sections and locale changes without a GET or save"},{"ancestorTitles":[],"duration":557,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] one held notification save acknowledges its snapshot and preserves later edits across sections","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793747956311,"status":"passed","title":"[P7-09 preferences] one held notification save acknowledges its snapshot and preserves later edits across sections"},{"ancestorTitles":[],"duration":354,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] failed notification save keeps its current-locale draft and retries only the original Save","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793747956868,"status":"passed","title":"[P7-09 preferences] failed notification save keeps its current-locale draft and retries only the original Save"},{"ancestorTitles":[],"duration":519,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] discarding a notification draft leaves the independent Rules draft untouched","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793747957222,"status":"passed","title":"[P7-09 preferences] discarding a notification draft leaves the independent Rules draft untouched"},{"ancestorTitles":[],"duration":268,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] a disposed notification save cannot publish into surviving providers or a new Settings session","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793747957741,"status":"passed","title":"[P7-09 preferences] a disposed notification save cannot publish into surviving providers or a new Settings session"},{"ancestorTitles":[],"duration":350,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] Rules load failure follows locale without reloading and Retry retains the six-field contract","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793747958009,"status":"passed","title":"[P7-09 preferences] Rules load failure follows locale without reloading and Retry retains the six-field contract"}],"endTime":1793747958360,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\settings-view.test.tsx","startTime":1793747945531,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":131,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"notification bell exposes its unread count and keyboard-accessible action","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747959100,"status":"passed","title":"notification bell exposes its unread count and keyboard-accessible action"},{"ancestorTitles":[],"duration":177,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows localized en build metadata only when the caller supplies the admin-only badge","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747959231,"status":"passed","title":"shows localized en build metadata only when the caller supplies the admin-only badge"},{"ancestorTitles":[],"duration":153,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows localized nb build metadata only when the caller supplies the admin-only badge","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747959408,"status":"passed","title":"shows localized nb build metadata only when the caller supplies the admin-only badge"},{"ancestorTitles":[],"duration":73,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shell icon controls expose accessible names","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747959561,"status":"passed","title":"shell icon controls expose accessible names"},{"ancestorTitles":[],"duration":97,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 notifications] an unavailable unread count stays unknown and its description follows the UI language","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747959634,"status":"passed","title":"[P7-08 notifications] an unavailable unread count stays unknown and its description follows the UI language"},{"ancestorTitles":[],"duration":64,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 notifications] a recorded zero unread count has a truthful separate description","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747959731,"status":"passed","title":"[P7-08 notifications] a recorded zero unread count has a truthful separate description"},{"ancestorTitles":[],"duration":94,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 notifications] the known unread count is described in Bokmål without changing the bell action's name","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747959795,"status":"passed","title":"[P7-08 notifications] the known unread count is described in Bokmål without changing the bell action's name"}],"endTime":1793747959890,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\app-shell-notifications.test.tsx","startTime":1793747958368,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":95,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 backup] unknown lifecycle never claims disabled and Retry only reads","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747960656,"status":"passed","title":"[P7-09 backup] unknown lifecycle never claims disabled and Retry only reads"},{"ancestorTitles":[],"duration":68,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 backup] synchronous duplicate and competing downloads admit only one request","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747960752,"status":"passed","title":"[P7-09 backup] synchronous duplicate and competing downloads admit only one request"},{"ancestorTitles":[],"duration":19,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 backup] disposal rejects a late readable export without downloading private bytes or notifying","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747960820,"status":"passed","title":"[P7-09 backup] disposal rejects a late readable export without downloading private bytes or notifying"},{"ancestorTitles":[],"duration":39,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 backup] disposal during the existing deletion prompt cannot issue a later delete","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793747960840,"status":"passed","title":"[P7-09 backup] disposal during the existing deletion prompt cannot issue a later delete"}],"endTime":1793747960880,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\backup-lifetime.test.tsx","startTime":1793747959898,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":372,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en hybrid navigation has five labelled destinations and retains secondary tools","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793747961589,"status":"passed","title":"en hybrid navigation has five labelled destinations and retains secondary tools"},{"ancestorTitles":[],"duration":314,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb hybrid navigation has five labelled destinations and retains secondary tools","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793747961961,"status":"passed","title":"nb hybrid navigation has five labelled destinations and retains secondary tools"},{"ancestorTitles":[],"duration":184,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career/builder/42 selects its primary destination and keyboard route focus survives","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747962275,"status":"passed","title":"/career/builder/42 selects its primary destination and keyboard route focus survives"},{"ancestorTitles":[],"duration":190,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/applications/42 selects its primary destination and keyboard route focus survives","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747962459,"status":"passed","title":"/applications/42 selects its primary destination and keyboard route focus survives"},{"ancestorTitles":[],"duration":170,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/jobs/42 selects its primary destination and keyboard route focus survives","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747962649,"status":"passed","title":"/jobs/42 selects its primary destination and keyboard route focus survives"},{"ancestorTitles":[],"duration":266,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"desktop retains labelled collapse, persistence, and all secondary destinations","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747962820,"status":"passed","title":"desktop retains labelled collapse, persistence, and all secondary destinations"},{"ancestorTitles":[],"duration":298,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"choosing the current destination from More closes the drawer and focuses its heading","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747963086,"status":"passed","title":"choosing the current destination from More closes the drawer and focuses its heading"}],"endTime":1793747963385,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\a3-navigation.test.tsx","startTime":1793747960886,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":87,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a persisted AI preference refreshes server availability after the save acknowledgement","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747964414,"status":"passed","title":"a persisted AI preference refreshes server availability after the save acknowledgement"},{"ancestorTitles":[],"duration":78,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"availability refresh failure does not misreport an acknowledged save or repeat its write","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747964502,"status":"passed","title":"availability refresh failure does not misreport an acknowledged save or repeat its write"},{"ancestorTitles":[],"duration":75,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed AI preference writes do not refresh availability","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793747964580,"status":"passed","title":"failed AI preference writes do not refresh availability"},{"ancestorTitles":[],"duration":56,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"an unmounted preference save cannot refresh a later account view","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747964655,"status":"passed","title":"an unmounted preference save cannot refresh a later account view"},{"ancestorTitles":[],"duration":68,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] failed initial read has a read-only Retry and no perpetual loading","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747964711,"status":"passed","title":"[P7-09 privacy] failed initial read has a read-only Retry and no perpetual loading"},{"ancestorTitles":[],"duration":71,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] submitted acknowledgement preserves a newer edit and serializes Save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747964779,"status":"passed","title":"[P7-09 privacy] submitted acknowledgement preserves a newer edit and serializes Save"},{"ancestorTitles":[],"duration":92,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] a failed save retains the draft and never replays through read recovery","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793747964850,"status":"passed","title":"[P7-09 privacy] a failed save retains the draft and never replays through read recovery"},{"ancestorTitles":[],"duration":42,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] unmount ignores an old save acknowledgement and success notification","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793747964942,"status":"passed","title":"[P7-09 privacy] unmount ignores an old save acknowledgement and success notification"},{"ancestorTitles":[],"duration":87,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] pending save uses the current language without refetching the draft","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747964984,"status":"passed","title":"[P7-09 privacy] pending save uses the current language without refetching the draft"},{"ancestorTitles":[],"duration":40,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] local-only capability permits revoking a historical external consent","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747965071,"status":"passed","title":"[P7-09 privacy] local-only capability permits revoking a historical external consent"}],"endTime":1793747965112,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\ai-privacy-settings.test.tsx","startTime":1793747963392,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":334,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E07 E08 A03] en mobile names/current route ignore desktop collapse and retain metadata","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793747965947,"status":"passed","title":"[P5-00 PRES-E07 E08 A03] en mobile names/current route ignore desktop collapse and retain metadata"},{"ancestorTitles":[],"duration":267,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E07 E08 A03] nb mobile names/current route ignore desktop collapse and retain metadata","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793747966282,"status":"passed","title":"[P5-00 PRES-E07 E08 A03] nb mobile names/current route ignore desktop collapse and retain metadata"},{"ancestorTitles":[],"duration":241,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"compact mobile account menu preserves language selection and Settings access","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747966549,"status":"passed","title":"compact mobile account menu preserves language selection and Settings access"},{"ancestorTitles":[],"duration":63,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E08 S05] toast retains its full existing display duration and dismiss action","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747966790,"status":"passed","title":"[P5-00 PRES-E08 S05] toast retains its full existing display duration and dismiss action"},{"ancestorTitles":[],"duration":26,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E08] toast action is explicit and executes once","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747966853,"status":"passed","title":"[P5-00 PRES-E08] toast action is explicit and executes once"}],"endTime":1793747966880,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\shell-readiness.test.tsx","startTime":1793747965119,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":239,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"language controls identify Bokmål with its native name and language code","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747967724,"status":"passed","title":"language controls identify Bokmål with its native name and language code"},{"ancestorTitles":[],"duration":174,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-01 PRES-E07 E08] grouped navigation exposes the current child without marking the parent as the page","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747967963,"status":"passed","title":"[P5-01 PRES-E07 E08] grouped navigation exposes the current child without marking the parent as the page"},{"ancestorTitles":[],"duration":257,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-01 PRES-E07 E08] collapsed secondary destinations remain keyboard-operable","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747968137,"status":"passed","title":"[P5-01 PRES-E07 E08] collapsed secondary destinations remain keyboard-operable"},{"ancestorTitles":[],"duration":174,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-01 PRES-E08] successful shell navigation focuses the new route heading and exposes a skip link","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747968394,"status":"passed","title":"[P5-01 PRES-E08] successful shell navigation focuses the new route heading and exposes a skip link"}],"endTime":1793747968569,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\app-shell-navigation.test.tsx","startTime":1793747966888,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["account-scoped browser state"],"duration":166,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account-scoped browser state keeps saved views private to the account that created them","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747969583,"status":"passed","title":"keeps saved views private to the account that created them"},{"ancestorTitles":["account-scoped browser state"],"duration":72,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account-scoped browser state does not show a previous account's cached companies after account switching","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747969750,"status":"passed","title":"does not show a previous account's cached companies after account switching"}],"endTime":1793747969823,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\account-scoped-state.test.tsx","startTime":1793747968579,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":161,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en mobile account menu localises the supplied build metadata (User)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747970784,"status":"passed","title":"en mobile account menu localises the supplied build metadata (User)"},{"ancestorTitles":[],"duration":147,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb mobile account menu localises the supplied build metadata (Bruker)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747970945,"status":"passed","title":"nb mobile account menu localises the supplied build metadata (Bruker)"},{"ancestorTitles":[],"duration":122,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en mobile account menu localises the supplied build metadata (User)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747971092,"status":"passed","title":"en mobile account menu localises the supplied build metadata (User)"},{"ancestorTitles":[],"duration":110,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb mobile account menu localises the supplied build metadata (Bruker)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747971214,"status":"passed","title":"nb mobile account menu localises the supplied build metadata (Bruker)"}],"endTime":1793747971325,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\build-metadata-localisation.test.tsx","startTime":1793747969831,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":65,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps its heading and named loading state, then retries only a failed usage GET","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793747972119,"status":"passed","title":"keeps its heading and named loading state, then retries only a failed usage GET"},{"ancestorTitles":[],"duration":46,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"billing failure remains visible beside usage and its Retry only reads billing","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793747972185,"status":"passed","title":"billing failure remains visible beside usage and its Retry only reads billing"},{"ancestorTitles":[],"duration":41,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"locale changes format numbers and byte decimals without reloading; zero storage limit stays finite","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747972231,"status":"passed","title":"locale changes format numbers and byte decimals without reloading; zero storage limit stays finite"},{"ancestorTitles":[],"duration":57,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"one billing POST ignores a late failure after unmount","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747972272,"status":"passed","title":"one billing POST ignores a late failure after unmount"},{"ancestorTitles":[],"duration":30,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"one billing POST ignores a late failure after session","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747972329,"status":"passed","title":"one billing POST ignores a late failure after session"},{"ancestorTitles":[],"duration":47,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"late billing success after unmount never consumes the redirect URL","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793747972359,"status":"passed","title":"late billing success after unmount never consumes the redirect URL"},{"ancestorTitles":[],"duration":33,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"late billing success after session never consumes the redirect URL","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793747972406,"status":"passed","title":"late billing success after session never consumes the redirect URL"},{"ancestorTitles":[],"duration":116,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a failed billing POST offers the existing explicit action without automatic replay","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793747972439,"status":"passed","title":"a failed billing POST offers the existing explicit action without automatic replay"},{"ancestorTitles":[],"duration":35,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows monthly AI call and token limits","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747972555,"status":"passed","title":"shows monthly AI call and token limits"},{"ancestorTitles":[],"duration":28,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"does not offer a false upgrade action when billing is not configured","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747972590,"status":"passed","title":"does not offer a false upgrade action when billing is not configured"}],"endTime":1793747972619,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\ai-usage-card.test.tsx","startTime":1793747971331,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":28,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps paid users on the manual path without an upgrade prompt (en)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747973522,"status":"passed","title":"keeps paid users on the manual path without an upgrade prompt (en)"},{"ancestorTitles":[],"duration":25,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps paid users on the manual path without an upgrade prompt (nb)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747973551,"status":"passed","title":"keeps paid users on the manual path without an upgrade prompt (nb)"},{"ancestorTitles":[],"duration":13,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows a respectful upgrade action and remembers dismissal for the session","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747973576,"status":"passed","title":"shows a respectful upgrade action and remembers dismissal for the session"}],"endTime":1793747973589,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\pro-feature-notice.test.tsx","startTime":1793747972629,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":8,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"English and Bokmål expose the same UI message keys","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793747973829,"status":"passed","title":"English and Bokmål expose the same UI message keys"},{"ancestorTitles":[],"duration":5,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Bokmål preserves every English substitution variable","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793747973837,"status":"passed","title":"Bokmål preserves every English substitution variable"},{"ancestorTitles":[],"duration":3,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"supported UI catalogues contain no blank messages","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793747973842,"status":"passed","title":"supported UI catalogues contain no blank messages"}],"endTime":1793747973846,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\translation-catalogue.test.ts","startTime":1793747973595,"status":"passed","summary":""}],"wasInterrupted":false}
diff --git a/docs/ui-modernisation/visual-correction/DISCREPANCIES.md b/docs/ui-modernisation/visual-correction/DISCREPANCIES.md
new file mode 100644
index 00000000..8247fb40
--- /dev/null
+++ b/docs/ui-modernisation/visual-correction/DISCREPANCIES.md
@@ -0,0 +1,18 @@
+# A3 visual discrepancy register
+
+Owner correction: 3 November 2026. This register extends IM10 and the original 34-route / 57-group preservation inventory. Earlier functional acceptance does not establish current visual parity.
+
+| ID | Area | Material discrepancy | Current disposition | Required closure |
+|---|---|---|---|---|
+| V01 | Shared mobile shell | Two-row header, repeated Settings control and outlined icon containers consume editing space | Implemented one-row toolbar; Settings/language in account menu, complete drawer retained; rendered review in progress | Nine-width EN/NB/light/dark checks, keyboard and representative route journeys |
+| V02 | CV studio | Outlined document header, editor/preview shells, expanded section surfaces and AI action cards compound padding/borders | Open header/panes/sections/action rows implemented; actual document paper retained | Rendered content/preview/review comparisons; all document actions/regression preserved |
+| V03 | CV navigation | Narrow scrolling tabs conceal complete section choices | Width-aware labelled selector; tabs retained where pane has room | All five choices, history loading, draft retention, resizing and keyboard checks |
+| V04 | Settings | Continuous sections treated as independent bordered cards | Removed explicit surface treatment from appearance/language/jobs/notifications/connections/automation/AI/usage/rules/backup sections | Render each section including loading/error/empty/success; preserve actions and drafts |
+| V05 | AI availability notice | Norwegian 320px message became a non-focusable scroll region competing with actions | RESOLVED in bounded scope: shared grid; 16 refresh journeys / 64 accessibility captures passed EN/NB and themes; original failure retained | Human/device qualifications remain separate |
+| V06 | Remaining routes | Whole-application modernisation has not received current route-by-route visual review | OPEN; all 34 routes explicitly tracked in ROUTE_COVERAGE.json | Review actual screens against A3 and resolve material differences; do not infer completion from shared styles |
+| V07 | Connected workflows | Existing accepted journeys predate this visual correction | OPEN | Discovery→review→track; CV create/import→edit→preview→export; application→status→follow-up; Career Profile→document reuse; desktop/mobile |
+| V08 | Final acceptance | Automated checks cannot establish owner visual approval or human/device/native-language accessibility | OPEN | Consolidated final visual review and accurately recorded outstanding qualifications |
+
+The owner-approved design foundation remains original A1 dashboard, D1 visual system, B1 tracking, editor left / preview right, application context right, desktop sidebar and hybrid mobile navigation. No controls, imports, revisions, permissions or provider rights may be removed to obtain visual simplicity.
+
+The screenshots use synthetic fixtures. Prototype screenshots include workshop controls and different sample content: compare application hierarchy, spacing and treatment, not raw whole-image pixel differences. Physical CV/PDF rendering is a separate contract.
diff --git a/docs/ui-modernisation/visual-correction/FOCUSED_TESTS.json b/docs/ui-modernisation/visual-correction/FOCUSED_TESTS.json
new file mode 100644
index 00000000..ccd1f848
--- /dev/null
+++ b/docs/ui-modernisation/visual-correction/FOCUSED_TESTS.json
@@ -0,0 +1 @@
+{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":4,"numPassedTests":101,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":4,"numTotalTests":101,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793736212224,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":1304,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Strict Mode groups a typing burst into one undo step and preserves redo through autosave","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736216113,"status":"passed","title":"Strict Mode groups a typing burst into one undo step and preserves redo through autosave"},{"ancestorTitles":[],"duration":724,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a pause between typing bursts leaves a separate undo step","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736217418,"status":"passed","title":"a pause between typing bursts leaves a separate undo step"},{"ancestorTitles":[],"duration":409,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"tablet width keeps both editing and preview available in the stacked document flow","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736218142,"status":"passed","title":"tablet width keeps both editing and preview available in the stacked document flow"},{"ancestorTitles":[],"duration":720,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"mobile studio navigation exposes complete section labels and retains edits across preview and history","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793736218552,"status":"passed","title":"mobile studio navigation exposes complete section labels and retains edits across preview and history"},{"ancestorTitles":[],"duration":864,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"document shortcuts undo and redo renaming, preserve native input undo and discard branched redo","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793736219272,"status":"passed","title":"document shortcuts undo and redo renaming, preserve native input undo and discard branched redo"},{"ancestorTitles":[],"duration":717,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a revision conflict disables document history without silently writing an undo","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736220136,"status":"passed","title":"a revision conflict disables document history without silently writing an undo"},{"ancestorTitles":[],"duration":706,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"switching documents hides the previous draft while loading and starts fresh history","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736220853,"status":"passed","title":"switching documents hides the previous draft while loading and starts fresh history"},{"ancestorTitles":[],"duration":633,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"explicit blank editing excludes master content and includes a profile section only after an Add action","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736221559,"status":"passed","title":"explicit blank editing excludes master content and includes a profile section only after an Add action"},{"ancestorTitles":[],"duration":476,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a blank CV can deliberately add an additional Career Profile section","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736222192,"status":"passed","title":"a blank CV can deliberately add an additional Career Profile section"},{"ancestorTitles":[],"duration":1295,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a historical restore response from the previous document cannot change the newly opened CV","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736222668,"status":"passed","title":"a historical restore response from the previous document cannot change the newly opened CV"},{"ancestorTitles":[],"duration":177,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"content sections follow the editing-region heading without mutating CV settings","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736223963,"status":"passed","title":"content sections follow the editing-region heading without mutating CV settings"},{"ancestorTitles":[],"duration":341,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"settings history explains current Career Profile resolution without writing data","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736224140,"status":"passed","title":"settings history explains current Career Profile resolution without writing data"},{"ancestorTitles":[],"duration":878,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"PDF export locks immediately, rejects a newer unsaved draft, and keeps that draft recoverable","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793736224481,"status":"passed","title":"PDF export locks immediately, rejects a newer unsaved draft, and keeps that draft recoverable"},{"ancestorTitles":[],"duration":741,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"edits during a held PDF response prevent an older document download","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736225359,"status":"passed","title":"edits during a held PDF response prevent an older document download"},{"ancestorTitles":[],"duration":514,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"moving a section to the first position announces its actual order and focuses its row","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736226100,"status":"passed","title":"moving a section to the first position announces its actual order and focuses its row"},{"ancestorTitles":[],"duration":3600,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"section navigation opens and focuses omitted/custom sections without changing their data","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793736226614,"status":"passed","title":"section navigation opens and focuses omitted/custom sections without changing their data"},{"ancestorTitles":[],"duration":1055,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keyboard move controls retain focus and persist the same section order shown by navigation","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736230214,"status":"passed","title":"keyboard move controls retain focus and persist the same section order shown by navigation"},{"ancestorTitles":[],"duration":682,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"secondary duplicate action saves the current draft before creating the copy","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736231269,"status":"passed","title":"secondary duplicate action saves the current draft before creating the copy"},{"ancestorTitles":[],"duration":453,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pane navigation focuses the existing preview without changing the pending draft","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736231951,"status":"passed","title":"pane navigation focuses the existing preview without changing the pending draft"},{"ancestorTitles":[],"duration":246,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"deep link loads the exact variant named in the route","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736232404,"status":"passed","title":"deep link loads the exact variant named in the route"},{"ancestorTitles":[],"duration":24,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a variant that does not exist shows a safe error instead of an empty editor","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736232650,"status":"passed","title":"a variant that does not exist shows a safe error instead of an empty editor"},{"ancestorTitles":[],"duration":37,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"another user's variant is refused by the server and never rendered","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736232674,"status":"passed","title":"another user's variant is refused by the server and never rendered"},{"ancestorTitles":[],"duration":49,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a denied CV read has localized permission context without a write or retry","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793736232711,"status":"passed","title":"a denied CV read has localized permission context without a write or retry"},{"ancestorTitles":[],"duration":311,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a temporary CV opening failure retries reads and restores focus to the editor without saving","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736232760,"status":"passed","title":"a temporary CV opening failure retries reads and restores focus to the editor without saving"},{"ancestorTitles":[],"duration":424,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Bokmål history localizes known sources while preserving unknown metadata and versions","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793736233072,"status":"passed","title":"Bokmål history localizes known sources while preserving unknown metadata and versions"},{"ancestorTitles":[],"duration":602,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid names are explained and are not silently autosaved","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736233496,"status":"passed","title":"invalid names are explained and are not silently autosaved"},{"ancestorTitles":[],"duration":670,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed autosave is visible and can be retried with the latest data","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736234098,"status":"passed","title":"failed autosave is visible and can be retried with the latest data"},{"ancestorTitles":[],"duration":846,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"session undo and redo restore content edits before autosave","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793736234768,"status":"passed","title":"session undo and redo restore content edits before autosave"},{"ancestorTitles":[],"duration":1251,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"queued saves use acknowledged server versions without replacing newer local editing state","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793736235614,"status":"passed","title":"queued saves use acknowledged server versions without replacing newer local editing state"},{"ancestorTitles":[],"duration":1785,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"revision conflict retains the draft and blocks later autosaves until explicit reload","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793736236865,"status":"passed","title":"revision conflict retains the draft and blocks later autosaves until explicit reload"},{"ancestorTitles":[],"duration":1192,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"edits made while a confirmed reload is in flight remain recoverable","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793736238651,"status":"passed","title":"edits made while a confirmed reload is in flight remain recoverable"},{"ancestorTitles":[],"duration":1831,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"restoring history uses the current version and never replaces edits made during the request","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793736239843,"status":"passed","title":"restoring history uses the current version and never replaces edits made during the request"},{"ancestorTitles":[],"duration":852,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Content is the primary studio panel and all advanced tabs retain their controls","invocations":1,"location":null,"numPassingAsserts":14,"retryReasons":[],"startAt":1793736241674,"status":"passed","title":"Content is the primary studio panel and all advanced tabs retain their controls"},{"ancestorTitles":[],"duration":1467,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"choosing a template restores its own structure instead of inheriting the previous template layout","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736242526,"status":"passed","title":"choosing a template restores its own structure instead of inheriting the previous template layout"},{"ancestorTitles":[],"duration":868,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"editor sections, design controls and document settings render in Bokmål","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736243993,"status":"passed","title":"editor sections, design controls and document settings render in Bokmål"},{"ancestorTitles":[],"duration":850,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"internal navigation warns and can be cancelled before discarding a pending edit","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736244861,"status":"passed","title":"internal navigation warns and can be cancelled before discarding a pending edit"},{"ancestorTitles":[],"duration":5778,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"custom entries can be added, edited, reordered and deleted with confirmation","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793736245711,"status":"passed","title":"custom entries can be added, edited, reordered and deleted with confirmation"},{"ancestorTitles":[],"duration":1719,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C01 C07] source-backed entry edits identify their scope and save only this CV","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793736251489,"status":"passed","title":"[P5-10 PRES-C01 C07] source-backed entry edits identify their scope and save only this CV"},{"ancestorTitles":[],"duration":2340,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C07 C10] resetting one entry field preserves omission, sibling override and order and supports undo","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793736253208,"status":"passed","title":"[P5-10 PRES-C07 C10] resetting one entry field preserves omission, sibling override and order and supports undo"},{"ancestorTitles":[],"duration":1565,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C07 C10 E08] omitted entries remain editable and retain their draft after a failed save","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793736255548,"status":"passed","title":"[P5-10 PRES-C07 C10 E08] omitted entries remain editable and retain their draft after a failed save"},{"ancestorTitles":[],"duration":1142,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C01 C07] section content reset inherits source without changing omission or presentation","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793736257113,"status":"passed","title":"[P5-10 PRES-C01 C07] section content reset inherits source without changing omission or presentation"},{"ancestorTitles":[],"duration":3432,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile-backed sections expand, reorder, hide and persist variant-only overrides","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736258255,"status":"passed","title":"profile-backed sections expand, reorder, hide and persist variant-only overrides"},{"ancestorTitles":[],"duration":1174,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"focusing a preview retry control keeps its pointer target stationary","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736261687,"status":"passed","title":"focusing a preview retry control keeps its pointer target stationary"},{"ancestorTitles":[],"duration":1313,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"preview failure is visible and retryable without leaving the editor","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793736262861,"status":"passed","title":"preview failure is visible and retryable without leaving the editor"},{"ancestorTitles":[],"duration":277,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 E08] automatic fit attaches when the asynchronously loaded preview pane appears","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793736264174,"status":"passed","title":"[P5-11 PRES-C06 E08] automatic fit attaches when the asynchronously loaded preview pane appears"},{"ancestorTitles":[],"duration":815,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 C12] page count is announced only after the renderer has settled","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736264451,"status":"passed","title":"[P5-11 PRES-C06 C12] page count is announced only after the renderer has settled"},{"ancestorTitles":[],"duration":2313,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 E09] overlapping preview successes and failures cannot replace the newest document","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793736265266,"status":"passed","title":"[P5-11 PRES-C06 E09] overlapping preview successes and failures cannot replace the newest document"},{"ancestorTitles":[],"duration":673,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 C10 E08] returning from preview focuses the existing editor without changing the pending draft","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736267579,"status":"passed","title":"[P5-11 PRES-C06 C10 E08] returning from preview focuses the existing editor without changing the pending draft"},{"ancestorTitles":[],"duration":784,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"changing whole-document output language discards the previous-language review without applying it","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736268252,"status":"passed","title":"changing whole-document output language discards the previous-language review without applying it"},{"ancestorTitles":[],"duration":752,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"whole-document review labels follow UI language without translating or discarding the proposal","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793736269036,"status":"passed","title":"whole-document review labels follow UI language without translating or discarding the proposal"},{"ancestorTitles":[],"duration":1274,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11 PRES-C07] whole-document AI Apply changes only an explicitly accepted CV override","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793736269788,"status":"passed","title":"[PRES-C11 PRES-C07] whole-document AI Apply changes only an explicitly accepted CV override"},{"ancestorTitles":[],"duration":903,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11 PRES-C07] whole-document AI Reject changes only an explicitly accepted CV override","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793736271062,"status":"passed","title":"[PRES-C11 PRES-C07] whole-document AI Reject changes only an explicitly accepted CV override"},{"ancestorTitles":[],"duration":1044,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11] unsafe whole-document response (invalid JSON) cannot be applied","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736271965,"status":"passed","title":"[PRES-C11] unsafe whole-document response (invalid JSON) cannot be applied"},{"ancestorTitles":[],"duration":1082,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11] unsafe whole-document response (missing original ID) cannot be applied","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736273009,"status":"passed","title":"[PRES-C11] unsafe whole-document response (missing original ID) cannot be applied"},{"ancestorTitles":[],"duration":1114,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11] unsafe whole-document response (duplicate original ID) cannot be applied","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736274091,"status":"passed","title":"[PRES-C11] unsafe whole-document response (duplicate original ID) cannot be applied"},{"ancestorTitles":[],"duration":3313,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"bound document generation saves the pending draft, reviews server Original, and accepted AI remains undoable","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793736275205,"status":"passed","title":"bound document generation saves the pending draft, reviews server Original, and accepted AI remains undoable"},{"ancestorTitles":[],"duration":1951,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a newer draft is flushed before stale proposal acceptance fails without rebasing or changing content","invocations":1,"location":null,"numPassingAsserts":13,"retryReasons":[],"startAt":1793736278518,"status":"passed","title":"a newer draft is flushed before stale proposal acceptance fails without rebasing or changing content"},{"ancestorTitles":[],"duration":4664,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"late document proposals cannot return after tab unmount or a source undo","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793736280469,"status":"passed","title":"late document proposals cannot return after tab unmount or a source undo"},{"ancestorTitles":[],"duration":4087,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"bound section:skills assistant sends explicit scope and edited wording to server acceptance","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793736285133,"status":"passed","title":"bound section:skills assistant sends explicit scope and edited wording to server acceptance"},{"ancestorTitles":[],"duration":2455,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"bound custom:sample assistant sends explicit scope and edited wording to server acceptance","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793736289220,"status":"passed","title":"bound custom:sample assistant sends explicit scope and edited wording to server acceptance"},{"ancestorTitles":[],"duration":2968,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"bound entry:experience:job-1 assistant sends explicit scope and edited wording to server acceptance","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793736291675,"status":"passed","title":"bound entry:experience:job-1 assistant sends explicit scope and edited wording to server acceptance"},{"ancestorTitles":[],"duration":1598,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"user edits made during server acceptance are retained instead of overwritten by its late saved response","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793736294643,"status":"passed","title":"user edits made during server acceptance are retained instead of overwritten by its late saved response"}],"endTime":1793736296242,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\cv-builder-deep-link.test.tsx","startTime":1793736213150,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":59,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account data entry selects a supported initial section (data)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736297007,"status":"passed","title":"account data entry selects a supported initial section (data)"},{"ancestorTitles":[],"duration":195,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account data entry selects a supported initial section (unknown)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736297066,"status":"passed","title":"account data entry selects a supported initial section (unknown)"},{"ancestorTitles":[],"duration":541,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"each selected Settings section has a named panel linked to its tab and remains selectable on phones","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793736297261,"status":"passed","title":"each selected Settings section has a named panel linked to its tab and remains selectable on phones"},{"ancestorTitles":[],"duration":220,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"settings view has no accent picker and uses one follow-up section, one notification section","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793736297802,"status":"passed","title":"settings view has no accent picker and uses one follow-up section, one notification section"},{"ancestorTitles":[],"duration":78,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AI privacy settings are server-backed and external processing is local-only by default","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736298022,"status":"passed","title":"AI privacy settings are server-backed and external processing is local-only by default"},{"ancestorTitles":[],"duration":4049,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] failed notification save preserves the draft for an explicit retry","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793736298100,"status":"passed","title":"[PRES-S03] failed notification save preserves the draft for an explicit retry"},{"ancestorTitles":[],"duration":473,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 PRES-W11] saving one follow-up rule preserves the other scenarios","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793736302149,"status":"passed","title":"[PRES-S03 PRES-W11] saving one follow-up rule preserves the other scenarios"},{"ancestorTitles":[],"duration":203,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 PRES-J05] table and theme preferences keep their independent callbacks","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736302622,"status":"passed","title":"[PRES-S03 PRES-J05] table and theme preferences keep their independent callbacks"},{"ancestorTitles":[],"duration":416,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 W11] the Settings session retains independent pending Rules fields across tab unmounts","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793736302825,"status":"passed","title":"[PRES-S03 W11] the Settings session retains independent pending Rules fields across tab unmounts"},{"ancestorTitles":[],"duration":501,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] failed Rules save remains actionable after tab return and explicit retry clears dirty state","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793736303241,"status":"passed","title":"[PRES-S03] failed Rules save remains actionable after tab return and explicit retry clears dirty state"},{"ancestorTitles":[],"duration":717,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] invalid and empty Rules input and associated validation survive internal navigation","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736303743,"status":"passed","title":"[PRES-S03] invalid and empty Rules input and associated validation survive internal navigation"},{"ancestorTitles":[],"duration":231,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] explicit discard resets only the Rules draft to its saved baseline without writing","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736304460,"status":"passed","title":"[PRES-S03] explicit discard resets only the Rules draft to its saved baseline without writing"},{"ancestorTitles":[],"duration":394,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] later edits stay dirty when an earlier Rules save completes after a tab switch","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736304691,"status":"passed","title":"[PRES-S03] later edits stay dirty when an earlier Rules save completes after a tab switch"},{"ancestorTitles":[],"duration":530,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 E09] leaving the Settings session disposes its draft and pending responses","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736305085,"status":"passed","title":"[PRES-S03 E09] leaving the Settings session disposes its draft and pending responses"},{"ancestorTitles":[],"duration":241,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] switching locale while Rules is hidden does not reload or overwrite its pending draft","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736305615,"status":"passed","title":"[PRES-S03] switching locale while Rules is hidden does not reload or overwrite its pending draft"},{"ancestorTitles":[],"duration":290,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] Rules draft updates do not refetch an unrelated notification preference","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736305856,"status":"passed","title":"[PRES-S03] Rules draft updates do not refetch an unrelated notification preference"},{"ancestorTitles":[],"duration":448,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en Automation reuses the saved notification preference and explicit save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736306146,"status":"passed","title":"en Automation reuses the saved notification preference and explicit save"},{"ancestorTitles":[],"duration":200,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb Automation reuses the saved notification preference and explicit save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736306595,"status":"passed","title":"nb Automation reuses the saved notification preference and explicit save"},{"ancestorTitles":[],"duration":183,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Automation AI entry moves focus into existing settings without an AI request","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736306795,"status":"passed","title":"Automation AI entry moves focus into existing settings without an AI request"},{"ancestorTitles":[],"duration":330,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] initial notification failure offers a single GET Retry and recovers its vanished focused action","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793736306979,"status":"passed","title":"[P7-09 preferences] initial notification failure offers a single GET Retry and recovers its vanished focused action"},{"ancestorTitles":[],"duration":454,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] notification drafts survive internal sections and locale changes without a GET or save","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736307309,"status":"passed","title":"[P7-09 preferences] notification drafts survive internal sections and locale changes without a GET or save"},{"ancestorTitles":[],"duration":543,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] one held notification save acknowledges its snapshot and preserves later edits across sections","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793736307763,"status":"passed","title":"[P7-09 preferences] one held notification save acknowledges its snapshot and preserves later edits across sections"},{"ancestorTitles":[],"duration":440,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] failed notification save keeps its current-locale draft and retries only the original Save","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793736308306,"status":"passed","title":"[P7-09 preferences] failed notification save keeps its current-locale draft and retries only the original Save"},{"ancestorTitles":[],"duration":241,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] discarding a notification draft leaves the independent Rules draft untouched","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793736308746,"status":"passed","title":"[P7-09 preferences] discarding a notification draft leaves the independent Rules draft untouched"},{"ancestorTitles":[],"duration":549,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] a disposed notification save cannot publish into surviving providers or a new Settings session","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736308988,"status":"passed","title":"[P7-09 preferences] a disposed notification save cannot publish into surviving providers or a new Settings session"},{"ancestorTitles":[],"duration":277,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] Rules load failure follows locale without reloading and Retry retains the six-field contract","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793736309537,"status":"passed","title":"[P7-09 preferences] Rules load failure follows locale without reloading and Retry retains the six-field contract"}],"endTime":1793736309815,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\settings-view.test.tsx","startTime":1793736296251,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":85,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a persisted AI preference refreshes server availability after the save acknowledgement","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736310523,"status":"passed","title":"a persisted AI preference refreshes server availability after the save acknowledgement"},{"ancestorTitles":[],"duration":78,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"availability refresh failure does not misreport an acknowledged save or repeat its write","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736310608,"status":"passed","title":"availability refresh failure does not misreport an acknowledged save or repeat its write"},{"ancestorTitles":[],"duration":61,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed AI preference writes do not refresh availability","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793736310686,"status":"passed","title":"failed AI preference writes do not refresh availability"},{"ancestorTitles":[],"duration":55,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"an unmounted preference save cannot refresh a later account view","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736310748,"status":"passed","title":"an unmounted preference save cannot refresh a later account view"},{"ancestorTitles":[],"duration":99,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] failed initial read has a read-only Retry and no perpetual loading","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793736310803,"status":"passed","title":"[P7-09 privacy] failed initial read has a read-only Retry and no perpetual loading"},{"ancestorTitles":[],"duration":66,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] submitted acknowledgement preserves a newer edit and serializes Save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736310903,"status":"passed","title":"[P7-09 privacy] submitted acknowledgement preserves a newer edit and serializes Save"},{"ancestorTitles":[],"duration":83,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] a failed save retains the draft and never replays through read recovery","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736310969,"status":"passed","title":"[P7-09 privacy] a failed save retains the draft and never replays through read recovery"},{"ancestorTitles":[],"duration":42,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] unmount ignores an old save acknowledgement and success notification","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793736311052,"status":"passed","title":"[P7-09 privacy] unmount ignores an old save acknowledgement and success notification"},{"ancestorTitles":[],"duration":70,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] pending save uses the current language without refetching the draft","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736311094,"status":"passed","title":"[P7-09 privacy] pending save uses the current language without refetching the draft"},{"ancestorTitles":[],"duration":39,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] local-only capability permits revoking a historical external consent","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736311164,"status":"passed","title":"[P7-09 privacy] local-only capability permits revoking a historical external consent"}],"endTime":1793736311204,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\ai-privacy-settings.test.tsx","startTime":1793736309822,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":34,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps paid users on the manual path without an upgrade prompt (en)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736311884,"status":"passed","title":"keeps paid users on the manual path without an upgrade prompt (en)"},{"ancestorTitles":[],"duration":11,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps paid users on the manual path without an upgrade prompt (nb)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736311918,"status":"passed","title":"keeps paid users on the manual path without an upgrade prompt (nb)"},{"ancestorTitles":[],"duration":9,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows a respectful upgrade action and remembers dismissal for the session","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736311929,"status":"passed","title":"shows a respectful upgrade action and remembers dismissal for the session"}],"endTime":1793736311939,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\pro-feature-notice.test.tsx","startTime":1793736311210,"status":"passed","summary":""}],"wasInterrupted":false}
diff --git a/docs/ui-modernisation/visual-correction/HEADER_TESTS.json b/docs/ui-modernisation/visual-correction/HEADER_TESTS.json
new file mode 100644
index 00000000..a5afc4f4
--- /dev/null
+++ b/docs/ui-modernisation/visual-correction/HEADER_TESTS.json
@@ -0,0 +1 @@
+{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":4,"numPassedTests":23,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":4,"numTotalTests":23,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793747544963,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":198,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"notification bell exposes its unread count and keyboard-accessible action","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747548668,"status":"passed","title":"notification bell exposes its unread count and keyboard-accessible action"},{"ancestorTitles":[],"duration":190,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows localized en build metadata only when the caller supplies the admin-only badge","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747548867,"status":"passed","title":"shows localized en build metadata only when the caller supplies the admin-only badge"},{"ancestorTitles":[],"duration":152,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows localized nb build metadata only when the caller supplies the admin-only badge","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793747549057,"status":"passed","title":"shows localized nb build metadata only when the caller supplies the admin-only badge"},{"ancestorTitles":[],"duration":66,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shell icon controls expose accessible names","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747549209,"status":"passed","title":"shell icon controls expose accessible names"},{"ancestorTitles":[],"duration":86,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 notifications] an unavailable unread count stays unknown and its description follows the UI language","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747549275,"status":"passed","title":"[P7-08 notifications] an unavailable unread count stays unknown and its description follows the UI language"},{"ancestorTitles":[],"duration":54,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 notifications] a recorded zero unread count has a truthful separate description","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747549361,"status":"passed","title":"[P7-08 notifications] a recorded zero unread count has a truthful separate description"},{"ancestorTitles":[],"duration":95,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 notifications] the known unread count is described in Bokmål without changing the bell action's name","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747549415,"status":"passed","title":"[P7-08 notifications] the known unread count is described in Bokmål without changing the bell action's name"}],"endTime":1793747549511,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\app-shell-notifications.test.tsx","startTime":1793747545934,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":354,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en hybrid navigation has five labelled destinations and retains secondary tools","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793747550262,"status":"passed","title":"en hybrid navigation has five labelled destinations and retains secondary tools"},{"ancestorTitles":[],"duration":269,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb hybrid navigation has five labelled destinations and retains secondary tools","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793747550617,"status":"passed","title":"nb hybrid navigation has five labelled destinations and retains secondary tools"},{"ancestorTitles":[],"duration":176,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career/builder/42 selects its primary destination and keyboard route focus survives","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747550886,"status":"passed","title":"/career/builder/42 selects its primary destination and keyboard route focus survives"},{"ancestorTitles":[],"duration":181,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/applications/42 selects its primary destination and keyboard route focus survives","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747551062,"status":"passed","title":"/applications/42 selects its primary destination and keyboard route focus survives"},{"ancestorTitles":[],"duration":113,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/jobs/42 selects its primary destination and keyboard route focus survives","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747551243,"status":"passed","title":"/jobs/42 selects its primary destination and keyboard route focus survives"},{"ancestorTitles":[],"duration":188,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"desktop retains labelled collapse, persistence, and all secondary destinations","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747551356,"status":"passed","title":"desktop retains labelled collapse, persistence, and all secondary destinations"},{"ancestorTitles":[],"duration":281,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"choosing the current destination from More closes the drawer and focuses its heading","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747551544,"status":"passed","title":"choosing the current destination from More closes the drawer and focuses its heading"}],"endTime":1793747551826,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\a3-navigation.test.tsx","startTime":1793747549536,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":325,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E07 E08 A03] en mobile names/current route ignore desktop collapse and retain metadata","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793747552608,"status":"passed","title":"[P5-00 PRES-E07 E08 A03] en mobile names/current route ignore desktop collapse and retain metadata"},{"ancestorTitles":[],"duration":233,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E07 E08 A03] nb mobile names/current route ignore desktop collapse and retain metadata","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793747552933,"status":"passed","title":"[P5-00 PRES-E07 E08 A03] nb mobile names/current route ignore desktop collapse and retain metadata"},{"ancestorTitles":[],"duration":182,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"compact mobile account menu preserves language selection and Settings access","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793747553166,"status":"passed","title":"compact mobile account menu preserves language selection and Settings access"},{"ancestorTitles":[],"duration":53,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E08 S05] toast retains its full existing display duration and dismiss action","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793747553348,"status":"passed","title":"[P5-00 PRES-E08 S05] toast retains its full existing display duration and dismiss action"},{"ancestorTitles":[],"duration":19,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E08] toast action is explicit and executes once","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747553401,"status":"passed","title":"[P5-00 PRES-E08] toast action is explicit and executes once"}],"endTime":1793747553420,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\shell-readiness.test.tsx","startTime":1793747551835,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":163,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en mobile account menu localises the supplied build metadata (User)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747554237,"status":"passed","title":"en mobile account menu localises the supplied build metadata (User)"},{"ancestorTitles":[],"duration":104,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb mobile account menu localises the supplied build metadata (Bruker)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747554400,"status":"passed","title":"nb mobile account menu localises the supplied build metadata (Bruker)"},{"ancestorTitles":[],"duration":115,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en mobile account menu localises the supplied build metadata (User)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747554504,"status":"passed","title":"en mobile account menu localises the supplied build metadata (User)"},{"ancestorTitles":[],"duration":101,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb mobile account menu localises the supplied build metadata (Bruker)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793747554619,"status":"passed","title":"nb mobile account menu localises the supplied build metadata (Bruker)"}],"endTime":1793747554721,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\build-metadata-localisation.test.tsx","startTime":1793747553430,"status":"passed","summary":""}],"wasInterrupted":false}
diff --git a/docs/ui-modernisation/visual-correction/OWNER_FLAT_VISUAL.md b/docs/ui-modernisation/visual-correction/OWNER_FLAT_VISUAL.md
new file mode 100644
index 00000000..0a439e72
--- /dev/null
+++ b/docs/ui-modernisation/visual-correction/OWNER_FLAT_VISUAL.md
@@ -0,0 +1,356 @@
+# Jobjakt — A3 Visual Correction: Clean, Flat, Modern UI
+
+I want to make an important correction to the ongoing A3 UI/UX implementation.
+
+The current application still looks too much like the original interface, with excessive cards, outlined containers, nested boxes and visually cluttered sections.
+
+**I do not want boxes inside boxes inside boxes.**
+
+The approved A3 previews were significantly cleaner, and I want the actual application to match that visual direction much more closely.
+
+This is owner feedback on the ongoing approved A3 implementation. It does not revoke the existing foundation approval or require restarting the design process.
+
+## 1. Main design direction
+
+Adopt a cleaner, flatter, more cohesive visual system across the entire application.
+
+Prioritise:
+
+- Minimal unnecessary borders.
+- Fewer card backgrounds.
+- Clear typography and visual hierarchy.
+- Better spacing and alignment.
+- Less visual noise.
+- More consistent controls.
+- More usable content space.
+- Clear distinction between primary and secondary actions.
+- Smooth, cohesive workflows.
+- Professional, contemporary SaaS styling.
+
+The result should feel like a modern application, not a dashboard built from dozens of independent Material UI cards.
+
+**Flat does not mean everything must be borderless.** Use borders, backgrounds and elevation where they communicate meaningful structure, but not by default.
+
+## 2. Use the approved A3 design as the reference
+
+Inspect the actual approved design assets and documentation, including:
+
+`docs/product-modernisation/08-a3-handoff/`
+
+Review the consolidated A3 prototype and selected layouts, including the original A1 dashboard, D1 foundation, B1 application tracking, CV editor and application details.
+
+Compare actual rendered Jobjakt screens against those prototypes.
+
+Do not treat the existing implementation as the visual reference merely because it is already implemented.
+
+I want the actual application to move towards the approved A3 visual quality.
+
+Do not generate new design concepts or restart the design selection process.
+
+## 3. Remove excessive nested containers
+
+Audit the use of:
+
+- MUI Card.
+- MUI Paper.
+- Outlined Box components.
+- Container borders.
+- Nested surface backgrounds.
+- Unnecessary dividers.
+- Repeated section headers.
+- Excessive panel padding.
+- Redundant card shadows.
+- Nested accordion surfaces.
+
+Identify places where multiple visual containers represent one continuous workflow.
+
+Flatten these layouts.
+
+For example, instead of:
+
+Page → Card → Card → Section → Outlined Panel → Control
+
+Prefer:
+
+Page → Clear section heading → Content and controls
+
+Use typography, spacing and subtle section dividers to establish hierarchy.
+
+Avoid enclosing an entire page in a card and then placing more cards inside it.
+
+Use contained cards for genuinely distinct objects such as independent dashboard widgets, where appropriate.
+
+Do not remove necessary semantic grouping or accessible controls merely to eliminate visible borders.
+
+## 4. CV Builder — Immediate priority
+
+The current mobile CV Builder is especially cluttered.
+
+The screenshot shows:
+
+- A large bordered CV information panel.
+- Download and editor controls inside that panel.
+- Another bordered editing-controls panel.
+- Nested tabs and AI tools.
+- Additional outlined controls inside those sections.
+- Truncated tab labels at narrow widths.
+- Excessive vertical space used before the actual editing content.
+
+Redesign this to feel like one cohesive editing workspace.
+
+### CV header
+
+Use a compact document header with:
+
+- Back navigation.
+- CV title.
+- Save status.
+- Primary action where appropriate.
+- Secondary actions in a menu.
+
+Avoid a large card solely to display the CV title and actions.
+
+### Editing controls
+
+Use a clean, integrated toolbar.
+
+Avoid enclosing the whole toolbar inside another bordered container.
+
+### Tabs
+
+Use lightweight, accessible tabs.
+
+Ensure every tab remains usable on narrow screens.
+
+Consider scrolling tabs, a suitable overflow control or a more compact navigation pattern.
+
+Do not clip text.
+
+### AI tools
+
+Use simple, readable sections.
+
+Avoid unnecessary cards around every AI suggestion.
+
+Use subtle row separation and expandable details where useful.
+
+Keep AI contextual and optional.
+
+### Desktop layout
+
+Preserve the approved A3 arrangement:
+
+- Editor on the left.
+- Live preview on the right.
+
+### Mobile layout
+
+Use a dedicated mobile editing experience.
+
+- Prioritise the actual editing area.
+- Provide an intuitive Edit/Preview switch.
+- Avoid wasting vertical space on toolbars.
+- Keep essential actions accessible.
+- Preserve scroll position and editing state where practical.
+- Ensure fixed bottom navigation doesn't obscure content.
+
+Do not remove undo/redo, version history, AI tools, template controls, export options or other existing functionality.
+
+## 5. Simplify global navigation
+
+Review the current desktop and mobile headers.
+
+The existing mobile header uses too much space and has too many separate outlined icon controls.
+
+Follow the approved A3 approach:
+
+- Grouped, collapsible desktop sidebar.
+- Hybrid mobile navigation.
+- Compact top app bar.
+- Clearly prioritised actions.
+- Consistent active states.
+- Contextual secondary controls.
+
+Do not duplicate primary navigation actions unnecessarily between header and bottom navigation.
+
+Avoid unnecessary outlined circles around every icon.
+
+Keep language and account controls accessible without allowing them to dominate the interface.
+
+## 6. Apply this across the whole application
+
+This is not only a CV Builder change.
+
+Carry the same visual principles into:
+
+- Dashboard.
+- Job applications.
+- Application details.
+- Job discovery.
+- Career Profile.
+- CV templates.
+- CV import.
+- Cover letters.
+- Calendar.
+- Correspondence.
+- Documents.
+- Settings.
+- Automations.
+- Administration.
+- Onboarding.
+
+Avoid rebuilding every page independently.
+
+Improve shared layout primitives, design tokens and component variants so that the cleaner styling remains consistent.
+
+However, do not introduce a blanket CSS override that removes all borders indiscriminately.
+
+Use intentional component-level design.
+
+## 7. Mobile-first visual qualification
+
+The screenshot was captured at approximately 320 px width.
+
+This width must be properly supported.
+
+Test at least:
+
+- 320 px.
+- 360 px.
+- 390 px.
+- 430 px.
+- 768 px.
+- 1024 px.
+- 1440 px.
+
+Check both:
+
+- English and Norwegian Bokmål.
+- Light and dark themes.
+
+Also account for longer future European translations.
+
+Verify:
+
+- No clipped tabs.
+- No unexpected horizontal scrolling.
+- No overlapping controls.
+- No text hidden behind fixed navigation.
+- No excessively narrow content columns.
+- No unnecessary vertical padding.
+- Appropriate touch targets.
+- Clear content hierarchy.
+- Accessible keyboard and focus behaviour.
+
+Do not solve narrow-screen issues by hiding important features without a usable alternative.
+
+## 8. Visual hierarchy
+
+Establish a consistent hierarchy using:
+
+1. Page heading.
+2. Section heading.
+3. Primary content.
+4. Supporting content.
+5. Contextual actions.
+
+Avoid using bordered containers as the main method of distinguishing all five levels.
+
+Prefer typography, spacing and alignment.
+
+Use accent colours deliberately.
+
+Not every action needs a coloured background.
+
+Primary actions should stand out because they matter, not because nearly every button has a prominent fill.
+
+## 9. Compare with the prototypes
+
+Create side-by-side comparisons of:
+
+- Approved A3 prototype.
+- Current application before changes.
+- Updated application after changes.
+
+Do this for representative desktop and mobile screens.
+
+Pay particular attention to visual density, borders, nested surfaces, padding, navigation, typography and readability.
+
+Capture actual browser screenshots.
+
+Use the existing A3 design specifications as the primary reference.
+
+Do not claim visual parity without inspecting the rendered application.
+
+## 10. Preserve functionality
+
+All 57 preservation groups and 34 routes remain mandatory.
+
+Preserve existing application functionality, including:
+
+- CV revisions.
+- Undo/redo.
+- Imports and exports.
+- Career Profile data.
+- Dashboard customisation.
+- Authentication.
+- Job application records.
+- AI qualification restrictions.
+- Administration.
+- Existing language behaviour.
+- Accessibility functionality.
+- RD21 protections.
+
+This is a visual and UX improvement, not permission to delete advanced features.
+
+## 11. Validation and checkpoints
+
+Implement the corrections through the existing approved A3 workstream.
+
+Prioritise shared design-system improvements and the CV Builder mobile experience, then apply the same approach to other screens as their milestones are implemented.
+
+For each completed increment:
+
+- Run relevant tests.
+- Run typecheck, lint and build.
+- Capture browser screenshots.
+- Check English/Norwegian and both themes.
+- Verify mobile layouts.
+- Review preservation requirements.
+- Record visual differences against A3.
+- Commit validated changes.
+- Continue to the next authorised increment.
+
+Do not repeatedly ask for approval for ordinary spacing, border or component-style improvements already covered by this direction.
+
+Retain genuine mandatory milestone gates.
+
+If another workstream is blocked, continue independent authorised work.
+
+## 12. What I want to see
+
+The result should be:
+
+**Clean, cohesive, spacious where appropriate, but still information-dense and functional.**
+
+I want Jobjakt to feel like one professionally designed application rather than multiple boxed interfaces stacked inside one another.
+
+The UI should look much closer to the selected A3 previews.
+
+Avoid excessive decorative containers, oversized cards, repetitive headings and unnecessary borders.
+
+Do not use the autonomous orchestrator.
+
+Do not merge into main or deploy production.
+
+## Final instruction
+
+Treat this as an important design correction for the ongoing A3 implementation.
+
+Begin by auditing the current nested-container patterns and improving the actual mobile CV Builder and shared layout components.
+
+Then propagate the improvements through the remaining approved A3 implementation milestones.
+
+Keep the design clean and consistent across desktop and mobile.
+
+**The objective is to match the sophistication and simplicity of the approved A3 previews, not merely to restyle the original interface.**
\ No newline at end of file
diff --git a/docs/ui-modernisation/visual-correction/OWNER_GLOBAL_SIMPLIFICATION.md b/docs/ui-modernisation/visual-correction/OWNER_GLOBAL_SIMPLIFICATION.md
new file mode 100644
index 00000000..8d9422ec
--- /dev/null
+++ b/docs/ui-modernisation/visual-correction/OWNER_GLOBAL_SIMPLIFICATION.md
@@ -0,0 +1,255 @@
+# Jobjakt — A3 Global Visual Simplification: Desktop and Mobile
+
+This extends my previous A3 visual correction request.
+
+**The clean, modern, less-boxed design must apply to the ENTIRE application on BOTH desktop and mobile.**
+
+I do not want desktop layouts filled with cards inside cards, bordered panels inside bordered panels, or unnecessary containers simply because more space is available.
+
+This is a global design requirement, not a mobile-only adjustment.
+
+## 1. Global design principles
+
+Across every screen and viewport:
+
+- Remove unnecessary nested cards and panels.
+- Reduce visible borders and competing background surfaces.
+- Use typography, spacing and alignment to establish hierarchy.
+- Avoid excessive shadows and decorative dividers.
+- Use whitespace deliberately without creating overly sparse layouts.
+- Keep the interface professional, modern and cohesive.
+- Maintain useful information density.
+- Make primary actions obvious and secondary actions quieter.
+- Preserve all advanced functionality.
+
+I want something closer to the approved A3 mockups, rather than a lightly restyled version of the original application.
+
+## 2. Desktop layouts
+
+Desktop screens should use the extra space to improve workflows, not create additional layers of containers.
+
+### Global application shell
+
+- Clean, collapsible sidebar.
+- Minimal top navigation.
+- Consistent page headings.
+- Clearly organised actions.
+- No unnecessary outer card surrounding entire page content.
+- Avoid duplicated navigation and repeated titles.
+
+### Dashboard
+
+Use a coherent dashboard grid.
+
+Individual widgets may use subtle cards where they help distinguish independent information, but avoid nested cards within widgets.
+
+Allow users to rearrange, resize, add and hide widgets.
+
+Keep the dashboard informative without looking visually fragmented.
+
+### Job applications
+
+Prioritise clear tables, Kanban boards and useful contextual information.
+
+Avoid placing the entire table inside several layers of outlined containers.
+
+Use lightweight rows, subtle separators and clear status indicators.
+
+### Application details
+
+Preserve the approved A3 layout with contextual information on the right.
+
+Use a clean content hierarchy rather than stacking unrelated cards.
+
+Keep documents, correspondence, interviews and application history easy to navigate.
+
+### Job discovery
+
+Use a clear desktop layout with:
+
+- Filters on the left.
+- Results in the centre.
+- Job details on the right where appropriate.
+
+Prefer integrated panels with restrained separators rather than separate floating cards everywhere.
+
+### CV Builder
+
+Preserve the approved A3 design:
+
+- Editor left.
+- Live preview right.
+- Clear, compact document toolbar.
+- Lightweight section navigation.
+- AI assistance integrated contextually.
+
+Avoid enclosing the editor, its sections, the preview and every toolbar in multiple nested bordered surfaces.
+
+The CV itself may retain a paper-like visual appearance, because that represents a genuine document.
+
+### Career Profile
+
+Use clean sections with clear edit actions.
+
+Avoid individual cards for every small piece of information.
+
+### Settings and administration
+
+Use clear grouped settings, forms, tables and section headings.
+
+Prefer subtle separators over nested outlined panels.
+
+Do not make every setting a standalone card.
+
+## 3. Responsive behaviour
+
+Design desktop, tablet and mobile as parts of the same cohesive system.
+
+Do not create a clean mobile experience while leaving desktop cluttered.
+
+Test:
+
+- 320 px.
+- 360 px.
+- 390 px.
+- 430 px.
+- 768 px.
+- 1024 px.
+- 1280 px.
+- 1440 px.
+- 1920 px.
+
+Check English/Norwegian and both light/dark modes.
+
+Ensure long European translations do not break layouts.
+
+No clipped labels, excessive empty space, overlapping controls or unnecessary horizontal scrolling.
+
+## 4. Establish reusable visual rules
+
+Implement the design using shared MUI theme tokens, layout components and appropriate variants.
+
+Avoid one-off CSS fixes for every screen.
+
+Establish consistent rules for:
+
+- Page backgrounds.
+- Content surfaces.
+- Borders.
+- Elevation.
+- Dividers.
+- Spacing.
+- Typography.
+- Toolbars.
+- Section headings.
+- Forms.
+- Tables.
+- Dialogs.
+- Sidebar panels.
+- Dashboard widgets.
+
+Use card-like containers only where there is a genuine conceptual or functional reason.
+
+A useful rule:
+
+**If removing a border, background or card wrapper does not harm comprehension, remove it.**
+
+Do not simply make borders transparent while retaining excessive nested padding and empty space. Simplify the actual component hierarchy and layout.
+
+## 5. Audit visual density
+
+Perform a real rendered-app audit.
+
+Identify:
+
+- Nested card depth.
+- Repeated decorative surfaces.
+- Excessive page padding.
+- Oversized toolbars.
+- Unnecessary titles.
+- Wasted vertical space.
+- Inconsistent content widths.
+- Overly prominent secondary actions.
+
+Compare representative actual screens against the approved A3 prototypes.
+
+Include desktop and mobile screenshots, before and after.
+
+Where feasible, measure improvements such as reduced nested-surface depth and additional usable content area, without treating numerical targets as substitutes for visual quality.
+
+## 6. Preserve functionality
+
+Retain the existing 57 preservation groups and 34 routes.
+
+Do not remove functionality merely to achieve a cleaner appearance.
+
+Preserve:
+
+- CV editing and revisions.
+- Undo/redo.
+- Document exports.
+- Job tracking.
+- Dashboard customisation.
+- Career Profile.
+- AI features and qualification restrictions.
+- Administration.
+- Accessibility.
+- Existing localisation.
+- Data integrity protections.
+
+Complex workflows can remain powerful without looking cluttered.
+
+## 7. Implementation and verification
+
+Apply this across the existing approved A3 implementation milestones.
+
+Start with shared components and the actual CV Builder, then propagate the design system through the application.
+
+For every meaningful increment:
+
+- Run appropriate tests.
+- Compare actual screenshots against A3.
+- Verify desktop and mobile layouts.
+- Test light and dark themes.
+- Test English and Norwegian.
+- Check keyboard accessibility.
+- Preserve existing workflows.
+- Commit validated checkpoints.
+
+Do not stop after simplifying one example page.
+
+Track all relevant routes in a visual-consistency coverage matrix until the entire application has been assessed.
+
+## 8. Autonomy
+
+This is an approved visual direction.
+
+Do not repeatedly ask for approval for routine border removal, spacing refinement, component flattening or visual consistency fixes.
+
+Continue independently authorised A3 implementation work.
+
+Pause only for mandatory owner gates or significant deviations from the approved design.
+
+If blocked, record the issue and continue other eligible work.
+
+Do not use the autonomous orchestrator.
+
+Do not merge into main or deploy production.
+
+## Final objective
+
+I want Jobjakt to have **one clean, premium-quality visual language across desktop, tablet and mobile**.
+
+No excessive cards within cards.
+
+No unnecessary borders.
+
+No cluttered toolbars.
+
+No wasted screen space.
+
+Use thoughtful information architecture, typography, whitespace, restrained surfaces and clear interactions.
+
+**Bring the actual application substantially closer to the approved A3 previews on every screen size, not just mobile.**
+
+Continue implementation and comprehensive visual qualification.
\ No newline at end of file
diff --git a/docs/ui-modernisation/visual-correction/README.md b/docs/ui-modernisation/visual-correction/README.md
new file mode 100644
index 00000000..24103e3c
--- /dev/null
+++ b/docs/ui-modernisation/visual-correction/README.md
@@ -0,0 +1,19 @@
+# A3 global visual correction — active owner direction
+
+3 November 2026. Owner's two attachments are preserved verbatim beside this file. Subsequent owner definition of done also requires every34-route/57-group area to be reviewed; efficient desktop/multi-column and mobile layouts; consistent interactions and feedback; representative discovery→track, CV import/create→edit→preview→export, application→status→follow-up and Career Profile→document journeys. Actual rendered comparisons against approved A3 are required. Functional tests alone do not establish visual acceptance.
+
+This is an authorised correction within existing A3/IM10, not a new concept or revoked foundation. Original A1 dashboard, D1 palette/open sections, B1 tracking, editor-left/preview-right, right-side application context and sidebar/hybrid navigation remain. Routine flattening/spacing does not require repeat approval. Genuine milestone, security/provider/model/native/release gates remain.
+
+Required widths: **320,360,390,430,768,1024,1280,1440,1920**, EN/NB and light/dark (36 configurations per assessed screen/state). Prepare for longer European labels. Do not claim complete overhaul while material boxed-interface discrepancies remain. Required outcome is ready for final owner visual review, with outstanding human/device/accessibility checks accurately recorded.
+
+Current before evidence confirms material discrepancies: compact A3 reference uses open sections; actual CV has an outlined document-header card, outlined editor and preview shells, nested section and AI cards, repeated editing headings/help, partially visible section tabs and a two-row mobile app bar with outlined icons. Earlier accepted functional increments remain functional evidence; visual parity is reopened by this correction.
+
+Immediate increment: compact shared shell, intentional shared section rules and integrated CV workspace. Retain semantic groups, focus targets, actual document paper, form fields/dialog boundaries and meaningful independent widgets. Do not use a blanket Paper/border override or retain empty nested padding. Then propagate the system through all routes and resolve material discrepancies in the coverage register.
+
+Keep before/approved/after browser images, a discrepancy register and metrics such as visual surface depth and available editing area. Metrics support actual visual inspection, not replace it. All57 source criteria/34 routes, revisions/undo/history, canonical profile, CAS/dashboard geometry, imports/exports, permissions, consent and RD21 remain mandatory.
+
+Continuity: validated baseline7aa54bff1fe376b798922b9da75feafa202dbb76 is published/remotely verified; ccf8d264 earlier localisation/census is also verified. Mounted entitlement-refresh fix remains uncommitted with39 preference/Settings/catalogue tests plus30 boundary/navigation tests passed,types/lint/build passed. Its16-configuration browser attempt stopped on a genuine NB320 scrollable-message accessibility defect in ProFeatureNotice; preserve failed evidence and fix the shared notice layout rather than suppress axe. Existing wrong-identity pilot expectation was corrected to respect session reset. No complete64-state pass or closed refresh gap claimed yet.
+
+No orchestrator, pre-P10 changes, main merge or production deployment. Full Phase10/Global Jobs/European localisation/launch/security/recovery/release qualification remains separate.
+
+4 November successor: shared shell/CV/Settings correction implemented. CV matrix passed36 configurations/108 scans and screenshots; mounted entitlement refresh passed16 journeys/64 scans and screenshots. Tablet header overlap and the NB320 notice defect were fixed; failed predecessor reports retained. These supersede the WIP browser limitations above. See VALIDATION.md, DISCREPANCIES.md, comparison.html and the current route coverage register. Remaining routes and final owner visual acceptance are open; no new owner input is needed for the next eligible implementation/review package.
diff --git a/docs/ui-modernisation/visual-correction/ROUTE_COVERAGE.json b/docs/ui-modernisation/visual-correction/ROUTE_COVERAGE.json
new file mode 100644
index 00000000..7ae19d60
--- /dev/null
+++ b/docs/ui-modernisation/visual-correction/ROUTE_COVERAGE.json
@@ -0,0 +1,336 @@
+{
+ "date": "2026-11-03",
+ "basis": "Owner global visual correction and final definition of done",
+ "widths": [
+ 320,
+ 360,
+ 390,
+ 430,
+ 768,
+ 1024,
+ 1280,
+ 1440,
+ 1920
+ ],
+ "languages": [
+ "en",
+ "nb"
+ ],
+ "themes": [
+ "light",
+ "dark"
+ ],
+ "groups": 57,
+ "routes": [
+ {
+ "route": "/",
+ "owners": [
+ "Navigate",
+ "LandingPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/dashboard",
+ "owners": [
+ "DashboardView"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/analytics",
+ "owners": [
+ "AnalyticsPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/discover",
+ "owners": [
+ "JobDiscoveryPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/jobs",
+ "owners": [
+ "JobTable"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/jobs/:id",
+ "owners": [
+ "ApplicationWorkspacePage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/reminders",
+ "owners": [
+ "RemindersView"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/operations",
+ "owners": [
+ "OperationsPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/kanban",
+ "owners": [
+ "LegacyBoardRedirect"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/companies",
+ "owners": [
+ "CompaniesTable"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/offers",
+ "owners": [
+ "OfferComparisonPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/correspondence",
+ "owners": [
+ "CorrespondenceInboxPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/correspondence/review",
+ "owners": [
+ "LegacyCorrespondenceReviewRedirect"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/profile",
+ "owners": [
+ "ProfilePage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/applications/:id",
+ "owners": [
+ "LegacyApplicationRedirect"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/career",
+ "owners": [
+ "CareerWorkspacePage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/career/builder",
+ "owners": [
+ "CvBuilderPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/career/builder/:id",
+ "owners": [
+ "CvBuilderEditor"
+ ],
+ "visualStatus": "CORRECTED_SCOPED_REVIEW_PENDING_FULL_ACCEPTANCE",
+ "afterStatus": "PASSED: 36 configurations, content/preview/AI review = 108 rendered accessibility states; manual comparison sampled phone and desktop",
+ "evidence": "evidence/cv/REVIEW.json; comparison.html; DISCREPANCIES.md V02/V03",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/documents",
+ "owners": [
+ "DocumentsPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/admin/audit",
+ "owners": [
+ "AdminAuditPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/admin/users",
+ "owners": [
+ "AdminUsersPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/admin/system",
+ "owners": [
+ "AdminSystemPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/trash",
+ "owners": [
+ "JobTable"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/settings",
+ "owners": [
+ "SettingsView"
+ ],
+ "visualStatus": "FLAT_SECTIONS_IMPLEMENTED_PENDING_COMPLETE_REVIEW",
+ "afterStatus": "PARTIAL: General section captured in 16 refresh configurations; notification draft retention asserted; remaining sections/states and five additional widths pending",
+ "evidence": "../evidence/entitlement-refresh/browser/BROWSER.json; DISCREPANCIES.md V04",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/settings/connected-accounts",
+ "owners": [
+ "ConnectedAccountsPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/login",
+ "owners": [
+ "LoginPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "PARTIAL: session-reset login captured in 16 refresh configurations; full authentication visual review pending",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/register",
+ "owners": [
+ "LoginPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/forgot-password",
+ "owners": [
+ "ForgotPasswordPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/reset-password",
+ "owners": [
+ "ResetPasswordPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/verify-email",
+ "owners": [
+ "VerifyEmailPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/confirm-email-change",
+ "owners": [
+ "VerifyEmailPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/microsoft-legacy-relink",
+ "owners": [
+ "MicrosoftLegacyRelinkPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/cv/:slug",
+ "owners": [
+ "PublicCvPage"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ },
+ {
+ "route": "/admin/processing",
+ "owners": [
+ "AdminProcessingPage",
+ "AdminProcessingController"
+ ],
+ "visualStatus": "PENDING_RENDERED_REVIEW",
+ "afterStatus": "NOT RUN",
+ "functionalCriteria": "Original preservation register retained; no capability acceptance promotion"
+ }
+ ]
+}
diff --git a/docs/ui-modernisation/visual-correction/SHARED_TESTS.json b/docs/ui-modernisation/visual-correction/SHARED_TESTS.json
new file mode 100644
index 00000000..50c33284
--- /dev/null
+++ b/docs/ui-modernisation/visual-correction/SHARED_TESTS.json
@@ -0,0 +1 @@
+{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":11,"numPassedTests":81,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":11,"numTotalTests":81,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793736524247,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":180,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 backup] unknown lifecycle never claims disabled and Retry only reads","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736528109,"status":"passed","title":"[P7-09 backup] unknown lifecycle never claims disabled and Retry only reads"},{"ancestorTitles":[],"duration":63,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 backup] synchronous duplicate and competing downloads admit only one request","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736528289,"status":"passed","title":"[P7-09 backup] synchronous duplicate and competing downloads admit only one request"},{"ancestorTitles":[],"duration":20,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 backup] disposal rejects a late readable export without downloading private bytes or notifying","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736528352,"status":"passed","title":"[P7-09 backup] disposal rejects a late readable export without downloading private bytes or notifying"},{"ancestorTitles":[],"duration":58,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 backup] disposal during the existing deletion prompt cannot issue a later delete","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793736528372,"status":"passed","title":"[P7-09 backup] disposal during the existing deletion prompt cannot issue a later delete"}],"endTime":1793736528431,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\backup-lifetime.test.tsx","startTime":1793736525337,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":76,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account data entry selects a supported initial section (data)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736529474,"status":"passed","title":"account data entry selects a supported initial section (data)"},{"ancestorTitles":[],"duration":182,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account data entry selects a supported initial section (unknown)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736529550,"status":"passed","title":"account data entry selects a supported initial section (unknown)"},{"ancestorTitles":[],"duration":455,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"each selected Settings section has a named panel linked to its tab and remains selectable on phones","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793736529732,"status":"passed","title":"each selected Settings section has a named panel linked to its tab and remains selectable on phones"},{"ancestorTitles":[],"duration":202,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"settings view has no accent picker and uses one follow-up section, one notification section","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793736530187,"status":"passed","title":"settings view has no accent picker and uses one follow-up section, one notification section"},{"ancestorTitles":[],"duration":67,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AI privacy settings are server-backed and external processing is local-only by default","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736530390,"status":"passed","title":"AI privacy settings are server-backed and external processing is local-only by default"},{"ancestorTitles":[],"duration":4212,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] failed notification save preserves the draft for an explicit retry","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793736530457,"status":"passed","title":"[PRES-S03] failed notification save preserves the draft for an explicit retry"},{"ancestorTitles":[],"duration":397,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 PRES-W11] saving one follow-up rule preserves the other scenarios","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793736534669,"status":"passed","title":"[PRES-S03 PRES-W11] saving one follow-up rule preserves the other scenarios"},{"ancestorTitles":[],"duration":275,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 PRES-J05] table and theme preferences keep their independent callbacks","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736535066,"status":"passed","title":"[PRES-S03 PRES-J05] table and theme preferences keep their independent callbacks"},{"ancestorTitles":[],"duration":422,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 W11] the Settings session retains independent pending Rules fields across tab unmounts","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793736535341,"status":"passed","title":"[PRES-S03 W11] the Settings session retains independent pending Rules fields across tab unmounts"},{"ancestorTitles":[],"duration":503,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] failed Rules save remains actionable after tab return and explicit retry clears dirty state","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793736535763,"status":"passed","title":"[PRES-S03] failed Rules save remains actionable after tab return and explicit retry clears dirty state"},{"ancestorTitles":[],"duration":632,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] invalid and empty Rules input and associated validation survive internal navigation","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736536266,"status":"passed","title":"[PRES-S03] invalid and empty Rules input and associated validation survive internal navigation"},{"ancestorTitles":[],"duration":337,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] explicit discard resets only the Rules draft to its saved baseline without writing","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736536898,"status":"passed","title":"[PRES-S03] explicit discard resets only the Rules draft to its saved baseline without writing"},{"ancestorTitles":[],"duration":511,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] later edits stay dirty when an earlier Rules save completes after a tab switch","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736537235,"status":"passed","title":"[PRES-S03] later edits stay dirty when an earlier Rules save completes after a tab switch"},{"ancestorTitles":[],"duration":547,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 E09] leaving the Settings session disposes its draft and pending responses","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736537746,"status":"passed","title":"[PRES-S03 E09] leaving the Settings session disposes its draft and pending responses"},{"ancestorTitles":[],"duration":383,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] switching locale while Rules is hidden does not reload or overwrite its pending draft","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736538293,"status":"passed","title":"[PRES-S03] switching locale while Rules is hidden does not reload or overwrite its pending draft"},{"ancestorTitles":[],"duration":335,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] Rules draft updates do not refetch an unrelated notification preference","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736538676,"status":"passed","title":"[PRES-S03] Rules draft updates do not refetch an unrelated notification preference"},{"ancestorTitles":[],"duration":241,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en Automation reuses the saved notification preference and explicit save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736539011,"status":"passed","title":"en Automation reuses the saved notification preference and explicit save"},{"ancestorTitles":[],"duration":211,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb Automation reuses the saved notification preference and explicit save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736539253,"status":"passed","title":"nb Automation reuses the saved notification preference and explicit save"},{"ancestorTitles":[],"duration":275,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Automation AI entry moves focus into existing settings without an AI request","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736539464,"status":"passed","title":"Automation AI entry moves focus into existing settings without an AI request"},{"ancestorTitles":[],"duration":380,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] initial notification failure offers a single GET Retry and recovers its vanished focused action","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793736539739,"status":"passed","title":"[P7-09 preferences] initial notification failure offers a single GET Retry and recovers its vanished focused action"},{"ancestorTitles":[],"duration":352,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] notification drafts survive internal sections and locale changes without a GET or save","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736540119,"status":"passed","title":"[P7-09 preferences] notification drafts survive internal sections and locale changes without a GET or save"},{"ancestorTitles":[],"duration":831,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] one held notification save acknowledges its snapshot and preserves later edits across sections","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793736540471,"status":"passed","title":"[P7-09 preferences] one held notification save acknowledges its snapshot and preserves later edits across sections"},{"ancestorTitles":[],"duration":437,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] failed notification save keeps its current-locale draft and retries only the original Save","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793736541302,"status":"passed","title":"[P7-09 preferences] failed notification save keeps its current-locale draft and retries only the original Save"},{"ancestorTitles":[],"duration":539,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] discarding a notification draft leaves the independent Rules draft untouched","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793736541739,"status":"passed","title":"[P7-09 preferences] discarding a notification draft leaves the independent Rules draft untouched"},{"ancestorTitles":[],"duration":304,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] a disposed notification save cannot publish into surviving providers or a new Settings session","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736542278,"status":"passed","title":"[P7-09 preferences] a disposed notification save cannot publish into surviving providers or a new Settings session"},{"ancestorTitles":[],"duration":435,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] Rules load failure follows locale without reloading and Retry retains the six-field contract","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793736542582,"status":"passed","title":"[P7-09 preferences] Rules load failure follows locale without reloading and Retry retains the six-field contract"}],"endTime":1793736543018,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\settings-view.test.tsx","startTime":1793736528442,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":382,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en hybrid navigation has five labelled destinations and retains secondary tools","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793736543886,"status":"passed","title":"en hybrid navigation has five labelled destinations and retains secondary tools"},{"ancestorTitles":[],"duration":279,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb hybrid navigation has five labelled destinations and retains secondary tools","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793736544268,"status":"passed","title":"nb hybrid navigation has five labelled destinations and retains secondary tools"},{"ancestorTitles":[],"duration":204,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career/builder/42 selects its primary destination and keyboard route focus survives","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736544547,"status":"passed","title":"/career/builder/42 selects its primary destination and keyboard route focus survives"},{"ancestorTitles":[],"duration":172,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/applications/42 selects its primary destination and keyboard route focus survives","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736544751,"status":"passed","title":"/applications/42 selects its primary destination and keyboard route focus survives"},{"ancestorTitles":[],"duration":95,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/jobs/42 selects its primary destination and keyboard route focus survives","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736544923,"status":"passed","title":"/jobs/42 selects its primary destination and keyboard route focus survives"},{"ancestorTitles":[],"duration":241,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"desktop retains labelled collapse, persistence, and all secondary destinations","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736545018,"status":"passed","title":"desktop retains labelled collapse, persistence, and all secondary destinations"},{"ancestorTitles":[],"duration":254,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"choosing the current destination from More closes the drawer and focuses its heading","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736545259,"status":"passed","title":"choosing the current destination from More closes the drawer and focuses its heading"}],"endTime":1793736545513,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\a3-navigation.test.tsx","startTime":1793736543027,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":71,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps its heading and named loading state, then retries only a failed usage GET","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736546309,"status":"passed","title":"keeps its heading and named loading state, then retries only a failed usage GET"},{"ancestorTitles":[],"duration":62,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"billing failure remains visible beside usage and its Retry only reads billing","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793736546380,"status":"passed","title":"billing failure remains visible beside usage and its Retry only reads billing"},{"ancestorTitles":[],"duration":46,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"locale changes format numbers and byte decimals without reloading; zero storage limit stays finite","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793736546442,"status":"passed","title":"locale changes format numbers and byte decimals without reloading; zero storage limit stays finite"},{"ancestorTitles":[],"duration":30,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"one billing POST ignores a late failure after unmount","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736546488,"status":"passed","title":"one billing POST ignores a late failure after unmount"},{"ancestorTitles":[],"duration":38,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"one billing POST ignores a late failure after session","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736546518,"status":"passed","title":"one billing POST ignores a late failure after session"},{"ancestorTitles":[],"duration":23,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"late billing success after unmount never consumes the redirect URL","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793736546556,"status":"passed","title":"late billing success after unmount never consumes the redirect URL"},{"ancestorTitles":[],"duration":39,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"late billing success after session never consumes the redirect URL","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793736546579,"status":"passed","title":"late billing success after session never consumes the redirect URL"},{"ancestorTitles":[],"duration":87,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a failed billing POST offers the existing explicit action without automatic replay","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793736546618,"status":"passed","title":"a failed billing POST offers the existing explicit action without automatic replay"},{"ancestorTitles":[],"duration":34,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows monthly AI call and token limits","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736546706,"status":"passed","title":"shows monthly AI call and token limits"},{"ancestorTitles":[],"duration":27,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"does not offer a false upgrade action when billing is not configured","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736546740,"status":"passed","title":"does not offer a false upgrade action when billing is not configured"}],"endTime":1793736546768,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\ai-usage-card.test.tsx","startTime":1793736545522,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":74,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a persisted AI preference refreshes server availability after the save acknowledgement","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736547552,"status":"passed","title":"a persisted AI preference refreshes server availability after the save acknowledgement"},{"ancestorTitles":[],"duration":77,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"availability refresh failure does not misreport an acknowledged save or repeat its write","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736547627,"status":"passed","title":"availability refresh failure does not misreport an acknowledged save or repeat its write"},{"ancestorTitles":[],"duration":62,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed AI preference writes do not refresh availability","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793736547704,"status":"passed","title":"failed AI preference writes do not refresh availability"},{"ancestorTitles":[],"duration":53,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"an unmounted preference save cannot refresh a later account view","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736547766,"status":"passed","title":"an unmounted preference save cannot refresh a later account view"},{"ancestorTitles":[],"duration":72,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] failed initial read has a read-only Retry and no perpetual loading","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793736547820,"status":"passed","title":"[P7-09 privacy] failed initial read has a read-only Retry and no perpetual loading"},{"ancestorTitles":[],"duration":149,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] submitted acknowledgement preserves a newer edit and serializes Save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736547893,"status":"passed","title":"[P7-09 privacy] submitted acknowledgement preserves a newer edit and serializes Save"},{"ancestorTitles":[],"duration":123,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] a failed save retains the draft and never replays through read recovery","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736548042,"status":"passed","title":"[P7-09 privacy] a failed save retains the draft and never replays through read recovery"},{"ancestorTitles":[],"duration":57,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] unmount ignores an old save acknowledgement and success notification","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793736548165,"status":"passed","title":"[P7-09 privacy] unmount ignores an old save acknowledgement and success notification"},{"ancestorTitles":[],"duration":101,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] pending save uses the current language without refetching the draft","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736548222,"status":"passed","title":"[P7-09 privacy] pending save uses the current language without refetching the draft"},{"ancestorTitles":[],"duration":41,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 privacy] local-only capability permits revoking a historical external consent","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736548323,"status":"passed","title":"[P7-09 privacy] local-only capability permits revoking a historical external consent"}],"endTime":1793736548365,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\ai-privacy-settings.test.tsx","startTime":1793736546775,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":334,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E07 E08 A03] en mobile names/current route ignore desktop collapse and retain metadata","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736549182,"status":"passed","title":"[P5-00 PRES-E07 E08 A03] en mobile names/current route ignore desktop collapse and retain metadata"},{"ancestorTitles":[],"duration":240,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E07 E08 A03] nb mobile names/current route ignore desktop collapse and retain metadata","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736549516,"status":"passed","title":"[P5-00 PRES-E07 E08 A03] nb mobile names/current route ignore desktop collapse and retain metadata"},{"ancestorTitles":[],"duration":221,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"compact mobile account menu preserves language selection and Settings access","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736549756,"status":"passed","title":"compact mobile account menu preserves language selection and Settings access"},{"ancestorTitles":[],"duration":48,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E08 S05] toast retains its full existing display duration and dismiss action","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736549977,"status":"passed","title":"[P5-00 PRES-E08 S05] toast retains its full existing display duration and dismiss action"},{"ancestorTitles":[],"duration":21,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E08] toast action is explicit and executes once","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736550025,"status":"passed","title":"[P5-00 PRES-E08] toast action is explicit and executes once"}],"endTime":1793736550046,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\shell-readiness.test.tsx","startTime":1793736548372,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":197,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"language controls identify Bokmål with its native name and language code","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793736550790,"status":"passed","title":"language controls identify Bokmål with its native name and language code"},{"ancestorTitles":[],"duration":112,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-01 PRES-E07 E08] grouped navigation exposes the current child without marking the parent as the page","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793736550987,"status":"passed","title":"[P5-01 PRES-E07 E08] grouped navigation exposes the current child without marking the parent as the page"},{"ancestorTitles":[],"duration":220,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-01 PRES-E07 E08] collapsed secondary destinations remain keyboard-operable","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736551099,"status":"passed","title":"[P5-01 PRES-E07 E08] collapsed secondary destinations remain keyboard-operable"},{"ancestorTitles":[],"duration":148,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-01 PRES-E08] successful shell navigation focuses the new route heading and exposes a skip link","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736551319,"status":"passed","title":"[P5-01 PRES-E08] successful shell navigation focuses the new route heading and exposes a skip link"}],"endTime":1793736551468,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\app-shell-navigation.test.tsx","startTime":1793736550054,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":88,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"notification bell exposes its unread count and keyboard-accessible action","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793736552210,"status":"passed","title":"notification bell exposes its unread count and keyboard-accessible action"},{"ancestorTitles":[],"duration":103,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows localized en build metadata only when the caller supplies the admin-only badge","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736552298,"status":"passed","title":"shows localized en build metadata only when the caller supplies the admin-only badge"},{"ancestorTitles":[],"duration":80,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows localized nb build metadata only when the caller supplies the admin-only badge","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736552401,"status":"passed","title":"shows localized nb build metadata only when the caller supplies the admin-only badge"},{"ancestorTitles":[],"duration":80,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shell icon controls expose accessible names","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736552481,"status":"passed","title":"shell icon controls expose accessible names"},{"ancestorTitles":[],"duration":91,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 notifications] an unavailable unread count stays unknown and its description follows the UI language","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736552561,"status":"passed","title":"[P7-08 notifications] an unavailable unread count stays unknown and its description follows the UI language"},{"ancestorTitles":[],"duration":57,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 notifications] a recorded zero unread count has a truthful separate description","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736552652,"status":"passed","title":"[P7-08 notifications] a recorded zero unread count has a truthful separate description"},{"ancestorTitles":[],"duration":84,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 notifications] the known unread count is described in Bokmål without changing the bell action's name","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736552709,"status":"passed","title":"[P7-08 notifications] the known unread count is described in Bokmål without changing the bell action's name"}],"endTime":1793736552794,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\app-shell-notifications.test.tsx","startTime":1793736551477,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["account-scoped browser state"],"duration":147,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account-scoped browser state keeps saved views private to the account that created them","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736553886,"status":"passed","title":"keeps saved views private to the account that created them"},{"ancestorTitles":["account-scoped browser state"],"duration":92,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account-scoped browser state does not show a previous account's cached companies after account switching","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736554034,"status":"passed","title":"does not show a previous account's cached companies after account switching"}],"endTime":1793736554126,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\account-scoped-state.test.tsx","startTime":1793736552801,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":22,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps paid users on the manual path without an upgrade prompt (en)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736554843,"status":"passed","title":"keeps paid users on the manual path without an upgrade prompt (en)"},{"ancestorTitles":[],"duration":9,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps paid users on the manual path without an upgrade prompt (nb)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736554866,"status":"passed","title":"keeps paid users on the manual path without an upgrade prompt (nb)"},{"ancestorTitles":[],"duration":10,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows a respectful upgrade action and remembers dismissal for the session","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736554875,"status":"passed","title":"shows a respectful upgrade action and remembers dismissal for the session"}],"endTime":1793736554886,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\pro-feature-notice.test.tsx","startTime":1793736554135,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":7,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"English and Bokmål expose the same UI message keys","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793736555238,"status":"passed","title":"English and Bokmål expose the same UI message keys"},{"ancestorTitles":[],"duration":5,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Bokmål preserves every English substitution variable","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793736555245,"status":"passed","title":"Bokmål preserves every English substitution variable"},{"ancestorTitles":[],"duration":2,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"supported UI catalogues contain no blank messages","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793736555250,"status":"passed","title":"supported UI catalogues contain no blank messages"}],"endTime":1793736555253,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\translation-catalogue.test.ts","startTime":1793736554913,"status":"passed","summary":""}],"wasInterrupted":false}
diff --git a/docs/ui-modernisation/visual-correction/SHELL_TESTS.json b/docs/ui-modernisation/visual-correction/SHELL_TESTS.json
new file mode 100644
index 00000000..3175ade9
--- /dev/null
+++ b/docs/ui-modernisation/visual-correction/SHELL_TESTS.json
@@ -0,0 +1 @@
+{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":4,"numPassedTests":20,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":4,"numTotalTests":20,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793736422057,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":400,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en hybrid navigation has five labelled destinations and retains secondary tools","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793736425564,"status":"passed","title":"en hybrid navigation has five labelled destinations and retains secondary tools"},{"ancestorTitles":[],"duration":248,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb hybrid navigation has five labelled destinations and retains secondary tools","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793736425964,"status":"passed","title":"nb hybrid navigation has five labelled destinations and retains secondary tools"},{"ancestorTitles":[],"duration":157,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career/builder/42 selects its primary destination and keyboard route focus survives","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736426212,"status":"passed","title":"/career/builder/42 selects its primary destination and keyboard route focus survives"},{"ancestorTitles":[],"duration":102,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/applications/42 selects its primary destination and keyboard route focus survives","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736426369,"status":"passed","title":"/applications/42 selects its primary destination and keyboard route focus survives"},{"ancestorTitles":[],"duration":84,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/jobs/42 selects its primary destination and keyboard route focus survives","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736426471,"status":"passed","title":"/jobs/42 selects its primary destination and keyboard route focus survives"},{"ancestorTitles":[],"duration":259,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"desktop retains labelled collapse, persistence, and all secondary destinations","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736426555,"status":"passed","title":"desktop retains labelled collapse, persistence, and all secondary destinations"},{"ancestorTitles":[],"duration":244,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"choosing the current destination from More closes the drawer and focuses its heading","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736426814,"status":"passed","title":"choosing the current destination from More closes the drawer and focuses its heading"}],"endTime":1793736427059,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\a3-navigation.test.tsx","startTime":1793736422943,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["account-scoped browser state"],"duration":171,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account-scoped browser state keeps saved views private to the account that created them","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736427777,"status":"passed","title":"keeps saved views private to the account that created them"},{"ancestorTitles":["account-scoped browser state"],"duration":77,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account-scoped browser state does not show a previous account's cached companies after account switching","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736427949,"status":"passed","title":"does not show a previous account's cached companies after account switching"}],"endTime":1793736428027,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\account-scoped-state.test.tsx","startTime":1793736427069,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":275,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E07 E08 A03] en mobile names/current route ignore desktop collapse and retain metadata","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736428791,"status":"passed","title":"[P5-00 PRES-E07 E08 A03] en mobile names/current route ignore desktop collapse and retain metadata"},{"ancestorTitles":[],"duration":208,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E07 E08 A03] nb mobile names/current route ignore desktop collapse and retain metadata","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793736429066,"status":"passed","title":"[P5-00 PRES-E07 E08 A03] nb mobile names/current route ignore desktop collapse and retain metadata"},{"ancestorTitles":[],"duration":52,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E08 S05] toast retains its full existing display duration and dismiss action","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736429274,"status":"passed","title":"[P5-00 PRES-E08 S05] toast retains its full existing display duration and dismiss action"},{"ancestorTitles":[],"duration":20,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-00 PRES-E08] toast action is explicit and executes once","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793736429326,"status":"passed","title":"[P5-00 PRES-E08] toast action is explicit and executes once"}],"endTime":1793736429346,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\shell-readiness.test.tsx","startTime":1793736428035,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":90,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"notification bell exposes its unread count and keyboard-accessible action","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793736430049,"status":"passed","title":"notification bell exposes its unread count and keyboard-accessible action"},{"ancestorTitles":[],"duration":94,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows localized en build metadata only when the caller supplies the admin-only badge","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736430139,"status":"passed","title":"shows localized en build metadata only when the caller supplies the admin-only badge"},{"ancestorTitles":[],"duration":75,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows localized nb build metadata only when the caller supplies the admin-only badge","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736430233,"status":"passed","title":"shows localized nb build metadata only when the caller supplies the admin-only badge"},{"ancestorTitles":[],"duration":72,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shell icon controls expose accessible names","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736430308,"status":"passed","title":"shell icon controls expose accessible names"},{"ancestorTitles":[],"duration":75,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 notifications] an unavailable unread count stays unknown and its description follows the UI language","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736430381,"status":"passed","title":"[P7-08 notifications] an unavailable unread count stays unknown and its description follows the UI language"},{"ancestorTitles":[],"duration":51,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 notifications] a recorded zero unread count has a truthful separate description","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793736430456,"status":"passed","title":"[P7-08 notifications] a recorded zero unread count has a truthful separate description"},{"ancestorTitles":[],"duration":79,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 notifications] the known unread count is described in Bokmål without changing the bell action's name","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793736430507,"status":"passed","title":"[P7-08 notifications] the known unread count is described in Bokmål without changing the bell action's name"}],"endTime":1793736430587,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\app-shell-notifications.test.tsx","startTime":1793736429357,"status":"passed","summary":""}],"wasInterrupted":false}
diff --git a/docs/ui-modernisation/visual-correction/SOURCE_MANIFEST.json b/docs/ui-modernisation/visual-correction/SOURCE_MANIFEST.json
new file mode 100644
index 00000000..da53e015
--- /dev/null
+++ b/docs/ui-modernisation/visual-correction/SOURCE_MANIFEST.json
@@ -0,0 +1,550 @@
+{
+ "base": "7aa54bff1fe376b798922b9da75feafa202dbb76",
+ "policy": "LF-normalised source/text evidence, raw PNG and export bytes",
+ "sources": {
+ "docs/pre-phase10-ux/preservation.json": "a4c2a5a0244ea89381008218de32daee1f615a250eb3808b60e0ee103c674d4d",
+ "job-tracker-ui/package-lock.json": "bf31e90d7af03e8af059db2aaf893925b9e8881a30a1688034ed88ef45d4fcab",
+ "job-tracker-ui/package.json": "3745394e406cefa40d30a87e840bccb359be147bac6ffba736e2ae90898a8626",
+ "job-tracker-ui/scripts/verify-a3-ai-settings.mjs": "a4c9bd5df2e747e7a02e21fc0b666be49e573960080901d10424784f93302fa5",
+ "job-tracker-ui/scripts/verify-a3-entitlement-refresh.mjs": "ae7a659e547b782cfcefa2edea2838f3b74649e0f44460cb4a2bd43506e689d2",
+ "job-tracker-ui/src/App.test.tsx": "f3b39f696867c1027df473821005be312205ff9a9d6a4183882227efa1190fa9",
+ "job-tracker-ui/src/App.tsx": "d0dedb54af35b312d7f9194f74f8db8a493375b6397b52a87872f498ab0b0dd4",
+ "job-tracker-ui/src/ClientApp.tsx": "51ac4ff04829b60caf6fdfb597ee8943e378bece9222b38ce67e1d99f01be10c",
+ "job-tracker-ui/src/LandingPage.authRedirect.test.tsx": "3aac7d0b9fa8606765cf657d0d850d448c6bec8ef8e4fa39eebd3c25bb326bf6",
+ "job-tracker-ui/src/ThemeProvider.tsx": "1d25fd091ca632f7671e413db24e917d4ca4a375fddade0ca1ff397a8ae9f950",
+ "job-tracker-ui/src/a3-navigation.test.tsx": "942c3adc70bc2108c8fb75ea871239254751556ae3d1222f2c63bf836f7616f6",
+ "job-tracker-ui/src/a3-theme-contract.test.ts": "039382d49d84f84df81d583079f217a21ca0be4b9c90c82f2da744998fbfe73d",
+ "job-tracker-ui/src/account-data-export.test.tsx": "05e55a62459d7c2c4d04d110e411b25a53786460b13d375bf50b482699e154e5",
+ "job-tracker-ui/src/account-providers.test.tsx": "fbb7748829fe01fa33e977a0c77bd8bc5b850a33fb43866a37c81962c090c664",
+ "job-tracker-ui/src/account-scoped-state.test.tsx": "f9dcc4d75a0dbac01fd622f7552fa37e5a96c1daa0cba50eedcfaa2d04761a01",
+ "job-tracker-ui/src/account-security-flows.test.tsx": "8ff99509f50342fbb8ada67ec5f646404ac60773f2d72c84b772aca063c7cc8b",
+ "job-tracker-ui/src/account-security-presentation.test.tsx": "12f8fc05eea372c6b1b7d60907f14845a23dcf79b7f44848ad04eb80ae5a0d35",
+ "job-tracker-ui/src/accountPlan.tsx": "37e21dd83f277a18f1b593f2c379846ed0517e78f069a34a9e23549a88ae0511",
+ "job-tracker-ui/src/admin-audit-page.test.tsx": "45f2a6274f465aa0c2b805d1ef163cee920b806827b2f3199ef7f89d76b1de3f",
+ "job-tracker-ui/src/admin-processing-page.test.tsx": "e6cb36eaa4d1a245f4f3ec1cad59395aed458cf5d655bf326e48d93aa0637391",
+ "job-tracker-ui/src/admin-system-page.test.tsx": "794fc020315dad975453102001b8d2e405dc289f020d5b817c4dc4d7c970a60c",
+ "job-tracker-ui/src/admin-users-page.test.tsx": "af86966ae40f05115b38bd592ba6f43f6f78c7cdfda14eaa7189c2fded893eeb",
+ "job-tracker-ui/src/ai-privacy-settings.test.tsx": "d5806b1890513aa42cdbe39e1e6d3fea8966c08289745f01ab2d69e69a6aa378",
+ "job-tracker-ui/src/ai-section-assistant.test.tsx": "bcf642a670c5b2741ba8dd46fbf1b1f231c4801b4f1c8bebec6eab6dabd31396",
+ "job-tracker-ui/src/ai-usage-card.test.tsx": "b894953ab331341c0920aa71b667eb7c30659da95744cafcbbf825f35eef7d02",
+ "job-tracker-ui/src/aiWorkspace.ts": "d2ebe2565a01af05f786e35d25cd36a0a3b8135921c140b319e2c000256f9322",
+ "job-tracker-ui/src/analytics-presentation.test.tsx": "9f5d37200f780f972a80970f886957bb11e2f49e4d7b87b1b6dc05a066b3e049",
+ "job-tracker-ui/src/api-error-localisation.test.ts": "7d0ebc8a171c21506e0f941ec2b3e3e93daf1437c1dc67f987e56869c9106d46",
+ "job-tracker-ui/src/api.ts": "f75ac7be07a743396843ddad5fd3371e2d5fd3d9c5d933e09e26fae2159f2378",
+ "job-tracker-ui/src/app-shell-navigation.test.tsx": "69876c7ad9ae5be695a830f7328c63b7c4fe42fbec9ec18c1dceefc7b01d5aa5",
+ "job-tracker-ui/src/app-shell-notifications.test.tsx": "d35c49270169df7210bf291883f6a5faf1aa36944eaa3af3d7c9965d84521b00",
+ "job-tracker-ui/src/application-assets.test.tsx": "d07f22661d8efbd65dbf4e92aa9722d6159438e6b354ed0c3c4a41c6d55b43ac",
+ "job-tracker-ui/src/application-calendar.test.tsx": "d82d87ccd456ada0797fa32e1d437224cae1edf62e40c05e1cb87f233a0eb40e",
+ "job-tracker-ui/src/application-checklist.test.tsx": "f214590032840e98aeddbd75974de85fee5444b723e0a6da69a903308c4f5847",
+ "job-tracker-ui/src/application-drafts.test.ts": "f702cac59903ee4110d4af448c3f00e4582a568ee9eb1ecfaf7adebc8965cfc3",
+ "job-tracker-ui/src/application-intelligence.test.tsx": "b0bc623e5ce4ae0192fd0264091d9ea2a5305fd037064a9cd9f5ce61b7d7758e",
+ "job-tracker-ui/src/application-route-contracts.test.ts": "67b56fd2832cd8b40b77262a40cc2c81d42b30dd41c5280ee26171fac2418423",
+ "job-tracker-ui/src/application-workflow-assist.test.tsx": "11a1d057ad2ba652da12f0c6529b8a9b7b5bdbf9cdd52799fbbbd524bc5c8e33",
+ "job-tracker-ui/src/application-workspace-overlay.test.tsx": "86ec993ae4e0c2f96eec71e2797502247f4e5335cf6f39001e881d0c44991152",
+ "job-tracker-ui/src/applicationDrafts.ts": "fec1146d10fc8feff66e4f0fee76429ee597545be7006e060916d62fe387b9f2",
+ "job-tracker-ui/src/applicationWorkspace.test.ts": "bd068a208d40f782f66f77e6196378f4fa2a5be6f0eacd71e4f6271276e89362",
+ "job-tracker-ui/src/applicationWorkspace.ts": "3b00a4fe16159bdb9603eeb37bfdf5e5eb9a87d7815227fa3aa2f0da6e4f232c",
+ "job-tracker-ui/src/assets/JobbjaktMark.tsx": "4a9f2ccaf87a8a488e3750d227010a495a480b89837032e9b87cb04adee45d95",
+ "job-tracker-ui/src/attachments.test.tsx": "89bb3e277ae7be652073eec6d3b6188bcbeaea8b29b07478ff5b21654be8e7c1",
+ "job-tracker-ui/src/auth.ts": "1cbdd59f73c5a961613b2569679f96630cded407974876a4ca8abccf28780b0e",
+ "job-tracker-ui/src/backup-lifetime.test.tsx": "e67d22d13a5edaedc29d57e3afc36614cdf4844d510d1ecd661d5254d39e2ca3",
+ "job-tracker-ui/src/build-metadata-localisation.test.tsx": "065c5550a18f7b3c7dca9bbb26c5564a53a53eaf389e7c9695596fcbb2c06f6e",
+ "job-tracker-ui/src/calendar-agenda.test.tsx": "38a8345d1ccd4200c1759e179dd680644155244c0f6dac9ea48f8179f6b384db",
+ "job-tracker-ui/src/captureUrl.test.ts": "949261f9e4929e70d4d0e1ef1cbeada58d23fe6241e77572d97b35b51094b7ad",
+ "job-tracker-ui/src/captureUrl.ts": "3fe1b5fbed55ab3035bbeac3c3a9c5b7fb87a92aed66955b179f979e35128a13",
+ "job-tracker-ui/src/career-completeness-labels.test.ts": "c1fa2781449ddc4f6bcaed5f89900a7af925227e134b19cb5ce4ff5173a7aaae",
+ "job-tracker-ui/src/career-editor.test.tsx": "9c296fbf5d5871184869058e405fbc5a2f7467cbf2302baebef979bb41acef6b",
+ "job-tracker-ui/src/career-evidence.test.tsx": "28df09fbd3bafa1a53b098c72c1ee6aeeccc83498bd2a7aa8b22a7380268e585",
+ "job-tracker-ui/src/career-history-view.test.tsx": "dfed6b3ccce38aba1492bc39bd94b1427ed307ea3ef1221f34095d8441e2cb59",
+ "job-tracker-ui/src/career-import-review.test.tsx": "23460ed154dd9a90bfa364c18326fb3d196ca281f12aae66d4aec97a37c05374",
+ "job-tracker-ui/src/career-workspace-page.test.tsx": "3d232575525624246cf056d6d357cdb9c27a334ecc198046e2581f09873dbd99",
+ "job-tracker-ui/src/checklist-translation-token.test.ts": "54d5f49c6200fcca8877f2981b70dddeae37f1feb861a97637f07aeb5c9f3fa2",
+ "job-tracker-ui/src/companies-relationship.test.tsx": "4a4e1b4315ee73e01dd64c4032e5dd78245e0f0ec27e40359e1dcac32d3cb470",
+ "job-tracker-ui/src/components/AddJobModal.tsx": "97ec677ba82022349f77d52ccfb06735ab689dcbd33e93a669164fc9bb2aa1db",
+ "job-tracker-ui/src/components/AiPrivacySettingsCard.tsx": "fe4cb91623c1fe2749772e6d13a58d198891d666c4a9c6b2eca10494d1a97125",
+ "job-tracker-ui/src/components/AiUsageCard.tsx": "d7386337609d54cbe10916100ee443168870bdc00fc0974a66cca48b4975e91d",
+ "job-tracker-ui/src/components/ApplicationAssets.tsx": "95465d9a881af97e55ad6f74ff283f81c452c645cc37ff28e7212ea7a32e9d57",
+ "job-tracker-ui/src/components/ApplicationCalendarActions.tsx": "e0f60554a36e049a34fa4fc1b93450eb61cc40abd6d061467426dbb1127c07a8",
+ "job-tracker-ui/src/components/ApplicationChecklist.tsx": "0f198e90559b30952cbf7d0f4973211e3fbffcbb183e9e4b4f2ee2e2a9d02f56",
+ "job-tracker-ui/src/components/ApplicationIntelligence.tsx": "90540576dba4d705ed9234df7091f2b725500d4301287ba151a520956c03f073",
+ "job-tracker-ui/src/components/ApplicationWorkflowAssist.tsx": "daee742a2d50ca588df8abe7f41e348f871c8a94c6da83eeb646343c84686f0a",
+ "job-tracker-ui/src/components/Attachment.tsx": "c1a85ed64a067830ca24d06eee503043e18224d6c21b6e4d0e5840ff9c994393",
+ "job-tracker-ui/src/components/Attachments.tsx": "02081be8282cb3d1a525b336bededb8aabe561cc3b73e1b98e924f9ef945add1",
+ "job-tracker-ui/src/components/AuthStatusCard.tsx": "7a397cc55db165e85794b12be7c21984759bca5fbc83a6ed75e574744f59187c",
+ "job-tracker-ui/src/components/BackupCard.tsx": "274dc6b5bd4e497b737441d508c9491930c496f2f6036b440d2c34bb2ead8a53",
+ "job-tracker-ui/src/components/CalendarAgenda.tsx": "0ae978f9b555ed267eee8bbc73a934c8cd5f67868df861713872d9893473afb4",
+ "job-tracker-ui/src/components/CompaniesTable.tsx": "0065acb28866cea27fa2165ec248eef51109373b0c2c0faae0ae12fa3235ba1f",
+ "job-tracker-ui/src/components/Correspondence.tsx": "45f0b6b442676e62e8644b57863d595936d43608841d4fadaafa936d5606036a",
+ "job-tracker-ui/src/components/CoverLetterDocument.tsx": "d76d0cc3a21230043e91a0d28d03953c236b731c5fecd48e2ba11fd610281053",
+ "job-tracker-ui/src/components/CropImageDialog.tsx": "53db90f13a72adfa0035503ab2e1dcfa67e20c2d2ab529af51bc204ff54abc96",
+ "job-tracker-ui/src/components/CvTemplateGallery.tsx": "d7f28fd9479dabd5a988b6a8b656c36c6c9b6622beb13530b7011590edb7965e",
+ "job-tracker-ui/src/components/CvTemplateThumbnail.tsx": "4c748eea07617767eb74d0f6e439ba30d363f4ad1d6d05e8e4e1172710c274c9",
+ "job-tracker-ui/src/components/DashboardGrid.test.tsx": "423ba80f06cc92ace630a731a5536fc74256f921e2caa29d6b0dffd6d62513bc",
+ "job-tracker-ui/src/components/DashboardGrid.tsx": "1f9dfb5dc17b7804c00cca823e7045ec1804d3bcf162bb56590bcd3cf85358d8",
+ "job-tracker-ui/src/components/DashboardLayoutEditor.tsx": "86714ee75bfeddfe62e4c4c9d535c4e641d1213422615fab76838d6aa401984a",
+ "job-tracker-ui/src/components/DashboardView.tsx": "21be089f43dfaec5ac5469c36b4610559421f958f52613b4deadbdaa12eadf4f",
+ "job-tracker-ui/src/components/DashboardWeek.tsx": "12ba41a7df41da9ea9e964c594ebb7f2c5364b4a7c523966912f31a048407340",
+ "job-tracker-ui/src/components/EditJobDialog.tsx": "02f364b532988b4e1b6de464905c211a3de39ed5edec61f34f1db4334fe3fe98",
+ "job-tracker-ui/src/components/EmailProviderConnections.tsx": "5c5211c49012f6dc77d049e7164dd1f5807c9254e3278c2f47158d7f6209d73d",
+ "job-tracker-ui/src/components/ErrorBoundary.tsx": "26563b031bbc078598b6705f99c3ea31ebd4d4476b4ebacf74afb216bba4de65",
+ "job-tracker-ui/src/components/GoogleAuthCard.tsx": "747afc361183bff1c558110eae9e2108d1e0ddb793dc789719623a7f3f38f4df",
+ "job-tracker-ui/src/components/GradientButton.tsx": "1f8fd757d9ee066603f1629607ce09f88f226a386020863834a46a200a8e85f1",
+ "job-tracker-ui/src/components/ImportExportJobs.tsx": "327f1b31f27ada5822570e15c1e633315fa9015e71183fbdd21c238ccfd4b0f1",
+ "job-tracker-ui/src/components/InterviewPrep.tsx": "ef8161cc982c9068d3c7eec80f7dd6ef565f05ba0b36bcf58e3b643285b22f0f",
+ "job-tracker-ui/src/components/JobDetailsPanels.tsx": "79e5474bb0d74d751d0b9714e5d4967cfcbfd8f7f3c9c8de55f381adfdb766a2",
+ "job-tracker-ui/src/components/JobFlowBar.tsx": "cd54b8599d429e779858559266f7f8bd4b32ce45d8ad305224155144d6d4003e",
+ "job-tracker-ui/src/components/JobTable.tsx": "515191502a1bb0629f816936059791ed71dd05b1fc6549f06ec6e88e9c22733c",
+ "job-tracker-ui/src/components/KanbanBoard.tsx": "9bb9b08fa66884e0f40fa751c540d421fa4c4c604a796c30e21a0ca53e0c7387",
+ "job-tracker-ui/src/components/Markdown.tsx": "d3288d410d3757d195180521b898af804fdb37634a6eaf8a380995452251dd3d",
+ "job-tracker-ui/src/components/MicrosoftAuthCard.tsx": "36558ba83de1bca2a5b60d55c891c18a0d87ca9795404027e332ea1c67545ca5",
+ "job-tracker-ui/src/components/NotificationsPopover.tsx": "db9150fc46a70df83d56fb559c8d6dd50cd86b5bd71bd9b121320091970513d6",
+ "job-tracker-ui/src/components/OnboardingChecklist.tsx": "78b3112465fb62c381c48e32253763f22b6f2034fbcd23c27faeaa0dddf380e6",
+ "job-tracker-ui/src/components/ProFeatureNotice.tsx": "e293b1e52f95c4572aa228cea2d175df5337b0bd365c0051aaf4ac3038a6a9c5",
+ "job-tracker-ui/src/components/QuickCaptureCard.tsx": "394b2a298b4edbdbc7acea98ac871f69b8924aae69ba9afd9ce49200cbfb2f76",
+ "job-tracker-ui/src/components/QuickCommandDialog.tsx": "6da1b0f3d7d4a0704fea8e953bbba5874b4a094a9802d32bce0bc143848496f6",
+ "job-tracker-ui/src/components/RemindersView.tsx": "e550e76cb28cb4236100bb1a35158a329e4ecd3a12be56f6cdaf28fb75fa0091",
+ "job-tracker-ui/src/components/RichTextField.tsx": "7b732cfbb9b8dc8b19e71415054649e0a2404cc17ec29d036817d63fea58a994",
+ "job-tracker-ui/src/components/RulesSettingsCard.tsx": "229c6e7350586eb554fce18a1665ec6b6ba87e0d2b556dfa3c2422bede21f33e",
+ "job-tracker-ui/src/components/SavedViewsMenu.tsx": "742d99802af0bcfced244926c576381aa5e734d684a8c6d31f3f0162c3e8785d",
+ "job-tracker-ui/src/components/SessionsSettingsCard.tsx": "057397bed9c98131f2913ec597f636af359e6d70984f37216816b0b7b78f5442",
+ "job-tracker-ui/src/components/SettingsView.tsx": "250b80b2d18f82ab63e7341c0779380345f386acc0d89161064d8e41439636d2",
+ "job-tracker-ui/src/components/TagsInput.tsx": "3d93f945ccad6b308882aa2a65f020e76bc77aed938efbb1ecbee1fa096f6348",
+ "job-tracker-ui/src/components/TurnstileWidget.tsx": "86fbfd0e52d13f467d6ab84ed352dc95cdd97ab9e46c4e5add11b113e655389f",
+ "job-tracker-ui/src/components/TwoFactorChallenge.tsx": "ab780578df9d62d5953a2f493cbb692efc7ed1a9a50eaa8a4594540250d0576d",
+ "job-tracker-ui/src/components/TwoFactorSettingsCard.tsx": "2945f262db833978a12653e0a155f5e979a8bd39b240ece3991649fc0cde888f",
+ "job-tracker-ui/src/components/UserManagementCard.tsx": "3699b1942a6defa29192b93dc946ef2db75207d32cea5b5c90a61f491efbb7da",
+ "job-tracker-ui/src/components/ViewStateNotice.tsx": "7b6c3e6c311860897eb5327936dbb129e860781929cfd9a4d4e17f81c607c70c",
+ "job-tracker-ui/src/components/cv/AiSectionAssistant.tsx": "40475ae87da5a1966bdd52a5107b4c54e34a28a4be31687dc5471217105c4d7a",
+ "job-tracker-ui/src/components/cv/CvCustomizeTab.tsx": "b9163dd4b13349edbf58d92df699808064086a870f73d1fbba548150f729af3c",
+ "job-tracker-ui/src/components/cv/CvTemplatePreviewDialog.tsx": "9690dc4f725a003aa9274b2ec12068cc3f015ae6a2aa473a905fc3289e44807b",
+ "job-tracker-ui/src/components/job-workspace/useJobWorkspaceBaseData.ts": "d0a979cc1a9d2e3472cc0a6a1b9aed2d3146fb00b5d2ca2b6773ca10ba17821e",
+ "job-tracker-ui/src/components/job-workspace/useWorkspaceTabCache.ts": "9799f178657a9db1fe0129d5434f04e345273a63d0e3b058cbab18865ccdec7e",
+ "job-tracker-ui/src/confirm-flow.test.tsx": "79e61f0d98f81d273e48f89e2bdd4c669d0bf6ec15c7859b19fe354c3e19a3a3",
+ "job-tracker-ui/src/confirm.test.tsx": "2f60cf4481d843b3f57d5a540bc356378571bcfdb0c2b8baf184423658832c2f",
+ "job-tracker-ui/src/confirm.tsx": "4900f13ef766a05cfcfc2321a6741fc580450f699c9fe91635f9dfdfcb023cc9",
+ "job-tracker-ui/src/correspondence-gmail-import.test.tsx": "f59abb397a716951399c64dfa6fbaeba3c63aaddd60e45eed7cdd5caf590a1e8",
+ "job-tracker-ui/src/correspondence-inbox-page.test.tsx": "d2b9a9633d69fa56a94d7ec71b0d8672607bca681a01a225550bf482fc8244dc",
+ "job-tracker-ui/src/correspondence-search-context.test.ts": "8fc52ff3e10827e96194d6eb293e4872f65d4c73213b0b29e275bad9bbac5b15",
+ "job-tracker-ui/src/cover-letter-document.test.tsx": "6305a6c729fec3854a7d213ca89b9ca8ec78d6714200370d880ffa9d98249a5d",
+ "job-tracker-ui/src/csv-export.test.tsx": "a12080de3f1c571fa27874d72ffcfa2212aa4a4f4b7cb6abab277b4ce8d0a1e2",
+ "job-tracker-ui/src/cv-builder-deep-link.test.tsx": "bbbd4c8be5d01e3e01a83d4f61756913edd31b86b087b49354cc8e7252377144",
+ "job-tracker-ui/src/cv-builder-page.test.tsx": "7c1211e25b85fcc9e979b6c50926e297da6705c899d64d601de4cbc7f4a9a758",
+ "job-tracker-ui/src/cv-document-controls.test.tsx": "5fe17d351402dbf5c676d069525d9670c83885c5b58ad8926675ed3911e86919",
+ "job-tracker-ui/src/cv-import-mapping.test.tsx": "95530490d504a1a2c20be20f2696d4cdc9762f99358dcf2814c4a80ece6143ee",
+ "job-tracker-ui/src/cv-import-review.test.tsx": "084ac4933dbf13c5c4ba9c5ceddb4fbfccb3437b3bdfed30780a34d25ebf12ba",
+ "job-tracker-ui/src/cv-photo-controls.test.tsx": "f3d3a500bbc70a19d6e1e8504295ba79e01c829e06b66c81ebf5f3b1a6bb5436",
+ "job-tracker-ui/src/cv-template-gallery.test.tsx": "379baeb733fb9da8e7b3cc3ae6b89f745178e67be61ba2184055fb1632aa9402",
+ "job-tracker-ui/src/cv-template-preview.test.tsx": "469db6a104ef8147613c6f176c8fc6279a6c3f8493c13c22574abb220d2e7cf0",
+ "job-tracker-ui/src/cv-template-thumbnail.test.tsx": "c6a065c31c5eb19caa1dde69b704982ed4baa6afe21474485872f3239d9af6f3",
+ "job-tracker-ui/src/cvBuilder.test.ts": "9a26dd2abb6b5e2138a826c05a57ebf509e66bbee5c4909f4a56757a8a01efa6",
+ "job-tracker-ui/src/cvBuilder.ts": "c021bafeabbc8ad3526d1b10b90ad8f7f0958ded8ed26eac8c1d28b53098b64d",
+ "job-tracker-ui/src/cvPreview.ts": "38d0aadb4a080c72a8c4f04b6972b4252593c5e2d07af95a421abc47dcacb88d",
+ "job-tracker-ui/src/daily-control-loop.test.tsx": "9bd0a047e384ced6616129271e771658bd6bf133aaf7c3a7fa6d6a8f1e9a735e",
+ "job-tracker-ui/src/dashboard-customisation.test.tsx": "9fbdf02f6f4815b7d98e32c8bb295a72dafc552118567eebbd885cd1b1d5be94",
+ "job-tracker-ui/src/dashboard-presentation.test.tsx": "23743259e498bc525cb6e228d71ddb9a16e95868b1ddf93fdb19ec5a295ed91b",
+ "job-tracker-ui/src/dashboard-week.test.tsx": "a6d6fd1931057428695be595a4dc344e70ae4ac8dc95a0551e7dccb0201e4cdc",
+ "job-tracker-ui/src/dashboardLayout.test.ts": "4ec561778ee9cedd5fb578d18822124d38caa2357eef749eb32486a2922dddb3",
+ "job-tracker-ui/src/dashboardLayout.ts": "eead1fb296d50d914cd6ff6bea6c1411dd906ec4cbd96fd8ec378c2a1b9645f3",
+ "job-tracker-ui/src/dialog-flow.test.tsx": "ca84737b9946a356be59b2de83077fcf9134535c1531d6db18775bb2065ff8dd",
+ "job-tracker-ui/src/dialogs.ts": "c817739a302e765709b747a4fed7cb28f229920b6720f4096000a997c02bd200",
+ "job-tracker-ui/src/documents-page.test.tsx": "9f48be69724d9ed691238874cd5f474f70024a30ed10ad9e2e3cf4dd8af572c7",
+ "job-tracker-ui/src/edit-job-revision.test.tsx": "c9d6e693990c839ddf9d267d95c51c1ba944a9a2f62787da568e0405a574a301",
+ "job-tracker-ui/src/email-provider-connections.test.tsx": "764315a88dd7becbcda26b647c5258915f8e380f0ff2f9c031f7fb322b339b87",
+ "job-tracker-ui/src/emailOAuth.ts": "dfd0f0ac46d295a2c5a0b9a6bb6bfffcceef6b6871cec7c92c429418cdbce8a9",
+ "job-tracker-ui/src/end-to-end-trust-loop.test.tsx": "32d2a2133edadd1cc193508658671faec8ea902fd95742370adbbf466c48615a",
+ "job-tracker-ui/src/file-picker-activation.test.tsx": "accb87f94a7b36373eec6583a391a17ede7e7779cf18d81d4a86b43e0bd6afbe",
+ "job-tracker-ui/src/gmail-review-page.test.tsx": "667bdfe4aa2cae9669777a066a8df2b7b7bf1fbb1fe719f20204bf3360231790",
+ "job-tracker-ui/src/hooks/useCompanies.ts": "a48e2ec2abf50c89b9a983bed93bc3c8b91fc537af6673eb9245cc4bdd5fac10",
+ "job-tracker-ui/src/hooks/useDashboardLayout.test.tsx": "4937c40959487ab39f98036d9c674fbb149bb26d2728fcf4a80096e7fdaf95a3",
+ "job-tracker-ui/src/hooks/useDashboardLayout.ts": "fa47ca4fb8aaacbc62641f5adca4120fa057e78290791cd62fad1844b2f46314",
+ "job-tracker-ui/src/hooks/useDebouncedValue.ts": "b704d1c40387dd4d668dab0abb59927ba86a377095a6cba9583c3493512b3f25",
+ "job-tracker-ui/src/hooks/useDragReorder.ts": "367e064052df27171f34ed638f1542319fa223f3ecf419000811c92e809ccb5a",
+ "job-tracker-ui/src/hooks/useViewResource.ts": "5912131c525ba85ae6994efc38306a10ec2e673cc0082686226b59f00df5da99",
+ "job-tracker-ui/src/i18n-provider.test.tsx": "6bf5e80e721383290aef3b73ddaa31026d562596cc05d31712a7f1aef23ae824",
+ "job-tracker-ui/src/i18n/I18nProvider.tsx": "d22b5d033d0e405ffb5d581c752d61a24056d1e496f5f6a2f1baecef500f2113",
+ "job-tracker-ui/src/i18n/translations.ts": "e57f61ec63c48e5aa587f4c048148d540f9a3b77db20283e863ec2f9f22997c9",
+ "job-tracker-ui/src/index.css": "daf22c296c801d3d533083361cc59fbdc22e5bfe528aa4bad1973b54cc5448a4",
+ "job-tracker-ui/src/interview-prep.test.tsx": "e43c7da9b08bff64457f2f0b7b86448bb780f716d0d21aec097871081b2435d5",
+ "job-tracker-ui/src/job-discovery.test.tsx": "16f740b867166aa9bf51377e8732a14e76a539f6d5eb8df989cede48297a1eaa",
+ "job-tracker-ui/src/job-import.test.tsx": "9c69000a6f8ca744fb425c2007ce48247be46ecad01a177c2f002ba2ac9a0d73",
+ "job-tracker-ui/src/job-table-density.test.tsx": "53780a07f47415b2b242e386356b11e7c7ccce1bc0e7b54e8d31515a3f6f472d",
+ "job-tracker-ui/src/jobWorkflowSignals.ts": "cde4372017c13f21de8b4e2259923d80beda36506784d7be089432622fbd6b0b",
+ "job-tracker-ui/src/jobWorkspaceRoute.ts": "eaeb4fedba53220f855bcce64cf79046f5b1c89323d43f2e7fcc4c922a61edf4",
+ "job-tracker-ui/src/jobs-view-integration.test.tsx": "ad7a5c84dcb7cda29f3d276201de794379f0552827116f88339dd172d47961c9",
+ "job-tracker-ui/src/jobsQuery.ts": "ef2b8e804162f9d059cc087f7f57b2c4ccb5760b59e2d3d586e753871b6a0490",
+ "job-tracker-ui/src/kanban-grouped-board.test.tsx": "cba56a5211028f5f410715999c3f3f70d33c1a3e4d3f8f43567ad9869c0cdb60",
+ "job-tracker-ui/src/landing-page.test.tsx": "0e82209229cc318abea674d0e524383d73ebf97bfe9a95e5ce6aff1dfc83c594",
+ "job-tracker-ui/src/layout/AppShell.tsx": "e01d19b253c5ab8044b1fced8a211fea7775b44a870169e7f91daf7e17064fec",
+ "job-tracker-ui/src/layout/AuthPageFrame.tsx": "cdd4b0f238d1c5dffdb13fd0f0dd0ea08f89238ccd83858e10eed58a0a8911a7",
+ "job-tracker-ui/src/layout/PageLayout.tsx": "a11c5636068ab4c80e065b360f9d5a6af6da8fb7a1d06a0c59492e02cec2f5af",
+ "job-tracker-ui/src/loaded-theme-states.test.tsx": "a54e28943c2219842fdb5066b95490c4663568b2adbfcb02cb1984c62e9fe6a3",
+ "job-tracker-ui/src/locale-fetch-stability.test.tsx": "e647fcd387c54ffd50f45f1f8ae3f4133a2858fd0594ec9c0df51ce328a95814",
+ "job-tracker-ui/src/login-page.test.tsx": "b24f3286a54b79d3f7995cdb579a32251eed5f164940131a33d5ce42ef6a5c20",
+ "job-tracker-ui/src/logo.svg": "6000b0e9b0b05b3f112de04f0d039768a1db63588ff9b6ef7099dbd71632f383",
+ "job-tracker-ui/src/microsoft-legacy-relink-page.test.tsx": "a139ff3c1af2efb9a20610ab1262432e1eabf4de881d3e5b71a32f735b8fc24c",
+ "job-tracker-ui/src/modal-state.test.tsx": "6f7f32cde109bad6df5d3fae40566a692aecb4739f97fa9d302b41a603b64258",
+ "job-tracker-ui/src/mui-theme.d.ts": "b9e96b260cec865afbdef2669a2d7741d772a282c7569dacb01d6cf23ac37bb4",
+ "job-tracker-ui/src/named-controls.test.tsx": "c8b519701685c434a729a50aeb5e0dfafbaf8a166fb223ab400b28554c5c445f",
+ "job-tracker-ui/src/nginx-config.test.ts": "9c636e62579466d1238c0fa41498274b128f2c1585b9e7a161fdc633599612ad",
+ "job-tracker-ui/src/not-found-page.test.tsx": "24b2c53441f13dd6d9b9faeb36033ba625d14be101096cfa44b8fc4502f2628d",
+ "job-tracker-ui/src/notifications-popover.test.tsx": "5af75c9d910da518cfbc552c73b5af355b6071bc2bdb75448eacc475ac261db6",
+ "job-tracker-ui/src/notifications.ts": "118f08f1c90d50ce52fb03baaf7df15c47a26d6de42457a5ecf2746502f86aab",
+ "job-tracker-ui/src/offer-comparison.test.tsx": "a0ae2f26392c3db0416c71760b0ada0fe1f2846d1c7dd0865f28518ff652f8bd",
+ "job-tracker-ui/src/onboarding-checklist.test.tsx": "614d1be16911f87e12ac1ecd47da2aa3e914446f533dbafeb6cf48ea8873ac28",
+ "job-tracker-ui/src/operations-page.test.tsx": "700d6a69327dba86c3fe5680a4f5aec652647bd1dca1054f45f42328314f4734",
+ "job-tracker-ui/src/page-layout.test.tsx": "a224a684f69c59043509c3cd7120783b76494ca50520110b9dee01ef89f92807",
+ "job-tracker-ui/src/pipeline.test.ts": "263da260802d748b97b46aeca4c0a4f0cac2120c0781d3ca56384e8e8e45ed3f",
+ "job-tracker-ui/src/pipeline.ts": "f5cb6d36e81268b2533c4f5ba4e53781007f166c217a4d805c9a8f9f66c2b9ca",
+ "job-tracker-ui/src/planCatalog.test.ts": "3c4649febe1103d7b11018be5f9c94b0e998ea5cab96bf9eae622bb49d890c7d",
+ "job-tracker-ui/src/planCatalog.ts": "068871cc43669d6f8a0581fbaefe8e6d0d2ab7f1c47e0b31cb131e767c2d13b2",
+ "job-tracker-ui/src/pro-feature-notice.test.tsx": "514e2094aeff267e95be302e29271576a4e36487dba14063d04df95fe24def47",
+ "job-tracker-ui/src/profile-page.test.tsx": "37233ca196062ae91a6dcc9ce7146cc4e242c28ac2836c27c894bdbaec13d86e",
+ "job-tracker-ui/src/profileCv.test.ts": "03f6742fcf7d981d46b46574fa0d72b57e7e2a4d898a0e93af0a2356163f9f12",
+ "job-tracker-ui/src/profileCv.ts": "80c39b7c7558a96c1b7da4eef0d3580849203bc2da4ecd823aeac387b35cf963",
+ "job-tracker-ui/src/prompt.test.tsx": "dc499a145812564d2dd67d708052e5fe46e0bb77e33a098d1599cf033c97de95",
+ "job-tracker-ui/src/prompt.tsx": "eb42e7f400d65090301d681b22965dd30cc3701c7378ef28e7e8fa08cab98457",
+ "job-tracker-ui/src/public-auth-presentation.test.tsx": "2f40091b13a252a45f4bd2c86da542b5f4648e08c4fffa070946de7f5c4a9811",
+ "job-tracker-ui/src/public-cv-page.test.tsx": "4f3ef679eb264fa9dd692a368870620dc9019891c3af63d72b8561542e3ac23f",
+ "job-tracker-ui/src/quick-capture.test.tsx": "1a15409c11877bebad60492f26b0d4cf3d045265712e43fdec84666479d1a07f",
+ "job-tracker-ui/src/quick-command-preservation.test.tsx": "86ef134be10b85bddd980d09672a07cb4ef43807ac740e9283364d784d709bca",
+ "job-tracker-ui/src/reminders-presentation.test.tsx": "700594101a38593e950ee10340fa0d22bafbd18f928912bf4af58172642ace9e",
+ "job-tracker-ui/src/salary.ts": "9c46a23c52a5fa06ab76f44d4e0538c99697e2905e2fec4b63d9f43fc2b924cd",
+ "job-tracker-ui/src/session-boundary-message.test.tsx": "e6de52e667e361784c9c0990c77ee2e5b93f152b8ec320650734ae6c32c6e627",
+ "job-tracker-ui/src/session-boundary.test.ts": "3c78849fc0966bcfeac81126b24d01adc592f66e51dc6a087ebd27bf3ab1b10e",
+ "job-tracker-ui/src/sessionBoundary.ts": "09edca77c98294818d2ad0c409ce595f1b6ca0c1f60419fc1078b70f96f5b7b9",
+ "job-tracker-ui/src/settings-import-lifetime.test.tsx": "24af2a5954533087ddbff40659ff9f8dcf70805435dca772314c2be7d8bf6133",
+ "job-tracker-ui/src/settings-view.test.tsx": "819ff890e95bd3ee4ca5d696adccecce6b423c768df98f98c62644d546a48576",
+ "job-tracker-ui/src/setupTests.ts": "5f38d9f2757627e41c2646bcb6c0243237d856eac85016a841bdc8b164986b98",
+ "job-tracker-ui/src/shell-readiness.test.tsx": "481648d0ecc42a219b5f2b44761125d48327d26b2d3b9b0819808f702f8f806d",
+ "job-tracker-ui/src/sidebar-active-nav.test.ts": "43e1aa28a11a65a1945a85036d0de4c27b56d9cc8e00b6b35d7a8252916cd2ce",
+ "job-tracker-ui/src/tailoredCvDraft.ts": "af683500146e4a5ffa493926aa9deaaba917535bc10a445f660a9d031d935faa",
+ "job-tracker-ui/src/theme-contrast.test.ts": "f17b594bb9fd64d9fcf0c8f84bc19551052d6ba2eae9d2c2c031376f35a6be66",
+ "job-tracker-ui/src/theme-state.test.tsx": "513156913a36b4c9a3dab109feccba29d78c078e5880ba471529a12d1970766b",
+ "job-tracker-ui/src/theme.ts": "6b3c28a2a920e53e01ed9ee12ee2f5cdaa0fe7c3752415a97ca544c82fce8cfa",
+ "job-tracker-ui/src/themeBootstrap.ts": "0035725a9d43077ede757c1f20382465a6f04511b63fb22ac65adcfb8ce5f2d0",
+ "job-tracker-ui/src/themePrefs.ts": "d775741cd6b2fc7ac59dca13e5e6cf5ffd3856cf4a2e011948b2dfb0d9c319ca",
+ "job-tracker-ui/src/toast.tsx": "8f11b9ecce244a99a7cc7b6d247751e24089f8396a834924a4fa1eb421ab17bc",
+ "job-tracker-ui/src/translation-catalogue.test.ts": "f20e8099f2c4dda76574ea3ed1e95b743eef5da82507d7cbc3f9925d52356b98",
+ "job-tracker-ui/src/turnstile-widget.test.tsx": "1afed75d79a9e771936dcfd30738d3c5fc4c7f61119940c4594c332b05a94d69",
+ "job-tracker-ui/src/two-factor-settings.test.tsx": "a1466d20f4991e12a2e59702ab76827bae047f48450b04615befcc73a6e72b9b",
+ "job-tracker-ui/src/types.ts": "bae01df8de079b16546fca1c738f6d49564befcf62ae0449b039faf61bff1158",
+ "job-tracker-ui/src/use-drag-reorder.test.tsx": "7c6717759b4afbfd28737e6c5e4cbe74bb21825650262dbf70f17de3e47b0716",
+ "job-tracker-ui/src/use-view-resource.test.tsx": "00a8797f899a633a3b62a0a95bf0173fc69d3c22d79f3964d63b69c82b48fe28",
+ "job-tracker-ui/src/verify-email-page.test.tsx": "fceb0eb72e565b3072916d1d1fc17b277f087dae3c81182cc2cd971a6bd85dc5",
+ "job-tracker-ui/src/view-state-announcements.test.tsx": "680dddfb12de6b06c566c4e1c476758ce3a43f1365c9a947270ac96af720b24d",
+ "job-tracker-ui/src/views/AdminAuditPage.tsx": "a9415d7c759e67079b5db64c05c9cecfe9d062cc5b0532c909261fc064c91343",
+ "job-tracker-ui/src/views/AdminProcessingPage.tsx": "e58d9a86dc937eac291c2d7114b514576b9d38bb6232e8a6a15bfac9b3137304",
+ "job-tracker-ui/src/views/AdminSystemPage.tsx": "64e85d9b13088b5229b6635674e9e6ff9ee6c4a62db7f66accb1dcddcedd16c0",
+ "job-tracker-ui/src/views/AdminUsersPage.tsx": "ed2377d7e004c78c3274c43d534c0a3db7b3468b2de2fa11210841e2cf31b53a",
+ "job-tracker-ui/src/views/AnalyticsPage.tsx": "40100ef5cf7765221897a4bd0ceb18a964423e122965bee21d278d113fdb01dd",
+ "job-tracker-ui/src/views/ApplicationWorkspacePage.tsx": "f3fe99a0c73a8bf04f632832e01e3a0cef6e7cfde6d6a815e3aa0faf0068b673",
+ "job-tracker-ui/src/views/CalendarPage.tsx": "45c827d8268bc6be93735508dd45c464a3c40246a7e530555a0ff90bcd03359e",
+ "job-tracker-ui/src/views/CareerProfilePage.tsx": "d666136aee79eb29be86606823b5fc5457298e5c62078f8a378d91224431f438",
+ "job-tracker-ui/src/views/CareerWorkspacePage.tsx": "dc95b1860b658c5e27b4ed9327e805807e935ac19cb65870ff1d531c54c53f39",
+ "job-tracker-ui/src/views/ConnectedAccountsPage.tsx": "09cbe497948cecacacc9e6e1b6c216bb0feb24977afcfe6c3a1ed0c10bd2708e",
+ "job-tracker-ui/src/views/CorrespondenceInboxPage.tsx": "1bb8d2743742d96a436f834324a30fa3e3ee835d49996b9e4102d14b6eecbb2b",
+ "job-tracker-ui/src/views/CvBuilderEditor.tsx": "9db7982ed4bf40716de0b02c9333e2bafe4d89ed1e6bd66d5b2a3521061951ba",
+ "job-tracker-ui/src/views/CvBuilderPage.tsx": "dc6c1561dde562deb829aff1fed7f595861d2112633572482069ec4c8c05ba2e",
+ "job-tracker-ui/src/views/DocumentsPage.tsx": "d44ff0ad6402ac5200db3b5e981e9956af86dbbe6ae84ff4ff577c4a25ac7a5f",
+ "job-tracker-ui/src/views/ForgotPasswordPage.tsx": "662cd57f46fce43aa8c61d8ea8629ab76c5df34a3a9fc1a822fe64fb726206ad",
+ "job-tracker-ui/src/views/GmailReviewPage.tsx": "5e87cad1c5f5118fdd6d62d3aae35b83b3ab10d8d60722ed18c1dbb4487f9890",
+ "job-tracker-ui/src/views/JobDiscoveryPage.tsx": "1ca763c2d260857b4668874f7edc7e97094b4f5c47cac57fb4a1a1fd5f19e28d",
+ "job-tracker-ui/src/views/LandingPage.tsx": "aedcdbc8bfc22f7cd4bc9737a06b07f318ca7b4970836bd6c20e805ebfa36c74",
+ "job-tracker-ui/src/views/LoginPage.tsx": "3120b4e29d6ebf980e92742b68f12d45ec0f0ecbda12ba81a1f3c1ac24a716de",
+ "job-tracker-ui/src/views/MicrosoftLegacyRelinkPage.tsx": "88cfd80f0f743e20889a665261111a40e977c6a8ebdf0715aba255c01e1fef16",
+ "job-tracker-ui/src/views/NotFoundPage.tsx": "fe6726f9ae262d4afc05fe5fa7b766db50bb9ee429436db4e36c651a53f7844d",
+ "job-tracker-ui/src/views/OfferComparisonPage.tsx": "d8e7c91ff4a48a37e554298fa8cb8887f9d6d6e1ce7a670c3836f2ad4266a86c",
+ "job-tracker-ui/src/views/OperationsPage.tsx": "b35c793fd33dcd0638d47df2aa3bfb2926879a8fa709880983b64c1a1309bb98",
+ "job-tracker-ui/src/views/ProfilePage.tsx": "ef05e15a7d841fb75ebef0e2843b710c38e0c73d317b976e2b1da76a25723439",
+ "job-tracker-ui/src/views/PublicCvPage.tsx": "6c368441859b8beccd0f4eb21e439e38388bbcaf772c721f382625b629645255",
+ "job-tracker-ui/src/views/ResetPasswordPage.tsx": "33cb1f86b6b9f3254b5287e20f912c9f13236626d1ee8f9e5e40e88b535fbf51",
+ "job-tracker-ui/src/views/RouteErrorPage.tsx": "b674a33a01c5ed9f38266dab031eba2338c6573c4cf21e31da88de6d9cb05cf8",
+ "job-tracker-ui/src/views/VerifyEmailPage.tsx": "90274cf2885ad80fbd16073e2750a8a3a53061c5fc35d877441e8efc1515e2d0",
+ "job-tracker-ui/src/views/career/CareerEvidenceBank.tsx": "51cab7289717c9f26006a9d34ac1f8aac9e09d19e549a3666a15adc41d5d4724",
+ "job-tracker-ui/src/views/career/CareerProfileSections.tsx": "07396e14214ecdb6c5f37f02d0e448453710a596b5ffb68042aa8ce032520e1c",
+ "job-tracker-ui/src/views/career/CareerWorkspaceOverview.tsx": "0650f72784b2211f703dfefd4d91a604957678369de2e2f365cf162458cc8d25",
+ "job-tracker-ui/src/views/career/CvImportMappingEditor.tsx": "57f733276b823bf9cc26c94b7b38c0f12f84ca126985f8a3e3dbff20f0ac0bfa",
+ "job-tracker-ui/src/views/career/CvImportReview.tsx": "dbbf0bcebd4fc46f55deaa6bb70a0abd37ecb0f01608335bcaf4de46e05f4a48",
+ "job-tracker-ui/src/views/career/ProfileCompleteness.tsx": "caadfe1462fb68456ad66834be3b2e40244a8367720e5345e3406d51a4cc9454",
+ "job-tracker-ui/src/views/career/careerCompletenessLabels.ts": "9e53eab4592a341b6b369b3408843b21b2c9233e9b765115367bb3586a1b8401",
+ "job-tracker-ui/src/workflow-trust-signals.test.tsx": "94b573ba2c07849db50fc028cf4235f91897902a65c43c54ea1fd6c5097f2975"
+ },
+ "evidence": {
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/BROWSER-A11Y-FAILURE.json": "e7b1cf7d233f14a3b4b68388a6aff399d427a08d0f8dda245764a65db9a8d16a",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/BROWSER.json": "073d2627087d5a430894651a93acb5dac43e07a68cdc678ae6b47e82190b11e1",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/PILOT-IDENTITY-EXPECTATION.json": "9126686930469daa8e4cda5f3a12637ee27722068a7836f38d5d4678d965c468",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/PILOT.json": "f9db2595d2957f30fe31283c5479ce84dc489902fb59583c9b024001235fffca",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-dark-1440.png": "2ce7cd684e3914989598370b6cfb5965d6a7d84a36ae01737cfd1ea569dd4a65",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-dark-320.png": "5c2779441aca28395593380ee28e62c918a646a11504bf539bb015633b8b575e",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-dark-390.png": "530ca573602abe498607d195210e4db1051775134fd764d85625c636e53eb386",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-dark-768.png": "107a8301d340d3355c2522d104e905ef5a02fda5cacc807afc4a5a6fa91207b3",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-light-1440.png": "7b62443359e52f08e7f2102c652eb24f2181a30c933073ba2c22a19152ffc430",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-light-320.png": "d38f0b87c433f6511d8f580670ed65199cc8917cb72c459c9416903674eda2a5",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-light-390.png": "3f09bd3ab880d87b435f57f477cc813ca0dd3b71a886ee24e170fb24dac3cee7",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-en-light-768.png": "3a4af4e4b4cb1ba54ae347e9e58a72b926adcc619e10bc0e81d3382d92b699a1",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-dark-1440.png": "b2cc9df20f00f54e686a97fc263efc3f3590fbdf864c7abd34acdcc5436987df",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-dark-320.png": "ee9f0f10d7e72ee69bd14cc791f6df4a5e0b6652c68de81e536052a351b82335",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-dark-390.png": "d91be18f51e9f1e574d604a4a30584f6ee89ac1efeb34482b6ae364cd64c5bb8",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-dark-768.png": "573215240b43d58244362d858b4e709e0a3ae8640cfbcb10c05e7c21ebe4fa32",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-light-1440.png": "7d973a1b35aab8bb7d907365b3c9d4c68760a480ffa11df50e8ed67b6a5714b5",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-light-320.png": "d4a8b50738ca12f45c6a0e5b42ed6a7151af54f1b4546517f4f20a8677efdc19",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-light-390.png": "1f00a6e3b26dbca999576ce2fd586b6ae3c1298b91834cf005b230ef34382d78",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/malformed-grant-rejected-nb-light-768.png": "e80fe336dc1890487eb4e0c93bd7907fb54d5ee08cd39ee6e7682ca9d04d0294",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-dark-1440.png": "346e2431176a0a76f74509bb346b553d0700ee77957b0baa1db0b15183e3e1c0",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-dark-320.png": "26ebbe6e6bfbbaa80ae82fbe63b710c4655b7b53b853590e3dc5cc372a3262b3",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-dark-390.png": "74addcd941dcf90e4617f1496d33d43d2cbb8bb82b1d78893bba2d68c947fd02",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-dark-768.png": "5ec140bdf57eb8796eae1b454aa128e4902a1a52ee72571f98550ec600430743",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-light-1440.png": "995c67bd712c2b9d3929c99dbecf431f90b1265a1c3ad33d32ab789b837bf98c",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-light-320.png": "bcf2606dc68ba2f3eebedea5b8de4f208d75261feff4042f0d30ff6b8e615fd5",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-light-390.png": "8e05f00df2c2042b92374703207b13a8d3304602e80b0c2ddcc74dbfb4509616",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-en-light-768.png": "8bf410d5a859b9bf95af0d8dd187ecb3101f6042be0a213074d4e8423b67130f",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-dark-1440.png": "0f5d89e02ec3229c91f16e868442a28dfec7d62e4f9155bbe7a1b8acb9cf5178",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-dark-320.png": "652330141548afddab8922e5852be4e0afbe305a269c5d7c6d1442b41a045f87",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-dark-390.png": "c1620caa3b910ade7d9a81999662a0041e4ae643b78310bf8c4536dba461ccbc",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-dark-768.png": "9756d55d6c4e6a2ff32ac321df71e215caf934d6aa018f06f10cadafcfcc4216",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-light-1440.png": "e0a4b6862993d1cd5825a7ed679f0387e8c1efeaf2140baca8a7c19d55e4fb2f",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-light-320.png": "7d850fa16377d48c4f5f19ff0e7f1eb118a5500f6b913038116667afbeb95c4d",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-light-390.png": "a48a705496a6d4010cfea8d462c6a1c42922e14f29bf76fe17dfcb385ba1b24a",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/same-owner-refreshed-nb-light-768.png": "ba063a4df2072d236e0a0a37fefe1ddc142b0cc32da11b14b492bff7c6aebff3",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-dark-1440.png": "3567e094bba80b95841599c1632a5b93c8fb7603353b7ac0455b1e3be14d3127",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-dark-320.png": "d9235c78c149b9f7c625b6902df6967d9d06ccba755978dbaaa0b44cc59ee350",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-dark-390.png": "35008385fe1e3acd772bb9500c13576ed6d1dfd0508f40303747d9394f99962f",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-dark-768.png": "619e8772419ca4167a02ea64109a653ebc519881b6ffaf9229f5150d6e9cf98c",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-light-1440.png": "9e348a17987549b46846561b2bf448e1aeefcfa9bf13f199e16b59e78fdc11de",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-light-320.png": "3cb4485c86c87ed946ba8f9db047e53fa367c152eaa9aa9f0d0cc118bebf4fa4",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-light-390.png": "9986aca68b54a1259a37d7a8c5efdf1aef4f01ee5e759b989ac8327c8379b0d1",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-en-light-768.png": "4dcc6abeb505227502f4736f6eb1543451d7c040ea40475da70db47a96631890",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-dark-1440.png": "0a6f69f92ce030649df8de1e992462daded707876af5c7c2b339714bab1cd02e",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-dark-320.png": "a5de028f872aeddbbf4e19835f9e0d5a7f15303f4a9f71ec475678543d0d31a5",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-dark-390.png": "321f2d1963c705991b975db1889323ace9573b7dfeca6064a2812a56d771ec45",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-dark-768.png": "36b9a324cbd22ad87ddf644482c8724c03d353d2974528f2eac832b6f6fcfe99",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-light-1440.png": "35d304045685b1faa594ad85a6d7ff31dd2af9a0eae34ca0dbbec8ae1748838b",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-light-320.png": "70645cd8112e15f32ba1be44c2ae290d83f6ec6e530a84eb8b48bd757bd25276",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-light-390.png": "384c40e5f980e7227b735255bfda4628928f1b0007daad5066da905d41c6c5f4",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/saved-without-unmount-nb-light-768.png": "af32bb97d8fe5d50cb66001b687a13899d5f524952d0f9a35c404db7b63a9d8d",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-dark-1440.png": "9cd0a6aa4e1e0c924ac5d32e605a2ff0ba363d2fda49457d42aa06405f7ea027",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-dark-320.png": "eefa4cb740db8a3c53955a6c6b24c5b394ebab6bfb048803830972c7f466630f",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-dark-390.png": "b65b2683690f557356dfa19150f19a98872a29383fbb28cf631237cc63ad8591",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-dark-768.png": "f8927a1f2243978878970f391ce4ef9262fb66f788f83da0aee4e622653c7e7c",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-light-1440.png": "4d7d7b9347010f23ac0a55800e41a4b872ff0ea92e8059f26e6f3c40dbb565f7",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-light-320.png": "056d3706d7e0c7150343599e54a628f5d3bc284141a4edc944013ddaf83e2c24",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-light-390.png": "a20d51de08e8f1b82e33a1d34c0921930bc6cbd65835791d79804a48bf2e3da9",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-en-light-768.png": "11ad1d611d433f90114eb4da8271be453d15d1f5842b7b66820179beb8d888b9",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-dark-1440.png": "901a9968b546f5c7712ef03498a9fc2e9370e5a7a3cd6ff0cac8f2eb4f416f85",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-dark-320.png": "23a2adcfb7254619e4f7dc066bf4e7f0fa80cae54326a31d5592a72dadc916bc",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-dark-390.png": "ad85159a48d60b7019a20b6aa4d941c510d85d34b7a55ab259a554f916b5037b",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-dark-768.png": "3ea0bcfe0651c52a92f8f5e11756c259c1b2294de60cbadb8583e5538831d4f5",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-light-1440.png": "07be500ecc50e3daeb501cfd363745285786ada9c833b82e8019d8b7b542a797",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-light-320.png": "287ce21b1a8122acf38764bad2d306226293451dceaa10c442509e9cb691e617",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-light-390.png": "c1c310cddbc44a86fded9dda8c47db05d6d1d2adb73e35b3172e9c70317ff916",
+ "docs/ui-modernisation/evidence/entitlement-refresh/browser/wrong-owner-session-reset-nb-light-768.png": "ecbbf53e052fad9e4f91fb62300dddf8e08ab00ba9e249054c1e158c006ee35d",
+ "docs/ui-modernisation/visual-correction/COMBINED_TESTS.json": "ac9b3417234033c85a59bbe4171960778130fd9d3a946ad522ecb70f5df39658",
+ "docs/ui-modernisation/visual-correction/DISCREPANCIES.md": "cc970d7099ecedf664c07944b80e6d91578af0b61110a97b2032e494ff51cd9a",
+ "docs/ui-modernisation/visual-correction/FOCUSED_TESTS.json": "879ad2d2fd4b29ead51c083dd3eb27e13e844e1d5291224420bac7f77c7c541f",
+ "docs/ui-modernisation/visual-correction/HEADER_TESTS.json": "ab991c0faf2a85ecf8c31c7b577a4f9daf348b2b60653c2cb826b82c1787aef0",
+ "docs/ui-modernisation/visual-correction/OWNER_FLAT_VISUAL.md": "908b6f38e7d4e76fcabad6ddb16e646279395fefd2cfd899a629b725208050ff",
+ "docs/ui-modernisation/visual-correction/OWNER_GLOBAL_SIMPLIFICATION.md": "9aeab43b921edf6b7fd280473ee95270d94e15a03036e0391499133f54a12a60",
+ "docs/ui-modernisation/visual-correction/README.md": "2c5a985eb7c35ddb55d6320a5ae17b758b73c466f639e79054c41dc7e310a302",
+ "docs/ui-modernisation/visual-correction/ROUTE_COVERAGE.json": "6298a03f2519cdbce23621e77ea892c0d2a263e420e3ea66e67ffd221a5f1afc",
+ "docs/ui-modernisation/visual-correction/SHARED_TESTS.json": "9d8c566e18f09d8dd61f672e72197a0cead34a8a878ab2bdbe701abd2fbc9a34",
+ "docs/ui-modernisation/visual-correction/SHELL_TESTS.json": "89fbc247193665571b37524f8bce1a455db38b21d1d8ef0b9d259795429250ae",
+ "docs/ui-modernisation/visual-correction/SOURCE_REVIEW.md": "40f0de5fbcac388cf5878803703cb846e906e1049dcc39a6c6f8c29d8c693f6e",
+ "docs/ui-modernisation/visual-correction/VALIDATION.md": "a68dce490bc0dbab7185d5422fa80580b0335b401cdcd576229c5aa432f225c4",
+ "docs/ui-modernisation/visual-correction/comparison.html": "5d9dc7dbf617689e8710120dc7dcb34c11b485c7711a4c28ac59f724eb9abe74",
+ "docs/ui-modernisation/visual-correction/evidence/cv/REVIEW-TABLET-FAILURE.json": "ae676d595c1064c800a8c0e5ab04d65f2819d1b52fb84c45e3bbb56f5eb38fd2",
+ "docs/ui-modernisation/visual-correction/evidence/cv/REVIEW.json": "c49e2d76b24cc22ac150764081e6b9e89f260df636970a1ba2c2797a25e560ec",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-dark-1024.png": "65013a9d52aae2d6d26e012e4149e57bed3a7c4acbced27139af46a6228d223e",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-dark-1280.png": "a1774845ec664e6d9e4bc5ee185bccd9cba25a34db321c8128b0ae14c15d4b53",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-dark-1440.png": "d8f98a3e2b75f82046b7a4d4e9d6f7553a9c8e164963522337c225f423cc9585",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-dark-1920.png": "a8c33add98e2aa4bbb8f74a52046ae82986c64f1b4ff24ff474e47e349026c33",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-dark-320.png": "922134ccd2d99bed89f2e5a16e9cd28a6503dfe51c7e0a068c76dcd95299ce68",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-dark-360.png": "a48afbc67b093491f1f974554d81f49924c4be91ef8c1cd2623d2c0ba63ce668",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-dark-390.png": "b97d01ad23363cfaeb1ac695db0352c34eb540d3c9c2b4e5eb882e22d8790ca3",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-dark-430.png": "4649d3ce36274c546d2bc6de9c4287e8f25b0456157f1cb21e4758a23724955b",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-dark-768.png": "fafe1a7e0535448cdaf1bc788be91d7f0e2890520ada65b37a76f59e67b2d108",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-light-1024.png": "f4791e699fea0945bc9f6f5133e33cc853c3ab3ac52127e36ff5bbcffc52304d",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-light-1280.png": "416a5610d696d5a0e9545533b4820f747e74645fae78315115d025cd6baac37b",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-light-1440.png": "260602146206f1635e8e0be1226942a526e736308f07eb378ba25b6e375e80f3",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-light-1920.png": "2bce8624694843288bc421cd0a4054bc696a93fcb54835d08a3c96ca67158ee4",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-light-320.png": "5a83f3c836a4aae4c8421a7d0db80fff096ff47e851595f4a4aad30253d8c250",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-light-360.png": "f93c4b3cc57348dffe518cdef2555fb9f76cc5ac19ab820c3dad8b30d0002449",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-light-390.png": "21fceb0c453d79c5ccafac8acc2a3564d1c94aacbf36f66d1c7702f9af5d33e0",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-light-430.png": "16a582ac6e1cf7b4196b05cafeea0538e59aea40c7484b166971aa368599df05",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-en-light-768.png": "0570aab792af19553f97117283429a41e1a199ca9931db1e9c99de90b984db1a",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-dark-1024.png": "da09ab0b6d95bb991040ddf958f4a69ce82fe2efd25414c4e8e97c5f1cc65319",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-dark-1280.png": "fabac5c8f49932b16a222692bd81a6f5e2c72e566f6d8fbacf6c2ad15c06a519",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-dark-1440.png": "f669260e32a6776d3a7ce4cb86db7549879d0493e7204c33f8e88a4aa8033ea1",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-dark-1920.png": "1d5344919aafa85b2ec5f5f7e1afae5ae2b85fd4d90808507947e0f85d07869c",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-dark-320.png": "21a92642160ead9bb46bd9f9b06eb57a766507bf3498b858391312dc3fc17b68",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-dark-360.png": "4854f19c8b9178f14edeb77170ed9f04f10cf6517ba9ca33534a66405287fd83",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-dark-390.png": "96b7d86b278bd85c68c292d47a6c3bf99a5698605f3f426cc10986d2d7ae1cd6",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-dark-430.png": "13b1a2c113401ff5a359548a87cc8d714dce6a872c002dd9ca795c1c3512af8f",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-dark-768.png": "2f2cb36e09c04130628d0f2a0b8d2b0eec48ae7120be190e59820923c2191144",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-light-1024.png": "f9a78fd5a525b5a3d5052ec42b28fa124b57b9b8f1c76daa7de95bf022587fa9",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-light-1280.png": "23f5b7a1e89a5d0ddca9c6bff72f62971cd83d6e38f3ac5b2bfc88e7d72068cc",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-light-1440.png": "5d2797eb779e2767e370de85d40c1d91fe7616670372bbc97383a984defd92c5",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-light-1920.png": "07548a54ddfbb462dd0687283f42944b1b2822ba2ecc79ec2477eebc46d2ca6c",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-light-320.png": "d89574d7356eaaf9b97e2d5abd1445262aefe28d44377cd0db8abe5763588c2d",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-light-360.png": "426dea2ea898c18b5e9d2e6b1dec2305360308e98beb73ea30c0bcc6f8511df1",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-light-390.png": "32c8f1926ccd05fb24bead3d493136d72a31b9431e66265482acb44b9ae1d499",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-light-430.png": "73d8ea9e3181d6cd9e0aa4ea80073c6b43b58d2b06a5fbb8cb5ae170243103df",
+ "docs/ui-modernisation/visual-correction/evidence/cv/ai-review-nb-light-768.png": "da3c3438d6e12b7fc5be34516ed16664e70dc43720d5df8403d631cfb1fa74ef",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-dark-1024.png": "3fbb1e83bf82ef944991fea34cfabf3d38393bd525296f54eba2a610980d3446",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-dark-1280.png": "ad0df32a04fe175de3e31d8671b89990ddc0a01300e61e939302952b07f55a9f",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-dark-1440.png": "f43e4bf4385785e4df242403570244465f3689e930779efb8e63b0fdf21babba",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-dark-1920.png": "bd8c0f735eef2f0cfcc4068e1697391e479b0f8773ea200ff8f35f88067a3f94",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-dark-320.png": "f156f5ad5dd724de08818163f3eac75b18b9fd872fe994fef71ee45e05a65a93",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-dark-360.png": "4940ed7a806da290034aed1cd0d5c18212ec6a3e26ab381ddb3d11b223b1c6e8",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-dark-390.png": "2692612aa73c6014ceffe8cbc36326ef0c52e424a1965fefcb0eb9a95ab72773",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-dark-430.png": "ed0c09dfcbb9fd238d343a134d95252f5eb3611e69384bf15b0e37709a3658a9",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-dark-768.png": "01d3a8c2fc83e4aba927b505d29984fabd8d5d3610710acdb0d3178e99023668",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-light-1024.png": "19c9827812af821dbac84177b86edda0f4f1fe6c7570d50cd2a5c0f9005f31c8",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-light-1280.png": "3b15a0dea9500f2a93c77ee10136e1a8c71aed885a83dda6a17d426b6925e38c",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-light-1440.png": "844d68d76f6fbfa232df5dfe4598de959a23d61a8de0888723b2d3d9a355372e",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-light-1920.png": "86a3c71058840cd37910a61904813a20f284f57dead6eaa4f6cfe39dfa8d8bf1",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-light-320.png": "81e1bfa092c97a50fdae3c0f57d93b676b2aa0c95ee67ffb7afb58c727a9c9fa",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-light-360.png": "a6fd85e009be86aef5c2f80af77e47a3a798079c8a1e2e01f0f3c0b21d411ab8",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-light-390.png": "e7b5cb7951bc9d28c9665c40d7107b334365ac21e9fe36249f9cee00bd1ea5fc",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-light-430.png": "0929a34acfaf18793de739c160bc5a268a1b9879b260a9c7b6f05d73ad829d0b",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-en-light-768.png": "a080ecf2fe8006f6f16fbb474e7350946adc2372ee1cdd26e4fac1fdd83d1b2f",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-dark-1024.png": "9ebcf7e327327d3ad8c9901b3a0858e30077da259516aedbfeefec219e4d8099",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-dark-1280.png": "ca7ec239fe75acd1f637fedaff547b5965a14a0b3d3f43e9103652c6ba51c381",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-dark-1440.png": "e9fdaacff73a51dccc077f1d33211e2fa29da573f20dd6628e82711239fd9bde",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-dark-1920.png": "fa4097043ac7902b184bb6a6946cddbddecc79d08f2005c2c77875ee96bf3cc2",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-dark-320.png": "dd24ce102e8a0dfa84a9512b34a52586c1c7aecea2306612c11aeaaf4c6915ac",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-dark-360.png": "467821ca788fd6f3a87d45598e447f542d2a21d4a6f2e89344d0d1b7920a39e7",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-dark-390.png": "94d2c30f74ff9a46c73bfd7c842cf0feb69247c51001acd4bada64b8cba74681",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-dark-430.png": "dcaf3e2cbf6756d36557e9bbf0c0f93c837aefe39b2bb215c5a2efb6cbc983fe",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-dark-768.png": "70be8237004603671bd8981f52b8d7291189c2e056b92f36a3564817d1e11437",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-light-1024.png": "4de4548ad70636f4a5fcbb51c8b5d37fd5ef73f10f51eb0dab9f136e103a7d83",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-light-1280.png": "9351ac369be11fa00027aa016a6dae6fcc91f77d5419b480b882da97153588ed",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-light-1440.png": "9ebf15c2b8f658fdcfc90c16a1ea40fa6da9eaf966030a2bf4e9b06afab64b9b",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-light-1920.png": "198bb4eaf8db1f2a337521a383fb619c6e4d5a1634be65aa332f36a11eadb5c8",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-light-320.png": "4e7c2c390079522f1cd49dea15d73905ade685e8d1897b2c182de1014cbca22e",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-light-360.png": "dcf0763b20d77d0c91c981a8a08d861bbfbb9df5b8e2dc271886cfb8f39aac1d",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-light-390.png": "5dec8b137d0ae6930deb82bf9e2e1104ccb34ac5635dd93307b08559eec78491",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-light-430.png": "b2ade842aeddae66f34671280ca2c90b03ee11d2b30dd540505de3d8b8a7d476",
+ "docs/ui-modernisation/visual-correction/evidence/cv/content-nb-light-768.png": "63524746b4003972f3ac388838b34c6a605c5ea74ae71be056a0fcf1792fbff6",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-dark-1024.png": "964bd378180671fea9dc5322bf7774a251700b9fbc1fe47ad4902b05bdf2fb1d",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-dark-1280.png": "8514c0b9e8ad50e890f36d39e27fc84b3c961b567314f315fa25a8de8e07fb79",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-dark-1440.png": "e9456032c41fad134482181254bb6317ce6759645e8c49eee6f4253df9a7be18",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-dark-1920.png": "58851bfc308ab46999dfe55bfbf0aa74e8d956e10bb47a2cd0bc8d39a7912faf",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-dark-320.png": "c8863a3f10cdc09ebd4b22f40faeffd3b0f11cb3fa55b970472fb2a7bd35b263",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-dark-360.png": "7a5d2504c24bc74afffca47aadd3a265281bc0a95e08635386f1e213370c902d",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-dark-390.png": "826489682670344a3a48b129620a0bd37e92d977c4a43e8be713b3e1538e1206",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-dark-430.png": "e769329c3cf681f477b4b8604585216873faed92e82bbb020c5cb78d268005fc",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-dark-768.png": "e00881da46c04ed1f94fbb7d9d2a03ae1e44cfb7df08ebb7423e558139dcb7e0",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-light-1024.png": "7d2a74cc142784f167caea248cfa69b1fea248c6f44764c6b162cfdf9b57059f",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-light-1280.png": "dd8c5656c1297070504f7a33c58832211761a451266c8eed43f5cce4f23dee34",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-light-1440.png": "562cb1d4eda9acb64c12bae94fe7d20286843d5c8e3b7fd25e13d54c78bc95f5",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-light-1920.png": "df2a32604843adf6d320e75314b391a38ce8470d5cbf29fcf31e0aa6583a81b6",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-light-320.png": "f094460b23e5dc82a5a10e35cc4ee27927ebb23ad0783e540759e96e7e3836b6",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-light-360.png": "afff2e509c0a6629d9a6024162179cc8715337921f59f0d4661d67ab651ed69d",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-light-390.png": "2bdb3b0ccffdef61f0de7d842a6fd729b89c02841c12df895eef104d5fb4c02e",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-light-430.png": "bcaae3f149ef31d75e765c728683af541f3eed9e7a8f9c13698ddd3643d7ffdd",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-en-light-768.png": "3cb97e2fd1952365ae1e3d64a9ed4a650a1dfe1580a1fc2be48ebdbe509b76f9",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-dark-1024.png": "2826590591aa659792c501bf009623392014e7a3d71d863989fa2955fecc95f3",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-dark-1280.png": "9c75270a632bb896fd15c7886019fb1ad97af6b0b03c969775dbae96373989da",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-dark-1440.png": "ce4cb74062deb0fbb74e0cc44bbf4262962138dde9d88ebb257817f32c4a127b",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-dark-1920.png": "bdc6245a6ddb814c2262ffd1e49ad94b0192c24f0be13dfc517cbf42622d6c5a",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-dark-320.png": "b32d7238b02daed932a824c93c2de17c6a2eb4c5a2a47e983dbfe927bcf98bf0",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-dark-360.png": "7eb53a0f64f57a70a5165423d37379edb7104c649c968f7d908fc64a307fde2e",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-dark-390.png": "028d1134c8e720eec73e5e6a8428b0806893c28574ce796e0c1ebffd16b58594",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-dark-430.png": "a9ec51ec214828deb10eae491a277ee787a3b9e979ea580e411cefc207e632f8",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-dark-768.png": "d4ad3aa85d329fe7fddc6ac51698e606709096eb8741e71ab72e909c84834ea6",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-light-1024.png": "c85b629b8fc3ca5f9d50b73c0c475031908577de4302a22e16e821cb13b6dfc2",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-light-1280.png": "5075dfad46e7da67a4a8fb25d3f8e3db130d54e8dd85b51441fa8d015af2ec82",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-light-1440.png": "626cecdfdd22469137873f39b08682129d5820caf30371941eedd6cddf642558",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-light-1920.png": "579ecbe9295cfc3d13ee9eb83b5eb986dfe750c1641a9f8c7b12107c1278ab8c",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-light-320.png": "8127baabd0caad8d0fec0e3b9619c79749d1ba96adc3e0a5e319a87a8b477198",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-light-360.png": "7f85aee187026f2bf8cf5c8bdef6c5454838a58b0de87831b9ab3d5ed212d47d",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-light-390.png": "3345ce9590c05fa8f1d90d552cb95093816c287daf6eca6a7a5d23db9197311c",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-light-430.png": "8f4e3fa294a4bb69128781354019368bc7621c585f2f699164d021600c8c3df6",
+ "docs/ui-modernisation/visual-correction/evidence/cv/preview-nb-light-768.png": "e76f33070aa1b0345dde67bc2870aa882f0c8315f152bd42f9279d233e88b687",
+ "docs/ui-modernisation/visual-correction/evidence/reference/approved-cv-1440.png": "396290ac3c626e09db4c18013c096e2ddadb98a6d422c59a69118483f74f7ce6",
+ "docs/ui-modernisation/visual-correction/evidence/reference/approved-cv-390.png": "d0235b28b846f2cdc5a3687c60a56cad08c419d65657f4e70bf4c0f886bd75a3",
+ "docs/ui-modernisation/visual-correction/evidence/reference/before-ai-review-en-light-320.png": "bdb9a967a5f4fd77c30e6c8a8a869b4f0d914c1a0fa00bb62f5f9abd49b49bb3"
+ },
+ "export": {
+ "job-tracker-ui/out/404.html": "e3afe45e5a5758206eb3dfa3d876922deff1b6497bb9deeffb65ad564b2cfe54",
+ "job-tracker-ui/out/__next.__PAGE__.txt": "6e71a3791cb93a1ba38b6a04161a4f0157f46cd7321fce360e8fd14bc4bb6698",
+ "job-tracker-ui/out/__next._full.txt": "5c9ba9c96e8ca5df6598ea18e37f743de34f6ee4fac7db193a36f4e36d291bc0",
+ "job-tracker-ui/out/__next._tree.txt": "3b1bdcd3696a96d435e543993fe818d9ccb68001ba1207cb281c735e004c15a7",
+ "job-tracker-ui/out/_next/static/QFdfu1JUL8cujO5Nj3cqr/_buildManifest.js": "9476e0afd3f9da68a64e6ec58631191fd3eaca62c9f5a377e7517fe9a89e59ea",
+ "job-tracker-ui/out/_next/static/QFdfu1JUL8cujO5Nj3cqr/_clientMiddlewareManifest.js": "5483e3295dc35dfe29ea932efc85341c916f10ff78ff5b0e965e003710893a4a",
+ "job-tracker-ui/out/_next/static/QFdfu1JUL8cujO5Nj3cqr/_ssgManifest.js": "678f6ce2cb80b1fe72fc67e7412be6e2ab6ada083111b64f7c40d35e3cba5e00",
+ "job-tracker-ui/out/_next/static/chunks/0-_aq6ipzcshj.js": "39f90c215bf52aef6274ed3dcc0f8af32e21a37fe8845b3bca0d6ea60da6a8c2",
+ "job-tracker-ui/out/_next/static/chunks/0469gyudlgy5b.js": "a3b3bd46632b3678b27b3ef29ef63c1ca38b36ec29bf751fb223c0e2a5cfb243",
+ "job-tracker-ui/out/_next/static/chunks/05rgc5zsm9p5i.js": "1da7305ab9d8e95795327cce11a16db4c56d90429d7e1dea4c4088c085f20d69",
+ "job-tracker-ui/out/_next/static/chunks/06uj_cr-l0wxa.js": "42bcafb6776a31f4ecf896c60d188bde349da352874b09cfa340f43890f7c2a8",
+ "job-tracker-ui/out/_next/static/chunks/0ah1fzqmie05a.js": "5c65505a7dcbac63ac71d254e619a4c800943bfb4fa16cd40c10cdbe7e9b6e31",
+ "job-tracker-ui/out/_next/static/chunks/0bdt7ln111t48.js": "6184b1a61f22e2a640c17941634fdc75678ce93d142848d9f07f163e0d1fd201",
+ "job-tracker-ui/out/_next/static/chunks/0bwvt3mysnclc.js": "7705667a1b75812b7833d9c9dff47fe023015e58e382c40f4507d9948c973af4",
+ "job-tracker-ui/out/_next/static/chunks/0c-j9v44ea4gk.js": "d7e04926724f76dc50b5202522fab3bb553370d040396394e84c342de466512b",
+ "job-tracker-ui/out/_next/static/chunks/0cz1d0mv5g_q7.js": "0973c1d64c88adc8e3c950410cb58b288f72118d5965b78049438deb8f2f9683",
+ "job-tracker-ui/out/_next/static/chunks/0f_m28-3dp4n3.js": "eb1ea15a89048a339f0e8a8bb4056025c586f2780104b7f5241ad6d3470f5493",
+ "job-tracker-ui/out/_next/static/chunks/0gamdsp7ql8cu.js": "f641cd9e2957f5c01234df02211a085f8e8fe2009cf84817e4143f3c477e1dc2",
+ "job-tracker-ui/out/_next/static/chunks/0jcvc3qm6-lyk.js": "7c27e1fe373b822adc68c63096a5bf38444ad605b9743f0920271652989c56f1",
+ "job-tracker-ui/out/_next/static/chunks/0og1crk78cn4a.js": "aa5031605cb2f46a612e94d9d71473f48a71aa4a5acfe8fe5f2dfc66d951ab40",
+ "job-tracker-ui/out/_next/static/chunks/0q20g9o8x-k8z.js": "3d4d9086985419aa8866b032158196c774acb8bf318f3c8245508c8daa9c5148",
+ "job-tracker-ui/out/_next/static/chunks/0q_pwu9jxv4-d.js": "42a43b3d7245a413c7c29b4cbe87823037a6dbc637e2e282c92405470e0f575d",
+ "job-tracker-ui/out/_next/static/chunks/1-8ykqf0n88k2.js": "eb208124ec838cb9a9ae366745bd81fba1c35eeceac128c567bbb7977ebb6a2e",
+ "job-tracker-ui/out/_next/static/chunks/14-lfugawba2w.js": "6a5780ca3c84d7f130f3c0a14431c85c7a1e799e2645b8c171161dab40a64360",
+ "job-tracker-ui/out/_next/static/chunks/1435in_k_-dhc.js": "4757476512d5c4dd25f9264a18b304ed4824b23aff1c09e134fcbff21d9c36b6",
+ "job-tracker-ui/out/_next/static/chunks/145oicobmjvm7.js": "d6bbbdeed1381652dc7412e5ce673a077579ecd5cee8934cb6b533c814098764",
+ "job-tracker-ui/out/_next/static/chunks/14e7ovj0s3elm.js": "070567dd4d23fb9fa0b9ba132185a697af6578045d43b2b1c7bbb2a1594d935d",
+ "job-tracker-ui/out/_next/static/chunks/16lfece6cnlln.js": "716363ba044f30b0e70440756b4e5eafa2d25f2e1628e855e3bc4ab9eabee3d3",
+ "job-tracker-ui/out/_next/static/chunks/1d0xrdyyzw7qc.js": "c11668ff1e152008e0d7b4454af12eb36c97df46a5860938e2eb5d8429b374a8",
+ "job-tracker-ui/out/_next/static/chunks/1fsplt8ynm23o.js": "0a82ec48984596cecc33ba70607e5e0b99819c6af0b0909db7fe8502db727269",
+ "job-tracker-ui/out/_next/static/chunks/1ke8pzecwofrg.css": "32e9ab963ebadebcbe2c68dffb24cfbfc8cc24255ad91b48b7941fc777bf7439",
+ "job-tracker-ui/out/_next/static/chunks/1m4qrvmbq_fq9.js": "4d36c8ec83dc817f273178dc22f329ab026578075f58de68b6f133bcf911a8a1",
+ "job-tracker-ui/out/_next/static/chunks/1req80b9jj38r.js": "eee4d2e3789e1215195dba99ad0f09d34f8c83da848322b76054722233e9dae3",
+ "job-tracker-ui/out/_next/static/chunks/1wpxvpfa6li_4.js": "025ec0658f9480ccf14dd9be5cb28320ed14f4921c60ac9a2bf844d07bf4171b",
+ "job-tracker-ui/out/_next/static/chunks/1xai8vimu-u3k.js": "69d707c32d15451b69599a5695061219297478925e30f32259d4cf4a4306cdc0",
+ "job-tracker-ui/out/_next/static/chunks/1xn023_28rgzj.js": "4f7f2108d030a48d039930736c92a55710975dddf419fe673f84d92899b1f575",
+ "job-tracker-ui/out/_next/static/chunks/1xwc-b795syag.css": "f73c002233f931ca14d0ae58815c47ca9f2659f25b1547a6d1fdca12a2a00b3f",
+ "job-tracker-ui/out/_next/static/chunks/1zi8i6dnxiac_.js": "8aea28bbe6a138e5d4b619429ca71570883a7aee974b86d5a4a746d90f704dbc",
+ "job-tracker-ui/out/_next/static/chunks/22wx8--1b9tnq.js": "3f7d8e762371262c6a740b4dac21725b424847319afac46055e97074a99ff5f5",
+ "job-tracker-ui/out/_next/static/chunks/28d-2qajcwxiu.js": "69378d927ea28bb68b09f3d77828116ee9e51860a84a9ec3b81bf0333f7c5313",
+ "job-tracker-ui/out/_next/static/chunks/2b49wlharl6fd.js": "40619f8a5a03fc7479b0679717b1e5ec0dea0a1944ce77f4ce9d29d2486fdb5c",
+ "job-tracker-ui/out/_next/static/chunks/2br3ad_-bc7k9.js": "80fa55f7a32db4d743fda36747c36994fde00a0f53f2eb25b2a6d07c6fb97cd7",
+ "job-tracker-ui/out/_next/static/chunks/2dmc6iqxm14fz.js": "3b20898e0cde315c48d6fd46abd562269bbf73c850528a4be2cfc2b9aa0c8f5e",
+ "job-tracker-ui/out/_next/static/chunks/2ghgf2s9b2iou.js": "23d8ff31e2128d0541c1887785fb75885323fea7c5d4f35826513b75c12c2ae3",
+ "job-tracker-ui/out/_next/static/chunks/2itnratrnd9c5.js": "8be0b191c2d54f7233ebf2f1e169b3bfef680fa93da21c08d8c43b05c3ec174f",
+ "job-tracker-ui/out/_next/static/chunks/2kpcazmi6n6mk.js": "bea0de681fceff50056bfeccc5d035aff54d20918288051cb64bb259edd250c7",
+ "job-tracker-ui/out/_next/static/chunks/2s2gjr6ro25dj.js": "7489e2ac285a05b563c2bcb4eaf9274bf930f2a7385f17d6d5e6850064b88b10",
+ "job-tracker-ui/out/_next/static/chunks/2u5qve004opku.js": "be388d9a6aa423082bafb4584c3facc65ddfed71bcfa5c1d06b097b408c5ff97",
+ "job-tracker-ui/out/_next/static/chunks/2ud29c_uda_ji.js": "a8aebc85235f1000afcdd9763722ee9aafd4fed6751bc19e3ee908118d920420",
+ "job-tracker-ui/out/_next/static/chunks/2z42el0b2mp8_.js": "86ff990ef32c90c4839583e4f1d1bcbddb165dad3141b9fcd2ecec67f4ff24b8",
+ "job-tracker-ui/out/_next/static/chunks/2z9e_b61gtc22.js": "b9d717dad26828438d4ff56cabca41a8055f5eaa54420fd0aeb6b4ba7d5baa0d",
+ "job-tracker-ui/out/_next/static/chunks/324qfub45abd6.js": "77ef8e17b89234fb19a80796d5d04d3e297c459e5cb41b35b5bc78c0b10b4984",
+ "job-tracker-ui/out/_next/static/chunks/357yqeklh7414.js": "0192ab7198ebbe299d34a934c504dd4b562d1cccebb6e9d4c5163930c881b14c",
+ "job-tracker-ui/out/_next/static/chunks/3bqn9b34na0b9.js": "f1b8ebcc1b22251c33c9f3a5d11c1f893cad2da2e8744a441e790f7347aa9e73",
+ "job-tracker-ui/out/_next/static/chunks/3ckk_j5ril9ag.js": "87f631dae7b648d32171e9e05a3e000753ecb54f8d3b86a4401c0e4ab4d73553",
+ "job-tracker-ui/out/_next/static/chunks/3eupzm2out6bo.js": "07ff8eb883381791bf067722b5ce6261f9528fc4ea2042960df412762b54b219",
+ "job-tracker-ui/out/_next/static/chunks/3gkylew_qn7cw.js": "7e6c74c81be0c41ab433e36d65b914f62c48f332922e27f7cc953476f4dd78cb",
+ "job-tracker-ui/out/_next/static/chunks/3la4obitihzpv.js": "9a5a57b46db389b98f1fd5baa86eba1a360300dae9d1ff3ffeae7bc3378135b9",
+ "job-tracker-ui/out/_next/static/chunks/3mr-fk5x_5-cz.js": "54caa52575a761eb593a38b3e5f5fb3cb2abcf77ebff44eb38c6973e89846b67",
+ "job-tracker-ui/out/_next/static/chunks/3q4v10rrqy40n.js": "d87ff7b7a0f07d0d92eab3876481eb686a12d9c43d8b92cbe406aefa227a11c1",
+ "job-tracker-ui/out/_next/static/chunks/3u61o8t7m_jza.js": "86231c12e0f8cacc8638bed0bc4b34f645fc35e60de342dc154d3cce0c9a5afa",
+ "job-tracker-ui/out/_next/static/chunks/40y_aqqilokr2.js": "1f5a5260316134d6bffe949400752ee6b42addf908ae714ef4ae4ebde916dddd",
+ "job-tracker-ui/out/_next/static/chunks/43b5x8qjjh3ax.js": "6ee7261cf9a63e0e6ea181bbb09125e09948588b6e10b5c02727c686a6062a3a",
+ "job-tracker-ui/out/_next/static/chunks/turbopack-25fzg9ay_1ss-.js": "c40f39e993a30c96d6247bb3a7b581538bb046efe8ef8ec07bea3ba32291750f",
+ "job-tracker-ui/out/_not-found.html": "e3afe45e5a5758206eb3dfa3d876922deff1b6497bb9deeffb65ad564b2cfe54",
+ "job-tracker-ui/out/_not-found.txt": "f6dc26680db042beaeb5e03c3188eae2942c8abb6bee6a3d1a1f1304dd803f6b",
+ "job-tracker-ui/out/_not-found/__next._full.txt": "f6dc26680db042beaeb5e03c3188eae2942c8abb6bee6a3d1a1f1304dd803f6b",
+ "job-tracker-ui/out/_not-found/__next._not-found/__PAGE__.txt": "d7392e8e1e26206b95343e791470d47a6ac1afdcfa28c9aacfdf2a54c0237585",
+ "job-tracker-ui/out/_not-found/__next._tree.txt": "f6c16437d983b6cc5c351bb4dd2acb370fd8998246a7cd6f44da40e8b6f3bdb5",
+ "job-tracker-ui/out/favicon.ico": "8d4923e2c487805ea9f852a685b2cf0fb10512ded8290d2a5c37d1cc8fd0702a",
+ "job-tracker-ui/out/favicon.svg": "63ecf8f37f8bb146ecfae3917187c6b692d4e801641e8a314486a4007912f3a3",
+ "job-tracker-ui/out/index.html": "683e1387f831a2386679a252c46c11043f88d0ae2d092df2cd157b4d79dbebfd",
+ "job-tracker-ui/out/index.txt": "5c9ba9c96e8ca5df6598ea18e37f743de34f6ee4fac7db193a36f4e36d291bc0",
+ "job-tracker-ui/out/logo192.png": "bc652031597fabd19b9f14e22a71f809490d218037521b3b64d013418c1390b4",
+ "job-tracker-ui/out/logo512.png": "5129e9bc1ba812b711fd9a646d3a38a906d365a26ee685df183b8752458944d4",
+ "job-tracker-ui/out/manifest.json": "2667ce63c2e0835b7007239816a5597639321d333da396a78638dfa9e8a7c935",
+ "job-tracker-ui/out/mockups/dashboard.svg": "318be3adb1324c26eb30f05572a29528a3e38331c6a604652eef75b54f8c29dc",
+ "job-tracker-ui/out/mockups/pipeline.svg": "db2ef41faabeb90e7ce85413e168581686c54535d970fc7d8deda3888a479de4",
+ "job-tracker-ui/out/mockups/workspace.svg": "9bbab22349147c7b01d6e18c93c622a6f8aed6dedaf23715189ab54d60e1ddbd",
+ "job-tracker-ui/out/robots.txt": "e5ab0d231eeb01b4a982d1c79a6729cac9797ad15a69247e4f28ba6afc149b4c"
+ }
+}
diff --git a/docs/ui-modernisation/visual-correction/SOURCE_REVIEW.md b/docs/ui-modernisation/visual-correction/SOURCE_REVIEW.md
new file mode 100644
index 00000000..70f1afb7
--- /dev/null
+++ b/docs/ui-modernisation/visual-correction/SOURCE_REVIEW.md
@@ -0,0 +1,7 @@
+# Independent source review
+
+4 November 2026. Read-only review by the existing A3 reviewer of the settled uncommitted diff. No edits or independently executed tests; do not add review activity to execution totals.
+
+No actionable findings. Reviewed desktop header target reservation, compact Search/Add Job accessible names and original handlers, account language/Settings/version access, CV wrapper changes preserving refs/roles/lifetimes, actual editor-width observation and cleanup, five-value section navigation/history loading, explicit panel names and mounted Content, notice wrapping/action/dismiss semantics, and mounted availability callback/session/sequence/strict boolean validation.
+
+The initial reviewer attempt hit an account usage limit; a later retry succeeded. The review did not independently rerun rendered matrices or the then-running refresh replay. Native assistive technology, viewport zoom and physical CV rendering were outside this source review. The browser replay subsequently passed and is recorded separately in VALIDATION.md.
diff --git a/docs/ui-modernisation/visual-correction/VALIDATION.md b/docs/ui-modernisation/visual-correction/VALIDATION.md
new file mode 100644
index 00000000..0035c906
--- /dev/null
+++ b/docs/ui-modernisation/visual-correction/VALIDATION.md
@@ -0,0 +1,39 @@
+# A3 visual correction: shared shell, CV studio and Settings
+
+4 November 2026. Approved IM10 continuation from published `7aa54bff1fe376b798922b9da75feafa202dbb76`, incorporating the owner's global simplification and final definition of done. This is a bounded implementation checkpoint, not final IM10 or whole-application acceptance.
+
+## Implemented
+
+- Compact one-row phone app bar, quiet 44px icon targets and responsive desktop controls. Settings and language remain accessible in the account menu; the full drawer/hybrid navigation remains. Version metadata remains available to its existing authorised caller through the account menu when the wide badge is hidden. Search and Add Job retain their handlers and accessible names.
+- Open CV document header and editor/preview panes, flat content sections and AI action rows. Real document paper, form fields and meaningful review content retain their boundaries. Editor-left/preview-right, phone Edit/Preview, autosave, undo/redo, history, sharing and export remain.
+- Width-aware CV section navigation uses a labelled selector when tabs would not fit. All five section choices remain available. Panels keep accessible names; Content stays mounted across section changes. Regression covers mobile draft retention across History and Preview.
+- Continuous Settings sections use existing flat PageSection treatment rather than decorative surrounding cards. No settings, confirmation or persistence contracts were removed.
+- AI preference Save refreshes server-authoritative availability for the same owner without remounting Settings or discarding unrelated notification drafts. Session/lifetime/sequence checks reject stale completion and malformed grants. Different identity still triggers the existing session reset. A refresh failure is reported separately from a successfully saved preference.
+- ProFeatureNotice message/actions wrap in a grid, fixing a reproduced Norwegian 320px scrollable-message accessibility defect.
+
+## Evidence and limitations
+
+PASSED: CV visual matrix, 36 configurations (nine widths × EN/NB × light/dark), three states each: **108 accessibility scans and screenshots**, 36 controlled review/content/preview journeys, zero document/profile writes, zero browser errors. Recorded app-bar heights are **58px phone / 66px larger layouts**. Content/preview contain no outlined Paper containers; AI review retains one meaningful proposal comparison object. See `evidence/cv/REVIEW.json`.
+
+PASSED: mounted availability refresh, **16 controlled journeys / 64 accessibility scans and screenshots**. Four intercepted preference PUTs per configuration; unrelated form node/draft retained, malformed grant rejected, valid same-owner availability refreshed without reload, wrong-owner response clears private session. No model requests or document writes. See `../evidence/entitlement-refresh/browser/BROWSER.json`.
+
+PASSED: TypeScript, full lint, production export build and 57-group / 34-route TypeScript census. Census is source presence and unchanged preservation requirements, not route acceptance. Physical document renderer and data/API schemas were not changed. Source review found no actionable regression; it did not independently execute browser checks.
+
+Selected component tests initially exposed a Paper-class-dependent test selector, updated to the named review region. A new mobile test also caught incorrect test-library option typing, corrected before the passing build. A tablet rendered run exposed the desktop collapse target overlapping language controls at 768px; corrected at the responsible header layout. The failed tablet report and original Norwegian notice report remain alongside successor evidence. Failed attempts are not included in passing totals.
+
+PASSED: final combined selected regression, **147 tests / 13 suites**, recorded in `COMBINED_TESTS.json`. Do not add overlapping focused/header reruns to it. `FOCUSED_TESTS.json`, `SHARED_TESTS.json` and `HEADER_TESTS.json` overlap.
+
+Visual inspection compared approved mobile reference and actual current phone/desktop content, observing substantial border/padding reduction and preserved document controls. The prototype includes workshop chrome and different synthetic fixtures; raw full-image pixel equality would be misleading. [Comparison](comparison.html) retains unedited reference/before/after images. Automated matrix success is not owner visual acceptance.
+
+## Open work and definition of done
+
+- [ ] Current visual review and implementation/disposition of every route in `ROUTE_COVERAGE.json`, preserving all 57 groups. Shared changes alone do not qualify remaining screens.
+- [ ] Resolve material discrepancies in `DISCREPANCIES.md`, including remaining nested surfaces, repeated headings/actions and inefficient layouts outside this bounded package.
+- [ ] Complete connected discovery→review→track, create/import CV→edit→preview→export, application→status→follow-up and Career Profile→document reuse journeys on desktop/mobile; existing unrelated accepted evidence may be reused only when applicable.
+- [ ] Review actual desktop/tablet/mobile screenshots against A3 for typography, spacing, density, alignment, navigation, responsive behaviour, themes and text expansion.
+- [ ] Finish Settings section/state visual coverage and extended European-layout qualification.
+- [ ] Record remaining human/device/native-language/screen-reader qualifications accurately; obtain final owner visual review when ready.
+
+No orchestrator work, main merge, production deployment, live model/provider activation or deferred CV-import overhaul. Full Phase 10 acceptance, Global Jobs entry/provider rights, European translation completeness, integrated security/recovery and release decisions remain open.
+
+Rollback: revert this bounded implementation commit on the feature branch; no migration/data conversion is involved. Retain failed/successor evidence for traceability. Do not undo subsequent unrelated work.
diff --git a/docs/ui-modernisation/visual-correction/comparison.html b/docs/ui-modernisation/visual-correction/comparison.html
new file mode 100644
index 00000000..a670e0b2
--- /dev/null
+++ b/docs/ui-modernisation/visual-correction/comparison.html
@@ -0,0 +1,17 @@
+
+
+
+
+A3 CV visual comparison — implementation in progress
+
+
A3 CV workspace: visual correction in progress
+
This compares actual browser captures with the approved design reference. The prototype includes workshop controls above its application canvas and uses different synthetic content. Compare hierarchy, borders, spacing and controls; these are not pixel-identical fixtures. The application is not ready for final owner acceptance.
+
+Approved A3 reference, 390px
+Earlier actual UI, 320px
+Corrected actual UI, 320px
+
+