docs(redesign): complete P5-15-01 preservation audit

This commit is contained in:
cesnimda
2026-10-09 14:01:21 +02:00
parent 266e53c16a
commit 54a377054f
9 changed files with 778 additions and 62 deletions
@@ -1,4 +1,13 @@
# P5-15 preservation acceptance plan — 57 original groups
# P5-15 preservation acceptance — 57 original groups
## Current P5-15-01 reconciliation
[Fresh full57matrix](p5-15-01/PRES_RESULTS.md) supplies actual API/frontend entry, original behaviors, read/write/permissions, fresh assertions, native outcomes and all remaining owner/evidence requirements. [01decision](p5-15-01/README.md): NO-GO for02until the P1 prerequisite is repaired; Production NO-GO remains. No original contract is redefined.
The table retains **P5-15-00 before** and adds **P5-15-01 after**: before56PARTIAL/1DEFERRED; after**53PARTIAL/3FAIL/1DEFERRED**,zeroPASS/BLOCKED/NOT VERIFIED whole groups,total57. E02/J02/S03 fail on actual query/read/draft behavior; C11 stays approveddeferred. PARTIAL rows retain unverified/blocked sub-workflows and do not imply full acceptance. Fresh test/journey limits and three distinct defects are linked rather than inferred from source presence.
## P5-15-00 source/evidence context (historical)
Planning checkpoint: **`46a0c0c6d23464869f50c0d88552963c29cfdacf`**, branch `codex/ui-redesign-phase4`, 2026-10-09. This document reconciles existing source and inherited records. **No application change, fresh suite execution, manual acceptance, provider call, database/Docker operation or production action is recorded here. P5-15 acceptance remains open.**
@@ -12,71 +21,71 @@ The full original sub-capabilities remain binding in the [Phase 1 inventory](../
- **DEFERRED:** an explicit recorded decision postpones a retained capability; it remains outstanding and cannot be counted as fulfilled.
- **NOT VERIFIED:** no adequate evidence for a stated check. This applies to every fresh-current-checkpoint execution, actual deployment and unperformed manual check, even where the group is PARTIAL.
The table has **56 PARTIAL, 1 DEFERRED, 0 PASS, 0 FAIL, 0 wholly NOT VERIFIED groups**. Each row still contains NOT VERIFIED obligations. H/M are redesign regression priority (H: identity, data loss, send/delete/export, shared editing/navigation; M: important reversible presentation), not security vulnerability severity. Owners below are responsibility roles, not new assigned individuals or implementation authorization.
The original00column has **56PARTIAL,1DEFERRED,0PASS/FAIL/whollyNOT VERIFIED groups**; the added01column records the current53PARTIAL/3FAIL/1DEFERRED. The original gaps below remain unless01 provides specific superseding evidence. Each row still contains NOT VERIFIED obligations. H/M are redesign regression priority (H: identity, data loss, send/delete/export, shared editing/navigation; M: important reversible presentation), not security vulnerability severity. Owners below are responsibility roles, not new assigned individuals or implementation authorization.
Historical visual links describe only their recorded fixtures and review. Four theme/locale pairs never imply every route/state. Keyboard/pointer and Chromium touch emulation never replace human screen reader, physical touch/software keyboard, 200%/400% zoom, forced colours/text spacing or deployed fonts. The P5-14 record retains 242 scans with zero reported violations **and 1,839 incomplete node occurrences**; incomplete checks remain unaccepted.
## Reconciled matrix
| Original ID / complete-group shorthand | Current route / actual component; implemented preservation touch | Historical executable regression anchors | Inherited visual / responsive / EN-NB evidence and limit | Status | Remaining limitation / gap | Required next audit / owner / priority |
|---|---|---|---|---|---|---|
| **PRES-E01** — Public product/plans; honest unavailable billing | `/`; [LandingPage](../../../../job-tracker-ui/src/views/LandingPage.tsx), [planCatalog](../../../../job-tracker-ui/src/planCatalog.ts). Unchanged public product/plans; [P5-01](../p5-01/README.md) route regression. | [F:landing-page](../../../../job-tracker-ui/src/landing-page.test.tsx); [F:planCatalog](../../../../job-tracker-ui/src/planCatalog.test.ts); [B:AccountPlans](../../../../JobTrackerApi.Tests/AccountPlansTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Actual checkout/billing provider availability and public mobile/keyboard acceptance remain unverified. | Public/commerce owner; M — audit loaded mobile/keyboard EN/NB plans and honest unavailable billing; provider readiness separately. |
| **PRES-E02** — Local login/register/remember, challenge, reset and verification | `/login`, `/register`, reset/verify routes; [LoginPage](../../../../job-tracker-ui/src/views/LoginPage.tsx), [ForgotPasswordPage](../../../../job-tracker-ui/src/views/ForgotPasswordPage.tsx), [ResetPasswordPage](../../../../job-tracker-ui/src/views/ResetPasswordPage.tsx), [VerifyEmailPage](../../../../job-tracker-ui/src/views/VerifyEmailPage.tsx). Entry retained by [P5-01](../p5-01/README.md); existing local auth/challenge/reset/verification owners. | [F:login-page](../../../../job-tracker-ui/src/login-page.test.tsx); [F:verify-email-page](../../../../job-tracker-ui/src/verify-email-page.test.tsx); [B:LocalAuthIdentity](../../../../JobTrackerApi.Tests/LocalAuthIdentityTests.cs); [B:AuthAndSystemController](../../../../JobTrackerApi.Tests/AuthAndSystemControllerTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Real reset-mail delivery, Turnstile/browser configuration and complete token-reset submit journey remain unverified. | Identity owner; H — trace reset request/token submit/verification/challenge errors in real App; sandbox mail/Turnstile only under later authorization. |
| **PRES-E03** — Google/Microsoft login, link, legacy relink and popup results | `/login`, `/microsoft-legacy-relink`; [GoogleAuthCard](../../../../job-tracker-ui/src/components/GoogleAuthCard.tsx), [MicrosoftAuthCard](../../../../job-tracker-ui/src/components/MicrosoftAuthCard.tsx), [relink page](../../../../job-tracker-ui/src/views/MicrosoftLegacyRelinkPage.tsx). Entry retained by [P5-01](../p5-01/README.md); provider sign-in remains separate from Connections. | [F:login-page](../../../../job-tracker-ui/src/login-page.test.tsx); [F:microsoft-legacy-relink-page](../../../../job-tracker-ui/src/microsoft-legacy-relink-page.test.tsx); [B:GoogleTokenValidator](../../../../JobTrackerApi.Tests/GoogleTokenValidatorTests.cs); [B:MicrosoftTokenValidator](../../../../JobTrackerApi.Tests/MicrosoftTokenValidatorTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Real provider consent/popups, revoked grants and sandbox outcomes remain unverified; origin/state contracts remain required. | Identity/provider owner; H — audit popup origin/state, revoke/relink and provider errors using approved sandbox; keep sign-in and mailbox grants separate. |
| **PRES-E04** — 2FA challenge/recovery/setup/disable; trusted-device revocation | `/profile`, `/login`; [TwoFactorSettingsCard](../../../../job-tracker-ui/src/components/TwoFactorSettingsCard.tsx), [challenge](../../../../job-tracker-ui/src/components/TwoFactorChallenge.tsx). Entry relocation only in [P5-01](../p5-01/README.md); Profile/login security forms unchanged. | [F:two-factor-settings](../../../../job-tracker-ui/src/two-factor-settings.test.tsx); [F:login-page](../../../../job-tracker-ui/src/login-page.test.tsx); [B:TwoFactorController](../../../../JobTrackerApi.Tests/TwoFactorControllerTests.cs); [B:SessionsController](../../../../JobTrackerApi.Tests/SessionsControllerTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Real mobile authenticator/recovery and trusted-device UI traversal remain open; no security-form acceptance inferred from navigation. | Identity/accessibility owner; H — manual keyboard/screen-reader recovery/trusted-device traversal plus real authenticator proof. |
| **PRES-E05** — Session list/current device, revoke one/others, logout | `/profile` and account Sign out; [SessionsSettingsCard](../../../../job-tracker-ui/src/components/SessionsSettingsCard.tsx), [AppShell](../../../../job-tracker-ui/src/layout/AppShell.tsx), [auth](../../../../job-tracker-ui/src/auth.ts). Direct shell logout/private utility changes in [P5-00](../p5-00/README.md)–[P5-02](../p5-02/README.md); session-list owner unchanged. | [F:session-boundary](../../../../job-tracker-ui/src/session-boundary.test.ts); [F:account-scoped-state](../../../../job-tracker-ui/src/account-scoped-state.test.tsx); [B:SessionsController](../../../../JobTrackerApi.Tests/SessionsControllerTests.cs); [B:AuthSessionRevocation](../../../../JobTrackerApi.Tests/AuthSessionRevocationTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Session-card selection/refresh after remote revocation remains open; broad device/AT acceptance is not established. | Identity/shell owner; H — audit session card remote-revoke refresh and Sign out private disposal/focus at every shell entry. |
| **PRES-E06** — Avatar, account names/headline, email change and password | `/profile`, `/confirm-email-change`; [ProfilePage](../../../../job-tracker-ui/src/views/ProfilePage.tsx), [VerifyEmailPage](../../../../job-tracker-ui/src/views/VerifyEmailPage.tsx). Account/security entry only in [P5-01](../p5-01/README.md); avatar/account identity and confirm-email-change route retained. | [F:profile-page](../../../../job-tracker-ui/src/profile-page.test.tsx); [F:verify-email-page](../../../../job-tracker-ui/src/verify-email-page.test.tsx); [B:AvatarStorage](../../../../JobTrackerApi.Tests/AvatarStorageTests.cs); [B:LocalAuthIdentity](../../../../JobTrackerApi.Tests/LocalAuthIdentityTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Avatar upload/remove and password-change browser journeys remain unverified; account identity stays distinct from Career Profile. | Identity owner; H — audit native avatar/remove/password/email-change, missing/error states and cross-account negative paths. |
| **PRES-E07** — Desktop collapse/mobile drawer, active nav and command search/actions | Private shell, Ctrl/Cmd+K; [App navigation](../../../../job-tracker-ui/src/App.tsx), [AppShell](../../../../job-tracker-ui/src/layout/AppShell.tsx), [QuickCommandDialog](../../../../job-tracker-ui/src/components/QuickCommandDialog.tsx). Direct [shell/navigation/utilities](../p5-02/README.md), [Jobs Table/Board](../p5-04b/README.md), [Analytics](../p5-07/README.md) and [workspace sections](../p5-08b/README.md). | [F:sidebar-active-nav](../../../../job-tracker-ui/src/sidebar-active-nav.test.ts); [F:app-shell-notifications](../../../../job-tracker-ui/src/app-shell-notifications.test.tsx); [B:JobApplicationsAuthorization](../../../../JobTrackerApi.Tests/JobApplicationsAuthorizationTests.cs); [B:CompanyRelationship](../../../../JobTrackerApi.Tests/CompanyRelationshipTests.cs) | [Shell/utility EN/NB × light/dark, rail/phone](../p5-02/README.md); [P5-14 shared clearance](../p5-14/README.md). Human AT/zoom incomplete. | **PARTIAL** | Original route/command/drawer defects have scoped successor evidence; manual screen reader and inherited command/focus timing debt remain open. This census is not browser route acceptance. | Shell/accessibility owner; H — audit every nav/command destination, collapsed/mobile labels, route focus, dirty Cancel and manual spoken names (P5-02-D01; P5-04b-R01). |
| **PRES-E08** — Theme/system, EN/NB hydration, toast/confirm/prompt and errors | All routes/preferences; [ThemeProvider](../../../../job-tracker-ui/src/ThemeProvider.tsx), [themePrefs](../../../../job-tracker-ui/src/themePrefs.ts), [I18nProvider](../../../../job-tracker-ui/src/i18n/I18nProvider.tsx), [confirm](../../../../job-tracker-ui/src/confirm.tsx), [prompt](../../../../job-tracker-ui/src/prompt.tsx). Direct semantic theme/feedback controls in [P5-00](../p5-00/README.md); EN/Bokmål and light/dark regressions carried through [P5-12](../p5-12/README.md). | [F:theme-state](../../../../job-tracker-ui/src/theme-state.test.tsx); [F:i18n-provider](../../../../job-tracker-ui/src/i18n-provider.test.tsx); [B:LocalAuthIdentity](../../../../JobTrackerApi.Tests/LocalAuthIdentityTests.cs) | [Shell/utility EN/NB × light/dark, rail/phone](../p5-02/README.md); [P5-14 shared clearance](../p5-14/README.md). Human AT/zoom incomplete. | **PARTIAL** | Full theme/locale/state/OS cross-product, spoken names/announcements, incomplete axe, zoom/forced-colours/text-spacing and shared-dialog timing remain unverified. | Shared UI/accessibility owner; H — audit loaded error/confirm/prompt states, OS theme, locale hydration, zoom/forced colours and announcements; incomplete axe remains open. |
| **PRES-E09** — Account-switch private-state disposal and stale request rejection | All private routes/account switches; [App](../../../../job-tracker-ui/src/App.tsx), [api](../../../../job-tracker-ui/src/api.ts), [sessionBoundary](../../../../job-tracker-ui/src/sessionBoundary.ts). Private-state/session boundary unchanged; new shell/utility/workspace/CV relationships regression-protected in [readiness](../p5-13-readiness/README.md). | [F:session-boundary](../../../../job-tracker-ui/src/session-boundary.test.ts); [F:account-scoped-state](../../../../job-tracker-ui/src/account-scoped-state.test.tsx); [B:SessionContextMiddleware](../../../../JobTrackerApi.Tests/SessionContextMiddlewareTests.cs); [B:CurrentUserIdLiveEvaluation](../../../../JobTrackerApi.Tests/CurrentUserIdLiveEvaluationTests.cs) | [Native account isolation](../../../../job-tracker-ui/e2e/account-isolation.spec.ts); [P5-14 owned source/sibling fixture](../p5-14/README.md). Images do not prove tenant isolation. | **PARTIAL** | Real BFCache variations/long offline retries and deployed old-bundle/session behavior remain unverified; images and mocked components cannot prove tenant isolation. | Identity owner; H — rerun real account-switch/two-tab stale read/write evidence at execution checkpoint; extend BFCache/offline/old-bundle audit when authorized. |
| **PRES-J01** — NAV discovery/filter/sort/source/deadline/details | `/discover`; [JobDiscoveryPage](../../../../job-tracker-ui/src/views/JobDiscoveryPage.tsx). Entry only: [P5-01](../p5-01/README.md) groups Discover under Jobs; discovery page/service unchanged. | [F:job-discovery](../../../../job-tracker-ui/src/job-discovery.test.tsx); [B:JobDiscoveryController](../../../../JobTrackerApi.Tests/JobDiscoveryControllerTests.cs); [B:JobOpportunitySync](../../../../JobTrackerApi.Tests/JobOpportunitySyncTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Live NAV freshness/availability and long result keyboard traversal remain open. | Discovery owner; M — audit long results/mobile keyboard/source/deadline/retry; live NAV availability separately. |
| **PRES-J02** — Saved searches, run/delete/alerts, result changes/dismissal | `/discover`; [saved-search/alert controls](../../../../job-tracker-ui/src/views/JobDiscoveryPage.tsx). Entry only in [P5-01](../p5-01/README.md); saved discovery search/alert service and controls unchanged. | [F:job-discovery](../../../../job-tracker-ui/src/job-discovery.test.tsx); [B:SavedJobSearchAlert](../../../../JobTrackerApi.Tests/SavedJobSearchAlertTests.cs); [B:JobDiscoveryController](../../../../JobTrackerApi.Tests/JobDiscoveryControllerTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Scheduler-to-notification browser journey and mobile delete confirmation remain unverified; no new producer or delivery certification. | Discovery/notifications owner; M — audit saved search delete/pause/run, mobile confirmation and scheduler-to-owned-notification chain. |
| **PRES-J03** — Reviewed manual/URL/paste job create, company/tags/dates, duplicates | Jobs/command Add; [AddJobModal](../../../../job-tracker-ui/src/components/AddJobModal.tsx). Existing reviewed Add modal shared by [P5-03](../p5-03/README.md)/[P5-04b](../p5-04b/README.md); no creation on route/view mount. | [F:quick-capture](../../../../job-tracker-ui/src/quick-capture.test.tsx); [B:JobImportService](../../../../JobTrackerApi.Tests/JobImportServiceTests.cs); [B:JobImportHttpTransport](../../../../JobTrackerApi.Tests/JobImportHttpTransportTests.cs) | [Jobs/Trash four pairs and responsive](../p5-03/README.md); [shared Table/Board](../p5-04b/README.md). Capture/provider/manual gaps remain. | **PARTIAL** | Duplicate/company/date edge UI and creation-intent idempotency remain independent gaps; import network boundary evidence is separate from live site success. | Capture/API owner; H — audit reviewed duplicate/company/date boundaries and interrupted creation; creation-intent idempotency stays a separate contract. |
| **PRES-J04** — Extension/bookmarklet/share capture; post-create attachment/CV | `?add=`, `?addtext=`, Settings capture; [capture consumer](../../../../job-tracker-ui/src/App.tsx), [captureUrl](../../../../job-tracker-ui/src/captureUrl.ts), [QuickCaptureCard](../../../../job-tracker-ui/src/components/QuickCaptureCard.tsx). Capture/add/addtext review entry retained in [P5-01](../p5-01/README.md)/[P5-03](../p5-03/README.md); extension and post-create owners unchanged. | [F:captureUrl](../../../../job-tracker-ui/src/captureUrl.test.ts); [F:quick-capture](../../../../job-tracker-ui/src/quick-capture.test.tsx); [B:JobImportService](../../../../JobTrackerApi.Tests/JobImportServiceTests.cs); [B:CvBuilder](../../../../JobTrackerApi.Tests/CvBuilderTests.cs) | [Jobs/Trash four pairs and responsive](../p5-03/README.md); [shared Table/Board](../p5-04b/README.md). Capture/provider/manual gaps remain. | **PARTIAL** | Installed extension permissions/share flow and optional attachment failure recovery remain unverified. | Capture owner; H — audit installed extension/share/no-replay and post-create attachment failure recovery without auto-create. |
| **PRES-J05** — Job filters/sort/page/columns, saved views and row/mobile actions | `/jobs?view=table / board`; [JobTable](../../../../job-tracker-ui/src/components/JobTable.tsx), [SavedViewsMenu](../../../../job-tracker-ui/src/components/SavedViewsMenu.tsx), [jobsQuery](../../../../job-tracker-ui/src/jobsQuery.ts). Direct [P5-03](../p5-03/README.md) Jobs/Trash presentation and [P5-04b](../p5-04b/README.md) shared complete-query view integration. | [F:application-workspace-overlay](../../../../job-tracker-ui/src/application-workspace-overlay.test.tsx); [F:account-scoped-state](../../../../job-tracker-ui/src/account-scoped-state.test.tsx); [B:JobApplicationsController](../../../../JobTrackerApi.Tests/JobApplicationsControllerTests.cs); [B:JobApplicationsEndpointBehavior](../../../../JobTrackerApi.Tests/JobApplicationsEndpointBehaviorTests.cs) | [Jobs/Trash four pairs and responsive](../p5-03/README.md); [shared Table/Board](../p5-04b/README.md). Capture/provider/manual gaps remain. | **PARTIAL** | Finite saved-view/filter/Back/error/selection fixtures do not exhaust saved-view CRUD or dirty nested page-size combinations; full-array scaling remains limited. | Jobs owner; H — audit full saved-view CRUD, Back/refresh/unknown query, dirty nested page-size and all-result scaling. |
| **PRES-J06** — Bulk status/delete, soft delete/trash/restore and job edit | `/jobs`, `/trash`; [JobTable](../../../../job-tracker-ui/src/components/JobTable.tsx), [EditJobDialog](../../../../job-tracker-ui/src/components/EditJobDialog.tsx). Direct [P5-03](../p5-03/README.md) table/Trash and [P5-04b](../p5-04b/README.md) selection/view integration; CRUD/soft-delete owner retained. | [F:application-workspace-overlay](../../../../job-tracker-ui/src/application-workspace-overlay.test.tsx); [F:confirm-flow](../../../../job-tracker-ui/src/confirm-flow.test.tsx); [B:JobApplicationsController](../../../../JobTrackerApi.Tests/JobApplicationsControllerTests.cs); [B:JobApplicationsAuthorization](../../../../JobTrackerApi.Tests/JobApplicationsAuthorizationTests.cs) | [Jobs/Trash four pairs and responsive](../p5-03/README.md); [shared Table/Board](../p5-04b/README.md). Capture/provider/manual gaps remain. | **PARTIAL** | Scoped native restore and bulk/mutation fixtures supersede earlier bare-confirm gaps; all bulk partial-failure/dirty-state combinations and deeper manual AT remain unverified. | Jobs/API owner; H — audit selected scope, partial bulk failures and Trash restore with native persistence/dirty protection. |
| **PRES-J07** — Kanban grouped statuses, pointer/keyboard move and precise menu | `/jobs?view=board`, `/kanban` alias; [KanbanBoard](../../../../job-tracker-ui/src/components/KanbanBoard.tsx), [pipeline](../../../../job-tracker-ui/src/pipeline.ts). Direct [P5-04a](../p5-04a/README.md)/[P5-04b](../p5-04b/README.md); complete shared query, precise status and /kanban alias retained. | [F:kanban-grouped-board](../../../../job-tracker-ui/src/kanban-grouped-board.test.tsx); [F:pipeline](../../../../job-tracker-ui/src/pipeline.test.ts); [B:JobPipeline](../../../../JobTrackerApi.Tests/JobPipelineTests.cs) | [Board four pairs/narrow keyboard](../p5-04b/README.md). Physical touch/full-scale not proven. | **PARTIAL** | Physical touch/native drag, broader responsive focus/cancel combinations and full-result scaling remain open; grouped statuses are not a new pipeline. | Jobs/accessibility owner; H — audit keyboard cancel/view focus, physical touch/drag and complete filtered membership at scale; no new pipeline. |
| **PRES-J08** — Company/contact edits, pipeline dates and linked-job history | `/companies?edit=id`; [CompaniesTable](../../../../job-tracker-ui/src/components/CompaniesTable.tsx). Company/contacts/history entry only in [P5-01](../p5-01/README.md)/[P5-02](../p5-02/README.md); existing Companies form retained. | [F:companies-relationship](../../../../job-tracker-ui/src/companies-relationship.test.tsx); [F:quick-command-preservation](../../../../job-tracker-ui/src/quick-command-preservation.test.tsx); [B:CompanyRelationship](../../../../JobTrackerApi.Tests/CompanyRelationshipTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | All contact/date edits and source-URL safety browser journeys remain unverified; P4-02-D02 inaccessible modal-save error is open for its owner. | Companies/accessibility owner; H — fix and prove durable in-modal save error before form migration (P4-02-D02); audit contact/date/source links. |
| **PRES-J09** — Recorded offers/compensation/deadlines/notes and source links | `/offers`; [OfferComparisonPage](../../../../job-tracker-ui/src/views/OfferComparisonPage.tsx). Offers entry retained; report source links reviewed in [P5-06](../p5-06/README.md)/[P5-07](../p5-07/README.md); recorded offer page unchanged. | [F:offer-comparison](../../../../job-tracker-ui/src/offer-comparison.test.tsx); [B:AnalyticsSalary](../../../../JobTrackerApi.Tests/AnalyticsSalaryTests.cs); [B:JobApplicationsEndpointBehavior](../../../../JobTrackerApi.Tests/JobApplicationsEndpointBehaviorTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Mobile many-offer comparison and localized currency/date visual acceptance remain open; no new salary facts are claimed. | Offers owner; M — audit many-offer narrow layout, currency/period/date labels and safe source links across EN/NB. |
| **PRES-J10** — CSV/JSON export, JSON import and CSV-to-JSON conversion | `/settings` Data; [ImportExportJobs](../../../../job-tracker-ui/src/components/ImportExportJobs.tsx). Settings Data import/export entry retained by [P5-01](../p5-01/README.md)/[P5-03](../p5-03/README.md); serializers unchanged. | [F:csv-export](../../../../job-tracker-ui/src/csv-export.test.tsx); [B:CsvExport](../../../../JobTrackerApi.Tests/CsvExportTests.cs); [B:JobApplicationsController](../../../../JobTrackerApi.Tests/JobApplicationsControllerTests.cs) | [Inherited Settings loaded/mobile review](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [shell entry](../p5-01/README.md). No full current domain requalification. | **PARTIAL** | Full JSON import/count/roundtrip browser proof and spreadsheet-client compatibility remain separately bounded; byte/formula/Unicode fixtures are not exhaustive. | Settings/data owner; H — audit native JSON import counts/roundtrip, Unicode/formula-safe bytes and target spreadsheet compatibility. |
| **PRES-W01** — Full workspace, sections, legacy links and optional reusable overlay | `/jobs/:id`, `/applications/:id`; [ApplicationWorkspace](../../../../job-tracker-ui/src/views/ApplicationWorkspacePage.tsx), [section adapter](../../../../job-tracker-ui/src/applicationWorkspace.ts), [numeric-tab helper](../../../../job-tracker-ui/src/jobWorkspaceRoute.ts). Direct dedicated workspace header/Overview [P5-08a](../p5-08a/README.md) and URL sections [P5-08b](../p5-08b/README.md); Jobs/legacy aliases retained. | [F:application-workspace-overlay](../../../../job-tracker-ui/src/application-workspace-overlay.test.tsx); [F:applicationWorkspace](../../../../job-tracker-ui/src/applicationWorkspace.test.ts); [B:ApplicationWorkspace](../../../../JobTrackerApi.Tests/ApplicationWorkspaceTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | Reusable overlay has no active production host; followMode metadata retained but mode-specific UI explicitly deferred to mail. Full manual AT and historical transition-capture limits remain. | Workspace/mail owner; H — audit all canonical/legacy entries and numeric navigation-helper arguments, safe query/state, dirty/Back/focus; carry followMode UI to mail phase. |
| **PRES-W02** — Detail/status/progression, recruiter/dates/description/timeline | Job Overview/Timeline; [header/detail/progress](../../../../job-tracker-ui/src/views/ApplicationWorkspacePage.tsx), [ApplicationTimeline](../../../../job-tracker-ui/src/components/ApplicationIntelligence.tsx). Direct [P5-08a](../p5-08a/README.md)/[P5-08b](../p5-08b/README.md) header/progress/detail/timeline composition with existing status/date handlers. | [F:application-intelligence](../../../../job-tracker-ui/src/application-intelligence.test.tsx); [F:workflow-trust-signals](../../../../job-tracker-ui/src/workflow-trust-signals.test.tsx); [B:JobApplicationsWorkflowSignals](../../../../JobTrackerApi.Tests/JobApplicationsWorkflowSignalsTests.cs); [B:JobApplicationsAppliedDateHistory](../../../../JobTrackerApi.Tests/JobApplicationsAppliedDateHistoryTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | Localized backend event/content text, timezone/reload/status-to-timeline combinations and human AT remain unverified; job revision semantics were not repaired. | Workspace/API owner; H — audit native edit/status/date-to-timeline and localized stored content/timezones; job revision debt separately. |
| **PRES-W03** — Analysis, match/gaps, strategy and reviewed status/workflow suggestions | Job Match/Overview suggestion; [analysis/match/strategy](../../../../job-tracker-ui/src/components/ApplicationIntelligence.tsx), [workflow assist](../../../../job-tracker-ui/src/components/ApplicationWorkflowAssist.tsx). Existing contextual analysis/match/strategy/status owners recomposed by [P5-08b](../p5-08b/README.md); opening does not invoke AI. | [F:application-intelligence](../../../../job-tracker-ui/src/application-intelligence.test.tsx); [F:application-workflow-assist](../../../../job-tracker-ui/src/application-workflow-assist.test.tsx); [B:ApplicationIntelligence](../../../../JobTrackerApi.Tests/ApplicationIntelligenceTests.cs); [B:StrategySnapshotOperation](../../../../JobTrackerApi.Tests/StrategySnapshotOperationTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | Live model truthfulness, freshness/cancelled generation and provider quality remain unverified; P5-13 production CV withholding must not disable these unrelated AI paths. | Workspace/AI owner; H — audit reviewed suggestions/error/cancel/freshness/no-write entry; qualify live factuality separately from CV exception. |
| **PRES-W04** — Checklist create/edit/complete/delete/order and next action | Job Notes & tasks; [ApplicationChecklist](../../../../job-tracker-ui/src/components/ApplicationChecklist.tsx). Existing checklist owner/ordered controls recomposed by [P5-08b](../p5-08b/README.md); manual/system/dismissed distinctions retained. | [F:application-checklist](../../../../job-tracker-ui/src/application-checklist.test.tsx); [B:ApplicationChecklist](../../../../JobTrackerApi.Tests/ApplicationChecklistTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | Real mobile interruption/edit/delete combinations and human AT remain open; no task due-date schema or automatic notification added. | Workspace owner; H — audit native mobile item edit/delete/reorder/interruption and manual/system/dismissed next actions. |
| **PRES-W05** — Attach/select/create/tailor CV and source context | Job Application/CV, builder job link; [ApplicationCvSection/TailoringSection](../../../../job-tracker-ui/src/components/ApplicationAssets.tsx). Existing job-CV attach/create/tailor source relationships recomposed by [P5-08b](../p5-08b/README.md); [native readiness](../p5-08b-readiness/README.md) supersedes P2-D01. | [F:application-assets](../../../../job-tracker-ui/src/application-assets.test.tsx); [F:cv-builder-deep-link](../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [B:ApplicationAssets](../../../../JobTrackerApi.Tests/ApplicationAssetsTests.cs); [B:CvBuilder](../../../../JobTrackerApi.Tests/CvBuilderTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | P2-D01 is an ordinary passing native regression, not current expected failure. Broader attach-render combinations, provider tailoring quality and deployed restore remain unverified; CV review production exception stays distinct. | Workspace/CV owner; H — audit attach/render/detach/create/tailor with source and foreign-owner checks; retain ordinary native P2-D01 successor. |
| **PRES-W06** — Cover-letter manual/AI review, versions/restore and dirty protection | Job Application/Letter; [ApplicationCoverLetterSection](../../../../job-tracker-ui/src/components/ApplicationAssets.tsx). Existing manual/AI cover-letter/history/dirty owner recomposed in [P5-08b](../p5-08b/README.md); literal-context defect corrected in [readiness](../p5-08b-readiness/README.md). | [F:application-assets](../../../../job-tracker-ui/src/application-assets.test.tsx); [F:application-workspace-overlay](../../../../job-tracker-ui/src/application-workspace-overlay.test.tsx); [B:ApplicationAssets](../../../../JobTrackerApi.Tests/ApplicationAssetsTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | Native/mocked review/history evidence does not establish live-model or provider quality; full screen-reader and every reject/history sequence remain unverified. | Workspace/AI owner; H — audit native manual/AI reject/accept/save/history and dirty Cancel/Discard; actual model quality separately. |
| **PRES-W07** — Application drafts and immutable submitted package/archived binaries | Job Application/Answers/Submission and Documents; [drafts/submitted packages](../../../../job-tracker-ui/src/components/ApplicationAssets.tsx). Existing drafts/frozen submission/archive owners recomposed by [P5-08b](../p5-08b/README.md); [native SQLite/archive/ZIP proof](../p5-08b-readiness/README.md) retained. | [F:application-assets](../../../../job-tracker-ui/src/application-assets.test.tsx); [F:application-drafts](../../../../job-tracker-ui/src/application-drafts.test.ts); [B:SubmittedApplicationPackage](../../../../JobTrackerApi.Tests/SubmittedApplicationPackageTests.cs); [B:JobApplicationsApplicationPackage](../../../../JobTrackerApi.Tests/JobApplicationsApplicationPackageTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | Earlier P2-D01 capture expected failure is superseded by ordinary native passing evidence. Production restore/rollback and all storage/provider combinations remain unverified; capture is not external send. | Workspace/storage owner; H — retain native capture→source mutation→archive/ZIP immutable-byte regression; release owner proves restore/rollback independently. |
| **PRES-W08** — Attachments upload/category/name/AI consent/preview/download/delete | Job Documents; [Attachments](../../../../job-tracker-ui/src/components/Attachments.tsx). Existing attachments CRUD/consent/protected downloads retained; named narrow table/empty state in [P5-08b](../p5-08b/README.md), archive proof in [readiness](../p5-08b-readiness/README.md). | [F:attachments](../../../../job-tracker-ui/src/attachments.test.tsx); [B:AttachmentsController](../../../../JobTrackerApi.Tests/AttachmentsControllerTests.cs); [B:AttachmentConsistency](../../../../JobTrackerApi.Tests/AttachmentConsistencyTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | Archive gate is locally satisfied for recorded native fixtures; physical drag/drop, broad rename/download/manual AT and production storage behavior remain unverified. | Workspace/storage owner; H — audit upload/category/name/consent/preview/download/delete and physical drop with live/frozen identity. |
| **PRES-W09** — Interview questions/answers/ready/manual removal/AI review | Job Interview Prep; [InterviewPrep](../../../../job-tracker-ui/src/components/InterviewPrep.tsx). Existing interview questions/answers/manual removal/AI review/readiness recomposed by [P5-08b](../p5-08b/README.md). | [F:interview-prep](../../../../job-tracker-ui/src/interview-prep.test.tsx); [B:InterviewPrepPersistence](../../../../JobTrackerApi.Tests/InterviewPrepPersistenceTests.cs); [B:InterviewAiContext](../../../../JobTrackerApi.Tests/InterviewAiContextTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | Real-model quality, physical mobile keyboard/populated reload and manual AT remain open; prep does not establish scheduled interview data. | Workspace/AI owner; H — audit populated mobile keyboard/reload/manual removal and explicit AI review; no scheduled-interview inference. |
| **PRES-W10** — Debrief/follow-up draft/date/readiness | Job Interview Prep and follow-up links; [InterviewPrep](../../../../job-tracker-ui/src/components/InterviewPrep.tsx), [followMode producer](../../../../job-tracker-ui/src/jobWorkspaceRoute.ts). Existing debrief/follow-up draft/date/readiness owner recomposed by [P5-08b](../p5-08b/README.md); no automatic send. | [F:interview-prep](../../../../job-tracker-ui/src/interview-prep.test.tsx); [B:JobApplicationsFollowUpDraft](../../../../JobTrackerApi.Tests/JobApplicationsFollowUpDraftTests.cs); [B:InterviewPrep](../../../../JobTrackerApi.Tests/InterviewPrepTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | Timezone/reload chains and provider delivery remain unverified; followMode-specific compose UI is deferred rather than implemented. | Workspace/mail/calendar owner; H — audit debrief/date/reload and metadata links; defer mode-specific compose UI under recorded decision. |
| **PRES-W11** — Reminder rules/actions/notifications, ICS and Google/Outlook events | `/reminders`, Settings rules, job Notes & tasks; [RemindersView](../../../../job-tracker-ui/src/components/RemindersView.tsx), [RulesSettingsCard](../../../../job-tracker-ui/src/components/RulesSettingsCard.tsx), [calendar actions](../../../../job-tracker-ui/src/components/ApplicationCalendarActions.tsx). Reminder/calendar links retained by [P5-01](../p5-01/README.md)/[P5-02](../p5-02/README.md), Dashboard and [P5-08b](../p5-08b/README.md); calendar/rules APIs unchanged. | [F:daily-control-loop](../../../../job-tracker-ui/src/daily-control-loop.test.tsx); [F:application-calendar](../../../../job-tracker-ui/src/application-calendar.test.tsx); [B:ApplicationCalendarController](../../../../JobTrackerApi.Tests/ApplicationCalendarControllerTests.cs); [B:RulesEngineProspect](../../../../JobTrackerApi.Tests/RulesEngineProspectTests.cs) | [Shell/notification entry](../p5-02/README.md); [workspace links](../p5-08b/README.md). Dedicated full calendar/worker responsive audit absent. | **PARTIAL** | F21 DST/date-only/provider timezone gap, actual Google/Outlook events, scheduler delivery and historical unconfirmed rules-save 500 remain open. | Calendar/API owner; H — investigate F21 DST/date-only semantics before event changes; audit real ICS/rules/reminder and approved provider writes. |
| **PRES-W12** — Async progress/failure/retry/cancel/notifications | `/operations`, Career processing and bell; [OperationsPage](../../../../job-tracker-ui/src/views/OperationsPage.tsx), [processing consumer](../../../../job-tracker-ui/src/views/CareerProfilePage.tsx). Operations remains reachable utility; progress/result/cancel/retry links retained by [P5-02](../p5-02/README.md)/[P5-08b](../p5-08b/README.md); store/worker unchanged. | [F:operations-page](../../../../job-tracker-ui/src/operations-page.test.tsx); [F:profile-page](../../../../job-tracker-ui/src/profile-page.test.tsx); [B:OperationsController](../../../../JobTrackerApi.Tests/OperationsControllerTests.cs); [B:UserOperationStore](../../../../JobTrackerApi.Tests/UserOperationStoreTests.cs) | [Shell/notification entry](../p5-02/README.md); [workspace links](../p5-08b/README.md). Dedicated full calendar/worker responsive audit absent. | **PARTIAL** | Long disconnect/reconnect and F20 enabled worker fault containment remain operational gaps; no live job/worker recovery was certified. | Operations/worker owner; H — audit disconnect/reconnect/late-result/no-duplicate starts/cancel/retry; F20 recovery before enabling producers. |
| **PRES-C01** — Canonical structured career data and long-tail/custom sections | `/career?section=profile`; [CareerProfilePage](../../../../job-tracker-ui/src/views/CareerProfilePage.tsx), [structured sections](../../../../job-tracker-ui/src/views/career/CareerProfileSections.tsx). Career entry retained; canonical/source scope reviewed in [P5-10](../p5-10/README.md), [P5-12](../p5-12/README.md) and [AI readiness](../p5-13-readiness/README.md). | [F:profile-page](../../../../job-tracker-ui/src/profile-page.test.tsx); [B:CareerProfileController](../../../../JobTrackerApi.Tests/CareerProfileControllerTests.cs); [B:CareerProfileService](../../../../JobTrackerApi.Tests/CareerProfileServiceTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Full long-tail Career/mobile save and canonical concurrent updates remain separate; scoped CV acceptance never implies canonical-profile revision safety. | Career/API owner; H — audit every long-tail/custom field and mobile save/source isolation; canonical concurrent saves remain separate. |
| **PRES-C02** — Profile overview/completeness/import guidance/raw copy/history/restore | `/career`; [CareerWorkspacePage](../../../../job-tracker-ui/src/views/CareerWorkspacePage.tsx), [raw/history/import](../../../../job-tracker-ui/src/views/CareerProfilePage.tsx). Career overview/import/raw/history owner unchanged; source relation regression retained by [P5-10](../p5-10/README.md)/[P5-12](../p5-12/README.md). | [F:career-workspace-page](../../../../job-tracker-ui/src/career-workspace-page.test.tsx); [F:profile-page](../../../../job-tracker-ui/src/profile-page.test.tsx); [B:CareerProfileService](../../../../JobTrackerApi.Tests/CareerProfileServiceTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Clipboard/avatar and complete native profile historical restore/manual AT remain unverified; real extraction quality is separate. | Career owner; M — audit raw copy, overview/completeness/import guidance and full historical restore without silent data replacement. |
| **PRES-C03** — Upload/extract/rebuild/reprocess/diff/select/accept/discard/retry/cancel | Career import/review; [extraction/diff/review consumer](../../../../job-tracker-ui/src/views/CareerProfilePage.tsx). Entry only: existing Career upload/extraction/reprocess/diff/accept/discard/retry/cancel owners retained. | [F:profile-page](../../../../job-tracker-ui/src/profile-page.test.tsx); [B:ProfileCvController](../../../../JobTrackerApi.Tests/ProfileCvControllerTests.cs); [B:CvProfileDiffService](../../../../JobTrackerApi.Tests/CvProfileDiffServiceTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Unusual/scanned/OCR document quality and full low-confidence deselection/discard browser acceptance remain unverified; no provider certification. | Career/extraction owner; H — audit low-confidence deselect/discard/retry/cancel and corpus quality; approve provider calls separately. |
| **PRES-C04** — Evidence bank source/category/tags/add/list/delete | Career overview/evidence; [CareerEvidenceBank](../../../../job-tracker-ui/src/views/career/CareerEvidenceBank.tsx). Evidence-bank owner unchanged; job source relationships retained through [P5-08b](../p5-08b/README.md). | [F:career-evidence](../../../../job-tracker-ui/src/career-evidence.test.tsx); [B:CareerEvidenceController](../../../../JobTrackerApi.Tests/CareerEvidenceControllerTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Full delete/many-item search/keyboard browser acceptance remains open; broader Career page work stays Phase 7. | Career owner; M — audit evidence source/category/tags/delete and large-list keyboard/source navigation. |
| **PRES-C05** — CV library create/copy/delete/templates/share/publication/PDF | `/career/builder`; [CvBuilderPage](../../../../job-tracker-ui/src/views/CvBuilderPage.tsx), [template gallery](../../../../job-tracker-ui/src/components/CvTemplateGallery.tsx). Library/CRUD/public ownership retained; editor actions in [P5-09](../p5-09/README.md) and shared template gallery in [P5-12](../p5-12/README.md). | [F:cv-builder-page](../../../../job-tracker-ui/src/cv-builder-page.test.tsx); [F:cv-template-thumbnail](../../../../job-tracker-ui/src/cv-template-thumbnail.test.tsx); [B:CvBuilder](../../../../JobTrackerApi.Tests/CvBuilderTests.cs); [B:PublicCvController](../../../../JobTrackerApi.Tests/PublicCvControllerTests.cs) | [P5-09–12 CV evidence](../p5-12/README.md); [P5-14 four pairs, 320–1440/landscape, keyboard/pointer/emulated touch](../p5-14/README.md). Human/physical/zoom/production unaccepted. | **PARTIAL** | Complete publish/unpublish/old-link revocation chain and every library/template combination remain unverified; library redesign is not claimed. | CV owner; H — audit create/copy/delete/gallery/share/publish/unpublish and old-public-link revocation; keep numeric/slug identity distinct. |
| **PRES-C06** — Studio tabs, preview debounce/pages/fit/save state/mobile panes | `/career/builder/:id`; [editor/preview owner](../../../../job-tracker-ui/src/views/CvBuilderEditor.tsx). Direct [P5-09](../p5-09/README.md) frame/navigation, [P5-11](../p5-11/README.md) live preview and [P5-12](../p5-12/README.md) controls; one save/preview/mobile owner. [P5-14 responsive/ownership successor](../p5-14/README.md) now supplements this record. | [F:cv-builder-deep-link](../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [B:CvBuilder](../../../../JobTrackerApi.Tests/CvBuilderTests.cs) | [P5-09–12 CV evidence](../p5-12/README.md); [P5-14 four pairs, 320–1440/landscape, keyboard/pointer/emulated touch](../p5-14/README.md). Human/physical/zoom/production unaccepted. | **PARTIAL** | P5-14 now supplies the integrated held-PUT pane/viewport, preview boundary-key/scroll, reachable return, canvas and hit-test successor. Physical touch/software keyboard, 200%/400% zoom, human AT, broader wrapped/short-height states and production rendering remain unaccepted. | CV/accessibility owner; H — retain P5-14 held-PUT/responsive/scroll checks; obtain physical touch/software keyboard/zoom/manual AT evidence. |
| **PRES-C07** — Visibility/order/custom sections and item/document overrides | Builder Content; [ContentTab/EntryEditor](../../../../job-tracker-ui/src/views/CvBuilderEditor.tsx), [useDragReorder](../../../../job-tracker-ui/src/hooks/useDragReorder.ts). Direct [P5-10](../p5-10/README.md) source/item/custom editing and [P5-12](../p5-12/README.md) settings retention; explicit reset/inclusion/order retained. [P5-14 responsive/ownership successor](../p5-14/README.md) now supplements this record. | [F:cv-builder-deep-link](../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [F:cvBuilder](../../../../job-tracker-ui/src/cvBuilder.test.ts); [B:CvBuilder](../../../../JobTrackerApi.Tests/CvBuilderTests.cs) | [P5-09–12 CV evidence](../p5-12/README.md); [P5-14 four pairs, 320–1440/landscape, keyboard/pointer/emulated touch](../p5-14/README.md). Human/physical/zoom/production unaccepted. | **PARTIAL** | P5-14 closes P5-10-O01 only for tested ownership/default-drop cases: entry/section order, inactive nested lists and foreign editable-title non-mutation. Physical touch/text selection/all-browser gestures and exhaustive saved override/reset combinations remain unqualified. | CV/accessibility owner; H — retain tested native nested ownership/default-drop checks; audit physical touch/text selection/all-browser overrides before broader claim. |
| **PRES-C08** — Capability-aware templates/typography/color/header/skills/sidebar/photo | Builder Template/Customize; [CvCustomizeTab](../../../../job-tracker-ui/src/components/cv/CvCustomizeTab.tsx), [gallery](../../../../job-tracker-ui/src/components/CvTemplateGallery.tsx). Direct [P5-12](../p5-12/README.md) nine-template capability/control presentation and [P5-11](../p5-11/README.md) preview; renderer/template IDs retained. | [F:cv-builder-deep-link](../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [F:cvBuilder](../../../../job-tracker-ui/src/cvBuilder.test.ts); [B:CvBuilder](../../../../JobTrackerApi.Tests/CvBuilderTests.cs) | [P5-09–12 CV evidence](../p5-12/README.md); [P5-14 four pairs, 320–1440/landscape, keyboard/pointer/emulated touch](../p5-14/README.md). Human/physical/zoom/production unaccepted. | **PARTIAL** | All-template/font/photo/wrapped-line/browser/control combinations and broad custom-colour/manual AT remain unverified; finite capability matrix and Pro locks are not exhaustive. | CV/renderer owner; M — audit capability controls/locks and broader font/photo/wrapped text; manual custom-colour names and contrast. |
| **PRES-C09** — A4/Letter/density/margins/dates/document locale/section presentation | Builder Customize/Content; [document settings](../../../../job-tracker-ui/src/components/cv/CvCustomizeTab.tsx), [settings client](../../../../job-tracker-ui/src/cvBuilder.ts). Direct [P5-12](../p5-12/README.md) A4/Letter/density/margin/date/language/columns controls; [pagination repair](../p5-09-pagination-readiness/README.md) retained. | [F:cvBuilder](../../../../job-tracker-ui/src/cvBuilder.test.ts); [F:cv-builder-deep-link](../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [B:CvBuilder](../../../../JobTrackerApi.Tests/CvBuilderTests.cs) | [P5-09–12 CV evidence](../p5-12/README.md); [P5-14 four pairs, 320–1440/landscape, keyboard/pointer/emulated touch](../p5-14/README.md). Human/physical/zoom/production unaccepted. | **PARTIAL** | Recorded unchanged-tolerance local fidelity supersedes prior six-fixture failures; all advanced combinations, deployment fonts/photo/wrapped text and manual print inspection remain open. | CV/renderer owner; H — retain unchanged numerical oracle/settings exports; audit advanced locale/layout combinations and actual deployed print/fonts. |
| **PRES-C10** — Undo/redo, save queue, dirty guard, history restore/preview lifecycle | Builder save/undo/history; [single editor/history owner](../../../../job-tracker-ui/src/views/CvBuilderEditor.tsx). Existing save/undo/history owner retained in [P5-09](../p5-09/README.md)–[P5-12](../p5-12/README.md); [CV revision protocol](../p5-09-readiness/README.md) and stale AI guard retained. [P5-14 responsive/ownership successor](../p5-14/README.md) now supplements this record. | [F:cv-builder-deep-link](../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [B:CvBuilder](../../../../JobTrackerApi.Tests/CvBuilderTests.cs) | [P5-09–12 CV evidence](../p5-12/README.md); [P5-14 four pairs, 320–1440/landscape, keyboard/pointer/emulated touch](../p5-14/README.md). Human/physical/zoom/production unaccepted. | **PARTIAL** | CV stale-write/history safety has scoped native evidence; long offline/history combinations and profile/job concurrent edits remain separate. No new save owner or history store. | CV/API owner; H — audit long offline/history/conflict/undo/dirty transitions; retain downloadable draft and one save/history owner. |
| **PRES-C11** — Section and whole-document AI improve/translate/instruction/grammar review | Builder section/AI Tools; [AiSectionAssistant](../../../../job-tracker-ui/src/components/cv/AiSectionAssistant.tsx), [DocumentAiTab](../../../../job-tracker-ui/src/views/CvBuilderEditor.tsx); [Production service guard](../../../../JobTrackerApi/Program.cs). Retained existing section/document assistant affordances; [current Production service withholding](../../../../JobTrackerApi/Program.cs) and [validated historical exception](../release-readiness/README.md). P5-13 review UI remains unimplemented. | [F:ai-section-assistant](../../../../job-tracker-ui/src/ai-section-assistant.test.tsx); [F:cv-builder-deep-link](../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [B:AiWorkspace](../../../../JobTrackerApi.Tests/AiWorkspaceTests.cs); [B:AiPrivacyPolicy](../../../../JobTrackerApi.Tests/AiPrivacyPolicyTests.cs) ; [Production no-write checks](../../../../JobTrackerApi.Tests/CvAiReadinessTests.cs), [isolated HTTP contract](../../../../job-tracker-ui/ai-tests/cv-ai-readiness.spec.ts) | [Deterministic readiness only](../p5-13-readiness/README.md); [P5-14 exclusion](../p5-14/README.md). No qualified or responsive AI-review visual journey. | **DEFERRED** | Full CV rewriting/review remains DEFERRED — BLOCKED / NOT QUALIFIED: deployed model identity unverified; frozen 32-case/366-call qualification has 0 completed calls and 0 human reviews; factuality unmeasured; P5-13 review UI unimplemented. Current Production guard returns 503 cv_ai_unavailable; safe withholding is an exception, not successful generation/review. Existing assistant affordances can report unavailable. | AI/CV/product owner; H — meet frozen model identity/corpus/rubric/human review and review-UI return conditions; retain Production 503/no-write/unrelated-AI checks. |
| **PRES-C12** — Private PDF and published anonymous CV/PDF, long searchable pages | Private builder export and `/cv/:slug`; [private export client](../../../../job-tracker-ui/src/cvBuilder.ts), [PublicCvPage](../../../../job-tracker-ui/src/views/PublicCvPage.tsx). Private/public PDF ownership and shared admission retained through [P5-11](../p5-11/README.md)/[P5-12](../p5-12/README.md); native preview/PDF corpus unchanged. | [F:public-cv-page](../../../../job-tracker-ui/src/public-cv-page.test.tsx); [B:PublicCvController](../../../../JobTrackerApi.Tests/PublicCvControllerTests.cs); [B:PdfRenderAdmission](../../../../JobTrackerApi.Tests/PdfRenderAdmissionTests.cs) | [P5-09–12 CV evidence](../p5-12/README.md); [P5-14 four pairs, 320–1440/landscape, keyboard/pointer/emulated touch](../p5-14/README.md). Human/physical/zoom/production unaccepted. | **PARTIAL** | P5-14 retains unchanged 16-fixture/36-page native preview/PDF and 8-settings/24-page export historical proof at unchanged tolerances. This is finite local evidence; deployed Chromium/Linux/fonts/photo/all-print-engine and manual print inspection remain unverified. | CV/rendering/release owner; H — audit public revoke/private denial/PDF busy recovery and deployed Linux/fonts/photos/manual print; preserve admission. |
| **PRES-M01** — Job-scoped manual correspondence/search/delete/paste import | Job Timeline/Correspondence; [Correspondence](../../../../job-tracker-ui/src/components/Correspondence.tsx). Existing job manual correspondence/search/import/delete owner recomposed by [P5-08b](../p5-08b/README.md); global entry retained. | [F:end-to-end-trust-loop](../../../../job-tracker-ui/src/end-to-end-trust-loop.test.tsx); [F:correspondence-search-context](../../../../job-tracker-ui/src/correspondence-search-context.test.ts); [B:CorrespondenceController](../../../../JobTrackerApi.Tests/CorrespondenceControllerTests.cs) | [Workspace correspondence entry](../p5-08b/README.md). Full mail/provider/mobile AT absent. | **PARTIAL** | Full manual edit/delete/paste-import browser combinations and manual AT remain unverified; logging correspondence is not sending mail. | Mail/workspace owner; H — audit native log CRUD/search/paste import and no-send distinction. |
| **PRES-M02** — Gmail candidate/thread import/refresh/sync/unlink/relink/move | Job Timeline/Correspondence Gmail tools; [Correspondence](../../../../job-tracker-ui/src/components/Correspondence.tsx). Existing job Gmail candidate/thread/import/sync/move/unlink owners recomposed by [P5-08b](../p5-08b/README.md); provider/API behavior unchanged. | [F:correspondence-gmail-import](../../../../job-tracker-ui/src/correspondence-gmail-import.test.tsx); [B:GmailController](../../../../JobTrackerApi.Tests/GmailControllerTests.cs); [B:EmailOwnershipIntegration](../../../../JobTrackerApi.Tests/EmailOwnershipIntegrationTests.cs) | [Workspace correspondence entry](../p5-08b/README.md). Full mail/provider/mobile AT absent. | **PARTIAL** | Live provider threads, multi-account reconnect/revoked grants and sync failures remain unverified. | Mail/provider owner; H — audit owned thread/job link/move/unlink/reconnect and approved live sync failures. |
| **PRES-M03** — Global inbox filters/page/provider/link/direction/detail/source links | `/correspondence`; [CorrespondenceInboxPage](../../../../job-tracker-ui/src/views/CorrespondenceInboxPage.tsx). Entry only via [P5-01](../p5-01/README.md); global inbox filters/page/provider/detail/source owners unchanged. | [F:correspondence-inbox-page](../../../../job-tracker-ui/src/correspondence-inbox-page.test.tsx); [B:EmailController](../../../../JobTrackerApi.Tests/EmailControllerTests.cs); [B:EmailOwnershipIntegration](../../../../JobTrackerApi.Tests/EmailOwnershipIntegrationTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Real large-mailbox/attachment-binary flows and complete native inbox/AT acceptance remain open; global inbox redesign stays Phase 7. | Mail owner; H — audit large native inbox paging/provider failure/detail/attachment binaries and manual AT. |
| **PRES-M04** — Compose/reply/provider/recipient/job; draft conflicts; confirm send/uncertainty | `/correspondence` Drafts/Compose; [draft/send owner](../../../../job-tracker-ui/src/views/CorrespondenceInboxPage.tsx). Compose/reply/revision/send/uncertainty owner unchanged; [P5-08b](../p5-08b/README.md) navigation regression only. | [F:correspondence-inbox-page](../../../../job-tracker-ui/src/correspondence-inbox-page.test.tsx); [B:EmailDraftsController](../../../../JobTrackerApi.Tests/EmailDraftsControllerTests.cs); [B:EmailDraftPersistence](../../../../JobTrackerApi.Tests/EmailDraftPersistenceTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Actual sandbox mail delivery/reconnect and every dirty/send interruption remain unverified; no automatic uncertain-send retry. followMode-specific UI remains deferred. | Mail/API owner; H — audit draft conflicts, explicit send/uncertain-new-attempt, reconnect/dirty interruption; followMode UI deferred, no automatic resend. |
| **PRES-M05** — Review proposed jobs/link/reject/keep/notes/sync/create | `/correspondence?view=review`, review alias; [GmailReviewPage](../../../../job-tracker-ui/src/views/GmailReviewPage.tsx), [inbox view adapter](../../../../job-tracker-ui/src/views/CorrespondenceInboxPage.tsx). Review alias and inbox entry retained in [P5-01](../p5-01/README.md)/[P5-08b](../p5-08b/README.md); reviewed decisions/create owner unchanged. | [F:gmail-review-page](../../../../job-tracker-ui/src/gmail-review-page.test.tsx); [F:correspondence-inbox-page](../../../../job-tracker-ui/src/correspondence-inbox-page.test.tsx); [B:GmailController](../../../../JobTrackerApi.Tests/GmailControllerTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Real provider review and complete suggested-job creation browser journey remain unverified; no automatic creation from navigation. | Mail/capture owner; H — audit review alias, proposed-job/link/reject/keep/notes/sync/create confirmation and owner boundaries. |
| **PRES-M06** — Gmail/Graph/IMAP connect/status/disconnect separate from sign-in | `/settings/connected-accounts`; [ConnectedAccountsPage](../../../../job-tracker-ui/src/views/ConnectedAccountsPage.tsx), [provider connections](../../../../job-tracker-ui/src/components/EmailProviderConnections.tsx). Connections entry retained in [P5-01](../p5-01/README.md)/[P5-02](../p5-02/README.md); existing Gmail/Graph/IMAP controls separate from sign-in. | [F:email-provider-connections](../../../../job-tracker-ui/src/email-provider-connections.test.tsx); [B:MicrosoftGraphController](../../../../JobTrackerApi.Tests/MicrosoftGraphControllerTests.cs); [B:ImapController](../../../../JobTrackerApi.Tests/ImapControllerTests.cs) | [Inherited Settings loaded/mobile review](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [shell entry](../p5-01/README.md). No full current domain requalification. | **PARTIAL** | Actual provider authorization/revocation/token expiry/reconnect remain unverified; no credentials or live provider operations in this review. | Connections/provider owner; H — audit actual grants/revoke/expiry/reconnect and IMAP safety; provider sandbox authorization required. |
| **PRES-S01** — Personal metrics/activity/funnel/company/skills/stage/salary/next actions | `/dashboard`, added `/analytics`; [shared reports owner](../../../../job-tracker-ui/src/components/DashboardView.tsx), [AnalyticsPage](../../../../job-tracker-ui/src/views/AnalyticsPage.tsx). Direct accurate report labels/cohorts in [P5-06](../p5-06/README.md) and meaningful [P5-07 Analytics](../p5-07/README.md); existing server facts retained. | [F:daily-control-loop](../../../../job-tracker-ui/src/daily-control-loop.test.tsx); [F:workflow-trust-signals](../../../../job-tracker-ui/src/workflow-trust-signals.test.tsx); [B:StageAnalytics](../../../../JobTrackerApi.Tests/StageAnalyticsTests.cs); [B:AnalyticsSalary](../../../../JobTrackerApi.Tests/AnalyticsSalaryTests.cs) | [Dashboard](../p5-06/README.md), [Analytics](../p5-07/README.md) four pairs/narrow/exact-value states; [utilities](../p5-02/README.md). Human AT open. | **PARTIAL** | Scoped native chart/value/population transformations supersede earlier unmapped chart gaps; server timezone/date/population limits and unsupported NEW metrics remain explicit. | Reports/API owner; M — audit exact cohort/sample/date definitions and drill-down links; retain unsupported-metric boundaries. |
| **PRES-S02** — Owner-local five visibility preferences/onboarding dismiss/notifications | Dashboard visibility/onboarding and bell; [five local flags](../../../../job-tracker-ui/src/components/DashboardView.tsx), [OnboardingChecklist](../../../../job-tracker-ui/src/components/OnboardingChecklist.tsx), [NotificationsPopover](../../../../job-tracker-ui/src/components/NotificationsPopover.tsx). Direct [P5-02](../p5-02/README.md) notifications and [P5-06](../p5-06/README.md) five owner-local Dashboard flags/onboarding; Analytics independent. | [F:onboarding-checklist](../../../../job-tracker-ui/src/onboarding-checklist.test.tsx); [F:notifications-popover](../../../../job-tracker-ui/src/notifications-popover.test.tsx); [B:JobLifecycleEvent](../../../../JobTrackerApi.Tests/JobLifecycleEventTests.cs) | [Dashboard](../p5-06/README.md), [Analytics](../p5-07/README.md) four pairs/narrow/exact-value states; [utilities](../p5-02/README.md). Human AT open. | **PARTIAL** | Five owner-local Dashboard visibility flags and scoped reload/account evidence remain; order/resize/reset is deferred. Recorded P5-06-O01 generic language-preference 500 during overlapping Dashboard/setup reads has no established exception/root cause; sequential fixture setup does not close concurrent save reliability. | Dashboard/shell/identity owner; H — investigate recorded P5-06-O01 language-save 500 during reads; audit five flags A/B/reload plus bell/onboarding; order/resize/reset deferred. |
| **PRES-S03** — Rules/reminder/table/theme/language preferences and account links | Settings tabs/mobile selector and shell preferences; [SettingsView](../../../../job-tracker-ui/src/components/SettingsView.tsx), [rules](../../../../job-tracker-ui/src/components/RulesSettingsCard.tsx), [language save](../../../../job-tracker-ui/src/i18n/I18nProvider.tsx). P4 Settings controls retained; [P5-00](../p5-00/README.md) feedback/shared tokens and [P5-03](../p5-03/README.md)/[P5-04b](../p5-04b/README.md) table preferences integration. | [F:settings-view](../../../../job-tracker-ui/src/settings-view.test.tsx); [F:theme-state](../../../../job-tracker-ui/src/theme-state.test.tsx); [B:NotificationSettingsController](../../../../JobTrackerApi.Tests/NotificationSettingsControllerTests.cs); [B:RulesEngineProspect](../../../../JobTrackerApi.Tests/RulesEngineProspectTests.cs) | [Inherited Settings loaded/mobile review](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [shell entry](../p5-01/README.md). No full current domain requalification. | **PARTIAL** | P4-04-O02 recorded SQLite notification saves had 2/10 HTTP 500/database-locked attempts; isolated rules 500 remains unconfirmed. P5-06-O01 language-preference 500 and rule drafts lost on tab unmount stay open; sequential success does not establish concurrency safety. | Settings/API/identity owner; H — investigate P4-04-O02 concurrent notification 500 and P5-06-O01 language-save 500; audit rule draft/tab lifecycle, unknown route/preferences. |
| **PRES-S04** — AI privacy/usage/limits/Free-Pro/server entitlement/conditional billing | Settings AI/plan and domain locks; [privacy](../../../../job-tracker-ui/src/components/AiPrivacySettingsCard.tsx), [usage](../../../../job-tracker-ui/src/components/AiUsageCard.tsx), [AccountPlanProvider](../../../../job-tracker-ui/src/accountPlan.tsx). Existing privacy/usage/entitlements/billing readiness retained; deterministic AI metering in [readiness](../p5-13-readiness/README.md); Production CV review exception only. | [F:settings-view](../../../../job-tracker-ui/src/settings-view.test.tsx); [F:ai-usage-card](../../../../job-tracker-ui/src/ai-usage-card.test.tsx); [B:AiPrivacyPolicy](../../../../JobTrackerApi.Tests/AiPrivacyPolicyTests.cs); [B:AiUsageMeter](../../../../JobTrackerApi.Tests/AiUsageMeterTests.cs) | [Inherited Settings loaded/mobile review](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [shell entry](../p5-01/README.md). No full current domain requalification. | **PARTIAL** | Actual checkout/webhooks/portal and provider consent/delivery remain unverified. Production CV unavailability is temporary authorized P5-13 debt, not fulfillment or disabling other AI. | AI/commerce/API owner; H — retain entitlement/privacy/metering and bounded Production CV exception; separately prove checkout/webhooks/portal before activation. |
| **PRES-S05** — Account ZIP/encrypted backup/lifecycle/deletion confirmations | Settings Backup; [BackupCard](../../../../job-tracker-ui/src/components/BackupCard.tsx). Account ZIP/backup/deletion controls and independent saves retained; [P5-00](../p5-00/README.md) feedback clearance and [native package/ZIP evidence](../p5-08b-readiness/README.md). | [F:account-data-export](../../../../job-tracker-ui/src/account-data-export.test.tsx); [B:AccountDataExport](../../../../JobTrackerApi.Tests/AccountDataExportTests.cs); [B:BackupController](../../../../JobTrackerApi.Tests/BackupControllerTests.cs) | [Inherited Settings loaded/mobile review](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [shell entry](../p5-01/README.md). No full current domain requalification. | **PARTIAL** | Actual database/account restore, verified recoverable backups, paid deletion/provider cancellation and rollback remain production release gates; no destructive rehearsal occurred. | Account lifecycle/release owner; H — audit exact confirmations/ZIP/backup gates; current recoverable restore/paid deletion/provider cancellation/rollback require authorized rehearsal. |
| **PRES-A01** — Admin user/create/roles/reset/delete/last-admin/self guards | `/admin/users`; [AdminUsersPage](../../../../job-tracker-ui/src/views/AdminUsersPage.tsx). Admin Users route/entry retained by [P5-01](../p5-01/README.md); server authorization/last-admin/self guards unchanged. | [F:admin-users-page](../../../../job-tracker-ui/src/admin-users-page.test.tsx); [B:UsersController](../../../../JobTrackerApi.Tests/UsersControllerTests.cs); [B:ApiAuthorizationPosture](../../../../JobTrackerApi.Tests/ApiAuthorizationPostureTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Mounted-view role revocation, full mutations and actual reset delivery remain unverified; hidden nav/synthetic shell never proves authorization. | Admin/identity owner; H — audit full guarded mutations, mounted-role revoke and real reset; crafted API denial remains mandatory. |
| **PRES-A02** — Audit list/detail/supported undo/job restore | `/admin/audit`; [AdminAuditPage](../../../../job-tracker-ui/src/views/AdminAuditPage.tsx). Admin Audit route/entry retained by [P5-01](../p5-01/README.md); supported server undo/restore owner unchanged. | [F:admin-audit-page](../../../../job-tracker-ui/src/admin-audit-page.test.tsx); [B:AuthAndSystemController](../../../../JobTrackerApi.Tests/AuthAndSystemControllerTests.cs); [B:ApiAuthorizationPosture](../../../../JobTrackerApi.Tests/ApiAuthorizationPostureTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Complete successful native undo/job restore browser acceptance remains open; role posture is not undo behavior proof. | Admin/API owner; H — audit persisted successful undo/job restore, unsupported actions and non-admin denial. |
| **PRES-A03** — System/build/DB/AI/mail/SMTP/test/probe/benchmark/maintenance | `/admin/system` and admin badge; [AdminSystemPage](../../../../job-tracker-ui/src/views/AdminSystemPage.tsx), [metadata disclosure](../../../../job-tracker-ui/src/layout/AppShell.tsx). Admin System route/entry/build metadata retained in [P5-00](../p5-00/README.md)/[P5-01](../p5-01/README.md); diagnostics/maintenance owner unchanged. | [F:admin-system-page](../../../../job-tracker-ui/src/admin-system-page.test.tsx); [B:AuthAndSystemController](../../../../JobTrackerApi.Tests/AuthAndSystemControllerTests.cs); [B:MaintenanceJobDispatcher](../../../../JobTrackerApi.Tests/MaintenanceJobDispatcherTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | Actual production SMTP/model/probes/benchmark/maintenance and sensitive-output qualification remain unverified; no live jobs launched. | Admin/operations owner; H — audit metadata/diagnostic sensitive outputs and guarded controls; production SMTP/model/maintenance proof separately authorized. |
| Original ID / complete-group shorthand | Current route / actual component; implemented preservation touch | Historical executable regression anchors | Inherited visual / responsive / EN-NB evidence and limit | P5-15-00 before | P5-15-01 after | Remaining limitation / gap | Required next audit / owner / priority |
|---|---|---|---|---|---|---|---|
| **PRES-E01** — Public product/plans; honest unavailable billing | `/`; [LandingPage](../../../../job-tracker-ui/src/views/LandingPage.tsx), [planCatalog](../../../../job-tracker-ui/src/planCatalog.ts). Unchanged public product/plans; [P5-01](../p5-01/README.md) route regression. | [F:landing-page](../../../../job-tracker-ui/src/landing-page.test.tsx); [F:planCatalog](../../../../job-tracker-ui/src/planCatalog.test.ts); [B:AccountPlans](../../../../JobTrackerApi.Tests/AccountPlansTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Actual checkout/billing provider availability and public mobile/keyboard acceptance remain unverified. | Public/commerce owner; M — audit loaded mobile/keyboard EN/NB plans and honest unavailable billing; provider readiness separately. |
| **PRES-E02** — Local login/register/remember, challenge, reset and verification | `/login`, `/register`, reset/verify routes; [LoginPage](../../../../job-tracker-ui/src/views/LoginPage.tsx), [ForgotPasswordPage](../../../../job-tracker-ui/src/views/ForgotPasswordPage.tsx), [ResetPasswordPage](../../../../job-tracker-ui/src/views/ResetPasswordPage.tsx), [VerifyEmailPage](../../../../job-tracker-ui/src/views/VerifyEmailPage.tsx). Entry retained by [P5-01](../p5-01/README.md); existing local auth/challenge/reset/verification owners. | [F:login-page](../../../../job-tracker-ui/src/login-page.test.tsx); [F:verify-email-page](../../../../job-tracker-ui/src/verify-email-page.test.tsx); [B:LocalAuthIdentity](../../../../JobTrackerApi.Tests/LocalAuthIdentityTests.cs); [B:AuthAndSystemController](../../../../JobTrackerApi.Tests/AuthAndSystemControllerTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **FAIL**; [01 evidence](p5-15-01/PRES_RESULTS.md) |**Fresh01:** AUTH-01 sign-in query loss; [register](p5-15-01/DEFECTS.md). Real reset-mail delivery, Turnstile/browser configuration and complete token-reset submit journey remain unverified. | Identity owner; H — trace reset request/token submit/verification/challenge errors in real App; sandbox mail/Turnstile only under later authorization. |
| **PRES-E03** — Google/Microsoft login, link, legacy relink and popup results | `/login`, `/microsoft-legacy-relink`; [GoogleAuthCard](../../../../job-tracker-ui/src/components/GoogleAuthCard.tsx), [MicrosoftAuthCard](../../../../job-tracker-ui/src/components/MicrosoftAuthCard.tsx), [relink page](../../../../job-tracker-ui/src/views/MicrosoftLegacyRelinkPage.tsx). Entry retained by [P5-01](../p5-01/README.md); provider sign-in remains separate from Connections. | [F:login-page](../../../../job-tracker-ui/src/login-page.test.tsx); [F:microsoft-legacy-relink-page](../../../../job-tracker-ui/src/microsoft-legacy-relink-page.test.tsx); [B:GoogleTokenValidator](../../../../JobTrackerApi.Tests/GoogleTokenValidatorTests.cs); [B:MicrosoftTokenValidator](../../../../JobTrackerApi.Tests/MicrosoftTokenValidatorTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Real provider consent/popups, revoked grants and sandbox outcomes remain unverified; origin/state contracts remain required. | Identity/provider owner; H — audit popup origin/state, revoke/relink and provider errors using approved sandbox; keep sign-in and mailbox grants separate. |
| **PRES-E04** — 2FA challenge/recovery/setup/disable; trusted-device revocation | `/profile`, `/login`; [TwoFactorSettingsCard](../../../../job-tracker-ui/src/components/TwoFactorSettingsCard.tsx), [challenge](../../../../job-tracker-ui/src/components/TwoFactorChallenge.tsx). Entry relocation only in [P5-01](../p5-01/README.md); Profile/login security forms unchanged. | [F:two-factor-settings](../../../../job-tracker-ui/src/two-factor-settings.test.tsx); [F:login-page](../../../../job-tracker-ui/src/login-page.test.tsx); [B:TwoFactorController](../../../../JobTrackerApi.Tests/TwoFactorControllerTests.cs); [B:SessionsController](../../../../JobTrackerApi.Tests/SessionsControllerTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Real mobile authenticator/recovery and trusted-device UI traversal remain open; no security-form acceptance inferred from navigation. | Identity/accessibility owner; H — manual keyboard/screen-reader recovery/trusted-device traversal plus real authenticator proof. |
| **PRES-E05** — Session list/current device, revoke one/others, logout | `/profile` and account Sign out; [SessionsSettingsCard](../../../../job-tracker-ui/src/components/SessionsSettingsCard.tsx), [AppShell](../../../../job-tracker-ui/src/layout/AppShell.tsx), [auth](../../../../job-tracker-ui/src/auth.ts). Direct shell logout/private utility changes in [P5-00](../p5-00/README.md)–[P5-02](../p5-02/README.md); session-list owner unchanged. | [F:session-boundary](../../../../job-tracker-ui/src/session-boundary.test.ts); [F:account-scoped-state](../../../../job-tracker-ui/src/account-scoped-state.test.tsx); [B:SessionsController](../../../../JobTrackerApi.Tests/SessionsControllerTests.cs); [B:AuthSessionRevocation](../../../../JobTrackerApi.Tests/AuthSessionRevocationTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Session-card selection/refresh after remote revocation remains open; broad device/AT acceptance is not established. | Identity/shell owner; H — audit session card remote-revoke refresh and Sign out private disposal/focus at every shell entry. |
| **PRES-E06** — Avatar, account names/headline, email change and password | `/profile`, `/confirm-email-change`; [ProfilePage](../../../../job-tracker-ui/src/views/ProfilePage.tsx), [VerifyEmailPage](../../../../job-tracker-ui/src/views/VerifyEmailPage.tsx). Account/security entry only in [P5-01](../p5-01/README.md); avatar/account identity and confirm-email-change route retained. | [F:profile-page](../../../../job-tracker-ui/src/profile-page.test.tsx); [F:verify-email-page](../../../../job-tracker-ui/src/verify-email-page.test.tsx); [B:AvatarStorage](../../../../JobTrackerApi.Tests/AvatarStorageTests.cs); [B:LocalAuthIdentity](../../../../JobTrackerApi.Tests/LocalAuthIdentityTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Avatar upload/remove and password-change browser journeys remain unverified; account identity stays distinct from Career Profile. | Identity owner; H — audit native avatar/remove/password/email-change, missing/error states and cross-account negative paths. |
| **PRES-E07** — Desktop collapse/mobile drawer, active nav and command search/actions | Private shell, Ctrl/Cmd+K; [App navigation](../../../../job-tracker-ui/src/App.tsx), [AppShell](../../../../job-tracker-ui/src/layout/AppShell.tsx), [QuickCommandDialog](../../../../job-tracker-ui/src/components/QuickCommandDialog.tsx). Direct [shell/navigation/utilities](../p5-02/README.md), [Jobs Table/Board](../p5-04b/README.md), [Analytics](../p5-07/README.md) and [workspace sections](../p5-08b/README.md). | [F:sidebar-active-nav](../../../../job-tracker-ui/src/sidebar-active-nav.test.ts); [F:app-shell-notifications](../../../../job-tracker-ui/src/app-shell-notifications.test.tsx); [B:JobApplicationsAuthorization](../../../../JobTrackerApi.Tests/JobApplicationsAuthorizationTests.cs); [B:CompanyRelationship](../../../../JobTrackerApi.Tests/CompanyRelationshipTests.cs) | [Shell/utility EN/NB × light/dark, rail/phone](../p5-02/README.md); [P5-14 shared clearance](../p5-14/README.md). Human AT/zoom incomplete. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Original route/command/drawer defects have scoped successor evidence; manual screen reader and inherited command/focus timing debt remain open. This census is not browser route acceptance. | Shell/accessibility owner; H — audit every nav/command destination, collapsed/mobile labels, route focus, dirty Cancel and manual spoken names (P5-02-D01; P5-04b-R01). |
| **PRES-E08** — Theme/system, EN/NB hydration, toast/confirm/prompt and errors | All routes/preferences; [ThemeProvider](../../../../job-tracker-ui/src/ThemeProvider.tsx), [themePrefs](../../../../job-tracker-ui/src/themePrefs.ts), [I18nProvider](../../../../job-tracker-ui/src/i18n/I18nProvider.tsx), [confirm](../../../../job-tracker-ui/src/confirm.tsx), [prompt](../../../../job-tracker-ui/src/prompt.tsx). Direct semantic theme/feedback controls in [P5-00](../p5-00/README.md); EN/Bokmål and light/dark regressions carried through [P5-12](../p5-12/README.md). | [F:theme-state](../../../../job-tracker-ui/src/theme-state.test.tsx); [F:i18n-provider](../../../../job-tracker-ui/src/i18n-provider.test.tsx); [B:LocalAuthIdentity](../../../../JobTrackerApi.Tests/LocalAuthIdentityTests.cs) | [Shell/utility EN/NB × light/dark, rail/phone](../p5-02/README.md); [P5-14 shared clearance](../p5-14/README.md). Human AT/zoom incomplete. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Full theme/locale/state/OS cross-product, spoken names/announcements, incomplete axe, zoom/forced-colours/text-spacing and shared-dialog timing remain unverified. | Shared UI/accessibility owner; H — audit loaded error/confirm/prompt states, OS theme, locale hydration, zoom/forced colours and announcements; incomplete axe remains open. |
| **PRES-E09** — Account-switch private-state disposal and stale request rejection | All private routes/account switches; [App](../../../../job-tracker-ui/src/App.tsx), [api](../../../../job-tracker-ui/src/api.ts), [sessionBoundary](../../../../job-tracker-ui/src/sessionBoundary.ts). Private-state/session boundary unchanged; new shell/utility/workspace/CV relationships regression-protected in [readiness](../p5-13-readiness/README.md). | [F:session-boundary](../../../../job-tracker-ui/src/session-boundary.test.ts); [F:account-scoped-state](../../../../job-tracker-ui/src/account-scoped-state.test.tsx); [B:SessionContextMiddleware](../../../../JobTrackerApi.Tests/SessionContextMiddlewareTests.cs); [B:CurrentUserIdLiveEvaluation](../../../../JobTrackerApi.Tests/CurrentUserIdLiveEvaluationTests.cs) | [Native account isolation](../../../../job-tracker-ui/e2e/account-isolation.spec.ts); [P5-14 owned source/sibling fixture](../p5-14/README.md). Images do not prove tenant isolation. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Real BFCache variations/long offline retries and deployed old-bundle/session behavior remain unverified; images and mocked components cannot prove tenant isolation. | Identity owner; H — rerun real account-switch/two-tab stale read/write evidence at execution checkpoint; extend BFCache/offline/old-bundle audit when authorized. |
| **PRES-J01** — NAV discovery/filter/sort/source/deadline/details | `/discover`; [JobDiscoveryPage](../../../../job-tracker-ui/src/views/JobDiscoveryPage.tsx). Entry only: [P5-01](../p5-01/README.md) groups Discover under Jobs; discovery page/service unchanged. | [F:job-discovery](../../../../job-tracker-ui/src/job-discovery.test.tsx); [B:JobDiscoveryController](../../../../JobTrackerApi.Tests/JobDiscoveryControllerTests.cs); [B:JobOpportunitySync](../../../../JobTrackerApi.Tests/JobOpportunitySyncTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Live NAV freshness/availability and long result keyboard traversal remain open. | Discovery owner; M — audit long results/mobile keyboard/source/deadline/retry; live NAV availability separately. |
| **PRES-J02** — Saved searches, run/delete/alerts, result changes/dismissal | `/discover`; [saved-search/alert controls](../../../../job-tracker-ui/src/views/JobDiscoveryPage.tsx). Entry only in [P5-01](../p5-01/README.md); saved discovery search/alert service and controls unchanged. | [F:job-discovery](../../../../job-tracker-ui/src/job-discovery.test.tsx); [B:SavedJobSearchAlert](../../../../JobTrackerApi.Tests/SavedJobSearchAlertTests.cs); [B:JobDiscoveryController](../../../../JobTrackerApi.Tests/JobDiscoveryControllerTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **FAIL**; [01 evidence](p5-15-01/PRES_RESULTS.md) |**Fresh01:** DISCOVERY-01 saved-search500; [register](p5-15-01/DEFECTS.md). Scheduler-to-notification browser journey and mobile delete confirmation remain unverified; no new producer or delivery certification. | Discovery/notifications owner; M — audit saved search delete/pause/run, mobile confirmation and scheduler-to-owned-notification chain. |
| **PRES-J03** — Reviewed manual/URL/paste job create, company/tags/dates, duplicates | Jobs/command Add; [AddJobModal](../../../../job-tracker-ui/src/components/AddJobModal.tsx). Existing reviewed Add modal shared by [P5-03](../p5-03/README.md)/[P5-04b](../p5-04b/README.md); no creation on route/view mount. | [F:quick-capture](../../../../job-tracker-ui/src/quick-capture.test.tsx); [B:JobImportService](../../../../JobTrackerApi.Tests/JobImportServiceTests.cs); [B:JobImportHttpTransport](../../../../JobTrackerApi.Tests/JobImportHttpTransportTests.cs) | [Jobs/Trash four pairs and responsive](../p5-03/README.md); [shared Table/Board](../p5-04b/README.md). Capture/provider/manual gaps remain. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Duplicate/company/date edge UI and creation-intent idempotency remain independent gaps; import network boundary evidence is separate from live site success. | Capture/API owner; H — audit reviewed duplicate/company/date boundaries and interrupted creation; creation-intent idempotency stays a separate contract. |
| **PRES-J04** — Extension/bookmarklet/share capture; post-create attachment/CV | `?add=`, `?addtext=`, Settings capture; [capture consumer](../../../../job-tracker-ui/src/App.tsx), [captureUrl](../../../../job-tracker-ui/src/captureUrl.ts), [QuickCaptureCard](../../../../job-tracker-ui/src/components/QuickCaptureCard.tsx). Capture/add/addtext review entry retained in [P5-01](../p5-01/README.md)/[P5-03](../p5-03/README.md); extension and post-create owners unchanged. | [F:captureUrl](../../../../job-tracker-ui/src/captureUrl.test.ts); [F:quick-capture](../../../../job-tracker-ui/src/quick-capture.test.tsx); [B:JobImportService](../../../../JobTrackerApi.Tests/JobImportServiceTests.cs); [B:CvBuilder](../../../../JobTrackerApi.Tests/CvBuilderTests.cs) | [Jobs/Trash four pairs and responsive](../p5-03/README.md); [shared Table/Board](../p5-04b/README.md). Capture/provider/manual gaps remain. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Installed extension permissions/share flow and optional attachment failure recovery remain unverified. | Capture owner; H — audit installed extension/share/no-replay and post-create attachment failure recovery without auto-create. |
| **PRES-J05** — Job filters/sort/page/columns, saved views and row/mobile actions | `/jobs?view=table / board`; [JobTable](../../../../job-tracker-ui/src/components/JobTable.tsx), [SavedViewsMenu](../../../../job-tracker-ui/src/components/SavedViewsMenu.tsx), [jobsQuery](../../../../job-tracker-ui/src/jobsQuery.ts). Direct [P5-03](../p5-03/README.md) Jobs/Trash presentation and [P5-04b](../p5-04b/README.md) shared complete-query view integration. | [F:application-workspace-overlay](../../../../job-tracker-ui/src/application-workspace-overlay.test.tsx); [F:account-scoped-state](../../../../job-tracker-ui/src/account-scoped-state.test.tsx); [B:JobApplicationsController](../../../../JobTrackerApi.Tests/JobApplicationsControllerTests.cs); [B:JobApplicationsEndpointBehavior](../../../../JobTrackerApi.Tests/JobApplicationsEndpointBehaviorTests.cs) | [Jobs/Trash four pairs and responsive](../p5-03/README.md); [shared Table/Board](../p5-04b/README.md). Capture/provider/manual gaps remain. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Finite saved-view/filter/Back/error/selection fixtures do not exhaust saved-view CRUD or dirty nested page-size combinations; full-array scaling remains limited. | Jobs owner; H — audit full saved-view CRUD, Back/refresh/unknown query, dirty nested page-size and all-result scaling. |
| **PRES-J06** — Bulk status/delete, soft delete/trash/restore and job edit | `/jobs`, `/trash`; [JobTable](../../../../job-tracker-ui/src/components/JobTable.tsx), [EditJobDialog](../../../../job-tracker-ui/src/components/EditJobDialog.tsx). Direct [P5-03](../p5-03/README.md) table/Trash and [P5-04b](../p5-04b/README.md) selection/view integration; CRUD/soft-delete owner retained. | [F:application-workspace-overlay](../../../../job-tracker-ui/src/application-workspace-overlay.test.tsx); [F:confirm-flow](../../../../job-tracker-ui/src/confirm-flow.test.tsx); [B:JobApplicationsController](../../../../JobTrackerApi.Tests/JobApplicationsControllerTests.cs); [B:JobApplicationsAuthorization](../../../../JobTrackerApi.Tests/JobApplicationsAuthorizationTests.cs) | [Jobs/Trash four pairs and responsive](../p5-03/README.md); [shared Table/Board](../p5-04b/README.md). Capture/provider/manual gaps remain. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Scoped native restore and bulk/mutation fixtures supersede earlier bare-confirm gaps; all bulk partial-failure/dirty-state combinations and deeper manual AT remain unverified. | Jobs/API owner; H — audit selected scope, partial bulk failures and Trash restore with native persistence/dirty protection. |
| **PRES-J07** — Kanban grouped statuses, pointer/keyboard move and precise menu | `/jobs?view=board`, `/kanban` alias; [KanbanBoard](../../../../job-tracker-ui/src/components/KanbanBoard.tsx), [pipeline](../../../../job-tracker-ui/src/pipeline.ts). Direct [P5-04a](../p5-04a/README.md)/[P5-04b](../p5-04b/README.md); complete shared query, precise status and /kanban alias retained. | [F:kanban-grouped-board](../../../../job-tracker-ui/src/kanban-grouped-board.test.tsx); [F:pipeline](../../../../job-tracker-ui/src/pipeline.test.ts); [B:JobPipeline](../../../../JobTrackerApi.Tests/JobPipelineTests.cs) | [Board four pairs/narrow keyboard](../p5-04b/README.md). Physical touch/full-scale not proven. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Physical touch/native drag, broader responsive focus/cancel combinations and full-result scaling remain open; grouped statuses are not a new pipeline. | Jobs/accessibility owner; H — audit keyboard cancel/view focus, physical touch/drag and complete filtered membership at scale; no new pipeline. |
| **PRES-J08** — Company/contact edits, pipeline dates and linked-job history | `/companies?edit=id`; [CompaniesTable](../../../../job-tracker-ui/src/components/CompaniesTable.tsx). Company/contacts/history entry only in [P5-01](../p5-01/README.md)/[P5-02](../p5-02/README.md); existing Companies form retained. | [F:companies-relationship](../../../../job-tracker-ui/src/companies-relationship.test.tsx); [F:quick-command-preservation](../../../../job-tracker-ui/src/quick-command-preservation.test.tsx); [B:CompanyRelationship](../../../../JobTrackerApi.Tests/CompanyRelationshipTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | All contact/date edits and source-URL safety browser journeys remain unverified; P4-02-D02 inaccessible modal-save error is open for its owner. | Companies/accessibility owner; H — fix and prove durable in-modal save error before form migration (P4-02-D02); audit contact/date/source links. |
| **PRES-J09** — Recorded offers/compensation/deadlines/notes and source links | `/offers`; [OfferComparisonPage](../../../../job-tracker-ui/src/views/OfferComparisonPage.tsx). Offers entry retained; report source links reviewed in [P5-06](../p5-06/README.md)/[P5-07](../p5-07/README.md); recorded offer page unchanged. | [F:offer-comparison](../../../../job-tracker-ui/src/offer-comparison.test.tsx); [B:AnalyticsSalary](../../../../JobTrackerApi.Tests/AnalyticsSalaryTests.cs); [B:JobApplicationsEndpointBehavior](../../../../JobTrackerApi.Tests/JobApplicationsEndpointBehaviorTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Mobile many-offer comparison and localized currency/date visual acceptance remain open; no new salary facts are claimed. | Offers owner; M — audit many-offer narrow layout, currency/period/date labels and safe source links across EN/NB. |
| **PRES-J10** — CSV/JSON export, JSON import and CSV-to-JSON conversion | `/settings` Data; [ImportExportJobs](../../../../job-tracker-ui/src/components/ImportExportJobs.tsx). Settings Data import/export entry retained by [P5-01](../p5-01/README.md)/[P5-03](../p5-03/README.md); serializers unchanged. | [F:csv-export](../../../../job-tracker-ui/src/csv-export.test.tsx); [B:CsvExport](../../../../JobTrackerApi.Tests/CsvExportTests.cs); [B:JobApplicationsController](../../../../JobTrackerApi.Tests/JobApplicationsControllerTests.cs) | [Inherited Settings loaded/mobile review](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [shell entry](../p5-01/README.md). No full current domain requalification. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Full JSON import/count/roundtrip browser proof and spreadsheet-client compatibility remain separately bounded; byte/formula/Unicode fixtures are not exhaustive. | Settings/data owner; H — audit native JSON import counts/roundtrip, Unicode/formula-safe bytes and target spreadsheet compatibility. |
| **PRES-W01** — Full workspace, sections, legacy links and optional reusable overlay | `/jobs/:id`, `/applications/:id`; [ApplicationWorkspace](../../../../job-tracker-ui/src/views/ApplicationWorkspacePage.tsx), [section adapter](../../../../job-tracker-ui/src/applicationWorkspace.ts), [numeric-tab helper](../../../../job-tracker-ui/src/jobWorkspaceRoute.ts). Direct dedicated workspace header/Overview [P5-08a](../p5-08a/README.md) and URL sections [P5-08b](../p5-08b/README.md); Jobs/legacy aliases retained. | [F:application-workspace-overlay](../../../../job-tracker-ui/src/application-workspace-overlay.test.tsx); [F:applicationWorkspace](../../../../job-tracker-ui/src/applicationWorkspace.test.ts); [B:ApplicationWorkspace](../../../../JobTrackerApi.Tests/ApplicationWorkspaceTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Reusable overlay has no active production host; followMode metadata retained but mode-specific UI explicitly deferred to mail. Full manual AT and historical transition-capture limits remain. | Workspace/mail owner; H — audit all canonical/legacy entries and numeric navigation-helper arguments, safe query/state, dirty/Back/focus; carry followMode UI to mail phase. |
| **PRES-W02** — Detail/status/progression, recruiter/dates/description/timeline | Job Overview/Timeline; [header/detail/progress](../../../../job-tracker-ui/src/views/ApplicationWorkspacePage.tsx), [ApplicationTimeline](../../../../job-tracker-ui/src/components/ApplicationIntelligence.tsx). Direct [P5-08a](../p5-08a/README.md)/[P5-08b](../p5-08b/README.md) header/progress/detail/timeline composition with existing status/date handlers. | [F:application-intelligence](../../../../job-tracker-ui/src/application-intelligence.test.tsx); [F:workflow-trust-signals](../../../../job-tracker-ui/src/workflow-trust-signals.test.tsx); [B:JobApplicationsWorkflowSignals](../../../../JobTrackerApi.Tests/JobApplicationsWorkflowSignalsTests.cs); [B:JobApplicationsAppliedDateHistory](../../../../JobTrackerApi.Tests/JobApplicationsAppliedDateHistoryTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Localized backend event/content text, timezone/reload/status-to-timeline combinations and human AT remain unverified; job revision semantics were not repaired. | Workspace/API owner; H — audit native edit/status/date-to-timeline and localized stored content/timezones; job revision debt separately. |
| **PRES-W03** — Analysis, match/gaps, strategy and reviewed status/workflow suggestions | Job Match/Overview suggestion; [analysis/match/strategy](../../../../job-tracker-ui/src/components/ApplicationIntelligence.tsx), [workflow assist](../../../../job-tracker-ui/src/components/ApplicationWorkflowAssist.tsx). Existing contextual analysis/match/strategy/status owners recomposed by [P5-08b](../p5-08b/README.md); opening does not invoke AI. | [F:application-intelligence](../../../../job-tracker-ui/src/application-intelligence.test.tsx); [F:application-workflow-assist](../../../../job-tracker-ui/src/application-workflow-assist.test.tsx); [B:ApplicationIntelligence](../../../../JobTrackerApi.Tests/ApplicationIntelligenceTests.cs); [B:StrategySnapshotOperation](../../../../JobTrackerApi.Tests/StrategySnapshotOperationTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Live model truthfulness, freshness/cancelled generation and provider quality remain unverified; P5-13 production CV withholding must not disable these unrelated AI paths. | Workspace/AI owner; H — audit reviewed suggestions/error/cancel/freshness/no-write entry; qualify live factuality separately from CV exception. |
| **PRES-W04** — Checklist create/edit/complete/delete/order and next action | Job Notes & tasks; [ApplicationChecklist](../../../../job-tracker-ui/src/components/ApplicationChecklist.tsx). Existing checklist owner/ordered controls recomposed by [P5-08b](../p5-08b/README.md); manual/system/dismissed distinctions retained. | [F:application-checklist](../../../../job-tracker-ui/src/application-checklist.test.tsx); [B:ApplicationChecklist](../../../../JobTrackerApi.Tests/ApplicationChecklistTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Real mobile interruption/edit/delete combinations and human AT remain open; no task due-date schema or automatic notification added. | Workspace owner; H — audit native mobile item edit/delete/reorder/interruption and manual/system/dismissed next actions. |
| **PRES-W05** — Attach/select/create/tailor CV and source context | Job Application/CV, builder job link; [ApplicationCvSection/TailoringSection](../../../../job-tracker-ui/src/components/ApplicationAssets.tsx). Existing job-CV attach/create/tailor source relationships recomposed by [P5-08b](../p5-08b/README.md); [native readiness](../p5-08b-readiness/README.md) supersedes P2-D01. | [F:application-assets](../../../../job-tracker-ui/src/application-assets.test.tsx); [F:cv-builder-deep-link](../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [B:ApplicationAssets](../../../../JobTrackerApi.Tests/ApplicationAssetsTests.cs); [B:CvBuilder](../../../../JobTrackerApi.Tests/CvBuilderTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | P2-D01 is an ordinary passing native regression, not current expected failure. Broader attach-render combinations, provider tailoring quality and deployed restore remain unverified; CV review production exception stays distinct. | Workspace/CV owner; H — audit attach/render/detach/create/tailor with source and foreign-owner checks; retain ordinary native P2-D01 successor. |
| **PRES-W06** — Cover-letter manual/AI review, versions/restore and dirty protection | Job Application/Letter; [ApplicationCoverLetterSection](../../../../job-tracker-ui/src/components/ApplicationAssets.tsx). Existing manual/AI cover-letter/history/dirty owner recomposed in [P5-08b](../p5-08b/README.md); literal-context defect corrected in [readiness](../p5-08b-readiness/README.md). | [F:application-assets](../../../../job-tracker-ui/src/application-assets.test.tsx); [F:application-workspace-overlay](../../../../job-tracker-ui/src/application-workspace-overlay.test.tsx); [B:ApplicationAssets](../../../../JobTrackerApi.Tests/ApplicationAssetsTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Native/mocked review/history evidence does not establish live-model or provider quality; full screen-reader and every reject/history sequence remain unverified. | Workspace/AI owner; H — audit native manual/AI reject/accept/save/history and dirty Cancel/Discard; actual model quality separately. |
| **PRES-W07** — Application drafts and immutable submitted package/archived binaries | Job Application/Answers/Submission and Documents; [drafts/submitted packages](../../../../job-tracker-ui/src/components/ApplicationAssets.tsx). Existing drafts/frozen submission/archive owners recomposed by [P5-08b](../p5-08b/README.md); [native SQLite/archive/ZIP proof](../p5-08b-readiness/README.md) retained. | [F:application-assets](../../../../job-tracker-ui/src/application-assets.test.tsx); [F:application-drafts](../../../../job-tracker-ui/src/application-drafts.test.ts); [B:SubmittedApplicationPackage](../../../../JobTrackerApi.Tests/SubmittedApplicationPackageTests.cs); [B:JobApplicationsApplicationPackage](../../../../JobTrackerApi.Tests/JobApplicationsApplicationPackageTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Earlier P2-D01 capture expected failure is superseded by ordinary native passing evidence. Production restore/rollback and all storage/provider combinations remain unverified; capture is not external send. | Workspace/storage owner; H — retain native capture→source mutation→archive/ZIP immutable-byte regression; release owner proves restore/rollback independently. |
| **PRES-W08** — Attachments upload/category/name/AI consent/preview/download/delete | Job Documents; [Attachments](../../../../job-tracker-ui/src/components/Attachments.tsx). Existing attachments CRUD/consent/protected downloads retained; named narrow table/empty state in [P5-08b](../p5-08b/README.md), archive proof in [readiness](../p5-08b-readiness/README.md). | [F:attachments](../../../../job-tracker-ui/src/attachments.test.tsx); [B:AttachmentsController](../../../../JobTrackerApi.Tests/AttachmentsControllerTests.cs); [B:AttachmentConsistency](../../../../JobTrackerApi.Tests/AttachmentConsistencyTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Archive gate is locally satisfied for recorded native fixtures; physical drag/drop, broad rename/download/manual AT and production storage behavior remain unverified. | Workspace/storage owner; H — audit upload/category/name/consent/preview/download/delete and physical drop with live/frozen identity. |
| **PRES-W09** — Interview questions/answers/ready/manual removal/AI review | Job Interview Prep; [InterviewPrep](../../../../job-tracker-ui/src/components/InterviewPrep.tsx). Existing interview questions/answers/manual removal/AI review/readiness recomposed by [P5-08b](../p5-08b/README.md). | [F:interview-prep](../../../../job-tracker-ui/src/interview-prep.test.tsx); [B:InterviewPrepPersistence](../../../../JobTrackerApi.Tests/InterviewPrepPersistenceTests.cs); [B:InterviewAiContext](../../../../JobTrackerApi.Tests/InterviewAiContextTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Real-model quality, physical mobile keyboard/populated reload and manual AT remain open; prep does not establish scheduled interview data. | Workspace/AI owner; H — audit populated mobile keyboard/reload/manual removal and explicit AI review; no scheduled-interview inference. |
| **PRES-W10** — Debrief/follow-up draft/date/readiness | Job Interview Prep and follow-up links; [InterviewPrep](../../../../job-tracker-ui/src/components/InterviewPrep.tsx), [followMode producer](../../../../job-tracker-ui/src/jobWorkspaceRoute.ts). Existing debrief/follow-up draft/date/readiness owner recomposed by [P5-08b](../p5-08b/README.md); no automatic send. | [F:interview-prep](../../../../job-tracker-ui/src/interview-prep.test.tsx); [B:JobApplicationsFollowUpDraft](../../../../JobTrackerApi.Tests/JobApplicationsFollowUpDraftTests.cs); [B:InterviewPrep](../../../../JobTrackerApi.Tests/InterviewPrepTests.cs) | [Seven sections EN/NB × light/dark desktop/phone](../p5-08b/README.md); [native readiness/manual limits](../p5-08b-readiness/README.md). Human AT/provider gaps retained. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Timezone/reload chains and provider delivery remain unverified; followMode-specific compose UI is deferred rather than implemented. | Workspace/mail/calendar owner; H — audit debrief/date/reload and metadata links; defer mode-specific compose UI under recorded decision. |
| **PRES-W11** — Reminder rules/actions/notifications, ICS and Google/Outlook events | `/reminders`, Settings rules, job Notes & tasks; [RemindersView](../../../../job-tracker-ui/src/components/RemindersView.tsx), [RulesSettingsCard](../../../../job-tracker-ui/src/components/RulesSettingsCard.tsx), [calendar actions](../../../../job-tracker-ui/src/components/ApplicationCalendarActions.tsx). Reminder/calendar links retained by [P5-01](../p5-01/README.md)/[P5-02](../p5-02/README.md), Dashboard and [P5-08b](../p5-08b/README.md); calendar/rules APIs unchanged. | [F:daily-control-loop](../../../../job-tracker-ui/src/daily-control-loop.test.tsx); [F:application-calendar](../../../../job-tracker-ui/src/application-calendar.test.tsx); [B:ApplicationCalendarController](../../../../JobTrackerApi.Tests/ApplicationCalendarControllerTests.cs); [B:RulesEngineProspect](../../../../JobTrackerApi.Tests/RulesEngineProspectTests.cs) | [Shell/notification entry](../p5-02/README.md); [workspace links](../p5-08b/README.md). Dedicated full calendar/worker responsive audit absent. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | F21 DST/date-only/provider timezone gap, actual Google/Outlook events, scheduler delivery and historical unconfirmed rules-save 500 remain open. | Calendar/API owner; H — investigate F21 DST/date-only semantics before event changes; audit real ICS/rules/reminder and approved provider writes. |
| **PRES-W12** — Async progress/failure/retry/cancel/notifications | `/operations`, Career processing and bell; [OperationsPage](../../../../job-tracker-ui/src/views/OperationsPage.tsx), [processing consumer](../../../../job-tracker-ui/src/views/CareerProfilePage.tsx). Operations remains reachable utility; progress/result/cancel/retry links retained by [P5-02](../p5-02/README.md)/[P5-08b](../p5-08b/README.md); store/worker unchanged. | [F:operations-page](../../../../job-tracker-ui/src/operations-page.test.tsx); [F:profile-page](../../../../job-tracker-ui/src/profile-page.test.tsx); [B:OperationsController](../../../../JobTrackerApi.Tests/OperationsControllerTests.cs); [B:UserOperationStore](../../../../JobTrackerApi.Tests/UserOperationStoreTests.cs) | [Shell/notification entry](../p5-02/README.md); [workspace links](../p5-08b/README.md). Dedicated full calendar/worker responsive audit absent. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Long disconnect/reconnect and F20 enabled worker fault containment remain operational gaps; no live job/worker recovery was certified. | Operations/worker owner; H — audit disconnect/reconnect/late-result/no-duplicate starts/cancel/retry; F20 recovery before enabling producers. |
| **PRES-C01** — Canonical structured career data and long-tail/custom sections | `/career?section=profile`; [CareerProfilePage](../../../../job-tracker-ui/src/views/CareerProfilePage.tsx), [structured sections](../../../../job-tracker-ui/src/views/career/CareerProfileSections.tsx). Career entry retained; canonical/source scope reviewed in [P5-10](../p5-10/README.md), [P5-12](../p5-12/README.md) and [AI readiness](../p5-13-readiness/README.md). | [F:profile-page](../../../../job-tracker-ui/src/profile-page.test.tsx); [B:CareerProfileController](../../../../JobTrackerApi.Tests/CareerProfileControllerTests.cs); [B:CareerProfileService](../../../../JobTrackerApi.Tests/CareerProfileServiceTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Full long-tail Career/mobile save and canonical concurrent updates remain separate; scoped CV acceptance never implies canonical-profile revision safety. | Career/API owner; H — audit every long-tail/custom field and mobile save/source isolation; canonical concurrent saves remain separate. |
| **PRES-C02** — Profile overview/completeness/import guidance/raw copy/history/restore | `/career`; [CareerWorkspacePage](../../../../job-tracker-ui/src/views/CareerWorkspacePage.tsx), [raw/history/import](../../../../job-tracker-ui/src/views/CareerProfilePage.tsx). Career overview/import/raw/history owner unchanged; source relation regression retained by [P5-10](../p5-10/README.md)/[P5-12](../p5-12/README.md). | [F:career-workspace-page](../../../../job-tracker-ui/src/career-workspace-page.test.tsx); [F:profile-page](../../../../job-tracker-ui/src/profile-page.test.tsx); [B:CareerProfileService](../../../../JobTrackerApi.Tests/CareerProfileServiceTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Clipboard/avatar and complete native profile historical restore/manual AT remain unverified; real extraction quality is separate. | Career owner; M — audit raw copy, overview/completeness/import guidance and full historical restore without silent data replacement. |
| **PRES-C03** — Upload/extract/rebuild/reprocess/diff/select/accept/discard/retry/cancel | Career import/review; [extraction/diff/review consumer](../../../../job-tracker-ui/src/views/CareerProfilePage.tsx). Entry only: existing Career upload/extraction/reprocess/diff/accept/discard/retry/cancel owners retained. | [F:profile-page](../../../../job-tracker-ui/src/profile-page.test.tsx); [B:ProfileCvController](../../../../JobTrackerApi.Tests/ProfileCvControllerTests.cs); [B:CvProfileDiffService](../../../../JobTrackerApi.Tests/CvProfileDiffServiceTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Unusual/scanned/OCR document quality and full low-confidence deselection/discard browser acceptance remain unverified; no provider certification. | Career/extraction owner; H — audit low-confidence deselect/discard/retry/cancel and corpus quality; approve provider calls separately. |
| **PRES-C04** — Evidence bank source/category/tags/add/list/delete | Career overview/evidence; [CareerEvidenceBank](../../../../job-tracker-ui/src/views/career/CareerEvidenceBank.tsx). Evidence-bank owner unchanged; job source relationships retained through [P5-08b](../p5-08b/README.md). | [F:career-evidence](../../../../job-tracker-ui/src/career-evidence.test.tsx); [B:CareerEvidenceController](../../../../JobTrackerApi.Tests/CareerEvidenceControllerTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Full delete/many-item search/keyboard browser acceptance remains open; broader Career page work stays Phase 7. | Career owner; M — audit evidence source/category/tags/delete and large-list keyboard/source navigation. |
| **PRES-C05** — CV library create/copy/delete/templates/share/publication/PDF | `/career/builder`; [CvBuilderPage](../../../../job-tracker-ui/src/views/CvBuilderPage.tsx), [template gallery](../../../../job-tracker-ui/src/components/CvTemplateGallery.tsx). Library/CRUD/public ownership retained; editor actions in [P5-09](../p5-09/README.md) and shared template gallery in [P5-12](../p5-12/README.md). | [F:cv-builder-page](../../../../job-tracker-ui/src/cv-builder-page.test.tsx); [F:cv-template-thumbnail](../../../../job-tracker-ui/src/cv-template-thumbnail.test.tsx); [B:CvBuilder](../../../../JobTrackerApi.Tests/CvBuilderTests.cs); [B:PublicCvController](../../../../JobTrackerApi.Tests/PublicCvControllerTests.cs) | [P5-09–12 CV evidence](../p5-12/README.md); [P5-14 four pairs, 320–1440/landscape, keyboard/pointer/emulated touch](../p5-14/README.md). Human/physical/zoom/production unaccepted. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Complete publish/unpublish/old-link revocation chain and every library/template combination remain unverified; library redesign is not claimed. | CV owner; H — audit create/copy/delete/gallery/share/publish/unpublish and old-public-link revocation; keep numeric/slug identity distinct. |
| **PRES-C06** — Studio tabs, preview debounce/pages/fit/save state/mobile panes | `/career/builder/:id`; [editor/preview owner](../../../../job-tracker-ui/src/views/CvBuilderEditor.tsx). Direct [P5-09](../p5-09/README.md) frame/navigation, [P5-11](../p5-11/README.md) live preview and [P5-12](../p5-12/README.md) controls; one save/preview/mobile owner. [P5-14 responsive/ownership successor](../p5-14/README.md) now supplements this record. | [F:cv-builder-deep-link](../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [B:CvBuilder](../../../../JobTrackerApi.Tests/CvBuilderTests.cs) | [P5-09–12 CV evidence](../p5-12/README.md); [P5-14 four pairs, 320–1440/landscape, keyboard/pointer/emulated touch](../p5-14/README.md). Human/physical/zoom/production unaccepted. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | P5-14 now supplies the integrated held-PUT pane/viewport, preview boundary-key/scroll, reachable return, canvas and hit-test successor. Physical touch/software keyboard, 200%/400% zoom, human AT, broader wrapped/short-height states and production rendering remain unaccepted. | CV/accessibility owner; H — retain P5-14 held-PUT/responsive/scroll checks; obtain physical touch/software keyboard/zoom/manual AT evidence. |
| **PRES-C07** — Visibility/order/custom sections and item/document overrides | Builder Content; [ContentTab/EntryEditor](../../../../job-tracker-ui/src/views/CvBuilderEditor.tsx), [useDragReorder](../../../../job-tracker-ui/src/hooks/useDragReorder.ts). Direct [P5-10](../p5-10/README.md) source/item/custom editing and [P5-12](../p5-12/README.md) settings retention; explicit reset/inclusion/order retained. [P5-14 responsive/ownership successor](../p5-14/README.md) now supplements this record. | [F:cv-builder-deep-link](../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [F:cvBuilder](../../../../job-tracker-ui/src/cvBuilder.test.ts); [B:CvBuilder](../../../../JobTrackerApi.Tests/CvBuilderTests.cs) | [P5-09–12 CV evidence](../p5-12/README.md); [P5-14 four pairs, 320–1440/landscape, keyboard/pointer/emulated touch](../p5-14/README.md). Human/physical/zoom/production unaccepted. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | P5-14 closes P5-10-O01 only for tested ownership/default-drop cases: entry/section order, inactive nested lists and foreign editable-title non-mutation. Physical touch/text selection/all-browser gestures and exhaustive saved override/reset combinations remain unqualified. | CV/accessibility owner; H — retain tested native nested ownership/default-drop checks; audit physical touch/text selection/all-browser overrides before broader claim. |
| **PRES-C08** — Capability-aware templates/typography/color/header/skills/sidebar/photo | Builder Template/Customize; [CvCustomizeTab](../../../../job-tracker-ui/src/components/cv/CvCustomizeTab.tsx), [gallery](../../../../job-tracker-ui/src/components/CvTemplateGallery.tsx). Direct [P5-12](../p5-12/README.md) nine-template capability/control presentation and [P5-11](../p5-11/README.md) preview; renderer/template IDs retained. | [F:cv-builder-deep-link](../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [F:cvBuilder](../../../../job-tracker-ui/src/cvBuilder.test.ts); [B:CvBuilder](../../../../JobTrackerApi.Tests/CvBuilderTests.cs) | [P5-09–12 CV evidence](../p5-12/README.md); [P5-14 four pairs, 320–1440/landscape, keyboard/pointer/emulated touch](../p5-14/README.md). Human/physical/zoom/production unaccepted. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | All-template/font/photo/wrapped-line/browser/control combinations and broad custom-colour/manual AT remain unverified; finite capability matrix and Pro locks are not exhaustive. | CV/renderer owner; M — audit capability controls/locks and broader font/photo/wrapped text; manual custom-colour names and contrast. |
| **PRES-C09** — A4/Letter/density/margins/dates/document locale/section presentation | Builder Customize/Content; [document settings](../../../../job-tracker-ui/src/components/cv/CvCustomizeTab.tsx), [settings client](../../../../job-tracker-ui/src/cvBuilder.ts). Direct [P5-12](../p5-12/README.md) A4/Letter/density/margin/date/language/columns controls; [pagination repair](../p5-09-pagination-readiness/README.md) retained. | [F:cvBuilder](../../../../job-tracker-ui/src/cvBuilder.test.ts); [F:cv-builder-deep-link](../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [B:CvBuilder](../../../../JobTrackerApi.Tests/CvBuilderTests.cs) | [P5-09–12 CV evidence](../p5-12/README.md); [P5-14 four pairs, 320–1440/landscape, keyboard/pointer/emulated touch](../p5-14/README.md). Human/physical/zoom/production unaccepted. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Recorded unchanged-tolerance local fidelity supersedes prior six-fixture failures; all advanced combinations, deployment fonts/photo/wrapped text and manual print inspection remain open. | CV/renderer owner; H — retain unchanged numerical oracle/settings exports; audit advanced locale/layout combinations and actual deployed print/fonts. |
| **PRES-C10** — Undo/redo, save queue, dirty guard, history restore/preview lifecycle | Builder save/undo/history; [single editor/history owner](../../../../job-tracker-ui/src/views/CvBuilderEditor.tsx). Existing save/undo/history owner retained in [P5-09](../p5-09/README.md)–[P5-12](../p5-12/README.md); [CV revision protocol](../p5-09-readiness/README.md) and stale AI guard retained. [P5-14 responsive/ownership successor](../p5-14/README.md) now supplements this record. | [F:cv-builder-deep-link](../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [B:CvBuilder](../../../../JobTrackerApi.Tests/CvBuilderTests.cs) | [P5-09–12 CV evidence](../p5-12/README.md); [P5-14 four pairs, 320–1440/landscape, keyboard/pointer/emulated touch](../p5-14/README.md). Human/physical/zoom/production unaccepted. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | CV stale-write/history safety has scoped native evidence; long offline/history combinations and profile/job concurrent edits remain separate. No new save owner or history store. | CV/API owner; H — audit long offline/history/conflict/undo/dirty transitions; retain downloadable draft and one save/history owner. |
| **PRES-C11** — Section and whole-document AI improve/translate/instruction/grammar review | Builder section/AI Tools; [AiSectionAssistant](../../../../job-tracker-ui/src/components/cv/AiSectionAssistant.tsx), [DocumentAiTab](../../../../job-tracker-ui/src/views/CvBuilderEditor.tsx); [Production service guard](../../../../JobTrackerApi/Program.cs). Retained existing section/document assistant affordances; [current Production service withholding](../../../../JobTrackerApi/Program.cs) and [validated historical exception](../release-readiness/README.md). P5-13 review UI remains unimplemented. | [F:ai-section-assistant](../../../../job-tracker-ui/src/ai-section-assistant.test.tsx); [F:cv-builder-deep-link](../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [B:AiWorkspace](../../../../JobTrackerApi.Tests/AiWorkspaceTests.cs); [B:AiPrivacyPolicy](../../../../JobTrackerApi.Tests/AiPrivacyPolicyTests.cs) ; [Production no-write checks](../../../../JobTrackerApi.Tests/CvAiReadinessTests.cs), [isolated HTTP contract](../../../../job-tracker-ui/ai-tests/cv-ai-readiness.spec.ts) | [Deterministic readiness only](../p5-13-readiness/README.md); [P5-14 exclusion](../p5-14/README.md). No qualified or responsive AI-review visual journey. | **DEFERRED** | **DEFERRED**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Full CV rewriting/review remains DEFERRED — BLOCKED / NOT QUALIFIED: deployed model identity unverified; frozen 32-case/366-call qualification has 0 completed calls and 0 human reviews; factuality unmeasured; P5-13 review UI unimplemented. Current Production guard returns 503 cv_ai_unavailable; safe withholding is an exception, not successful generation/review. Existing assistant affordances can report unavailable. | AI/CV/product owner; H — meet frozen model identity/corpus/rubric/human review and review-UI return conditions; retain Production 503/no-write/unrelated-AI checks. |
| **PRES-C12** — Private PDF and published anonymous CV/PDF, long searchable pages | Private builder export and `/cv/:slug`; [private export client](../../../../job-tracker-ui/src/cvBuilder.ts), [PublicCvPage](../../../../job-tracker-ui/src/views/PublicCvPage.tsx). Private/public PDF ownership and shared admission retained through [P5-11](../p5-11/README.md)/[P5-12](../p5-12/README.md); native preview/PDF corpus unchanged. | [F:public-cv-page](../../../../job-tracker-ui/src/public-cv-page.test.tsx); [B:PublicCvController](../../../../JobTrackerApi.Tests/PublicCvControllerTests.cs); [B:PdfRenderAdmission](../../../../JobTrackerApi.Tests/PdfRenderAdmissionTests.cs) | [P5-09–12 CV evidence](../p5-12/README.md); [P5-14 four pairs, 320–1440/landscape, keyboard/pointer/emulated touch](../p5-14/README.md). Human/physical/zoom/production unaccepted. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | P5-14 retains unchanged 16-fixture/36-page native preview/PDF and 8-settings/24-page export historical proof at unchanged tolerances. This is finite local evidence; deployed Chromium/Linux/fonts/photo/all-print-engine and manual print inspection remain unverified. | CV/rendering/release owner; H — audit public revoke/private denial/PDF busy recovery and deployed Linux/fonts/photos/manual print; preserve admission. |
| **PRES-M01** — Job-scoped manual correspondence/search/delete/paste import | Job Timeline/Correspondence; [Correspondence](../../../../job-tracker-ui/src/components/Correspondence.tsx). Existing job manual correspondence/search/import/delete owner recomposed by [P5-08b](../p5-08b/README.md); global entry retained. | [F:end-to-end-trust-loop](../../../../job-tracker-ui/src/end-to-end-trust-loop.test.tsx); [F:correspondence-search-context](../../../../job-tracker-ui/src/correspondence-search-context.test.ts); [B:CorrespondenceController](../../../../JobTrackerApi.Tests/CorrespondenceControllerTests.cs) | [Workspace correspondence entry](../p5-08b/README.md). Full mail/provider/mobile AT absent. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Full manual edit/delete/paste-import browser combinations and manual AT remain unverified; logging correspondence is not sending mail. | Mail/workspace owner; H — audit native log CRUD/search/paste import and no-send distinction. |
| **PRES-M02** — Gmail candidate/thread import/refresh/sync/unlink/relink/move | Job Timeline/Correspondence Gmail tools; [Correspondence](../../../../job-tracker-ui/src/components/Correspondence.tsx). Existing job Gmail candidate/thread/import/sync/move/unlink owners recomposed by [P5-08b](../p5-08b/README.md); provider/API behavior unchanged. | [F:correspondence-gmail-import](../../../../job-tracker-ui/src/correspondence-gmail-import.test.tsx); [B:GmailController](../../../../JobTrackerApi.Tests/GmailControllerTests.cs); [B:EmailOwnershipIntegration](../../../../JobTrackerApi.Tests/EmailOwnershipIntegrationTests.cs) | [Workspace correspondence entry](../p5-08b/README.md). Full mail/provider/mobile AT absent. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Live provider threads, multi-account reconnect/revoked grants and sync failures remain unverified. | Mail/provider owner; H — audit owned thread/job link/move/unlink/reconnect and approved live sync failures. |
| **PRES-M03** — Global inbox filters/page/provider/link/direction/detail/source links | `/correspondence`; [CorrespondenceInboxPage](../../../../job-tracker-ui/src/views/CorrespondenceInboxPage.tsx). Entry only via [P5-01](../p5-01/README.md); global inbox filters/page/provider/detail/source owners unchanged. | [F:correspondence-inbox-page](../../../../job-tracker-ui/src/correspondence-inbox-page.test.tsx); [B:EmailController](../../../../JobTrackerApi.Tests/EmailControllerTests.cs); [B:EmailOwnershipIntegration](../../../../JobTrackerApi.Tests/EmailOwnershipIntegrationTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Real large-mailbox/attachment-binary flows and complete native inbox/AT acceptance remain open; global inbox redesign stays Phase 7. | Mail owner; H — audit large native inbox paging/provider failure/detail/attachment binaries and manual AT. |
| **PRES-M04** — Compose/reply/provider/recipient/job; draft conflicts; confirm send/uncertainty | `/correspondence` Drafts/Compose; [draft/send owner](../../../../job-tracker-ui/src/views/CorrespondenceInboxPage.tsx). Compose/reply/revision/send/uncertainty owner unchanged; [P5-08b](../p5-08b/README.md) navigation regression only. | [F:correspondence-inbox-page](../../../../job-tracker-ui/src/correspondence-inbox-page.test.tsx); [B:EmailDraftsController](../../../../JobTrackerApi.Tests/EmailDraftsControllerTests.cs); [B:EmailDraftPersistence](../../../../JobTrackerApi.Tests/EmailDraftPersistenceTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Actual sandbox mail delivery/reconnect and every dirty/send interruption remain unverified; no automatic uncertain-send retry. followMode-specific UI remains deferred. | Mail/API owner; H — audit draft conflicts, explicit send/uncertain-new-attempt, reconnect/dirty interruption; followMode UI deferred, no automatic resend. |
| **PRES-M05** — Review proposed jobs/link/reject/keep/notes/sync/create | `/correspondence?view=review`, review alias; [GmailReviewPage](../../../../job-tracker-ui/src/views/GmailReviewPage.tsx), [inbox view adapter](../../../../job-tracker-ui/src/views/CorrespondenceInboxPage.tsx). Review alias and inbox entry retained in [P5-01](../p5-01/README.md)/[P5-08b](../p5-08b/README.md); reviewed decisions/create owner unchanged. | [F:gmail-review-page](../../../../job-tracker-ui/src/gmail-review-page.test.tsx); [F:correspondence-inbox-page](../../../../job-tracker-ui/src/correspondence-inbox-page.test.tsx); [B:GmailController](../../../../JobTrackerApi.Tests/GmailControllerTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Real provider review and complete suggested-job creation browser journey remain unverified; no automatic creation from navigation. | Mail/capture owner; H — audit review alias, proposed-job/link/reject/keep/notes/sync/create confirmation and owner boundaries. |
| **PRES-M06** — Gmail/Graph/IMAP connect/status/disconnect separate from sign-in | `/settings/connected-accounts`; [ConnectedAccountsPage](../../../../job-tracker-ui/src/views/ConnectedAccountsPage.tsx), [provider connections](../../../../job-tracker-ui/src/components/EmailProviderConnections.tsx). Connections entry retained in [P5-01](../p5-01/README.md)/[P5-02](../p5-02/README.md); existing Gmail/Graph/IMAP controls separate from sign-in. | [F:email-provider-connections](../../../../job-tracker-ui/src/email-provider-connections.test.tsx); [B:MicrosoftGraphController](../../../../JobTrackerApi.Tests/MicrosoftGraphControllerTests.cs); [B:ImapController](../../../../JobTrackerApi.Tests/ImapControllerTests.cs) | [Inherited Settings loaded/mobile review](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [shell entry](../p5-01/README.md). No full current domain requalification. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Actual provider authorization/revocation/token expiry/reconnect remain unverified; no credentials or live provider operations in this review. | Connections/provider owner; H — audit actual grants/revoke/expiry/reconnect and IMAP safety; provider sandbox authorization required. |
| **PRES-S01** — Personal metrics/activity/funnel/company/skills/stage/salary/next actions | `/dashboard`, added `/analytics`; [shared reports owner](../../../../job-tracker-ui/src/components/DashboardView.tsx), [AnalyticsPage](../../../../job-tracker-ui/src/views/AnalyticsPage.tsx). Direct accurate report labels/cohorts in [P5-06](../p5-06/README.md) and meaningful [P5-07 Analytics](../p5-07/README.md); existing server facts retained. | [F:daily-control-loop](../../../../job-tracker-ui/src/daily-control-loop.test.tsx); [F:workflow-trust-signals](../../../../job-tracker-ui/src/workflow-trust-signals.test.tsx); [B:StageAnalytics](../../../../JobTrackerApi.Tests/StageAnalyticsTests.cs); [B:AnalyticsSalary](../../../../JobTrackerApi.Tests/AnalyticsSalaryTests.cs) | [Dashboard](../p5-06/README.md), [Analytics](../p5-07/README.md) four pairs/narrow/exact-value states; [utilities](../p5-02/README.md). Human AT open. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Scoped native chart/value/population transformations supersede earlier unmapped chart gaps; server timezone/date/population limits and unsupported NEW metrics remain explicit. | Reports/API owner; M — audit exact cohort/sample/date definitions and drill-down links; retain unsupported-metric boundaries. |
| **PRES-S02** — Owner-local five visibility preferences/onboarding dismiss/notifications | Dashboard visibility/onboarding and bell; [five local flags](../../../../job-tracker-ui/src/components/DashboardView.tsx), [OnboardingChecklist](../../../../job-tracker-ui/src/components/OnboardingChecklist.tsx), [NotificationsPopover](../../../../job-tracker-ui/src/components/NotificationsPopover.tsx). Direct [P5-02](../p5-02/README.md) notifications and [P5-06](../p5-06/README.md) five owner-local Dashboard flags/onboarding; Analytics independent. | [F:onboarding-checklist](../../../../job-tracker-ui/src/onboarding-checklist.test.tsx); [F:notifications-popover](../../../../job-tracker-ui/src/notifications-popover.test.tsx); [B:JobLifecycleEvent](../../../../JobTrackerApi.Tests/JobLifecycleEventTests.cs) | [Dashboard](../p5-06/README.md), [Analytics](../p5-07/README.md) four pairs/narrow/exact-value states; [utilities](../p5-02/README.md). Human AT open. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Five owner-local Dashboard visibility flags and scoped reload/account evidence remain; order/resize/reset is deferred. Recorded P5-06-O01 generic language-preference 500 during overlapping Dashboard/setup reads has no established exception/root cause; sequential fixture setup does not close concurrent save reliability. | Dashboard/shell/identity owner; H — investigate recorded P5-06-O01 language-save 500 during reads; audit five flags A/B/reload plus bell/onboarding; order/resize/reset deferred. |
| **PRES-S03** — Rules/reminder/table/theme/language preferences and account links | Settings tabs/mobile selector and shell preferences; [SettingsView](../../../../job-tracker-ui/src/components/SettingsView.tsx), [rules](../../../../job-tracker-ui/src/components/RulesSettingsCard.tsx), [language save](../../../../job-tracker-ui/src/i18n/I18nProvider.tsx). P4 Settings controls retained; [P5-00](../p5-00/README.md) feedback/shared tokens and [P5-03](../p5-03/README.md)/[P5-04b](../p5-04b/README.md) table preferences integration. | [F:settings-view](../../../../job-tracker-ui/src/settings-view.test.tsx); [F:theme-state](../../../../job-tracker-ui/src/theme-state.test.tsx); [B:NotificationSettingsController](../../../../JobTrackerApi.Tests/NotificationSettingsControllerTests.cs); [B:RulesEngineProspect](../../../../JobTrackerApi.Tests/RulesEngineProspectTests.cs) | [Inherited Settings loaded/mobile review](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [shell entry](../p5-01/README.md). No full current domain requalification. | **PARTIAL** | **FAIL**; [01 evidence](p5-15-01/PRES_RESULTS.md) |**Fresh01:** SETTINGS-01 unsaved tab-draft loss; [register](p5-15-01/DEFECTS.md). P4-04-O02 recorded SQLite notification saves had 2/10 HTTP 500/database-locked attempts; isolated rules 500 remains unconfirmed. P5-06-O01 language-preference 500 and rule drafts lost on tab unmount stay open; sequential success does not establish concurrency safety. | Settings/API/identity owner; H — investigate P4-04-O02 concurrent notification 500 and P5-06-O01 language-save 500; audit rule draft/tab lifecycle, unknown route/preferences. |
| **PRES-S04** — AI privacy/usage/limits/Free-Pro/server entitlement/conditional billing | Settings AI/plan and domain locks; [privacy](../../../../job-tracker-ui/src/components/AiPrivacySettingsCard.tsx), [usage](../../../../job-tracker-ui/src/components/AiUsageCard.tsx), [AccountPlanProvider](../../../../job-tracker-ui/src/accountPlan.tsx). Existing privacy/usage/entitlements/billing readiness retained; deterministic AI metering in [readiness](../p5-13-readiness/README.md); Production CV review exception only. | [F:settings-view](../../../../job-tracker-ui/src/settings-view.test.tsx); [F:ai-usage-card](../../../../job-tracker-ui/src/ai-usage-card.test.tsx); [B:AiPrivacyPolicy](../../../../JobTrackerApi.Tests/AiPrivacyPolicyTests.cs); [B:AiUsageMeter](../../../../JobTrackerApi.Tests/AiUsageMeterTests.cs) | [Inherited Settings loaded/mobile review](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [shell entry](../p5-01/README.md). No full current domain requalification. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Actual checkout/webhooks/portal and provider consent/delivery remain unverified. Production CV unavailability is temporary authorized P5-13 debt, not fulfillment or disabling other AI. | AI/commerce/API owner; H — retain entitlement/privacy/metering and bounded Production CV exception; separately prove checkout/webhooks/portal before activation. |
| **PRES-S05** — Account ZIP/encrypted backup/lifecycle/deletion confirmations | Settings Backup; [BackupCard](../../../../job-tracker-ui/src/components/BackupCard.tsx). Account ZIP/backup/deletion controls and independent saves retained; [P5-00](../p5-00/README.md) feedback clearance and [native package/ZIP evidence](../p5-08b-readiness/README.md). | [F:account-data-export](../../../../job-tracker-ui/src/account-data-export.test.tsx); [B:AccountDataExport](../../../../JobTrackerApi.Tests/AccountDataExportTests.cs); [B:BackupController](../../../../JobTrackerApi.Tests/BackupControllerTests.cs) | [Inherited Settings loaded/mobile review](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [shell entry](../p5-01/README.md). No full current domain requalification. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Actual database/account restore, verified recoverable backups, paid deletion/provider cancellation and rollback remain production release gates; no destructive rehearsal occurred. | Account lifecycle/release owner; H — audit exact confirmations/ZIP/backup gates; current recoverable restore/paid deletion/provider cancellation/rollback require authorized rehearsal. |
| **PRES-A01** — Admin user/create/roles/reset/delete/last-admin/self guards | `/admin/users`; [AdminUsersPage](../../../../job-tracker-ui/src/views/AdminUsersPage.tsx). Admin Users route/entry retained by [P5-01](../p5-01/README.md); server authorization/last-admin/self guards unchanged. | [F:admin-users-page](../../../../job-tracker-ui/src/admin-users-page.test.tsx); [B:UsersController](../../../../JobTrackerApi.Tests/UsersControllerTests.cs); [B:ApiAuthorizationPosture](../../../../JobTrackerApi.Tests/ApiAuthorizationPostureTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Mounted-view role revocation, full mutations and actual reset delivery remain unverified; hidden nav/synthetic shell never proves authorization. | Admin/identity owner; H — audit full guarded mutations, mounted-role revoke and real reset; crafted API denial remains mandatory. |
| **PRES-A02** — Audit list/detail/supported undo/job restore | `/admin/audit`; [AdminAuditPage](../../../../job-tracker-ui/src/views/AdminAuditPage.tsx). Admin Audit route/entry retained by [P5-01](../p5-01/README.md); supported server undo/restore owner unchanged. | [F:admin-audit-page](../../../../job-tracker-ui/src/admin-audit-page.test.tsx); [B:AuthAndSystemController](../../../../JobTrackerApi.Tests/AuthAndSystemControllerTests.cs); [B:ApiAuthorizationPosture](../../../../JobTrackerApi.Tests/ApiAuthorizationPostureTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Complete successful native undo/job restore browser acceptance remains open; role posture is not undo behavior proof. | Admin/API owner; H — audit persisted successful undo/job restore, unsupported actions and non-admin denial. |
| **PRES-A03** — System/build/DB/AI/mail/SMTP/test/probe/benchmark/maintenance | `/admin/system` and admin badge; [AdminSystemPage](../../../../job-tracker-ui/src/views/AdminSystemPage.tsx), [metadata disclosure](../../../../job-tracker-ui/src/layout/AppShell.tsx). Admin System route/entry/build metadata retained in [P5-00](../p5-00/README.md)/[P5-01](../p5-01/README.md); diagnostics/maintenance owner unchanged. | [F:admin-system-page](../../../../job-tracker-ui/src/admin-system-page.test.tsx); [B:AuthAndSystemController](../../../../JobTrackerApi.Tests/AuthAndSystemControllerTests.cs); [B:MaintenanceJobDispatcher](../../../../JobTrackerApi.Tests/MaintenanceJobDispatcherTests.cs) | [Inherited P4 visual/manual limits](../../phase-4/p4-06/PRESERVATION_ACCEPTANCE.md); [P5-01 moved entry](../p5-01/README.md). No dedicated full-group current EN/NB responsive sign-off. | **PARTIAL** | **PARTIAL**; [01 evidence](p5-15-01/PRES_RESULTS.md) | Actual production SMTP/model/probes/benchmark/maintenance and sensitive-output qualification remain unverified; no live jobs launched. | Admin/operations owner; H — audit metadata/diagnostic sensitive outputs and guarded controls; production SMTP/model/maintenance proof separately authorized. |
## Source disagreements resolved without closing acceptance
+18 -1
View File
@@ -1,4 +1,21 @@
# P5-15-00 — Phase 5 final acceptance planning
# P5-15 — Phase 5 final acceptance
## Current checkpoint: P5-15-01 functional/preservation audit
**NO-GO for P5-15-02 under its current entry criteria; Production remains NO-GO. Phase5 is not complete.** Audit from `932b962b9038ddb5ad59b982c0199475bfb50454` on the development branch,2026-10-09. [Final01 report](p5-15-01/README.md), [all57 before/after results](p5-15-01/PRES_RESULTS.md), [32-route native census](p5-15-01/ROUTE_RESULTS.md), [journeys/control limits](p5-15-01/JOURNEYS_AND_CONTROLS.md) and [defects](p5-15-01/DEFECTS.md) supersede the **verification status**, not the original contracts or historical evidence, below.
Exact current PRES totals: **0PASS /53PARTIAL /3FAIL /1DEFERRED /0BLOCKED /0NOT VERIFIED =57**. FAIL:E02 sign-in return query loss;J02 saved-search SQLite read500/silent empty list;S03 unsaved Rules draft loss on tab change. These are current native failures, not56 assumed defects or an assertion that the audit introduced them. Other groups retain evidenced sub-behaviors plus explicit long-tail/human/provider gaps.
All32patterns reached expected entry/refresh states for three identities (**192observations**);188route observations satisfy all asserted conditions/4fail on Discover. Of98selected native GET observations,94meet expected statuses/4fail;94route observations have no selected GET. Broader route workflow disposition30PARTIAL/2FAIL includes Login query return. A route/header is not full workflow acceptance. P1 DISCOVERY-01 blocks dependent progression until a separately authorized, individually pushed owner repair/native regression. P2 AUTH-01/SETTINGS-01 need their own remediation dispositions. No repair is hidden in01.
Fresh baseline: **backend1,023;frontend459/82suites;117inherited browser cases all pass**. Five new ordinary audit cases yield2pass/3genuine failures after harness correction: **latest unique result119pass/3fail/122**, combined across declared full/owning-suite runs. Separate preference diagnostics1pass/1fail. Sidecar49;focusedAI108/revision5(backend subsets);realHTTP2;security/config9/6/1/3;standard fidelity16/16,36=36;settings8/8,24=24. Builds/type/lint green. [Fresh reports](p5-15-01/README.md#fresh-validation-and-count-reconciliation) retain failures/provenance; no skip/expected-failure masking. P2-D01 remains an ordinary pass.
Three concurrent language/notification save rounds persist/reload successfully; prior intermittent500 **not reproduced, still OPEN**. Five Dashboard visibility flags are owner-local, not that failing server-language path. Fresh242axe scans have0violations and**1,834incomplete node occurrences**; neither incomplete nor unperformed human/device checks are passes. Production backup/restore/F04/config-schema-secrets/rollback remain unverified release blockers. P5-13 remains deferred,unqualified,Production-withheld,0/366calls/0human reviews/UIunimplemented; no qualification/Docker/UI work occurs. No application/CI/schema/config or `main` change/deployment occurs.
Every completed01logical unit is independently committed/pushed; see [checkpoint ledger](p5-15-01/README.md#immediate-commitpush-ledger). Stop before02/P5-13/B07/production. The following00material remains the original planning record; its inherited-only baseline and future wording do not override01's fresh failures/results.
## P5-15-00 — Historical acceptance-planning checkpoint
**Planning only — Phase 5 is not complete; Production remains NO-GO.** Reviewed 2026-10-09 from `46a0c0c6d23464869f50c0d88552963c29cfdacf` on `codex/ui-redesign-phase4`. Actual production branch is `main`, with automatic deployment on push; its inspected revision is `27657f31131cd95d42f0e1290853ec9c9b3959a4`. No application/test/CI/schema/configuration changes, deployment, production access, provider qualification, Docker recovery, P5-13 UI or B07 work belongs to this checkpoint.
@@ -0,0 +1,77 @@
# P5-15-01 functional defect register
Audit source `932b962b9038ddb5ad59b982c0199475bfb50454`. Findings use synthetic accounts and disposable local data; no production account, provider or infrastructure is exercised. An audit finding is not automatically a regression introduced by Phase 5. Application source is unchanged here; neither source inspection nor an InMemory pass can override a native failure.
P0 means serious security/data loss; P1 an important broken workflow; P2 limited/recoverable functional failure; P3 minor inconsistency. Missing evidence is a gap, not a defect. The original [debt register](../READINESS_DEBT.md) remains authoritative for separately carried items. This register assigns concrete remediation; it does not authorize or perform it.
## P5-15-01-DISCOVERY-01 — Saved-search listing fails on SQLite
**Confirmed P1 / OPEN.** PRES-J02; `/discover`; `GET /api/job-discovery/saved-searches`. Current local SQLite workflow is NO-GO. Production release remains blocked until the supported/provider-specific path is verified and repaired as appropriate; a SQLite exception is not proof of the deployed MariaDB result.
| Field | Evidence-based finding |
|---|---|
| Expected | List the authenticated owner's saved searches, newest update first, with retained result counts and run/pause/delete/dismiss access; an empty account returns an empty successful list |
| Actual | Real normal and admin route entry return HTTP 500, including an empty account. `JobDiscoveryPage` catches the load error without feedback and leaves the list empty |
| Reproduce | Use the ordinary Playwright disposable Development/SQLite server; log in with a synthetic normal or admin account; open `/discover`; observe the genuine saved-search GET. The added native route census asserts success and retains the failure |
| Native evidence | [Installed-provider proof](evidence/discovery-failure.json) fingerprints the initially collected HTTP/translation evidence; [final census](evidence/browser-summary.json) preserves all 192 observations, repeated normal/admin entry+refresh500s and current failure-trace fingerprints. Intermediate trace paths may have been replaced by later owning-suite runs; historical fingerprints are collection-time evidence. No NAV request is needed |
| Root cause | Current `ListSavedSearches` orders unconverted `DateTimeOffset UpdatedAtUtc`. Installed EF Core SQLite rejects that `ORDER BY` during translation. An ignored translation-only harness reproduces the exact exception with the database connection **Closed** |
| Coverage gap | Existing discovery/saved-alert controller tests pass using EF InMemory; existing SQLite compatibility cases do not cover this query. The responsive discovery browser fixture substitutes search/import responses and does not prove saved-search persistence |
| User impact | Persisted searches and their controls cannot be recovered through the list on refresh; a successful current-session creation is insufficient. Search results from NAV are a separate capability |
| Data/security impact | No demonstrated deletion, corrupted stored rows, owner bypass or cross-account disclosure. The failure precedes SQL execution; availability and silent feedback are the demonstrated defects |
| Proposed repair | Backend discovery owner: reuse the existing provider-compatible ordered-read pattern while retaining owner filtering, result relationships, cancellation and DTO semantics; report load failure/retry without presenting it as an empty list |
| Required regression | Real disposable SQLite: empty list; two dated owned searches plus foreign search; exact descending owned IDs/counts; native normal/admin entry+refresh; prove no provider call. Verify deployed provider separately |
| Checkpoint | Independently scoped P5-15-04 remediation, before accepting the affected workflow. No repair is rolled into this audit |
| Provenance | The controller/model/consumer and test sources match the audit checkpoint. No evidence establishes which earlier release introduced it; do not label it a new redesign regression |
## P5-15-01-AUTH-01 — Login drops protected deep-link query state
**Confirmed P2 / OPEN.** PRES-E02/E07 route continuity; representative `/analytics?months=6` → public entry → login. This recoverable context failure does not grant permissions or lose saved application content.
| Field | Evidence-based finding |
|---|---|
| Expected | After successful login, return to the requested safe local destination with its meaningful query state; the requested six-month Analytics period remains selected |
| Actual | Browser reaches `/analytics` without `months=6`; the default period replaces the requested period. The desired-state regression remains failed, never marked expected or skipped |
| Reproduce | Anonymous browser opens `/analytics?months=6`; use landing Sign in; authenticate a synthetic account; inspect destination and period control |
| Root cause | `App` saves `location.pathname` as `state.from`; Landing forwards it and Login validates/navigates that path. Search/hash are already absent before Login receives it |
| Evidence | Added anonymous native census completes the route-entry/refresh checks, then fails the exact post-login URL assertion. Source characterization agrees with the earlier [route plan](../ROUTE_ACCEPTANCE.md#query-state-and-alias-behavior-to-audit) |
| User impact | User must reconstruct the requested reporting context. The same auth-guard source also creates a risk for other query-addressed workflows, but this audit does not claim native failures for every possible query |
| Data/security impact | No demonstrated tenant bypass, unsafe external redirect, record mutation or content loss; retain safe-local-target validation in any repair |
| Proposed repair | Identity/shell owner: preserve the intended safe local pathname/search/hash at the existing auth boundary; retain state/permission/invalidation rules |
| Required regression | Anonymous→login and expired-session return to Analytics period and owned Job section/Jobs filter; reject unsafe/external targets; maintain Back/Forward and account disposal |
| Checkpoint | Separate bounded P5-15-04 repair. Do not change auth/application behavior in this audit |
| Provenance | This path-only limitation was explicitly recorded during P5-15-00; native reproduction confirms the debt, not a newly introduced audit regression |
## P5-15-01-SETTINGS-01 — Unsaved Rules draft disappears on tab change
**Confirmed P2 / OPEN.** PRES-S03; `/settings` Follow-ups→Notifications→Follow-ups. The original preservation ledger already recorded this risk; native execution now establishes the failure. This is silent loss of an in-progress edit, not deletion or corruption of persisted rules.
| Field | Evidence-based finding |
|---|---|
| Expected | An unsaved rule draft survives ordinary settings-tab navigation, or the user receives a deliberate dirty-state warning before discarding it |
| Actual | The rule starts at 14; user edits it to 5; tab round trip displays 14 without warning. API readback remains 14, with zero rule writes |
| Reproduce | Sign in with disposable synthetic account; open Settings→Follow-ups; change Applied follow-up days to 5; open Notifications; return to Follow-ups without Save |
| Evidence | Separate native `preferences.spec.ts` desired-behavior case fails; [browser summary](evidence/browser-summary.json) records original/draft/displayed/readback values, zero writes, HTTP200 and failure evidence fingerprints |
| Root cause | Inactive `SettingsView.TabPanel` returns `null`; `RulesSettingsCard` owns draft state locally. Unmount loses the draft, and remount reloads the persisted rules |
| Coverage gap | Existing native Settings fixture edits across widths while mounted, **saves**, then changes tabs; it never protects an unsaved tab round trip |
| User impact | User must re-enter edits and may assume they saved or retained them. No demonstrated persisted-record loss, duplicate write, revision corruption or account leakage |
| Proposed repair | Settings owner: retain the draft at the existing settings owner or use the established dirty-navigation contract. Preserve per-section Save/API semantics and do not invent autosave |
| Regression required | Unsaved tab and mobile-section round trip, explicit Save/reload, failure/retry and intentional discard; no accidental rule write merely from navigation |
| Checkpoint | Separate bounded P5-15-04 remediation; no application fix is performed in this audit |
## Carried findings and bounded native diagnosis
The two standalone [preference diagnostics](diagnostics/README.md) assert intended behavior without success mocks, expected-failure flags or retries. Their actual outcomes belong in the final audit evidence; discovery of a 500 must not be normalized into a pass. Initial config-start and locator mistakes are harness errors, separately retained, not application defects.
| Item | Current disposition / required action |
|---|---|
| Unsaved Rules draft on tab change | Confirmed P2 SETTINGS-01 above; native failure is not normalized into a pass |
| Language/notification preference writes | Three native overlap rounds succeeded, including six writes, twelve concurrent reads, persisted readback and reload. Historical language PUT500 and notification SQLite/concurrency failures remain open; **not reproduced in this bounded run** is not fixed. No cause for the historical language500 is established; overlapping Identity writes remain a hypothesis |
| Company modal failure feedback; command/attachment initial focus races | Earlier finite failure observations remain open. Current passing keyboard/modal fixtures do not prove the historical race or outside-modal feedback debt closed; P5-15-02 triage and 04 owner repair as needed |
| Board scaling and physical touch | Finite 250-ID parity is functional evidence only; full-result memory/request/DOM growth and real device drag remain unqualified. No arbitrary capacity threshold is invented |
| CV production fonts/photos; actual assistive technology and software keyboard | Verification gaps; not demonstrated functional failures. P5-15-02/03 and named human/device/operator evidence required |
| P5-13 and `followMode` compose UI | Approved deferrals, not accidental dead controls. P5-13 remains unqualified/Production-withheld; metadata-only followMode survives the current route contract |
| F04, current backup/restore, production config/schema/keys and rollback | Existing release blockers remain NOT VERIFIED. No deployment/production checks or `main` push are performed here |
**No P0 is demonstrated by the collected evidence.** That is a bounded finding, not an exhaustive security certification. P1 saved-search verification/acceptance and dependent activity remain blocked pending a separate repair; independent audit evidence can still be collected safely.
Confirmed finding totals: **P0 0 / P1 1 / P2 2 / P3 0**. These are three distinct failures, not the same count as failing browser cases: normal/admin cases share DISCOVERY-01; AUTH-01 occupies the anonymous case; SETTINGS-01 is a separate diagnostic. Carried failures/evidence gaps are additional debt, not silently closed or counted as newly reproduced defects.
@@ -0,0 +1,40 @@
# Native journeys, actionable controls and evidence limits
Source `932b962b9038ddb5ad59b982c0199475bfb50454`; unchanged application. This record distinguishes current browser/API execution from fixture presentation and source review. The full original behaviors and remaining requirements remain in [PRES_RESULTS](PRES_RESULTS.md). A route header, HTTP 200 or component render alone does not establish a completed workflow.
The fresh full browser report runs every inherited case; the new census is rerun after correcting test-only locator/request-owner assumptions. [Browser evidence](evidence/browser-summary.json) records individual attempts and initial failures; native fixtures do not call external services. Account bootstrap/record creation is API fixture setup unless the table explicitly describes UI creation. Fault injection checks feedback/retry, not actual provider availability.
## Functional journeys and controls actually exercised
| Workstream / actions | Executable evidence / observed contract | Boundary and remaining proof |
|---|---|---|
| Public/local authentication | [Smoke](../../../../../job-tracker-ui/e2e/smoke.spec.ts), [new census](../../../../../job-tracker-ui/e2e/functional-acceptance.spec.ts): public plans/keyboard, local form submit/session, configured-disabled registration, missing token feedback, protected anonymous redirect, login-return query diagnostic | Provider sign-in, reset-mail delivery, real Turnstile, authenticator/recovery-device and every sensitive account control remain unverified. Query retention is a **confirmed failure**, not a native auth acceptance pass |
| Account switch/stale requests | [Isolation](../../../../../job-tracker-ui/e2e/account-isolation.spec.ts): real cookies/session/CSRF; retained A profile request using B context fails; missing/forged context; two-tab private-form disposal and Back; foreign CV read/update/delete/job-association denied | Finite local session/browser behavior; real BFCache/offline/browser/device combinations remain open. UI hiding does not establish API security |
| Navigation and utilities | [Shell](../../../../../job-tracker-ui/e2e/shell-readiness.spec.ts), [preservation](../../../../../job-tracker-ui/e2e/redesign-preservation.spec.ts): drawer/rail/group menus, current routes, command keyboard/Enter/Escape/focus return, search, notification read/dismiss/error states, dirty CV Cancel | Some command/notification fixtures inject delayed or failed responses. Spoken names/live announcements and all physical-device interactions remain NOT VERIFIED |
| Job creation | Smoke uses actual reviewed Add flow and observes the created role; company is supplied as UI fixture input. Import review is exposed without silent creation | The role observation is not full company readback. Discovery search/import browser responses are synthetic provider fixtures. Real external URL scraping/NAV availability and every acquisition source require approved provider evidence |
| Jobs/Trash actions | [Density](../../../../../job-tracker-ui/e2e/table-density.spec.ts): search/filter/sort/page/selection/status/actions, Comfortable/Compact, desktop/tablet/cards, job open/Browser Back focus, deleted scope/restore and reload | Real owned records and API readback; loading fault is deliberately injected. Saved views/bulk partial failure and every long-tail field remain under backend/component evidence or outstanding native proof |
| Integrated Board | [Board](../../../../../job-tracker-ui/e2e/board-presentation.spec.ts): exact Table/Board matching IDs/query, custom statuses, pointer move, keyboard alternative, persisted status, error/focus, compatible `/kanban` hash/history; new 250-row case compares seeded/paged/Table/API/DOM IDs | Failed-move/loading fixtures intentionally inject errors. Finite 250-row result uses 17 normal 15-row Table reads and one full Board population read; no scaling/latency maximum or physical touch acceptance is inferred |
| Dashboard summary/preferences | [Dashboard](../../../../../job-tracker-ui/e2e/dashboard-presentation.spec.ts): native seeded metrics/exact values, useful links, five owner-local visibility flags, account switch/empty states; independent errors/retry preserve other sections | Owner-local visibility is separate from server language/reminder preferences. Native language/notification overlap is diagnosed separately; earlier HTTP 500 debt is not closed by a translated page |
| Analytics | [Analytics](../../../../../job-tracker-ui/e2e/analytics-presentation.spec.ts): native recorded cohorts/period/drill-down/exact alternatives, current versus historical definitions, second-account data; independent fault/retry | Fault injection is not backend failure qualification. No historical response/conversion denominator or new metric is invented; production timezone/provider and human chart interpretation remain open |
| Job identity/Overview | [Overview](../../../../../job-tracker-ui/e2e/job-overview-presentation.spec.ts): real custom status/header/metadata/edit/original-listing actions, alias/direct entry/mobile keyboard; missing/foreign/error/retry | Some failure states are injected; actual foreign/missing Job entry+refresh is additionally tested with real native 404 and no private identity |
| Workspace navigation/drafts | [Sections](../../../../../job-tracker-ui/e2e/job-sections-presentation.spec.ts), preservation: seven canonical/legacy URL sections, Back/Forward/reload, dirty cover-letter/answer Cancel/Discard, named keyboard navigation and retained query/followMode | `followMode` remains metadata only. GET Overview may create/recompute deterministic owned checklist rows: no mutation HTTP request does **not** prove zero server DB writes |
| Frozen application/documents | Preservation/sections: owned CV and cover letter, answers/attachments, native capture/immutable JSON readback and archived-file download after current source edit/attachment deletion. Separately, fresh backend native package/ZIP extraction proves bytes/manifest relationships | Browser capture/download is not ZIP creation/extraction proof. P2-D01 is an ordinary passing native case. This does not create a new global Documents route or imply current source equals historical snapshot; archive-specific immutable bytes/metadata and recorded relationships are authoritative |
| Tasks/notes/interview/timeline | Sections use real manual checklist/preparation/correspondence fixtures and UI completion/edit/navigation/readback, sparse/no-data presentation and retained timeline/history | Notes, checklist items, calendar/reminders and correspondence are distinct domains. External calendar writes, notification scheduler delivery, every CRUD combination and AI provider output remain unverified |
| Career Profile and CV boundaries | [Scope](../../../../../job-tracker-ui/e2e/cv-section-scope.spec.ts), preservation/responsive: canonical source, selected/sibling CV, override/reset/omission/custom entry, save/readback and persisted section order; canonical remains unchanged by CV edit | Long-tail canonical import/raw-history/provider extraction and all entry types require more evidence. Settings revisions do not imply a newly invented complete canonical-profile snapshot |
| CV frame/edit controls | [Frame](../../../../../job-tracker-ui/e2e/cv-editor-frame.spec.ts), [responsive](../../../../../job-tracker-ui/e2e/cv-responsive-workflow.spec.ts): identity, save/unsaved, undo/redo/history access, named editor/preview, section selection/visibility/order, persisted reorder, draft/conflict/recovery, edit→preview→edit retention | Underlying conflict/revision safety also has fresh five-case backend proof. Error/conflict injection identifies UI recovery semantics; all real multi-device editing races remain outside these fixtures |
| Preview and PDF | [Keyboard](../../../../../job-tracker-ui/e2e/builder-preview-keyboard.spec.ts), [presentation](../../../../../job-tracker-ui/e2e/cv-preview-presentation.spec.ts), [corpus](../../../../../job-tracker-ui/e2e/cv-readiness.spec.ts): named keyboard entry/scroll/exit/return, fit/page count, retained last-good pages while loading/error, standard native exports | Fresh measured 16/16 and 36=36 at unchanged tolerances. No renderer geometry change. Production fonts/photos, human zoom/AT and arbitrary-content combinations remain open |
| Template/document controls | [Settings](../../../../../job-tracker-ui/e2e/cv-settings-presentation.spec.ts): selected IDs, accent/input validation, reset/default distinctions, advanced controls, focus/menu, saved/revision settings and live render/export | Eight native before/after exports, 24=24 pages; finite combinations. Intentionally locked paid templates/actions are not broken enabled controls |
| Public CV | Smoke uses API fixture setup to publish a synthetic CV, then anonymous HTML/PDF download; [frame](../../../../../job-tracker-ui/e2e/cv-editor-frame.spec.ts) exercises UI revocation. Ownership backend cases and new census test unpublished slug and foreign/private numeric editor | API setup is not UI creation/publication proof. Production rendering and all publication lifecycle UI steps are not certified by one finite export |
| Settings | [Layout](../../../../../job-tracker-ui/e2e/settings-page-layout.spec.ts), preservation: tabs/mobile selector, rule edit across viewport then **Save**, API readback/reload, native notification save, connected-account links, named controls | Saved-before-tab-switch is not proof of unsaved draft retention. Separate desired-behavior [diagnostics](diagnostics/README.md) exercise tab unmount and concurrent writes; failures remain explicit |
| Administration | New native census: actual normal-account403 versus admin200 on each Admin route, absence of the literal synthetic bootstrap identity on denial and hidden admin metadata for normal identity; fresh backend role/self/last-admin/maintenance tests | The absence assertion is not exhaustive response redaction. Navigation/GET success is not proof of audit Undo, every destructive user control, provider probes or production maintenance. No admin reset/delete/probe is executed against real accounts/infrastructure |
| Existing AI and production withholding | Fresh deterministic backend 108, sidecar49 and real-HTTP2: provider/evaluator fixtures, stale/ownership/history protections, Production CV review503 before provider/write while unrelated AI remains operational under its fixture | **No configured deployed model qualification, 0/366 calls, 0 human reviews.** P5-13 review UI remains deferred and withheld; deterministic application safety is not semantic/human acceptance |
## Control and persistence conclusions
Saved-search run/pause/delete/dismiss controls depend on a failed native list read; the UI suppresses the load error. This is a real P1 workflow finding despite an existing route and green InMemory tests. Login loses query context. Rules loses an unsaved draft on tab return; three concurrent language/notification save rounds succeeded without closing the historical500. See [defects](DEFECTS.md) for exact reproductions/severity/owners.
The new census/foreign cases use `alert.first()` for a generic alert check; the Next route announcer may satisfy that assertion. They prove native403/404 and the named private-content absence checks, **not** specific visible error feedback. Existing named error/retry fixtures remain separate evidence. New role-census tests finish all route observations with soft native-read assertions but still fail on each500; the login-query assertion also remains an ordinary failure. Nothing is skipped or marked an expected failure.
Finite native readback/reload proves tested Jobs status/trash, CV selected/sibling/source settings, task/draft and frozen-package behavior. It does not prove all CRUD features or every conflict/retry edge. Existing unsupported/unavailable/locked billing, provider and unqualified CV-AI controls remain distinct from accidental failures. No original destination is removed by this checkpoint; the current census reconciles original31 plus Analytics, including retained aliases and their actual metadata limits.
Browser keyboard/screenshot/axe evidence is automation plus bounded agent visual inspection. **No human screen-reader, actual mobile software keyboard, physical touch or deployed infrastructure acceptance is supplied.** Those remain explicit requirements for subsequent authorized checkpoints; this audit does not begin P5-15-02.
@@ -0,0 +1,109 @@
# P5-15-01 functional preservation results
Audit source **`932b962b9038ddb5ad59b982c0199475bfb50454`**, branch `codex/ui-redesign-phase4`, 2026-10-09. This document compares every original protected capability with actual current API/owner, frontend reach action, read/write boundary, inspected tests and outstanding evidence. It is a functional evidence record; no application repair, provider/model call, production operation, Docker recovery or B07 work belongs to it.
The original [Phase 1 ledger](../../../audit/FUNCTIONALITY_INVENTORY.md), [Phase 2 matrix](../../../phase-2/PRESERVATION_MATRIX.md), [approved Phase 5 plan](../../PHASE5_PLAN.md), [P5-15-00 matrix](../PRESERVATION_ACCEPTANCE.md) and [execution plan](../EXECUTION_PLAN.md) remain the contracts. Architecture follows the [API/controller/service/tenant boundaries](../../../../architecture/backend.md) and [client React Router/API layer](../../../../architecture/frontend.md). Each row includes the original full capability; its short test description covers representative assertions only.
**Status discipline:** PASS requires adequate current evidence for the whole named criterion. PARTIAL means evidenced sub-behaviors with required long-tail/manual/provider proof still missing. FAIL means an observed contradiction, including a carried defect when freshly reproduced. DEFERRED requires an approved exclusion. BLOCKED means execution cannot be performed in the available environment; NOT VERIFIED means adequate evidence has not been collected. A PARTIAL group can contain those outstanding sub-checks. Test/source existence is static observation, never an execution or PASS. Before means P5-15-00 acceptance; after means this audit's full original capability decision. Child test results may pass while their group remains PARTIAL.
## Execution provenance and limits
**Fresh backend/frontend execution:** [backend summary](evidence/backend-summary.json) records 1,023/1,023 backend cases, 108/108 focused AI and 5/5 revision subsets (included within 1,023), offline sidecar 49/49, configuration helpers 3/3, supply-chain helpers 3/3, offline evaluation helpers 5/5 and extension parser 3/3; zero failures/skips. API/test Release builds passed with zero warnings/errors. [Frontend/static summary](evidence/frontend-summary.json) records 459/459 tests across 82/82 suites, zero failed/pending/todo cases, success true; app TypeScript, complete current E2E/AI plus diagnostic TypeScript, lint and production build exited zero. Both runs used unchanged application source from the audit checkpoint. Backend runtime is Windows/.NET SDK 9.0.317, host 9.0.19; deterministic fixtures and disposable SQLite/files. Run dates, commands, counts/hashes and provider limitations are in those portable summaries.
**Fresh browser/native reconciliation:** [browser evidence](evidence/browser-summary.json) records all 117 inherited cases passing in the full run. The five added cases were rerun after harness corrections: two pass; three fail on real application behavior. The latest unique-case result is **119 pass / 3 fail / 122 total**, combined across declared runs, not one all-green final run. Separate preference diagnostics are **one pass / one fail**, outside that total. Real-HTTP 2, rate-limit 9, ingress 6 and PDF admission 1 passed. All runs have zero skips, expected failures and flaky retries. [Fresh fidelity](evidence/fidelity-summary.json): 16/16 (36=36 pages), settings 8/8 (24=24), unchanged tolerances; native package/revision fixtures remain green. Counts overlap across rows and must never be added into a second total. Human, provider, physical-device and production acceptance remain absent. [Journeys](JOURNEYS_AND_CONTROLS.md) distinguish real writes/readback, fault injection, API setup and browser interaction.
The ignored `.artifacts/p5-15-01/matrix/source-checks.json` records the exact 57 IDs, inspected mapped test names/assertion excerpts and file SHA-256 values. It is a local source cross-check, not a new production test framework or substitute for final run reports.
## Complete 57-capability matrix
API paths below include `/api`; `{id}` means the owned resource ID and nested `{jobId}` means the owning job. Controller routes and HTTP attributes were inspected directly. Source ownership is an intended boundary, with negative test anchors separately mapped; it is not a blanket security certification. Read paths can seed deterministic system checklist state where specifically stated. Every reach action is a current source action to execute, not a claim that it was clicked in this static review.
| ID / complete original capability | Actual API path and owner | Frontend route / entry and concrete reach action | Read/write and ownership semantics | Inspected test anchors / protected contract | Source observation versus fresh execution | Required missing/manual/provider evidence; risk / owner | P5-15-00 before | P5-15-01 after |
|---|---|---|---|---|---|---|---|---|
| **PRES-E01** — Public product explanation, Free/Pro feature comparison, honest unavailable-billing states and sign-in/register links<br>Original contract: `LandingPage`, `planCatalog`; do not invent prices or purchasable capabilities | `GET /api/billing/status`;<br>`BillingController / AccountPlans` | / public landing: choose Sign in/Create account; compare Free/Pro | Public read; billing configuration and server entitlements determine availability; landing cannot activate payment | [F:landing-page](../../../../../job-tracker-ui/src/landing-page.test.tsx); [F:planCatalog](../../../../../job-tracker-ui/src/planCatalog.test.ts); [B:AccountPlans](../../../../../JobTrackerApi.Tests/AccountPlansTests.cs)<br>Representative tests with inspected assertions: `shows exactly Free and Pro without invented commercial terms`; `publishes only capability-based Free and Pro plans`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: AccountPlansTests 7/7. Frontend: landing-page.test.tsx 2/2, planCatalog.test.ts 1/1.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Smoke and all-role census verify public plans, configured-disabled registration and sign-in entry; actual billing activation remains unverified. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Actual checkout/billing provider availability and public mobile/keyboard acceptance remain unverified.<br>Public/commerce owner; M — audit loaded mobile/keyboard EN/NB plans and honest unavailable billing; provider readiness separately. | **PARTIAL** | **PARTIAL** |
| **PRES-E02** — Local sign-in/registration, remember-me, configured Turnstile, resend verification, reset password, verify email<br>Original contract: `LoginPage`, reset/verification views, `TurnstileWidget`; server configuration controls availability | `GET /api/auth/config`;<br>`POST /api/auth/login, register, request-password-reset, reset-password, verify-email, resend-verification-email`;<br>`AuthController` | /login or /register public forms; Forgot password opens /forgot-password; emailed token opens /reset-password or /verify-email | Public token/config reads and explicit identity writes; configured registration/Turnstile, remember cookie and challenge control sign-in; never infer mail delivery | [F:login-page](../../../../../job-tracker-ui/src/login-page.test.tsx); [F:verify-email-page](../../../../../job-tracker-ui/src/verify-email-page.test.tsx); [B:LocalAuthIdentity](../../../../../JobTrackerApi.Tests/LocalAuthIdentityTests.cs); [B:AuthAndSystemController](../../../../../JobTrackerApi.Tests/AuthAndSystemControllerTests.cs); [EmailOwnershipIntegrationTests.cs](../../../../../JobTrackerApi.Tests/EmailOwnershipIntegrationTests.cs) — actual confirmation/change-email tokens, not mailbox ownership<br>Representative tests with inspected assertions: `posts remember-me preference without storing an auth token in browser storage`; `confirms the account and shows success when the link is valid`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: LocalAuthIdentityTests 3/3, AuthAndSystemControllerTests 38/38, EmailOwnershipIntegrationTests 3/3. Frontend: login-page.test.tsx 13/13, verify-email-page.test.tsx 4/4.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Real local login works; anonymous route census then reproduces loss of /analytics?months=6 after sign-in. **FAIL AUTH-01**; missing-token/config-disabled states are intentional. Reset delivery/provider journeys remain unverified. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Real reset-mail delivery, Turnstile/browser configuration and complete token-reset submit journey remain unverified.<br>Identity owner; H — trace reset request/token submit/verification/challenge errors in real App; sandbox mail/Turnstile only under later authorization. **Confirmed defect:** [register](DEFECTS.md); separate owner repair required. | **PARTIAL** | **FAIL** |
| **PRES-E03** — Google/Microsoft sign-in/link flows, Microsoft legacy relink, provider popup success/error handling<br>Original contract: `GoogleAuthCard`, `MicrosoftAuthCard`, `MicrosoftLegacyRelinkPage`; OAuth/state/origin rules remain | `POST /api/auth/google/exchange, google/link`;<br>`POST /api/auth/microsoft/exchange, microsoft/link, microsoft/legacy-relink/confirm`;<br>`AuthController + token validators` | /login provider buttons; /profile link controls; emailed recovery enters /microsoft-legacy-relink | Exchange creates authenticated identity only after validated token; linking requires own local identity; OAuth popup origin/state and provider token identity remain mandatory | [F:login-page](../../../../../job-tracker-ui/src/login-page.test.tsx); [F:microsoft-legacy-relink-page](../../../../../job-tracker-ui/src/microsoft-legacy-relink-page.test.tsx); [B:GoogleTokenValidator](../../../../../JobTrackerApi.Tests/GoogleTokenValidatorTests.cs); [B:MicrosoftTokenValidator](../../../../../JobTrackerApi.Tests/MicrosoftTokenValidatorTests.cs)<br>Representative tests with inspected assertions: `handles Microsoft cancellation without exchanging or navigating`; `Exchange_microsoft_token_creates_new_user_when_registration_allowed`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: AuthAndSystemControllerTests 38/38, GoogleTokenValidatorTests 1/1, MicrosoftTokenValidatorTests 17/17. Frontend: login-page.test.tsx 13/13, microsoft-legacy-relink-page.test.tsx 1/1.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** All-role census verifies missing-token Microsoft relink page only; actual external sign-in/link/consent is NOT VERIFIED. No provider calls were made. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Real provider consent/popups, revoked grants and sandbox outcomes remain unverified; origin/state contracts remain required.<br>Identity/provider owner; H — audit popup origin/state, revoke/relink and provider errors using approved sandbox; keep sign-in and mailbox grants separate. | **PARTIAL** | **PARTIAL** |
| **PRES-E04** — 2FA challenge, recovery codes, setup/verify/disable/regenerate, trusted devices and revocation<br>Original contract: `TwoFactorChallenge`, `TwoFactorSettingsCard`; preserve sensitive confirmation and recovery presentation | `GET /api/auth/2fa/status, trusted-devices`;<br>`POST setup, verify-setup, challenge, disable, recovery-codes/regenerate, trusted-devices/revoke-all`;<br>`DELETE trusted-devices/{id}`;<br>`TwoFactorController` | /login challenge after password; account menu Profile opens /profile Security setup/verify/recovery/disable/trusted-device controls | Sensitive own-account security writes require confirmation/code/password; setup secret is pending until verification; trusted-device identity cannot bypass another account | [F:two-factor-settings](../../../../../job-tracker-ui/src/two-factor-settings.test.tsx); [F:login-page](../../../../../job-tracker-ui/src/login-page.test.tsx); [B:TwoFactorController](../../../../../JobTrackerApi.Tests/TwoFactorControllerTests.cs); [B:SessionsController](../../../../../JobTrackerApi.Tests/SessionsControllerTests.cs)<br>Representative tests with inspected assertions: `shows the 2FA code step when login requires two-factor, then proceeds like a normal login on success`; `Login_locks_account_after_five_failed_attempts_and_rejects_sixth_even_with_correct_password`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: AuthAndSystemControllerTests 38/38, TwoFactorControllerTests 9/9, SessionsControllerTests 8/8. Frontend: login-page.test.tsx 13/13, two-factor-settings.test.tsx 2/2.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** No native authenticator/recovery-device journey added; fresh named backend/component assertions only. Full real-device security flow NOT VERIFIED. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Real mobile authenticator/recovery and trusted-device UI traversal remain open; no security-form acceptance inferred from navigation.<br>Identity/accessibility owner; H — manual keyboard/screen-reader recovery/trusted-device traversal plus real authenticator proof. | **PARTIAL** | **PARTIAL** |
| **PRES-E05** — Active session list, current-device distinction, single/other-session revocation, logout<br>Original contract: `SessionsSettingsCard`, `AppShell`, `auth`, `sessionBoundary`; invalidation must clear private UI | `DELETE /api/auth/sessions/{id}`;<br>`GET /api/auth/sessions`;<br>`POST revoke-others`;<br>`POST /api/auth/logout`;<br>`SessionsController + AuthController` | Account menu Profile opens /profile session card; Revoke/other sessions; user menu Sign out | Owner session reads/revocations; current session distinguished; logout revokes exact principal and client clears private state | [F:session-boundary](../../../../../job-tracker-ui/src/session-boundary.test.ts); [F:account-scoped-state](../../../../../job-tracker-ui/src/account-scoped-state.test.tsx); [B:SessionsController](../../../../../JobTrackerApi.Tests/SessionsControllerTests.cs); [B:AuthSessionRevocation](../../../../../JobTrackerApi.Tests/AuthSessionRevocationTests.cs)<br>Representative tests with inspected assertions: `Login_creates_a_user_session_row_and_threads_its_id_into_the_token`; `another session cannot be adopted even if the readable cookie signal is unchanged`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: SessionsControllerTests 8/8, AuthSessionRevocationTests 8/8. Frontend: session-boundary.test.ts 15/15, account-scoped-state.test.tsx 2/2.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Account-isolation browser fixtures verify finite session invalidation/private-state disposal and crafted session-context denial. Native session-card revoke/recovery long-tail remains unverified. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Session-card selection/refresh after remote revocation remains open; broad device/AT acceptance is not established.<br>Identity/shell owner; H — audit session card remote-revoke refresh and Sign out private disposal/focus at every shell entry. | **PARTIAL** | **PARTIAL** |
| **PRES-E06** — Avatar upload/remove, name/display name/headline, account email-change request/cancel/confirm, local password change<br>Original contract: `ProfilePage`; account identity is distinct from canonical career data | `PUT /api/auth/profile`;<br>`POST/DELETE /api/auth/avatar`;<br>`POST change-password, email-change/request, email-change/cancel, email-change/confirm`;<br>`GET email-change`;<br>`AuthController + AvatarStorage` | Account menu Profile /profile: edit names/headline, upload/remove image, security/password/email controls; emailed /confirm-email-change | Own account identity writes; password/recent proof for sensitive changes; pending email is distinct from accepted email; avatar storage is separate from career source | [F:profile-page](../../../../../job-tracker-ui/src/profile-page.test.tsx); [F:verify-email-page](../../../../../job-tracker-ui/src/verify-email-page.test.tsx); [B:AvatarStorage](../../../../../JobTrackerApi.Tests/AvatarStorageTests.cs); [B:LocalAuthIdentity](../../../../../JobTrackerApi.Tests/LocalAuthIdentityTests.cs); [EmailOwnershipIntegrationTests.cs](../../../../../JobTrackerApi.Tests/EmailOwnershipIntegrationTests.cs) — actual confirmation/change-email tokens, not mailbox ownership<br>Representative tests with inspected assertions: `confirms a pending email change and requires a fresh sign-in`; `GetRequiredUserId_returns_null_when_subject_claim_is_missing`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: LocalAuthIdentityTests 3/3, AuthAndSystemControllerTests 38/38, AvatarStorageTests 1/1, EmailOwnershipIntegrationTests 3/3. Frontend: verify-email-page.test.tsx 4/4, profile-page.test.tsx 15/15.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** All-role profile route/native read verified; no complete native avatar/email/password mutation journey added. Fresh named token/form cases only for those mutations. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Avatar upload/remove and password-change browser journeys remain unverified; account identity stays distinct from Career Profile.<br>Identity owner; H — audit native avatar/remove/password/email-change, missing/error states and cross-account negative paths. | **PARTIAL** | **PARTIAL** |
| **PRES-E07** — Collapsible desktop sidebar, mobile drawer, active subsection matching, keyboard command launcher<br>Original contract: `AppShell`, `QuickCommandDialog`; job/company search and fixed navigation/add commands | `GET /api/jobapplications/choices`;<br>`GET /api/companies`;<br>`OperationsController notifications`;<br>`AppShell + QuickCommandDialog` | Desktop rail collapse/mobile menu; Ctrl/Cmd+K search job/company or fixed destination/Add job; bell opens popover | Navigation/search reads only; reviewed Add job opens modal without creation; private query caches must discard on account switch; hidden Admin entry never establishes permission | [F:sidebar-active-nav](../../../../../job-tracker-ui/src/sidebar-active-nav.test.ts); [F:app-shell-notifications](../../../../../job-tracker-ui/src/app-shell-notifications.test.tsx); [B:JobApplicationsAuthorization](../../../../../JobTrackerApi.Tests/JobApplicationsAuthorizationTests.cs); [B:CompanyRelationship](../../../../../JobTrackerApi.Tests/CompanyRelationshipTests.cs)<br>Representative tests with inspected assertions: `/career activates Career Workspace only`; `notification bell exposes its unread count and keyboard-accessible action`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: JobApplicationsAuthorizationTests 4/4, CompanyRelationshipTests 2/2. Frontend: sidebar-active-nav.test.ts 10/10, app-shell-notifications.test.tsx 3/3.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh shell/readiness/utility native keyboard, collapse/mobile controls, destination and role census pass their finite fixtures. AUTH-01 remains a cross-cutting sign-in context defect; spoken names/announcements remain unverified. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Original route/command/drawer defects have scoped successor evidence; manual screen reader and inherited command/focus timing debt remain open. This census is not browser route acceptance.<br>Shell/accessibility owner; H — audit every nav/command destination, collapsed/mobile labels, route focus, dirty Cancel and manual spoken names (P5-02-D01; P5-04b-R01). | **PARTIAL** | **PARTIAL** |
| **PRES-E08** — Theme light/dark/system, EN/Bokmål preference with server hydration, toast/confirm/prompt and error routes<br>Original contract: `themePrefs`, `I18nProvider`, `toast`, `confirm`, `prompt`, route error/not-found views | `PUT /api/auth/preferences/language`;<br>`GET /api/auth/me`;<br>`AuthController`;<br>`browser themePrefs` | Settings /settings General theme/language selectors; shell preferences; confirm/prompt/toast; unknown route and error retry | Theme is browser preference; language has local presentation and server hydration/write; modal Cancel must not mutate; toast success cannot replace server acknowledgment | [F:theme-state](../../../../../job-tracker-ui/src/theme-state.test.tsx); [F:i18n-provider](../../../../../job-tracker-ui/src/i18n-provider.test.tsx); [B:LocalAuthIdentity](../../../../../JobTrackerApi.Tests/LocalAuthIdentityTests.cs)<br>Representative tests with inspected assertions: `GetRequiredUserId_returns_null_when_subject_claim_is_missing`; `Login_locks_account_after_five_failed_attempts_and_rejects_sixth_even_with_correct_password`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: LocalAuthIdentityTests 3/3, AuthAndSystemControllerTests 38/38. Frontend: theme-state.test.tsx 7/7, i18n-provider.test.tsx 2/2.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh shell/settings theme/locale/focus/feedback fixtures pass; three genuine concurrent preference rounds persist/reload correctly. Historical intermittent 500 is not closed; no human full contrast/AT acceptance. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Full theme/locale/state/OS cross-product, spoken names/announcements, incomplete axe, zoom/forced-colours/text-spacing and shared-dialog timing remain unverified.<br>Shared UI/accessibility owner; H — audit loaded error/confirm/prompt states, OS theme, locale hydration, zoom/forced colours and announcements; incomplete axe remains open. | **PARTIAL** | **PARTIAL** |
| **PRES-E09** — Cross-tab account switch, stale mutation/read rejection, BFCache/focus revalidation and reauthentication<br>Original contract: `api`, `sessionBoundary`, `App`; B02 server precondition and client unmount/abort must survive extraction | `GET /api/auth/me, csrf`;<br>`SessionContextMiddleware + JobTrackerContext current-user filters` | Private shell revalidates at account/tab/focus/BFCache boundaries; sign out/sign in A then B; stale request callback | Client abort/unmount and server X-Session-Context 428/409 preserve owner; no stale read/write can adopt cookie-switched B or expose A state | [F:session-boundary](../../../../../job-tracker-ui/src/session-boundary.test.ts); [F:account-scoped-state](../../../../../job-tracker-ui/src/account-scoped-state.test.tsx); [B:SessionContextMiddleware](../../../../../JobTrackerApi.Tests/SessionContextMiddlewareTests.cs); [B:CurrentUserIdLiveEvaluation](../../../../../JobTrackerApi.Tests/CurrentUserIdLiveEvaluationTests.cs)<br>Representative tests with inspected assertions: `cookie switch rejects a stale callback before transport and never adopts B's context`; `keeps saved views private to the account that created them`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: SessionContextMiddlewareTests 13/13, CurrentUserIdLiveEvaluationTests 2/2. Frontend: session-boundary.test.ts 15/15, account-scoped-state.test.tsx 2/2.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh account-isolation browser runs actual cookie/session transport, retained A request with B context, missing/forged context and two-tab disposal. Finite boundaries pass, not every BFCache/offline/device combination. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Real BFCache variations/long offline retries and deployed old-bundle/session behavior remain unverified; images and mocked components cannot prove tenant isolation.<br>Identity owner; H — rerun real account-switch/two-tab stale read/write evidence at execution checkpoint; extend BFCache/offline/old-bundle audit when authorized. | **PARTIAL** | **PARTIAL** |
| **PRES-J01** — Search NAV listings by role/company/municipality, sorting, source/freshness/deadline/work-arrangement details, external listing links<br>Original contract: `JobDiscoveryPage`; provider failures and empty results distinguishable | `GET /api/job-discovery/search`;<br>`JobDiscoveryController + NavJobDiscoverySearchService` | Primary Discover /discover: enter role/company/municipality, Search, sort, inspect listing and external source | Read discovery provider metadata; empty differs from provider failure; saving requires reviewed AddJobModal, search never creates application | [F:job-discovery](../../../../../job-tracker-ui/src/job-discovery.test.tsx); [B:JobDiscoveryController](../../../../../JobTrackerApi.Tests/JobDiscoveryControllerTests.cs); [B:JobOpportunitySync](../../../../../JobTrackerApi.Tests/JobOpportunitySyncTests.cs)<br>Representative tests with inspected assertions: `distinguishes the initial guidance from a completed empty search`; `Search_filters_recent_active_nav_jobs`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: JobDiscoveryControllerTests 3/3, JobOpportunitySyncTests 1/1. Frontend: job-discovery.test.tsx 7/7.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Discover route/header resolves, but NAV search/import browser data are deterministic substituted provider fixtures. Saved-search500 is separately J02; real external NAV acquisition remains NOT VERIFIED. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Live NAV freshness/availability and long result keyboard traversal remain open.<br>Discovery owner; M — audit long results/mobile keyboard/source/deadline/retry; live NAV availability separately. | **PARTIAL** | **PARTIAL** |
| **PRES-J02** — Named saved searches, run/delete, automatic alert preference, new/updated results and dismissal<br>Original contract: `JobDiscoveryPage`, saved-search APIs; retain owner scope and alert metadata | `GET/POST/PATCH/DELETE /api/job-discovery/saved-searches`;<br>`POST {id}/run`;<br>`PATCH {id}/results/{externalJobId}/dismiss`;<br>`JobDiscoveryController` | Discover /discover: name/save search, select/run, toggle alert, dismiss result, delete saved search | Saved search/results/alert metadata owner-scoped; run is explicit persisted search update; background baseline does not alert all existing results | [F:job-discovery](../../../../../job-tracker-ui/src/job-discovery.test.tsx); [B:SavedJobSearchAlert](../../../../../JobTrackerApi.Tests/SavedJobSearchAlertTests.cs); [B:JobDiscoveryController](../../../../../JobTrackerApi.Tests/JobDiscoveryControllerTests.cs)<br>Representative tests with inspected assertions: `shows honest source metadata and offers the existing reviewed save flow`; `Saved_search_tracks_new_seen_and_dismissed_results_per_owner`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: JobDiscoveryControllerTests 3/3, SavedJobSearchAlertTests 1/1. Frontend: job-discovery.test.tsx 7/7.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Normal and admin saved-search GETs fail500 on entry and refresh (four genuine observations); exact installed SQLite translation rejects DateTimeOffset ORDER BY. **FAIL DISCOVERY-01**; no app fix or provider call. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Scheduler-to-notification browser journey and mobile delete confirmation remain unverified; no new producer or delivery certification.<br>Discovery/notifications owner; M — audit saved search delete/pause/run, mobile confirmation and scheduler-to-owned-notification chain. **Confirmed defect:** [register](DEFECTS.md); separate owner repair required. | **PARTIAL** | **FAIL** |
| **PRES-J03** — Add job manually or from URL/pasted listing, reviewed preview, company lookup/create, tags and dates, duplicate warning<br>Original contract: `AddJobModal`; preview is not a write; keep B01 outbound boundary and existing review step | `POST /api/jobimport/preview`;<br>`GET /api/jobapplications/duplicate-check`;<br>`POST /api/jobapplications`;<br>`GET/POST /api/companies`;<br>`JobImportController + JobApplicationsController` | Shell Add job or Jobs Add job: manual/URL/pasted preview, select/create company, tags/dates, confirm Save | Preview outbound guarded by B01 and is not application write; create explicit after review; owned company association validated; duplicate warning does not imply deduplication | [F:quick-capture](../../../../../job-tracker-ui/src/quick-capture.test.tsx); [B:JobImportService](../../../../../JobTrackerApi.Tests/JobImportServiceTests.cs); [B:JobImportHttpTransport](../../../../../JobTrackerApi.Tests/JobImportHttpTransportTests.cs)<br>Representative tests with inspected assertions: `auto-imports from initialUrl and prefills the form`; `Preview_rejects_equivalent_private_literals_before_http_send`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: JobImportServiceTests 16/16, JobImportHttpTransportTests 76/76. Frontend: quick-capture.test.tsx 4/4.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Smoke executes reviewed Add UI and observes created role; native fixture setup elsewhere is API creation, not full UI acquisition. URL/NAV imports use approved synthetic provider fixtures; live imports unverified. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Duplicate/company/date edge UI and creation-intent idempotency remain independent gaps; import network boundary evidence is separate from live site success.<br>Capture/API owner; H — audit reviewed duplicate/company/date boundaries and interrupted creation; creation-intent idempotency stays a separate contract. | **PARTIAL** | **PARTIAL** |
| **PRES-J04** — Capture via browser extension, bookmarklet and share/capture query; optional job attachment and tailored CV draft after create<br>Original contract: `QuickCaptureCard`, `captureUrl`, `App`, `browser-extension`; preserve payload/URL contracts | `POST /api/jobimport/preview`;<br>`POST /api/jobapplications`;<br>`attachment and tailored-cv APIs`;<br>`captureUrl + AddJobModal` | Settings Quick capture install/bookmarklet; extension/share opens capture query handled by App; reviewed Add job then optional attachment/CV | Capture query preserves URL/text payload, no auto-create; optional post-create writes bind to created owned job; extension parsing tests are not installed-browser proof | [F:captureUrl](../../../../../job-tracker-ui/src/captureUrl.test.ts); [F:quick-capture](../../../../../job-tracker-ui/src/quick-capture.test.tsx); [B:JobImportService](../../../../../JobTrackerApi.Tests/JobImportServiceTests.cs); [B:CvBuilder](../../../../../JobTrackerApi.Tests/CvBuilderTests.cs)<br>Representative tests with inspected assertions: `auto-imports from initialUrl and prefills the form`; `Preview_rejects_equivalent_private_literals_before_http_send`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: JobImportServiceTests 16/16, CvBuilderTests 35/35. Frontend: quick-capture.test.tsx 4/4, captureUrl.test.ts 4/4.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Existing acquisition/capture assertions freshly rerun; original extension/parser3 pass. Real installed extension/PWA/platform share and external acquisition not executed. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Installed extension permissions/share flow and optional attachment failure recovery remain unverified.<br>Capture owner; H — audit installed extension/share/no-replay and post-create attachment failure recovery without auto-create. | **PARTIAL** | **PARTIAL** |
| **PRES-J05** — Job table search/filter/sort/pagination, visible columns/page size, saved named views, row/card actions<br>Original contract: `JobTable`, `SavedViewsMenu`; mobile cards and accessible full-workspace entry already exist | `GET /api/jobapplications (paged), board, choices`;<br>`JobApplicationsController` | Primary Jobs /jobs: search/filter/sort, page/page-size/columns/density, Saved views; activate row/card workspace; Board switch | Queries/saved-view owner state retain complete matching records; read Table/Board identity parity; row control events must not open workspace accidentally | [F:application-workspace-overlay](../../../../../job-tracker-ui/src/application-workspace-overlay.test.tsx); [F:account-scoped-state](../../../../../job-tracker-ui/src/account-scoped-state.test.tsx); [B:JobApplicationsController](../../../../../JobTrackerApi.Tests/JobApplicationsControllerTests.cs); [B:JobApplicationsEndpointBehavior](../../../../../JobTrackerApi.Tests/JobApplicationsEndpointBehaviorTests.cs)<br>Representative tests with inspected assertions: `keeps saved views private to the account that created them`; `opens the dedicated workspace from the whole row and preserves list state on return`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: JobApplicationsControllerTests 2/2, JobApplicationsEndpointBehaviorTests 9/9. Frontend: account-scoped-state.test.tsx 2/2, application-workspace-overlay.test.tsx 18/18.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh density/integrated Board fixtures preserve finite filter/sort/page/selection/row-focus/density contracts. Added250 exact-ID test traverses17 Table pages and equals Board API/DOM population. Saved-view/bulk long-tail remains outstanding. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Finite saved-view/filter/Back/error/selection fixtures do not exhaust saved-view CRUD or dirty nested page-size combinations; full-array scaling remains limited.<br>Jobs owner; H — audit full saved-view CRUD, Back/refresh/unknown query, dirty nested page-size and all-result scaling. | **PARTIAL** | **PARTIAL** |
| **PRES-J06** — Selection/bulk status/delete/restore, soft-delete/trash and restore, edit job/company association<br>Original contract: `JobTable`, `EditJobDialog`; preserve partial-error handling and confirmation semantics | `PUT /api/jobapplications/{id}`;<br>`PATCH {id}/status`;<br>`DELETE {id}`;<br>`POST {id}/restore`;<br>`JobApplicationsController + JobApplicationLifecycleController` | Jobs select rows then bulk status/delete; row edit; secondary Trash /trash select/restore; confirmation dialogs | Owner-scoped writes and soft deletion; partial bulk failures retained; restoring differs from recreating; foreign job/company associations denied | [F:application-workspace-overlay](../../../../../job-tracker-ui/src/application-workspace-overlay.test.tsx); [F:confirm-flow](../../../../../job-tracker-ui/src/confirm-flow.test.tsx); [B:JobApplicationsController](../../../../../JobTrackerApi.Tests/JobApplicationsControllerTests.cs); [B:JobApplicationsAuthorization](../../../../../JobTrackerApi.Tests/JobApplicationsAuthorizationTests.cs)<br>Representative tests with inspected assertions: `GetHistory_returns_not_found_for_other_users_job`; `opens the dedicated workspace from the whole row and preserves list state on return`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: JobApplicationsAuthorizationTests 4/4, JobApplicationsControllerTests 2/2. Frontend: application-workspace-overlay.test.tsx 18/18, confirm-flow.test.tsx 1/1.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh Jobs/Trash density fixtures exercise owned selection/status/delete-scope/restore/readback for named cases; backend mutations remain green. Not every bulk partial-failure/edit field is a complete browser journey. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Scoped native restore and bulk/mutation fixtures supersede earlier bare-confirm gaps; all bulk partial-failure/dirty-state combinations and deeper manual AT remain unverified.<br>Jobs/API owner; H — audit selected scope, partial bulk failures and Trash restore with native persistence/dirty protection. | **PARTIAL** | **PARTIAL** |
| **PRES-J07** — Kanban grouped status views, drag move, keyboard pickup/drop/cancel, direct status selection, job opening<br>Original contract: `KanbanBoard`, `pipeline`; same records as table, not a second job model | `GET /api/jobapplications/board`;<br>`PATCH /api/jobapplications/{id}/status`;<br>`JobApplicationsController + JobApplicationLifecycleController` | Jobs Board /jobs?view=board; legacy /kanban redirects; drag, keyboard pickup/drop/Cancel, card status menu/open | Same owned complete matching IDs as Table; custom/unknown status represented; failed status move rolls back; explicit no-drag selector writes same status API | [F:kanban-grouped-board](../../../../../job-tracker-ui/src/kanban-grouped-board.test.tsx); [F:pipeline](../../../../../job-tracker-ui/src/pipeline.test.ts); [B:JobPipeline](../../../../../JobTrackerApi.Tests/JobPipelineTests.cs)<br>Representative tests with inspected assertions: `a custom status gets an Other column that is not a drop target`; `statusLabel localizes canonical and passes through custom`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: JobPipelineTests 46/46. Frontend: kanban-grouped-board.test.tsx 15/15, pipeline.test.ts 11/11.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh Board presentation/integration fixtures prove pointer/keyboard status movement, custom statuses, failed-move feedback, query/history and exact IDs. Added250 population passes; scaling and physical native touch remain unqualified. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Physical touch/native drag, broader responsive focus/cancel combinations and full-result scaling remain open; grouped statuses are not a new pipeline.<br>Jobs/accessibility owner; H — audit keyboard cancel/view focus, physical touch/drag and complete filtered membership at scale; no new pipeline. | **PARTIAL** | **PARTIAL** |
| **PRES-J08** — Company directory, recruiter/contact/source/location and pipeline/contact-date editing; company relationship job history<br>Original contract: `CompaniesTable`; company creation is integrated with job/import flows, not assumed standalone CRUD | `GET/POST/PUT /api/companies`;<br>`GET /api/companies/{id}/relationship`;<br>`CompaniesController` | Jobs group Companies /companies; command company result opens relationship; row edit contact/recruiter/source/pipeline; creation from Add job/import | Owned directory reads and edit writes; company job/contact history owner-bound; integrated creation exists, no standalone CRUD flow inferred | [F:companies-relationship](../../../../../job-tracker-ui/src/companies-relationship.test.tsx); [F:quick-command-preservation](../../../../../job-tracker-ui/src/quick-command-preservation.test.tsx); [B:CompanyRelationship](../../../../../JobTrackerApi.Tests/CompanyRelationshipTests.cs)<br>Representative tests with inspected assertions: `Relationship_combines_owned_applications_and_contact_history`; `opens one company relationship view with applications and recent contact`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: CompanyRelationshipTests 2/2. Frontend: companies-relationship.test.tsx 1/1, quick-command-preservation.test.tsx 9/9.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** All-role company route/native GET and existing creation/edit component/backend cases pass. Full native recruiter/contact/pipeline CRUD and outside-modal feedback race remain outstanding. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | All contact/date edits and source-URL safety browser journeys remain unverified; P4-02-D02 inaccessible modal-save error is open for its owner.<br>Companies/accessibility owner; H — fix and prove durable in-modal save error before form migration (P4-02-D02); audit contact/date/source links. | **PARTIAL** | **PARTIAL** |
| **PRES-J09** — Offer comparison including recorded compensation, decision deadline and notes, source-job links<br>Original contract: `OfferComparisonPage`; no new compensation calculator implied | `GET /api/jobapplications`;<br>`PUT /api/jobapplications/{id}`;<br>`JobApplicationsController` | Secondary Offers /offers compares offer records, open source job; source job edit compensation/deadline/notes | Recorded compensation read, no invented calculation; edit remains job owner write; missing values remain unknown | [F:offer-comparison](../../../../../job-tracker-ui/src/offer-comparison.test.tsx); [B:AnalyticsSalary](../../../../../JobTrackerApi.Tests/AnalyticsSalaryTests.cs); [B:JobApplicationsEndpointBehavior](../../../../../JobTrackerApi.Tests/JobApplicationsEndpointBehaviorTests.cs)<br>Representative tests with inspected assertions: `Save_application_drafts_updates_cover_letter_and_notes`; `compares recorded offer facts without filling missing values`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: JobApplicationsEndpointBehaviorTests 9/9, AnalyticsSalaryTests 1/1. Frontend: offer-comparison.test.tsx 2/2.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** All-role Offers route/native GET passes; named compensation/offer comparison fixtures pass. Full multi-offer native editing/decision workflow not newly performed. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Mobile many-offer comparison and localized currency/date visual acceptance remain open; no new salary facts are claimed.<br>Offers owner; M — audit many-offer narrow layout, currency/period/date labels and safe source links across EN/NB. | **PARTIAL** | **PARTIAL** |
| **PRES-J10** — JSON/CSV job export; JSON import; CSV-to-import-JSON conversion and import counts<br>Original contract: `ImportExportJobs`; preserve B05 blob bytes/BOM, spreadsheet safety and typed formats; do not claim full account restore from job import | `GET /api/export/jobs`;<br>`POST /api/companies, /api/jobapplications`;<br>`ExportController + ImportExportJobs` | Settings General /settings Jobs Import/export: JSON/CSV download, JSON upload, CSV-to-import-JSON conversion | Blob/BOM/CSV spreadsheet safety retained; import creates owned company/job records and reports counts, not existing-record restoration; job import is not complete account restore | [F:csv-export](../../../../../job-tracker-ui/src/csv-export.test.tsx); [B:CsvExport](../../../../../JobTrackerApi.Tests/CsvExportTests.cs); [B:JobApplicationsController](../../../../../JobTrackerApi.Tests/JobApplicationsControllerTests.cs)<br>Representative tests with inspected assertions: `Application_package_record_exposes_expected_fields`; `%s download preserves server bytes and a generated safe filename`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: JobApplicationsControllerTests 2/2, CsvExportTests 25/25. Frontend: csv-export.test.tsx 2/2.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh named import/export backend/component cases pass; no complete file-upload/conversion/download UI lifecycle added. Production account restore is separate, unverified. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Full JSON import/count/roundtrip browser proof and spreadsheet-client compatibility remain separately bounded; byte/formula/Unicode fixtures are not exhaustive.<br>Settings/data owner; H — audit native JSON import counts/roundtrip, Unicode/formula-safe bytes and target spreadsheet compatibility. | **PARTIAL** | **PARTIAL** |
| **PRES-W01** — Dedicated job workspace and reusable quick overlay; overview/analysis/CV/cover-letter/interview sections; old deep-link mapping<br>Original contract: `ApplicationWorkspacePage`, `ApplicationWorkspace`, `jobWorkspaceRoute`; retain full-page/overlay parity | `GET /api/jobapplications/{id}/workspace`;<br>`ApplicationWorkspaceController` | Jobs row /jobs/:id; legacy /applications/:id redirect; seven tabs plus aliases; reusable overlay host where already invoked | Overview read aggregates owners without copying canonical data; URL/query/Back/dirty protections; mount/navigation must not generate AI; P5-05 new quick-preview host remains deferred | [F:application-workspace-overlay](../../../../../job-tracker-ui/src/application-workspace-overlay.test.tsx); [F:applicationWorkspace](../../../../../job-tracker-ui/src/applicationWorkspace.test.ts); [B:ApplicationWorkspace](../../../../../JobTrackerApi.Tests/ApplicationWorkspaceTests.cs)<br>Representative tests with inspected assertions: `opens the dedicated workspace from the whole row and preserves list state on return`; `workspace navigation exposes seven purposes and preserves legacy links`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: ApplicationWorkspaceTests 10/10. Frontend: application-workspace-overlay.test.tsx 18/18, applicationWorkspace.test.ts 3/3.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh job-section/Overview/preservation plus32-route census verify direct/alias entry, refresh, sections, Back/Forward and Jobs context; foreign/missing Job404 has no private title. Quick-preview host remains unused/approved deferred. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Reusable overlay has no active production host; followMode metadata retained but mode-specific UI explicitly deferred to mail. Full manual AT and historical transition-capture limits remain.<br>Workspace/mail owner; H — audit all canonical/legacy entries and numeric navigation-helper arguments, safe query/state, dirty/Back/focus; carry followMode UI to mail phase. | **PARTIAL** | **PARTIAL** |
| **PRES-W02** — Job detail/status/progression, next actions, dates, description, recruiter/contact and timeline<br>Original contract: `JobDetailsSection`, `ApplicationProgress`, `ApplicationTimeline`; do not redefine pipeline enums or history | `GET /api/jobapplications/{id}`;<br>`PATCH {id}/status, followup`;<br>`GET {id}/history, timeline`;<br>`JobApplicationLifecycleController + ApplicationIntelligenceController` | Job workspace Overview header/status/Edit; Timeline Activity subview | Owned status/date writes and append-only history; moving backward has explicit applied-date semantics; human notes differ from package answers/events | [F:application-intelligence](../../../../../job-tracker-ui/src/application-intelligence.test.tsx); [F:workflow-trust-signals](../../../../../job-tracker-ui/src/workflow-trust-signals.test.tsx); [B:JobApplicationsWorkflowSignals](../../../../../JobTrackerApi.Tests/JobApplicationsWorkflowSignalsTests.cs); [B:JobApplicationsAppliedDateHistory](../../../../../JobTrackerApi.Tests/JobApplicationsAppliedDateHistoryTests.cs)<br>Representative tests with inspected assertions: `timeline renders grouped days, milestones and readable summaries`; `follow-up workflow signals route all overview surfaces to the same follow-up workspace`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: JobApplicationsWorkflowSignalsTests 2/2, JobApplicationsAppliedDateHistoryTests 4/4. Frontend: application-intelligence.test.tsx 11/11, workflow-trust-signals.test.tsx 3/3.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh populated/sparse Overview and sections fixtures exercise header/status/metadata/actions/timeline under four theme/locale pairs; no inferred events. Long-tail contact/date/history mutations remain outstanding. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Localized backend event/content text, timezone/reload/status-to-timeline combinations and human AT remain unverified; job revision semantics were not repaired.<br>Workspace/API owner; H — audit native edit/status/date-to-timeline and localized stored content/timezones; job revision debt separately. | **PARTIAL** | **PARTIAL** |
| **PRES-W03** — Analysis, profile match/gaps, strategy snapshot, workflow assistance and status suggestions<br>Original contract: `ApplicationAnalysis`, `ApplicationMatch`, `ApplicationStatusSuggestion`, `ApplicationStrategySnapshot`; show provenance/loading/failure and confirmation | `GET /api/jobapplications/{id}/analysis, match, status-suggestion, focus-plan`;<br>`POST focus-plan/operations, {id}/refresh-ai`;<br>`ApplicationIntelligenceController + StrategySnapshotController` | Job workspace Match; refresh/strategy generation and suggestion Apply controls | Saved/read projections distinct from explicit provider generation; accepted status suggestion writes only after confirmation; owner/provenance/failure state retained | [F:application-intelligence](../../../../../job-tracker-ui/src/application-intelligence.test.tsx); [F:application-workflow-assist](../../../../../job-tracker-ui/src/application-workflow-assist.test.tsx); [B:ApplicationIntelligence](../../../../../JobTrackerApi.Tests/ApplicationIntelligenceTests.cs); [B:StrategySnapshotOperation](../../../../../JobTrackerApi.Tests/StrategySnapshotOperationTests.cs)<br>Representative tests with inspected assertions: `timeline renders grouped days, milestones and readable summaries`; `recruiter status suggestions require an explicit apply action`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: ApplicationIntelligenceTests 19/19, StrategySnapshotOperationTests 4/4. Frontend: application-intelligence.test.tsx 11/11, application-workflow-assist.test.tsx 2/2.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh deterministic analysis/strategy/match suites and native section presentation pass finite behavior; no live model quality or new grounded analysis generated for qualification. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Live model truthfulness, freshness/cancelled generation and provider quality remain unverified; P5-13 production CV withholding must not disable these unrelated AI paths.<br>Workspace/AI owner; H — audit reviewed suggestions/error/cancel/freshness/no-write entry; qualify live factuality separately from CV exception. | **PARTIAL** | **PARTIAL** |
| **PRES-W04** — Checklist create/edit/complete/delete/order, progress and recommended next action<br>Original contract: `ApplicationChecklist`; keep keyboard reorder and persisted item identity | `GET/POST/PATCH/DELETE /api/jobapplications/{id}/checklist`;<br>`PUT checklist/order`;<br>`ApplicationChecklistController` | Job workspace Tasks: add/edit/complete/delete task, keyboard move up/down, progress/next action | Item IDs owned through job; first read can seed/recompute deterministic system checklist, not AI generation; manual reorder persists identity | [F:application-checklist](../../../../../job-tracker-ui/src/application-checklist.test.tsx); [B:ApplicationChecklist](../../../../../JobTrackerApi.Tests/ApplicationChecklistTests.cs)<br>Representative tests with inspected assertions: `reordering sends the new id order`; `Reordering_persists_the_new_order`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: ApplicationChecklistTests 15/15. Frontend: application-checklist.test.tsx 7/7.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh sections/checklist fixtures exercise owned task completion/edit/readback and next-action presentation. GET seed/recompute remains an existing server write contract; all scheduler/CRUD combinations not certified. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Real mobile interruption/edit/delete combinations and human AT remain open; no task due-date schema or automatic notification added.<br>Workspace owner; H — audit native mobile item edit/delete/reorder/interruption and manual/system/dismissed next actions. | **PARTIAL** | **PARTIAL** |
| **PRES-W05** — Select/attach a CV, create/tailor document variants, review tailoring guidance and selected-source context<br>Original contract: `ApplicationCvSection`, `ApplicationTailoringSection`, `applicationWorkspace`; owner+job association enforced by API | `GET/PUT /api/jobapplications/{id}/cv`;<br>`GET tailoring`;<br>`tailored-cv-draft GET/PUT/generate`;<br>`ApplicationAssetsController + JobApplicationsController` | Job workspace Application CV: select/attach/detach, create/tailor variant, open identified CV builder | Association changes owned job pointer and does not mutate canonical profile/other CV; selected CV must share owner; generation explicit and guidance requires review | [F:application-assets](../../../../../job-tracker-ui/src/application-assets.test.tsx); [F:cv-builder-deep-link](../../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [B:ApplicationAssets](../../../../../JobTrackerApi.Tests/ApplicationAssetsTests.cs); [B:CvBuilder](../../../../../JobTrackerApi.Tests/CvBuilderTests.cs)<br>Representative tests with inspected assertions: `Resolver_defaults_include_every_populated_section`; `cv section shows the attached variant and the ones available to attach`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: CvBuilderTests 35/35, ApplicationAssetsTests 15/15. Frontend: application-assets.test.tsx 18/18, cv-builder-deep-link.test.tsx 41/41.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh native preservation/section fixtures select owned CV/tailoring source and preserve captured CV association after source changes; backend native ZIP proof separately passes. Job tailoring live-model quality not qualified. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | P2-D01 is an ordinary passing native regression, not current expected failure. Broader attach-render combinations, provider tailoring quality and deployed restore remain unverified; CV review production exception stays distinct.<br>Workspace/CV owner; H — audit attach/render/detach/create/tailor with source and foreign-owner checks; retain ordinary native P2-D01 successor. | **PARTIAL** | **PARTIAL** |
| **PRES-W06** — Cover-letter editing, AI suggestion review/reject/apply, saved versions and restore, unsaved navigation protection<br>Original contract: `ApplicationAssets`, `CoverLetterAiAssistant`; document override must not mutate master profile | `GET/PUT /api/jobapplications/{id}/cover-letter`;<br>`POST cover-letter/versions/{version}/restore`;<br>`ApplicationAssetsController + AiWorkspaceController` | Job workspace Application Cover letter: edit/save, request AI/review/apply/reject, versions restore; attempt leaving dirty | Owned document versions separate from canonical source; no write on navigation; Cancel keeps draft, Discard permits leave; restore is explicit new document state | [F:application-assets](../../../../../job-tracker-ui/src/application-assets.test.tsx); [F:application-workspace-overlay](../../../../../job-tracker-ui/src/application-workspace-overlay.test.tsx); [B:ApplicationAssets](../../../../../JobTrackerApi.Tests/ApplicationAssetsTests.cs)<br>Representative tests with inspected assertions: `opens the dedicated workspace from the whole row and preserves list state on return`; `cover letter loads the current text and its history`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: ApplicationAssetsTests 15/15. Frontend: application-workspace-overlay.test.tsx 18/18, application-assets.test.tsx 18/18.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh workspace draft/navigation fixtures cover dirty Cancel/Discard and native cover-letter state; named accept/reject/history backend/component cases pass. No live provider or every restore race qualification. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Native/mocked review/history evidence does not establish live-model or provider quality; full screen-reader and every reject/history sequence remain unverified.<br>Workspace/AI owner; H — audit native manual/AI reject/accept/save/history and dirty Cancel/Discard; actual model quality separately. | **PARTIAL** | **PARTIAL** |
| **PRES-W07** — Application draft fields, submission/package preparation, frozen submitted-package versions and archived attachment download<br>Original contract: `ApplicationAssets`, `SubmittedPackagesSection`, `applicationWorkspace`; historical package is distinct from current draft | `PUT /api/jobapplications/{id}/application-drafts`;<br>`GET/POST submitted-packages`;<br>`GET submitted-packages/{packageId}/attachments/{attachmentId}`;<br>`ApplicationAssetsController + SubmittedApplicationPackageService` | Job workspace Application Answers/Submission: edit drafts, prepare/capture, open frozen version, download ZIP/archive attachment | Current drafts differ from immutable historical capture; answer markers preserve human notes; exact archived bytes/hash survive source edits/delete; owner+job+package enforced | [F:application-assets](../../../../../job-tracker-ui/src/application-assets.test.tsx); [F:application-drafts](../../../../../job-tracker-ui/src/application-drafts.test.ts); [B:SubmittedApplicationPackage](../../../../../JobTrackerApi.Tests/SubmittedApplicationPackageTests.cs); [B:JobApplicationsApplicationPackage](../../../../../JobTrackerApi.Tests/JobApplicationsApplicationPackageTests.cs)<br>Representative tests with inspected assertions: `document package history is read-only and separates captured notes from answers`; `application answer helpers keep human notes separate`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: SubmittedApplicationPackageTests 4/4, JobApplicationsApplicationPackageTests 11/11. Frontend: application-assets.test.tsx 18/18, application-drafts.test.ts 3/3.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh browser capture/immutable JSON/readback/archive-file download and fresh native backend ZIP/extraction fixture pass. Frozen source/answers/attachments remain historical; production storage/restore not tested. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Earlier P2-D01 capture expected failure is superseded by ordinary native passing evidence. Production restore/rollback and all storage/provider combinations remain unverified; capture is not external send.<br>Workspace/storage owner; H — retain native capture→source mutation→archive/ZIP immutable-byte regression; release owner proves restore/rollback independently. | **PARTIAL** | **PARTIAL** |
| **PRES-W08** — Attachments upload/drag-drop, category/purpose, rename, AI-use flag, preview/download/delete<br>Original contract: `Attachments`; owner-scoped binary retrieval, consent selection and size/error handling | `GET/POST /api/attachments`;<br>`GET /api/attachments/{jobId}, download/{id}`;<br>`PATCH/DELETE {id}`;<br>`AttachmentsController` | Job workspace Documents: Upload/drop file, category/purpose/name/AI-use, preview/download/delete confirmation | Binary and metadata owner-scoped; 10 MB/type/storage boundaries; per-file consent controls AI use; archive retention independent from current attachment deletion | [F:attachments](../../../../../job-tracker-ui/src/attachments.test.tsx); [B:AttachmentsController](../../../../../JobTrackerApi.Tests/AttachmentsControllerTests.cs); [B:AttachmentConsistency](../../../../../JobTrackerApi.Tests/AttachmentConsistencyTests.cs)<br>Representative tests with inspected assertions: `attachments metadata controls update purpose and ai usage`; `Controller_requires_local_authorization`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: AttachmentsControllerTests 3/3, AttachmentConsistencyTests 14/14. Frontend: attachments.test.tsx 3/3.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh attachment/section fixtures retain owned archived/current file relationships and download/delete behavior; owner-negative backend cases pass. Initial attachment-focus race/human and all MIME/device combinations remain open. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Archive gate is locally satisfied for recorded native fixtures; physical drag/drop, broad rename/download/manual AT and production storage behavior remain unverified.<br>Workspace/storage owner; H — audit upload/category/name/consent/preview/download/delete and physical drop with live/frozen identity. | **PARTIAL** | **PARTIAL** |
| **PRES-W09** — Interview questions/categories, manual items, answers, ready status, remove, contextual AI review/add-to-prep<br>Original contract: `InterviewPrep`, `applicationWorkspace`; generated facts/answers require review | `GET/POST/PATCH/DELETE /api/jobapplications/{id}/interview-prep`;<br>`POST {id}/ai/generate`;<br>`InterviewPrepController + AiWorkspaceController` | Job workspace Interview: add question/category/answer, ready toggle/remove; AI generate/review/Add to prep | Owned prep items only explicitly accepted from AI history; generated facts/answers must not become truth automatically; source context/refresh and consent retained | [F:interview-prep](../../../../../job-tracker-ui/src/interview-prep.test.tsx); [B:InterviewPrepPersistence](../../../../../JobTrackerApi.Tests/InterviewPrepPersistenceTests.cs); [B:InterviewAiContext](../../../../../JobTrackerApi.Tests/InterviewAiContextTests.cs)<br>Representative tests with inspected assertions: `prep renders grouped items with progress and marks AI-sourced ones`; `GetInterviewPrep_persists_and_reuses_the_generated_note`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: InterviewPrepPersistenceTests 3/3, InterviewAiContextTests 8/8. Frontend: interview-prep.test.tsx 13/13.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh interview manual question/preparation/context section fixtures pass; deterministic grounded AI cases only. Actual provider quality and every question/answer manipulation not newly certified. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Real-model quality, physical mobile keyboard/populated reload and manual AT remain open; prep does not establish scheduled interview data.<br>Workspace/AI owner; H — audit populated mobile keyboard/reload/manual removal and explicit AI review; no scheduled-interview inference. | **PARTIAL** | **PARTIAL** |
| **PRES-W10** — Interview debrief template and follow-up content/date, readiness and next-action state<br>Original contract: `InterviewPrep`; neutral prompts must not seed invented company/achievement facts | `GET/PUT /api/jobapplications/{id}/follow-up`;<br>`GET {id}/followup-draft, readiness`;<br>`InterviewPrepController + JobApplicationsController` | Job workspace Interview Debrief template/answer and follow-up edit/date; Overview next-action opens Timeline correspondence | Neutral template, no invented achievements; own follow-up content/date writes; old send-followup gone, real delivery belongs to Mail; followMode only metadata | [F:interview-prep](../../../../../job-tracker-ui/src/interview-prep.test.tsx); [B:JobApplicationsFollowUpDraft](../../../../../JobTrackerApi.Tests/JobApplicationsFollowUpDraftTests.cs); [B:InterviewPrep](../../../../../JobTrackerApi.Tests/InterviewPrepTests.cs)<br>Representative tests with inspected assertions: `starts a structured interview debrief without inventing answers`; `Follow_up_draft_uses_imported_thread_and_saved_package_context`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: JobApplicationsFollowUpDraftTests 2/2, InterviewPrepTests 11/11. Frontend: interview-prep.test.tsx 13/13.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh interview/debrief/next-action and section query fixtures pass named state; followMode retains compatibility metadata only. Mode-specific follow-up compose UI remains approved later-mail deferral. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Timezone/reload chains and provider delivery remain unverified; followMode-specific compose UI is deferred rather than implemented.<br>Workspace/mail/calendar owner; H — audit debrief/date/reload and metadata links; defer mode-specific compose UI under recorded decision. | **PARTIAL** | **PARTIAL** |
| **PRES-W11** — Follow-up/reminder workflow, rule-driven dates/stages, notifications, deadline/follow-up ICS and Google/Outlook calendar event actions<br>Original contract: `RemindersView`, `RulesSettingsCard`, `ApplicationCalendarActions`; calendar integration already exists, date-only/timestamp semantics must survive | `GET /api/jobapplications/reminders`;<br>`GET/PUT /api/rules`;<br>`PATCH {id}/followup`;<br>`GET /api/calendar/status, jobs/{id}/events.ics`;<br>`POST jobs/{id}/events`;<br>`ApplicationCalendarController` | Reminders /reminders opens job/follow-up; Settings Follow-ups; job calendar menu Download ICS/Add Google/Outlook | Owned reminder/date writes; rules do not ghost prospects; date-only all-day vs timestamp preserved; provider connection does not imply writable calendar consent | [F:daily-control-loop](../../../../../job-tracker-ui/src/daily-control-loop.test.tsx); [F:application-calendar](../../../../../job-tracker-ui/src/application-calendar.test.tsx); [B:ApplicationCalendarController](../../../../../JobTrackerApi.Tests/ApplicationCalendarControllerTests.cs); [B:RulesEngineProspect](../../../../../JobTrackerApi.Tests/RulesEngineProspectTests.cs)<br>Representative tests with inspected assertions: `dashboard attention card opens follow-up workspace`; `adds the selected application date to a writable connected calendar`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: ApplicationCalendarControllerTests 4/4, RulesEngineProspectTests 5/5. Frontend: daily-control-loop.test.tsx 4/4, application-calendar.test.tsx 3/3.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh reminders route/read, calendar/rule/date/export backend/component fixtures pass; native Rules draft loss is recorded under S03. External calendar operations and actual scheduled delivery remain NOT VERIFIED. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | F21 DST/date-only/provider timezone gap, actual Google/Outlook events, scheduler delivery and historical unconfirmed rules-save 500 remain open.<br>Calendar/API owner; H — investigate F21 DST/date-only semantics before event changes; audit real ICS/rules/reminder and approved provider writes. | **PARTIAL** | **PARTIAL** |
| **PRES-W12** — Async operation progress, pending/failed/retry/cancel states and associated notifications<br>Original contract: `OperationsPage`, profile processing components; preserve operation IDs and server state, avoid duplicate starts on rerender | `GET /api/operations, {id}`;<br>`POST {id}/retry, cancel`;<br>`GET /api/notifications`;<br>`OperationsController + UserOperationStore` | Account/utility Operations /operations: inspect pending/failure, Retry/Cancel; bell opens linked operation | Persistent owner operation IDs, explicit retry/cancel and notification read/dismiss; idempotent producer/worker claims; rerender is not duplicate generation authorization | [F:operations-page](../../../../../job-tracker-ui/src/operations-page.test.tsx); [F:profile-page](../../../../../job-tracker-ui/src/profile-page.test.tsx); [B:OperationsController](../../../../../JobTrackerApi.Tests/OperationsControllerTests.cs); [B:UserOperationStore](../../../../../JobTrackerApi.Tests/UserOperationStoreTests.cs)<br>Representative tests with inspected assertions: `profile page loads persisted structured cv and can re-parse it`; `shows persistent operation and notification states with accessible actions`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: OperationsControllerTests 3/3, UserOperationStoreTests 10/10. Frontend: profile-page.test.tsx 15/15, operations-page.test.tsx 3/3.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** All-role Operations route/native GET and named dispatcher/operation cancellation/retry suites pass. No production worker/provider execution launched; full async delivery remains unverified. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Long disconnect/reconnect and F20 enabled worker fault containment remain operational gaps; no live job/worker recovery was certified.<br>Operations/worker owner; H — audit disconnect/reconnect/late-result/no-duplicate starts/cancel/retry; F20 recovery before enabling producers. | **PARTIAL** | **PARTIAL** |
| **PRES-C01** — Canonical structured career profile: personal details, summary, skills, work, education, languages, interests and long-tail/custom sections<br>Original contract: `CareerProfilePage`, `views/career/*`; profile save is an account singleton, CV is an identified derived resource | `GET/PUT /api/career/profile`;<br>`CareerProfileController + CareerProfileService` | Career /career section Profile: structured personal/summary/work/education/skills/languages/interests/custom fields Save | Canonical account singleton write with version history; CV identified lens separate; no selected-CV override may replace canonical source | [F:profile-page](../../../../../job-tracker-ui/src/profile-page.test.tsx); [B:CareerProfileController](../../../../../JobTrackerApi.Tests/CareerProfileControllerTests.cs); [B:CareerProfileService](../../../../../JobTrackerApi.Tests/CareerProfileServiceTests.cs)<br>Representative tests with inspected assertions: `profile page loads persisted structured cv and can re-parse it`; `Put_then_get_round_trips_the_profile_and_updates_the_projection`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: CareerProfileControllerTests 6/6, CareerProfileServiceTests 21/21. Frontend: profile-page.test.tsx 15/15.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh source-scope/preservation native fixtures prove canonical source versus selected/sibling CV isolation and readback; no complete all-entry canonical CRUD/import journey. Named backend/component cases pass. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Full long-tail Career/mobile save and canonical concurrent updates remain separate; scoped CV acceptance never implies canonical-profile revision safety.<br>Career/API owner; H — audit every long-tail/custom field and mobile save/source isolation; canonical concurrent saves remain separate. | **PARTIAL** | **PARTIAL** |
| **PRES-C02** — Profile overview, completeness/import guidance, manual edit, copy raw CV text, avatar and version history/restore<br>Original contract: `CareerWorkspacePage`, `CareerProfilePage`; preserve projection/history behavior without redesigning schema | `GET /api/career/profile/completeness, versions`;<br>`POST versions/{version}/restore`;<br>`GET /api/profile-cv/runs`;<br>`CareerProfileController` | Career /career overview/profile: completeness/import guidance, edit, raw-text copy/avatar, History Restore | Projection read and explicit profile restore writes a canonical version; account avatar identity remains separate; source history not CV settings history | [F:career-workspace-page](../../../../../job-tracker-ui/src/career-workspace-page.test.tsx); [F:profile-page](../../../../../job-tracker-ui/src/profile-page.test.tsx); [B:CareerProfileService](../../../../../JobTrackerApi.Tests/CareerProfileServiceTests.cs)<br>Representative tests with inspected assertions: `/career shows the profile completeness overview`; `SaveVersionAsync_assigns_stable_ids_to_items_missing_one`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: CareerProfileServiceTests 21/21. Frontend: profile-page.test.tsx 15/15, career-workspace-page.test.tsx 7/7.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh current Career route/read and revision/profile named suites pass; complete native canonical-history restore/avatar/raw-copy long-tail remains outstanding. No new profile-snapshot semantics invented. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Clipboard/avatar and complete native profile historical restore/manual AT remain unverified; real extraction quality is separate.<br>Career owner; M — audit raw copy, overview/completeness/import guidance and full historical restore without silent data replacement. | **PARTIAL** | **PARTIAL** |
| **PRES-C03** — CV/file upload and extraction, rebuild/improve/reprocess, progress/history, diff, explicit low-confidence selection, accept/discard, retry/cancel<br>Original contract: `CareerProfilePage`, `/profile-cv/*`; uploaded proposal is not silently canonical truth | `POST /api/profile-cv/upload, rebuild, improve, reprocess`;<br>`GET runs, runs/{id}/diff`;<br>`POST runs/{id}/accept, discard`;<br>`ProfileCvController + operation store` | Career /career Profile Import/upload/history/diff: select low-confidence changes, Accept/Discard, Retry/Cancel | Owned extracted proposal not silently canonical; explicit accept only selected content; file artifacts/progress/failed operations require retention and recovery | [F:profile-page](../../../../../job-tracker-ui/src/profile-page.test.tsx); [B:ProfileCvController](../../../../../JobTrackerApi.Tests/ProfileCvControllerTests.cs); [B:CvProfileDiffService](../../../../../JobTrackerApi.Tests/CvProfileDiffServiceTests.cs)<br>Representative tests with inspected assertions: `pending CV extraction can be reviewed and applied`; `Upload_rejects_unsupported_extension`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: ProfileCvControllerTests 32/32, CvProfileDiffServiceTests 11/11. Frontend: profile-page.test.tsx 15/15.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh deterministic extraction/review/progress/selection regression suites pass. Actual external extraction/provider/cancellation delivery and all formats/low-confidence combinations remain unverified. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Unusual/scanned/OCR document quality and full low-confidence deselection/discard browser acceptance remain unverified; no provider certification.<br>Career/extraction owner; H — audit low-confidence deselect/discard/retry/cancel and corpus quality; approve provider calls separately. | **PARTIAL** | **PARTIAL** |
| **PRES-C04** — Evidence bank: sourced statement/title/category/tags, add/list/delete and truthfulness guidance<br>Original contract: `CareerEvidenceBank`; evidence belongs to profile owner and is not AI-invented experience | `GET/POST/PUT/DELETE /api/career/evidence`;<br>`CareerEvidenceController` | Career /career Evidence: add sourced title/statement/category/tags, list/delete | Own user-approved evidence with provenance; statements cannot become invented employment; deletion explicit and tenant-bound | [F:career-evidence](../../../../../job-tracker-ui/src/career-evidence.test.tsx); [B:CareerEvidenceController](../../../../../JobTrackerApi.Tests/CareerEvidenceControllerTests.cs)<br>Representative tests with inspected assertions: `saves factual evidence with provenance and tags`; `Evidence_is_user_approved_tenant_scoped_and_deletable`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: CareerEvidenceControllerTests 1/1. Frontend: career-evidence.test.tsx 1/1.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh evidence-bank CRUD/owner backend/component cases pass; no native full add/tag/delete route traversal added. Evidence-source factual review remains a human obligation. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Full delete/many-item search/keyboard browser acceptance remains open; broader Career page work stays Phase 7.<br>Career owner; M — audit evidence source/category/tags/delete and large-list keyboard/source navigation. | **PARTIAL** | **PARTIAL** |
| **PRES-C05** — CV library create/name/copy/delete, template gallery and real sample thumbnails, publish/unpublish/share and PDF download<br>Original contract: `CvBuilderPage`, `cvBuilder`; separate public slug from numeric private ID | `GET/POST/PUT/DELETE /api/cv/variants`;<br>`POST {id}/duplicate`;<br>`PUT {id}/public`;<br>`themes/preview`;<br>`CvVariantController` | CV library /career/builder: Create/name/copy/delete, template card real sample, Publish/Unpublish/Share/PDF; open /:id | Owned private numeric IDs distinct from public slug; publish explicit; copying preserves selected settings; deleting/unpublishing removes public reach as documented | [F:cv-builder-page](../../../../../job-tracker-ui/src/cv-builder-page.test.tsx); [F:cv-template-thumbnail](../../../../../job-tracker-ui/src/cv-template-thumbnail.test.tsx); [B:CvBuilder](../../../../../JobTrackerApi.Tests/CvBuilderTests.cs); [B:PublicCvController](../../../../../JobTrackerApi.Tests/PublicCvControllerTests.cs)<br>Representative tests with inspected assertions: `Create_then_save_increments_version_and_keeps_history`; `shows the empty state and creates a CV then navigates to the editor`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: CvBuilderTests 35/35, PublicCvControllerTests 3/3. Frontend: cv-builder-page.test.tsx 6/6, cv-template-thumbnail.test.tsx 1/1.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh smoke API setup publishes synthetic public CV and downloads anonymous HTML/PDF; editor-frame UI revoke and library/template fixtures pass. This is not full UI creation/publication lifecycle or deployed rendering proof. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Complete publish/unpublish/old-link revocation chain and every library/template combination remain unverified; library redesign is not claimed.<br>CV owner; H — audit create/copy/delete/gallery/share/publish/unpublish and old-public-link revocation; keep numeric/slug identity distinct. | **PARTIAL** | **PARTIAL** |
| **PRES-C06** — Studio Template/Content/Customize/AI Tools/History navigation; debounced preview, page boundaries/automatic fit and save state<br>Original contract: `CvBuilderEditor`; existing mobile edit/preview and desktop split must retain parity; automatic fit is not a manual zoom control | `GET /api/cv/variants/{id}, preview`;<br>`POST /api/cv/preview`;<br>`PUT variants/{id}`;<br>`CvVariantController` | Identified studio /career/builder/:id Template/Content/Customize/AI Tools/History; mobile Edit/Preview and Fit/Return | Debounced read preview and queued explicit/autosave owner revision write; white document page/count separate from application theme; fit not manual zoom | [F:cv-builder-deep-link](../../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [B:CvBuilder](../../../../../JobTrackerApi.Tests/CvBuilderTests.cs)<br>Representative tests with inspected assertions: `Section_presentation_is_normalized_and_shared_by_preview_and_pdf_renderer`; `pane navigation focuses the existing preview without changing the pending draft`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: CvBuilderTests 35/35. Frontend: cv-builder-deep-link.test.tsx 41/41.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh CV frame/responsive/preview native fixtures verify five tabs, save/history access, mode switching, region names, fit/page indicators and retention; measured16/16 standard fidelity. Human/device/production-font acceptance open. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | P5-14 now supplies the integrated held-PUT pane/viewport, preview boundary-key/scroll, reachable return, canvas and hit-test successor. Physical touch/software keyboard, 200%/400% zoom, human AT, broader wrapped/short-height states and production rendering remain unaccepted.<br>CV/accessibility owner; H — retain P5-14 held-PUT/responsive/scroll checks; obtain physical touch/software keyboard/zoom/manual AT evidence. | **PARTIAL** | **PARTIAL** |
| **PRES-C07** — Built-in item visibility/order, custom sections, preset/free-text section catalog, item/content overrides, hide/remove, native section drag and keyboard reorder<br>Original contract: `CvBuilderEditor`, `components/cv/*`, `useDragReorder`; selected profile source and overrides remain distinguishable | `PUT /api/cv/variants/{id}`;<br>`GET /api/cv/outline`;<br>`CvVariantController + CvVariantService` | Studio Content: show/hide/remove, source/reset override, custom preset/free-text section, move up/down/native drag | Selected CV settings/override writes retain stable source/item IDs; omitted differs from deleted canonical; custom section ownership and nested/foreign drop boundaries retained | [F:cv-builder-deep-link](../../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [F:cvBuilder](../../../../../job-tracker-ui/src/cvBuilder.test.ts); [B:CvBuilder](../../../../../JobTrackerApi.Tests/CvBuilderTests.cs)<br>Representative tests with inspected assertions: `Resolver_applies_item_override_bullets_without_touching_the_master`; `[P5-10 PRES-C07 C10] resetting one entry field preserves omission, sibling override and order and supports undo`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: CvBuilderTests 35/35. Frontend: cv-builder-deep-link.test.tsx 41/41, cvBuilder.test.ts 13/13.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh source-scope/responsive native fixtures verify override/reset/omission/CV-only entry, section order/reorder alternatives and canonical isolation; native browser pointer automation is not physical-touch acceptance. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | P5-14 closes P5-10-O01 only for tested ownership/default-drop cases: entry/section order, inactive nested lists and foreign editable-title non-mutation. Physical touch/text selection/all-browser gestures and exhaustive saved override/reset combinations remain unqualified.<br>CV/accessibility owner; H — retain tested native nested ownership/default-drop checks; audit physical touch/text selection/all-browser overrides before broader claim. | **PARTIAL** | **PARTIAL** |
| **PRES-C08** — Template-capability-aware typography/colors/header/headings, skills presentation/groups, one/two-column and sidebar settings, photo/icons<br>Original contract: `CvCustomizeTab`, theme registry; retain unsupported-setting handling and server render equivalence | `GET /api/cv/themes`;<br>`PUT /api/cv/variants/{id}`;<br>`CvVariantController + theme renderer registry` | Studio Template/Customize Style: typography/color/header/headings/skills/groups/columns/sidebar/photo/icons | Capability-aware setting writes; unsupported controls/default reset do not erase unrelated dormant values; server renderer authoritative, theme toggle must not change document palette | [F:cv-builder-deep-link](../../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [F:cvBuilder](../../../../../job-tracker-ui/src/cvBuilder.test.ts); [B:CvBuilder](../../../../../JobTrackerApi.Tests/CvBuilderTests.cs)<br>Representative tests with inspected assertions: `Resolver_defaults_include_every_populated_section`; `choosing a template restores its own structure instead of inheriting the previous template layout`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: CvBuilderTests 35/35. Frontend: cv-builder-deep-link.test.tsx 41/41, cvBuilder.test.ts 13/13.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh template/style controls and8 native settings exports pass; representative capabilities/IDs/colors/fonts retained. Production font/photo and every template/capability combination remain unqualified. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | All-template/font/photo/wrapped-line/browser/control combinations and broad custom-colour/manual AT remain unverified; finite capability matrix and Pro locks are not exhaustive.<br>CV/renderer owner; M — audit capability controls/locks and broader font/photo/wrapped text; manual custom-colour names and contrast. | **PARTIAL** | **PARTIAL** |
| **PRES-C09** — A4/Letter, density, margins/spacing, date format, document language, per-section rows/grid/compact/bubbles and columns<br>Original contract: `cvBuilder`, `CvCustomizeTab`, content controls; do not drop advanced controls merely to simplify layout | `PUT /api/cv/variants/{id}`;<br>`POST variants/{id}/export-pdf`;<br>`CvVariantController` | Studio Customize Layout/Advanced: A4/Letter/density/margin/spacing/date/language/rows/grid/compact/bubbles/columns | Validated document settings owner revision write; retained advanced fields/render semantics; locale of controls distinct from document language; geometry oracles unchanged | [F:cvBuilder](../../../../../job-tracker-ui/src/cvBuilder.test.ts); [F:cv-builder-deep-link](../../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [B:CvBuilder](../../../../../JobTrackerApi.Tests/CvBuilderTests.cs)<br>Representative tests with inspected assertions: `Variant_settings_reject_css_injection_in_visual_overrides`; `editor sections, design controls and document settings render in Bokmål`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: CvBuilderTests 35/35. Frontend: cv-builder-deep-link.test.tsx 41/41, cvBuilder.test.ts 13/13.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh settings/Layout control before/after exports yield24 preview=24PDF pages; standard36=36 also passes unchanged tolerances. Actual wider zoom/reflow and arbitrary settings combinations remain unverified. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Recorded unchanged-tolerance local fidelity supersedes prior six-fixture failures; all advanced combinations, deployment fonts/photo/wrapped text and manual print inspection remain open.<br>CV/renderer owner; H — retain unchanged numerical oracle/settings exports; audit advanced locale/layout combinations and actual deployed print/fonts. | **PARTIAL** | **PARTIAL** |
| **PRES-C10** — Undo/redo of editor settings, save queue, unsaved guard, history/version restore and preview lifecycle<br>Original contract: `CvBuilderEditor`; current queue serializes one mounted editor only, not concurrent browsers | `PUT /api/cv/variants/{id}`;<br>`GET versions`;<br>`POST versions/{version}/restore`;<br>`CvVariantController + CvVariantService` | Studio Undo/Redo, save status/retry/recovery; History select Restore; dirty navigation Keep editing/Discard | Undo local settings vs reset live-source override vs persisted history lens distinct; expected revision blocks lost update; queue serializes mounted editor, not all browsers | [F:cv-builder-deep-link](../../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [B:CvBuilder](../../../../../JobTrackerApi.Tests/CvBuilderTests.cs)<br>Representative tests with inspected assertions: `Resolver_defaults_include_every_populated_section`; `revision conflict retains the draft and blocks later autosaves until explicit reload`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: CvBuilderTests 35/35. Frontend: cv-builder-deep-link.test.tsx 41/41.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh five backend revision safety cases plus browser dirty/conflict/recovery/history access and undo/redo fixtures pass; generated/unaccepted AI history protections deterministic. No all multi-device race certification. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | CV stale-write/history safety has scoped native evidence; long offline/history combinations and profile/job concurrent edits remain separate. No new save owner or history store.<br>CV/API owner; H — audit long offline/history/conflict/undo/dirty transitions; retain downloadable draft and one save/history owner. | **PARTIAL** | **PARTIAL** |
| **PRES-C11** — Per-section AI improve/translate/custom instruction and whole-document translate/improve/spelling review<br>Original contract: `AiSectionAssistant`, builder AI tab; source/target language, current/suggestion comparison, apply/reject | `POST /api/cv/ai/assist, variants/{id}/ai/apply`;<br>`CvVariantController + optional CvAiSuggestionService` | Studio AI Tools and per-section assistant: improve/translate/custom/spelling, compare, Apply/Reject | Pro entitlement, owner/revision/proposal binding and explicit apply; Production service withheld 503 cv_ai_unavailable; qualification/review UI obligation deferred, not fulfilled by safety tests | [F:ai-section-assistant](../../../../../job-tracker-ui/src/ai-section-assistant.test.tsx); [F:cv-builder-deep-link](../../../../../job-tracker-ui/src/cv-builder-deep-link.test.tsx); [B:AiWorkspace](../../../../../JobTrackerApi.Tests/AiWorkspaceTests.cs); [B:AiPrivacyPolicy](../../../../../JobTrackerApi.Tests/AiPrivacyPolicyTests.cs) ; [Production no-write checks](../../../../../JobTrackerApi.Tests/CvAiReadinessTests.cs), [isolated HTTP contract](../../../../../job-tracker-ui/ai-tests/cv-ai-readiness.spec.ts)<br>Representative tests with inspected assertions: `[PRES-C11 PRES-C07] whole-document AI %s changes only an explicitly accepted CV override`; `section AI uses the CV document language and requires explicit server acceptance`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: AiWorkspaceTests 9/9, AiPrivacyPolicyTests 9/9, CvAiReadinessTests 29/29. Frontend: cv-builder-deep-link.test.tsx 41/41, ai-section-assistant.test.tsx 14/14.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Approved P5-13 deferral:0/366 configured-model calls,0 human reviews, UI unimplemented. Fresh108 deterministic AI and realHTTP2 prove Production503 before provider/write and unrelated AI fixture availability only. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Full CV rewriting/review remains DEFERRED — BLOCKED / NOT QUALIFIED: deployed model identity unverified; frozen 32-case/366-call qualification has 0 completed calls and 0 human reviews; factuality unmeasured; P5-13 review UI unimplemented. Current Production guard returns 503 cv_ai_unavailable; safe withholding is an exception, not successful generation/review. Existing assistant affordances can report unavailable.<br>AI/CV/product owner; H — meet frozen model identity/corpus/rubric/human review and review-UI return conditions; retain Production 503/no-write/unrelated-AI checks. | **DEFERRED** | **DEFERRED** |
| **PRES-C12** — Authenticated PDF export and anonymous published-CV preview/PDF; long searchable multipage documents<br>Original contract: `PublicCvPage`, `cvBuilder`, server renderer; B03 shared resource admission and public ownership/publication checks | `POST /api/cv/variants/{id}/export-pdf`;<br>`GET /api/public-cv/{slug}, {slug}/pdf`;<br>`CvVariantController + PublicCvController + PdfRenderAdmission` | Private studio/library PDF; Share public /cv/:slug anonymous page and PDF download | Private owner check; anonymous only published slug; revoke/unknown slug denies render; shared owner/global admission prevents overlaunch; long searchable pages require native output proof | [F:public-cv-page](../../../../../job-tracker-ui/src/public-cv-page.test.tsx); [B:PublicCvController](../../../../../JobTrackerApi.Tests/PublicCvControllerTests.cs); [B:PdfRenderAdmission](../../../../../JobTrackerApi.Tests/PdfRenderAdmissionTests.cs)<br>Representative tests with inspected assertions: `Pdf_download_is_rate_limited`; `public CV exposes the rendered CV and PDF download`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: PublicCvControllerTests 3/3, PdfRenderAdmissionTests 22/22. Frontend: public-cv-page.test.tsx 1/1.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh16 standard and8 settings native preview/PDF exports pass exact page membership and unchanged metrics; browser public/download and native frozen attachment proof pass. Production fonts/photos/storage/render deployment unverified. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | P5-14 retains unchanged 16-fixture/36-page native preview/PDF and 8-settings/24-page export historical proof at unchanged tolerances. This is finite local evidence; deployed Chromium/Linux/fonts/photo/all-print-engine and manual print inspection remain unverified.<br>CV/rendering/release owner; H — audit public revoke/private denial/PDF busy recovery and deployed Linux/fonts/photos/manual print; preserve admission. | **PARTIAL** | **PARTIAL** |
| **PRES-M01** — Job-scoped manual note/email log, search, delete, paste/import message; current job/company context<br>Original contract: `Correspondence`; manual record is different from sending a real email | `GET/POST /api/correspondence`;<br>`GET {jobId}, message/{id}, page`;<br>`DELETE {id}`;<br>`CorrespondenceController` | Job workspace Timeline Correspondence: log note/email, contextual search, paste/import, delete | Owner/job-bound manual records and search; recording is not delivery; imported text/context cannot bypass owned job relationship | [F:end-to-end-trust-loop](../../../../../job-tracker-ui/src/end-to-end-trust-loop.test.tsx); [F:correspondence-search-context](../../../../../job-tracker-ui/src/correspondence-search-context.test.ts); [B:CorrespondenceController](../../../../../JobTrackerApi.Tests/CorrespondenceControllerTests.cs)<br>Representative tests with inspected assertions: `overview entry opens the canonical communication workspace without sending mail`; `builds contextual suggestions for the shared application correspondence view`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: CorrespondenceControllerTests 3/3. Frontend: end-to-end-trust-loop.test.tsx 1/1, correspondence-search-context.test.ts 2/2.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh timeline/correspondence section fixture and native inbox GET pass; full mail filters/open/reply/send/provider lifecycle not traversed. Named backend/component cases prove their finite contracts. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Full manual edit/delete/paste-import browser combinations and manual AT remain unverified; logging correspondence is not sending mail.<br>Mail/workspace owner; H — audit native log CRUD/search/paste import and no-send distinction. | **PARTIAL** | **PARTIAL** |
| **PRES-M02** — Gmail candidate search/import, linked-thread refresh/sync history, import thread, unlink/relink/move with job selection<br>Original contract: `Correspondence`; cross-job relationship changes remain owner-bound | `GET /api/gmail/job-candidates, messages`;<br>`POST import, import-thread, refresh-linked-threads, manual-sync, unlink-thread, relink-thread`;<br>`GmailController` | Job Timeline Correspondence Gmail tools: candidate/import/thread/refresh, unlink/relink/move owned job picker | Owner provider grant + job/thread/message links; move cannot cross tenant; provider absence/error distinct from no correspondence; sync is external and remains sandbox-unverified | [F:correspondence-gmail-import](../../../../../job-tracker-ui/src/correspondence-gmail-import.test.tsx); [B:GmailController](../../../../../JobTrackerApi.Tests/GmailControllerTests.cs); [B:EmailOwnershipIntegration](../../../../../JobTrackerApi.Tests/EmailOwnershipIntegrationTests.cs)<br>Inherited EmailOwnershipIntegration anchor is an identity-token suite and is excluded from this mail group’s fresh coverage.<br>Representative tests with inspected assertions: `automatically refreshes already-linked Gmail threads without manual re-import`; `Import_thread_rejects_missing_message_ids`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: GmailControllerTests 19/19. Frontend: correspondence-gmail-import.test.tsx 6/6.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh named draft/correspondence owner and conflict tests pass; no real delivery/provider integration executed. Identity email-token tests are excluded from mailbox ownership evidence. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Live provider threads, multi-account reconnect/revoked grants and sync failures remain unverified.<br>Mail/provider owner; H — audit owned thread/job link/move/unlink/reconnect and approved live sync failures. | **PARTIAL** | **PARTIAL** |
| **PRES-M03** — Global correspondence inbox with pagination/search/filter/direction/provider/link state, full message and attachment information, source-job links<br>Original contract: `CorrespondenceInboxPage`; provider read failure distinct from no messages | `GET /api/correspondence/page, message/{id}`;<br>`GET /api/email/providers, messages, thread, message`;<br>`EmailController + CorrespondenceController` | Secondary Correspondence /correspondence: search/filter/page/provider/direction/link; open message and source-job link | Owned saved inbox can display while provider unavailable; fetched plain text avoids provider HTML injection; large mailbox/binary attachment delivery not proven by mock detail | [F:correspondence-inbox-page](../../../../../job-tracker-ui/src/correspondence-inbox-page.test.tsx); [B:EmailController](../../../../../JobTrackerApi.Tests/EmailControllerTests.cs); [B:EmailOwnershipIntegration](../../../../../JobTrackerApi.Tests/EmailOwnershipIntegrationTests.cs)<br>Inherited EmailOwnershipIntegration anchor is an identity-token suite and is excluded from this mail group’s fresh coverage.<br>Representative tests with inspected assertions: `keeps saved correspondence visible when provider status is unavailable`; `Provider_status_is_owner_scoped_and_does_not_claim_send_support`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: EmailControllerTests 3/3. Frontend: correspondence-inbox-page.test.tsx 16/16.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh named provider/correspondence ownership tests pass; no external binary mailbox sync or live reconnect exercised. Identity email confirmation tests contribute no mailbox isolation proof. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Real large-mailbox/attachment-binary flows and complete native inbox/AT acceptance remain open; global inbox redesign stays Phase 7.<br>Mail owner; H — audit large native inbox paging/provider failure/detail/attachment binaries and manual AT. | **PARTIAL** | **PARTIAL** |
| **PRES-M04** — Compose/reply, choose connected provider and job/recipient, save/resume/delete drafts, review/confirm send, delivery states and explicit new attempt<br>Original contract: `CorrespondenceInboxPage`; persisted draft revision and send idempotency/uncertain delivery controls must survive navigation changes | `GET/POST/PUT/DELETE /api/email/drafts`;<br>`POST {id}/new-attempt`;<br>`POST /api/email/send`;<br>`EmailDraftsController + EmailController` | Correspondence /correspondence Compose or message Reply; select provider/job/recipient, Save/Resume/Delete, review final Send | Owned draft revision + ClientRequestId/send identity; explicit send confirmation; uncertain delivery never auto-retried; definitive failure permits explicit new attempt only; followMode compose UI deferred | [F:correspondence-inbox-page](../../../../../job-tracker-ui/src/correspondence-inbox-page.test.tsx); [B:EmailDraftsController](../../../../../JobTrackerApi.Tests/EmailDraftsControllerTests.cs); [B:EmailDraftPersistence](../../../../../JobTrackerApi.Tests/EmailDraftPersistenceTests.cs)<br>Representative tests with inspected assertions: `resumes a saved draft and surfaces revision conflicts without overwriting it`; `Revision_conflicts_prevent_lost_updates_and_cross_tenant_deletes`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: EmailDraftsControllerTests 5/5, EmailDraftPersistenceTests 1/1. Frontend: correspondence-inbox-page.test.tsx 16/16.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh named inbox/draft/send conflict and section entry fixtures pass finite semantics; no real send/reconnect or every dirty/uncertain interruption journey. followMode UI remains deferred, no automatic resend. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Actual sandbox mail delivery/reconnect and every dirty/send interruption remain unverified; no automatic uncertain-send retry. followMode-specific UI remains deferred.<br>Mail/API owner; H — audit draft conflicts, explicit send/uncertain-new-attempt, reconnect/dirty interruption; followMode UI deferred, no automatic resend. | **PARTIAL** | **PARTIAL** |
| **PRES-M05** — Gmail review candidates, proposed jobs, link/reject/keep decisions, notes, manual sync and create suggested job<br>Original contract: `GmailReviewPage` embedded in inbox; retain legacy review redirect | `GET /api/gmail/review-candidates, suggested-jobs`;<br>`POST review-decision, manual-sync, create-suggested-job`;<br>`GmailController` | Correspondence Review view /correspondence?view=review; /correspondence/review alias; Link/Reject/Keep/notes/Sync/Create | Reviewed owner decisions; no create on navigation/sync; proposed-job creation explicit and retains connection/thread association; real provider source unknown | [F:gmail-review-page](../../../../../job-tracker-ui/src/gmail-review-page.test.tsx); [F:correspondence-inbox-page](../../../../../job-tracker-ui/src/correspondence-inbox-page.test.tsx); [B:GmailController](../../../../../JobTrackerApi.Tests/GmailControllerTests.cs)<br>Representative tests with inspected assertions: `Save_review_decision_links_thread_and_imports_messages`; `renders correspondence inbox items and reloads with filters`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: GmailControllerTests 19/19. Frontend: correspondence-inbox-page.test.tsx 16/16, gmail-review-page.test.tsx 3/3.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** All-role review alias retains destination and intentional Gmail-not-connected409 with named warning; fresh review/component/backend cases pass. Actual provider suggested-job/link/create not exercised. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Real provider review and complete suggested-job creation browser journey remain unverified; no automatic creation from navigation.<br>Mail/capture owner; H — audit review alias, proposed-job/link/reject/keep/notes/sync/create confirmation and owner boundaries. | **PARTIAL** | **PARTIAL** |
| **PRES-M06** — Gmail/Google and Microsoft Graph connection/status/disconnect, IMAP connection/status/disconnect<br>Original contract: `EmailProviderConnections`, `ConnectedAccountsPage`; login identity and mail-provider identity are separate capabilities | `GET /api/gmail/status, connect-url`;<br>`DELETE connection`;<br>`/api/microsoft-graph equivalents`;<br>`GET /api/imap/status`;<br>`POST connect`;<br>`DELETE connection`;<br>`provider controllers` | Settings Manage connected accounts /settings/connected-accounts; Google/Outlook Connect/Disconnect; IMAP host/user/password connection | Owner provider authorization independent from sign-in link; IMAP SSRF/ciphertext credential handling; actual token revocation/expiry/reconnect remains external evidence | [F:email-provider-connections](../../../../../job-tracker-ui/src/email-provider-connections.test.tsx); [B:MicrosoftGraphController](../../../../../JobTrackerApi.Tests/MicrosoftGraphControllerTests.cs); [B:ImapController](../../../../../JobTrackerApi.Tests/ImapControllerTests.cs)<br>Representative tests with inspected assertions: `renders connection controls in Norwegian Bokmål`; `Status_returns_sync_state_fields_for_connected_account`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: MicrosoftGraphControllerTests 7/7, ImapControllerTests 9/9. Frontend: email-provider-connections.test.tsx 3/3.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** All-role connected-account route observes genuine Gmail status; backend/component Graph/IMAP contracts pass. Full live Gmail/Graph/IMAP grant/revoke/expiry and every status not established by census. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Actual provider authorization/revocation/token expiry/reconnect remain unverified; no credentials or live provider operations in this review.<br>Connections/provider owner; H — audit actual grants/revoke/expiry/reconnect and IMAP safety; provider sandbox authorization required. | **PARTIAL** | **PARTIAL** |
| **PRES-S01** — Personal dashboard counts, activity/funnel/company/skill trends, stage/salary insights and actionable next steps<br>Original contract: `DashboardView`, analytics APIs; chart transformations and empty/error states preserved | `GET /api/jobapplications/stats, analytics, analytics-overview, tag-trends`;<br>`JobApplicationAnalyticsController` | Primary Dashboard /dashboard and Analytics /analytics: report period/table/value/insight/action drill-down | Read owned exact population/period/stage/salary metrics; no invented compensation/denominator; error distinct from empty; Dashboard flags do not hide Analytics report families | [F:daily-control-loop](../../../../../job-tracker-ui/src/daily-control-loop.test.tsx); [F:workflow-trust-signals](../../../../../job-tracker-ui/src/workflow-trust-signals.test.tsx); [B:StageAnalytics](../../../../../JobTrackerApi.Tests/StageAnalyticsTests.cs); [B:AnalyticsSalary](../../../../../JobTrackerApi.Tests/AnalyticsSalaryTests.cs)<br>Representative tests with inspected assertions: `Salary_insights_keep_currency_and_period_groups_separate`; `follow-up workflow signals route all overview surfaces to the same follow-up workspace`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: AnalyticsSalaryTests 1/1, StageAnalyticsTests 4/4. Frontend: workflow-trust-signals.test.tsx 3/3, daily-control-loop.test.tsx 4/4.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh Dashboard/Analytics browser fixtures validate real recorded cohorts/exact chart alternatives/periods/drill-down and account isolation; four theme/locale pairs. New unsupported metrics remain absent; production timezone/provider/human chart reading not certified. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Scoped native chart/value/population transformations supersede earlier unmapped chart gaps; server timezone/date/population limits and unsupported NEW metrics remain explicit.<br>Reports/API owner; M — audit exact cohort/sample/date definitions and drill-down links; retain unsupported-metric boundaries. | **PARTIAL** | **PARTIAL** |
| **PRES-S02** — Five per-owner local visibility preferences; onboarding progress and dismiss; notification bell/unread/read/dismiss<br>Original contract: `DashboardView`, `OnboardingChecklist`, `NotificationsPopover`; no server widget-order/resize contract exists yet | `GET /api/notifications, unread-count`;<br>`POST {id}/read`;<br>`DELETE {id}`;<br>`OperationsController`;<br>`browser owner-local flags` | Dashboard visibility toggles/onboarding Dismiss; shell bell read/dismiss/open notification | Five local flags owner keyed; no server widget-order/resize/reset contract; notification writes tenant-bound and idempotent; server language save is distinct from local flag persistence | [F:onboarding-checklist](../../../../../job-tracker-ui/src/onboarding-checklist.test.tsx); [F:notifications-popover](../../../../../job-tracker-ui/src/notifications-popover.test.tsx); [B:JobLifecycleEvent](../../../../../JobTrackerApi.Tests/JobLifecycleEventTests.cs)<br>Representative tests with inspected assertions: `uses structured career data and connected inbox status for onboarding progress`; `shows notifications and updates read and dismissed state in place`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: JobLifecycleEventTests 9/9. Frontend: onboarding-checklist.test.tsx 1/1, notifications-popover.test.tsx 6/6.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh Dashboard five owner-local visibility flags/reload/account-switch and shell notification fixtures pass. Three language/notification overlap rounds pass separately; earlier generic language500 remains open, not a Dashboard-toggle failure. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Five owner-local Dashboard visibility flags and scoped reload/account evidence remain; order/resize/reset is deferred. Recorded P5-06-O01 generic language-preference 500 during overlapping Dashboard/setup reads has no established exception/root cause; sequential fixture setup does not close concurrent save reliability.<br>Dashboard/shell/identity owner; H — investigate recorded P5-06-O01 language-save 500 during reads; audit five flags A/B/reload plus bell/onboarding; order/resize/reset deferred. | **PARTIAL** | **PARTIAL** |
| **PRES-S03** — Follow-up/ghosting rule settings, email reminder preference, table preferences, theme/language and connected-account links<br>Original contract: `SettingsView`, `RulesSettingsCard`; preferences have different scopes, do not replace with one unsafely shared object | `GET/PUT /api/rules, notification-settings`;<br>`PUT /api/auth/preferences/language`;<br>`RulesController + NotificationSettingsController + AuthController` | Settings General/Follow-ups/Notifications tabs or mobile section picker; edit/Save rules and reminders, table/theme/language; connections link | Rules/reminder/language server writes vs browser/table preferences have separate scopes; failure must preserve actionable draft; tab unmount discards local RulesSettingsCard draft in current source | [F:settings-view](../../../../../job-tracker-ui/src/settings-view.test.tsx); [F:theme-state](../../../../../job-tracker-ui/src/theme-state.test.tsx); [B:NotificationSettingsController](../../../../../JobTrackerApi.Tests/NotificationSettingsControllerTests.cs); [B:RulesEngineProspect](../../../../../JobTrackerApi.Tests/RulesEngineProspectTests.cs)<br>Representative tests with inspected assertions: `uses one browser preference and falls back to System`; `A_prospect_is_never_followed_up_or_ghosted_however_old`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: RulesEngineProspectTests 5/5, NotificationSettingsControllerTests 3/3. Frontend: theme-state.test.tsx 7/7, settings-view.test.tsx 5/5.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Native Rules diagnostic loses unsaved5 back to14 on tab return; persisted14 and zero writes. **FAIL SETTINGS-01**. Saved rule/readback and three overlapping language/notification saves pass, but historical500 remains open. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | P4-04-O02 recorded SQLite notification saves had 2/10 HTTP 500/database-locked attempts; isolated rules 500 remains unconfirmed. P5-06-O01 language-preference 500 and rule drafts lost on tab unmount stay open; sequential success does not establish concurrency safety.<br>Settings/API/identity owner; H — investigate P4-04-O02 concurrent notification 500 and P5-06-O01 language-save 500; audit rule draft/tab lifecycle, unknown route/preferences. **Confirmed defect:** [register](DEFECTS.md); separate owner repair required. | **PARTIAL** | **FAIL** |
| **PRES-S04** — AI privacy settings, usage/limits, honest Free/Pro lock states, billing status, conditional checkout and portal<br>Original contract: `AiPrivacySettingsCard`, `AiUsageCard`, `AccountPlanProvider`; server entitlement authoritative, not client context defaults | `GET/PUT /api/ai/settings`;<br>`GET /api/ai/usage`;<br>`GET /api/billing/status`;<br>`POST checkout, portal`;<br>`AiSettingsController + AiUsageController + BillingController` | Settings General privacy/usage/plan; Pro locks in domains; Upgrade/Manage only when server billing available | Server entitlement and monthly owner metering authoritative; privacy consent external processing gated; conditional billing is not real checkout proof; C11 Production exception bounded | [F:settings-view](../../../../../job-tracker-ui/src/settings-view.test.tsx); [F:ai-usage-card](../../../../../job-tracker-ui/src/ai-usage-card.test.tsx); [B:AiPrivacyPolicy](../../../../../JobTrackerApi.Tests/AiPrivacyPolicyTests.cs); [B:AiUsageMeter](../../../../../JobTrackerApi.Tests/AiUsageMeterTests.cs)<br>Representative tests with inspected assertions: `External_processing_requires_admin_gate_user_consent_and_pro`; `settings view has no accent picker and uses one follow-up section, one notification section`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: AiPrivacyPolicyTests 9/9, AiUsageMeterTests 3/3. Frontend: settings-view.test.tsx 5/5, ai-usage-card.test.tsx 2/2.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh entitlement/privacy/usage deterministic suites and realHTTP withholding fixtures pass; existing unrelated AI remains available in fixture. No live checkout/webhook/provider consent or P5-13 semantic qualification. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Actual checkout/webhooks/portal and provider consent/delivery remain unverified. Production CV unavailability is temporary authorized P5-13 debt, not fulfillment or disabling other AI.<br>AI/commerce/API owner; H — retain entitlement/privacy/metering and bounded Production CV exception; separately prove checkout/webhooks/portal before activation. | **PARTIAL** | **PARTIAL** |
| **PRES-S05** — Account export, encrypted backup download, lifecycle status and deliberate deletion confirmation<br>Original contract: `BackupCard`; recent-auth/password/provider restrictions remain; a downloadable backup is not proven restore readiness | `POST /api/export/account, /api/backup/encrypted`;<br>`GET /api/account-lifecycle/status`;<br>`POST delete`;<br>`ExportController + BackupController + AccountLifecycleController` | Settings Backup: readable ZIP/encrypted download; lifecycle/deletion enabled server flag then deliberate confirmation | Recent-auth/password/provider restrictions; complete owner ZIP/redaction distinct from full recoverable restore; account deletion destructive, not run in this audit | [F:account-data-export](../../../../../job-tracker-ui/src/account-data-export.test.tsx); [B:AccountDataExport](../../../../../JobTrackerApi.Tests/AccountDataExportTests.cs); [B:BackupController](../../../../../JobTrackerApi.Tests/BackupControllerTests.cs)<br>Representative tests with inspected assertions: `downloads the readable account ZIP from the protected endpoint`; `Readable_zip_is_complete_checksummed_owner_isolated_and_redacted`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: AccountDataExportTests 3/3, BackupControllerTests 3/3. Frontend: account-data-export.test.tsx 4/4.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh account ZIP/encrypted backup/lifecycle backend/component cases pass; native Job-package ZIP proof is distinct. No current production database backup/restore or destructive account lifecycle rehearsal. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Actual database/account restore, verified recoverable backups, paid deletion/provider cancellation and rollback remain production release gates; no destructive rehearsal occurred.<br>Account lifecycle/release owner; H — audit exact confirmations/ZIP/backup gates; current recoverable restore/paid deletion/provider cancellation/rollback require authorized rehearsal. | **PARTIAL** | **PARTIAL** |
| **PRES-A01** — Admin user list/create, role promotion/demotion guards, reset link and delete with last-admin/self warnings<br>Original contract: `AdminUsersPage`, `/users`; API roles enforce privilege regardless of navigation | `GET/POST /api/users`;<br>`PUT {id}/roles`;<br>`DELETE {id}`;<br>`POST {id}/send-password-reset`;<br>`UsersController` | Admin Users /admin/users via role-gated Admin group; create/list/promote/demote/reset/delete confirmations | Admin API authority independent from shell; last-admin guard and self-confirmation, role changes revoke sessions/trusted devices; actual reset email not proved by controller mock | [F:admin-users-page](../../../../../job-tracker-ui/src/admin-users-page.test.tsx); [B:UsersController](../../../../../JobTrackerApi.Tests/UsersControllerTests.cs); [B:ApiAuthorizationPosture](../../../../../JobTrackerApi.Tests/ApiAuthorizationPostureTests.cs)<br>Representative tests with inspected assertions: `warns before demoting another administrator`; `SetRoles_rejects_removing_the_final_administrator`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: UsersControllerTests 7/7, ApiAuthorizationPostureTests 5/5. Frontend: admin-users-page.test.tsx 4/4.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh32-route census normal403/admin200 and account metadata distinction; guarded role/last-admin/self backend suites pass. Full native successful user mutations/reset delivery/role revocation not performed. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Mounted-view role revocation, full mutations and actual reset delivery remain unverified; hidden nav/synthetic shell never proves authorization.<br>Admin/identity owner; H — audit full guarded mutations, mounted-role revoke and real reset; crafted API denial remains mandatory. | **PARTIAL** | **PARTIAL** |
| **PRES-A02** — Admin audit event list/detail, supported undo and job restore<br>Original contract: `AdminAuditPage`; preserve event/ownership semantics rather than generic mutation buttons | `GET /api/admin/audit`;<br>`POST {id}/undo`;<br>`AdminAuditController` | Admin Audit /admin/audit: filters/list/detail, supported Undo/job restore | Admin read/mutation with supported event semantics and restore ownership; unsupported undo unavailable; role posture test alone is not successful undo proof | [F:admin-audit-page](../../../../../job-tracker-ui/src/admin-audit-page.test.tsx); [B:AuthAndSystemController](../../../../../JobTrackerApi.Tests/AuthAndSystemControllerTests.cs); [B:ApiAuthorizationPosture](../../../../../JobTrackerApi.Tests/ApiAuthorizationPostureTests.cs)<br>Inherited AuthAndSystemController anchor has no Audit/Undo assertion and is excluded from this group’s fresh coverage. Authorization posture is reflection evidence only.<br>Representative tests with inspected assertions: `Every_controller_either_requires_authorization_or_is_listed_as_public`; `distinguishes an unavailable audit log from an empty audit log and retries`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: ApiAuthorizationPostureTests 5/5. Frontend: admin-audit-page.test.tsx 2/2.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh normal403/admin200 route/read and named error/retry UI/authorization-posture cases pass. Successful native AuditUndo/job restore remains NOT VERIFIED; no false attribution of38 auth/system tests. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Complete successful native undo/job restore browser acceptance remains open; role posture is not undo behavior proof.<br>Admin/API owner; H — audit persisted successful undo/job restore, unsupported actions and non-admin denial. | **PARTIAL** | **PARTIAL** |
| **PRES-A03** — Separate system health/build/database/AI/email status, SMTP settings/test, AI probe, CV corpus benchmark and maintenance run controls<br>Original contract: `AdminSystemPage`; sensitive config values/logs must not move into personal dashboard | `GET /api/admin/system, email-settings, cv-benchmark, maintenance-jobs`;<br>`PUT email-settings`;<br>`POST ai/probe, maintenance-jobs/{jobId}/runs`;<br>`POST /api/users/send-test-email`;<br>`AdminSystemController` | Admin System /admin/system status/build/database/AI/mail; SMTP Settings/Test, probe, benchmark/maintenance control | Admin-only sensitive reads/writes; secret redaction and allowlisted dispatch; actual production SMTP/model/probe/maintenance external operations not performed | [F:admin-system-page](../../../../../job-tracker-ui/src/admin-system-page.test.tsx); [B:AuthAndSystemController](../../../../../JobTrackerApi.Tests/AuthAndSystemControllerTests.cs); [B:MaintenanceJobDispatcher](../../../../../JobTrackerApi.Tests/MaintenanceJobDispatcherTests.cs)<br>Representative tests with inspected assertions: `Login_locks_account_after_five_failed_attempts_and_rejects_sixth_even_with_correct_password`; `loads and saves smtp settings from the settings tab`. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. | **Observed source:** owner/entry/call boundary and assertion excerpts inspected.<br>**Fresh execution:** Backend: AuthAndSystemControllerTests 38/38, MaintenanceJobDispatcherTests 3/3. Frontend: admin-system-page.test.tsx 4/4.<br>All above mapped cases passed at audit source; counts overlap between rows and are not additive. **Fresh native/observed outcome:** Fresh normal403/admin200 system route/read and named SMTP/allowlisted dispatcher tests pass. No live SMTP/probe/model/maintenance run or production sensitive-output qualification. [Journey scope](JOURNEYS_AND_CONTROLS.md); [native results](evidence/browser-summary.json). | Actual production SMTP/model/probes/benchmark/maintenance and sensitive-output qualification remain unverified; no live jobs launched.<br>Admin/operations owner; H — audit metadata/diagnostic sensitive outputs and guarded controls; production SMTP/model/maintenance proof separately authorized. | **PARTIAL** | **PARTIAL** |
## Discrepancies and separate exceptions
- **S03 draft-loss blind spot:** `SettingsView.tsx:43–44` returns `null` for inactive tab panels; `RulesSettingsCard` keeps an unsaved draft in mounted component state. Changing tabs therefore destroys that draft. The existing native preservation test at `redesign-preservation.spec.ts:209` resizes with the draft mounted, saves rules, then changes tabs; it does not protect unsaved tab traversal. The separate native diagnostic now fails that exact unsaved tab traversal:14→5→14, no writes. S03 is FAIL under SETTINGS-01; this is a freshly confirmed previously recorded risk, not a newly introduced audit regression.
- **Preference reliability:** P4-04-O02 notification SQLite lock/500 and P5-06-O01 language-save 500 during overlapping reads are distinct inherited failures. Sequential successful saves, local flag reload, or a non-recurrence do not establish concurrency safety or erase those records. Fresh repetition/API exception/DB-provider evidence belongs to the functional audit; bounded remediation belongs to an explicit owning checkpoint.
- **Approved `followMode` exception:** `jobWorkspaceRoute.ts` produces it and `ApplicationWorkspacePage` clones current query parameters before changing `section/sub`. No consumer of it is present in the workspace or inbox compose owner. Metadata preservation is testable; mode-specific compose UI remains the approved mail deferral and is not accepted by URL assertions. This affects W10/W11/M04 reach meaning, without inventing missing behavior as a new implementation request.
- **P5-05 separate:** a new active quick-preview host remains reserved/deferred. W01 still protects actual full-workspace and reusable overlay contracts. An unused host is not an executed journey, and P5-05 is not C11 or a failure inferred from absence.
- **C11 explicitly DEFERRED:** P5-13 qualification has zero configured-model calls/human reviews and its new review UI remains unfinished. Current Production optional-service absence yields `503 cv_ai_unavailable` before generation/Apply writes. Passing deterministic guards and unrelated-AI availability prove controlled withholding only; they do not fulfill original AI generation/review.
- **Superseded historical failures:** original Phase 2 P2-D01 expected failure, stale-CV revision failures and repaired P5-10/P5-14 drag/geometry cases retain their historical records but have newer bounded native/revision evidence. Do not reinstate expected failures or claim their supersession satisfies all provider/manual/render combinations.
- **Ownership test precision:** authorization posture tests assert endpoint attributes; controller/service tests assert scoped resources; browser account-isolation and crafted API denials test transport behavior. None alone proves every route's successful control traversal, mounted-role revocation, real OAuth, BFCache variation, mailbox binary or successful Admin undo.
- **GET is not database-pure:** `ApplicationWorkspaceService:111–112` obtains checklist state through `ApplicationChecklistService.GetAsync`. First reads seed missing owned deterministic checklist rows; recomputation can save system completion state. These behaviors are covered by the retained checklist tests. Browser zero mutation-request counts establish no frontend-triggered unintended mutation/AI generation; they cannot establish zero server persistence on every GET. The matrix preserves the existing seed/recompute contract explicitly rather than proposing a behavioral repair during this audit.
- **Inherited mail/audit mappings corrected:** `EmailOwnershipIntegrationTests` contains exactly three real Identity confirmation/change-email token cases, no Gmail/mailbox tenant assertions; inherited M02/M03 anchors therefore contribute zero mail behavioral cases here. They are relevant E02/E06 identity evidence. `AuthAndSystemControllerTests` contains no AdminAudit/Undo assertions; its 38 passing cases are excluded from A02, while AdminSystem/auth evidence remains valid. A02’s frontend error/retry/localization and API authorization reflection assertions do not prove successful undo/job restore. Both are documentary coverage discrepancies, not evidence of an application security failure.
## Reconciliation
Exact census: **57 unique rows = E9 + J10 + W12 + C12 + M6 + S5 + A3**. Before: **56 PARTIAL, 1 DEFERRED (C11)**. After: **53 PARTIAL, 3 FAIL (E02/J02/S03), 1 DEFERRED (C11)**. Whole-group statuses are deliberately conservative: no full group is promoted solely from a representative test, source review, route header or axe scan. A PARTIAL row states which finite behavior passes and what remains NOT VERIFIED/BLOCKED; absence of human/provider evidence is not a functional FAIL.
| Status | P5-15-00 before | P5-15-01 verified after |
|---|---:|---:|
| PASS | 0 | 0 |
| PARTIAL | 56 | 53 |
| FAIL | 0 | 3 |
| DEFERRED | 1 | 1 |
| BLOCKED | 0 | 0 |
| NOT VERIFIED | 0 | 0 |
| **Total** | **57** | **57** |
Zero whole-group BLOCKED/NOT VERIFIED does not erase blocked or unverified sub-workflows: every PARTIAL group has fresh representative executable evidence, with its remaining gaps listed. This matrix cannot declare exhaustive behavioral acceptance. Confirmed failures are one P1 saved-search availability defect and two P2 recoverable context/draft failures; E07 also references AUTH-01 but is not double-counted as a second defect.
Original full Phase 5 acceptance remains unavailable with C11/P5-13 and mandatory human/device/provider obligations outstanding. Production remains **NO-GO**; no production, provider, model, destructive account/DB or deployment operation occurred in this matrix task.
@@ -0,0 +1,115 @@
# P5-15-01 — Functional and preservation audit
**NO-GO for proceeding to P5-15-02 under its current entry criteria. Production remains NO-GO. Phase 5 is not complete.** The P1 saved-search workflow fails on the supported local SQLite path. Two P2 context/draft failures also require separately scoped remediation. No application repair, new redesign, production access, `main` change, P5-13 qualification/UI, Docker recovery or B07 occurred.
Audit source: **`932b962b9038ddb5ad59b982c0199475bfb50454`**, development branch `codex/ui-redesign-phase4`, 2026-10-09. Application/build/renderer inputs remain unchanged; this checkpoint adds behavioral audit tests and evidence/documentation. The production branch remains `main` at **`27657f31131cd95d42f0e1290853ec9c9b3959a4`**. Its automatic deployment trigger was not invoked.
## Evidence and methodology
| Record | Scope |
|---|---|
| [Complete preservation matrix](PRES_RESULTS.md) | All57 original contracts: supported capability, actual API/frontend reach action, reads/writes/ownership, mapped fresh assertions, observed outcome, gaps/owner, before/after status |
| [32-route results](ROUTE_RESULTS.md) | Original31 + Analytics; three identities, entry/refresh, aliases/query, native reads/role denials and separately reproduced sign-in return failure |
| [Journeys and controls](JOURNEYS_AND_CONTROLS.md) | What actual UI/API/native fixtures exercise; deliberate faults/mocks, API setup and long-tail limits distinguished |
| [Defect register](DEFECTS.md) | Stable IDs, reproduction, expected/actual behavior, root cause, severity, security/data impact and separate repair requirements |
| [Backend evidence](evidence/backend-summary.json) | Fresh TRX/helpers/Release builds, source/binary/report hashes and scoped security/ownership assertions |
| [Frontend evidence](evidence/frontend-summary.json) | Fresh459 Jest cases,82 suites, application/build inputs, TypeScript/lint/production build and limitations |
| [Browser evidence](evidence/browser-summary.json) | Original full run, final owning-file run, all192 route observations, genuine failures, standalone diagnostics, exact Board membership, security/HTTP, raw report/trace fingerprints |
| [Fidelity evidence](evidence/fidelity-summary.json) | Fresh16 standard +8 settings exports,36=36/24=24, unchanged tolerances, native inputs/hashes and actual agent image review |
| [Native SQLite failure proof](evidence/discovery-failure.json) | Exact installed provider/query translation failure, native500 observations, InMemory coverage gap and source provenance |
| [Separate preference probes](diagnostics/README.md) | Reproducible genuine API/tab-draft/concurrent-save diagnostics, outside the ordinary browser suite |
Sources remain the [original contracts](../../../phase-2/PRESERVATION_MATRIX.md), [Phase1 inventory](../../../audit/FUNCTIONALITY_INVENTORY.md), [traceability](../../../phase-2/TRACEABILITY.md), Phase3 architecture, Phase4 preservation/design records, [approved Phase5 plan](../../PHASE5_PLAN.md), implementation/readiness successors and [P5-15 planning package](../README.md). No original contract was narrowed to fit the implementation.
The audit uses disposable synthetic accounts/files/SQLite, localhost Chromium/static frontend and real API transport where named. External browser requests are blocked. Deterministic provider fixtures are used only where existing tests require them; they are not real-provider qualification. Source/test review is separate from execution. Finite controller/unit assertions are not reported as full browser journeys. Independent read-only review checked evidence attribution and corrected overclaims about ZIP proof, creation/publication setup, denial redaction and generic alerts.
All57 groups received source/API/entry/read-write/permission/test/gap/outcome assessment. This is comprehensive **reconciliation**, not exhaustive execution of every low-frequency operation. Untested real OAuth/mail/2FA, successful native AdminUndo, all long-tail CRUD and device/human combinations remain expressly unverified. No P0/security emergency was demonstrated; no unsafe dependent saved-search mutation or broad remediation was attempted.
## Preservation and route totals
| Whole-group status | P5-15-00 | P5-15-01 |
|---|---:|---:|
| PASS | 0 | 0 |
| PARTIAL | 56 | 53 |
| FAIL | 0 | 3 |
| DEFERRED | 1 | 1 |
| BLOCKED | 0 | 0 |
| NOT VERIFIED | 0 | 0 |
| **Total** | **57** | **57** |
FAIL groups: **E02** sign-in return context, **J02** saved-search read/control recovery, **S03** unsaved Rules settings. C11 remains approved **DEFERRED**, unqualified and Production-withheld. PARTIAL groups have appropriate fresh representative assertions but required scope remains outstanding; they are not confirmed failures or full acceptance. BLOCKED/NOT VERIFIED sub-checks remain visible within those groups despite zero whole-group counts. Group/test counts overlap and are not additive.
All32 current concrete route patterns are reconciled to the original31 plus Analytics. **192 entry/refresh observations** cover anonymous, ordinary and administrator identities. All reach their expected URL/state; **188 route observations satisfy all asserted conditions, four fail** on saved-search500s. Selected native GET observations are **98:94 expected statuses /4 failed**; the remaining94 observations have no selected GET. Finite entry/read criterion: **31 patterns pass,1 fails**. Broader route workflow disposition: **30 PARTIAL,2 FAIL** (Login return and Discover). The separate genuine anonymous login journey drops `months=6`; reaching a page is not enough. Foreign/missing Job/CV entry+refresh adds eight genuine404s with the named private-content absence checks. No pattern was removed and no protected API became intentionally public.
## Confirmed failures and persistence impact
| ID | Severity / PRES | Observed failure | Required owner action |
|---|---|---|---|
| DISCOVERY-01 | **P1 / J02** | Ordinary/admin `GET /job-discovery/saved-searches`500 on entry and refresh. Exact EF SQLite9.0.14 cannot translate `ORDER BY` over unconverted `DateTimeOffset`. Client swallows load failure and presents empty list | Discovery API owner: provider-compatible owned ordered read plus deliberate load feedback/retry; native empty/populated/foreign-ID persistence tests. Separate P5-15-04 repair; deployed MariaDB result must be verified separately |
| AUTH-01 | **P2 / E02, E07** | `/analytics?months=6`→login→`/analytics`; meaningful query lost because guard stores pathname only | Identity/shell owner: preserve safe local requested context at existing boundary, retain redirect/account rules, add token/session/query negative tests. Separate repair |
| SETTINGS-01 | **P2 / S03** | Rules14 edited to5→Notifications→Rules returns14; no warning,zero writes, persisted14. Inactive tab unmount destroys local draft | Settings owner: retain draft or deliberate dirty-navigation protection while preserving explicit per-section Save. Separate repair |
**Newly confirmed totals: P0 0 / P1 1 / P2 2 / P3 0.** Provenance matters: Rules/query risks were already recorded; no evidence dates saved-search failure to the redesign. These are current failures, not assumed newly introduced regressions. The saved-search failure is demonstrated availability/silent-feedback loss, not deletion or tenant disclosure. Rules loses an in-progress edit, not persisted records. Sign-in loses reporting context, not saved content. [Full register](DEFECTS.md) contains exact reproductions and evidence.
Historical “Dashboard preference-save500” is actually a generic server **language** preference response during overlapping Dashboard/setup reads; Dashboard's five visibility flags use owner-local storage. Fresh Dashboard toggle/reload/account fixtures pass. Three separate real overlap rounds produced six successful language/notification writes,12 successful concurrent reads, correct server readback and reload. The recorded500 was **not reproduced** in those rounds and remains OPEN; no cause/fix/concurrency guarantee is inferred. Notification SQLite contention is separately carried debt.
Native readback/reload continues to protect tested Jobs status/trash, source-backed/CV-only/override/reset, selected/sibling/canonical scope, revision/conflict/draft recovery, document settings and frozen package relationships. Retry/conflict fixtures include deliberate injected faults; they do not establish every real race. Overview GET may seed/recompute owned checklist rows under the existing contract; no frontend mutation request is not proof of no database write. Current and historical CV settings versus immutable archived submission bytes retain their original distinctions.
## Actionable controls and security
Fresh named journeys cover local sign-in/session switching, shell collapse/drawer/commands/notifications, reviewed Add, Jobs filter/sort/page/select/status/Trash/Back focus, integrated Board movement/query/custom status, reports/period/exact alternatives, all seven Job sections/dirty navigation, capture/frozen readback/download, task/preparation state, CV source/reset/reorder/save/history/conflict/preview/templates/export and Settings per-section saved readback. [Control report](JOURNEYS_AND_CONTROLS.md) states which actions are UI operations, API setup, mock/provider fixtures or incomplete acceptance.
Saved-search-dependent run/alert/delete/dismiss access cannot recover after the failed list load; the list error has no deliberate feedback. No other dead control is demonstrated by these finite runs. This does not certify every control: successful AuditUndo, live provider integration and all long-tail admin/security/mail/import/export operations remain unverified. Config-disabled registration, Pro locks, unconnected provider409, missing-token states, unpublished-CV404 and deferred Production CV-AI503 are intentional boundaries, not accidentally broken actions.
Fresh backend ownership/auth/CSRF/import/export/revision/frozen/proposal suites and real-browser crafted cookie/session/foreign-ID cases remain green. Ordinary users receive genuine403 on all Admin routes; admin reads200. Foreign/missing Job/CV reads404 and named private content is absent. Those assertions are bounded; hiding navigation is never server authorization, checking one synthetic identity is not exhaustive response redaction, and generic `alert.first()` does not establish specific user-visible error text. No real user data, production credentials or external provider was used. No demonstrated cross-tenant disclosure, historical overwrite, source mutation or unsafe AI apply was found; this is not an exhaustive security certification.
## Fresh validation and count reconciliation
| Gate | Fresh result | Count interpretation |
|---|---|---|
| Backend | **1,023 pass**,0 fail/skip | Unchanged; complete Release suite |
| Frontend | **459 pass /82 suites**,0 fail/pending | Unchanged; no component tests added |
| Ordinary browser | **119 pass /3 fail /122 unique cases** | Inherited117 all pass; five added audit cases yield2pass/3 genuine failures after harness correction |
| Separate preference diagnostics | **1 pass /1 fail /2 cases** | Additional standalone probes, not included in122 ordinary cases |
| Sidecar | **49 pass** | Deterministic/offline, unchanged |
| Focused AI / revision | **108 pass /5 pass** | Backend subsets, not extra1,023 cases |
| RealHTTP | **2 pass** | Production guard before provider/write and unrelated AI fixture; unchanged |
| Rate-limit / ingress / PDF admission / config | **9 /6 /1 /3 pass** | Isolated/local; no deployed F04 proof |
| Other existing helpers | Supply-chain3 /offline evaluation5 /extension3 pass | Separate existing helpers, unchanged |
| Standard native fidelity | **16/16;36 preview=36PDF pages** | Exact membership, unchanged0.5mm page/2mm position/0.5pt font/RGB1/255 tolerances |
| Settings native exports | **8/8;24=24pages** | Fresh before/after template/font/margin/settings exports, unchanged corpus/tolerances |
| Static/build | App +E2E/AI/diagnostic TypeScript, lint, frontend production build, API/test Release builds pass | Complete build inputs unchanged; final test-only TS/lint rerun passes |
| Repository hygiene | Secret/whitespace/document/schema-of-evidence checks | Final results and changed-file/source verification in [repository evidence](evidence/repository-summary.json) |
Browser reconciliation is explicit: initial full run had119passes/3 new harness locator failures; all117 inherited cases were green. Initial ambiguous alert selection, wrong ConnectedAccounts request wait and diagnostic config startup errors are retained as harness errors. Final five-case owning-file rerun completes all192 observations with2passes/3 **application** failures. Reported119/3 is a latest unique-case reconciliation across runs, **not** a single all-green final122-case run. The new native failures are ordinary assertions, never skipped or converted into expected failures. P2-D01 remains an ordinary passing case. No application change invalidates the fresh build/full-suite evidence; tests/docs alone are added.
The finite250-job case compares exact seeded/Table/API/DOM membership across17 normal15-row Table pages and one full Board read. Final observation:296,265response bytes and1,044ms to populated cards; initial full run296,881bytes/1,056ms is recorded separately. These are observations, not a capacity/latency threshold or large-result acceptance. O(N) full-result memory/response/DOM and physical-touch debt remain open.
## Accessibility, visual evidence and P5-15-02 requirements
Fresh native attachments contain **242 axe scans,zero violation entries,1,834 incomplete node occurrences**: contrast1,570; hidden-focus33; prohibited-ARIA209; invalid-ARIA-value18; table association4. The inherited P5-14 result was1,839; five fewer repeated occurrences in this runtime does not close five defects. Incomplete checks are not passes, unique issues or complete accessibility acceptance. Use the [manual script](../MANUAL_ACCEPTANCE.md) and exact node/state attachments for later triage.
Existing keyboard/reorder/drawer/dialog/preview entry-scroll-exit-focus fixtures passed. Actual agent review of two native preview/PDF comparisons in [fidelity evidence](evidence/fidelity-summary.json) confirms measured local placement; fresh native screenshots are retained with run provenance. This is not human assistive-technology or physical-device acceptance. Four theme/locale pairs and scripted responsive states are finite automated evidence, not a replacement for real screen-reader, touch/software keyboard, browser200%/400%zoom/text-spacing/forced-colour or Linux production font/photo proof.
Before02: resolve the P1 supported-provider saved-search prerequisite with independently pushed repair and native owner/read/reload tests; reconcile affected matrix and ordinary failed cases. The P2 failures need recorded remediation dispositions and cannot disappear during responsive review. Once entry criteria are satisfied,02 must triage actual incomplete nodes, verify names/state/role/focus/menus/forms/charts with a suitable human screen reader, then actual physical touch/software keyboard and broader zoom/reflow; unsupported environment checks remain NOT VERIFIED. No02 work starts here.
## Deferred work, release blockers and decision
P5-05 new quick-preview remains approved deferred. P5-13 stays **unfinished/deferred/unqualified/Production-withheld**:0/366 configured-model calls,0 human reviews, semantic accuracy unmeasured, new review UI absent. Fresh deterministic/stale/ownership/history and realHTTP fail-closed protection are green; unrelated AI retains existing fixture functionality. Nothing is activated or qualified here. `followMode` preserves compatibility metadata; mode-specific compose UI is deferred to later mail work.
F04/current complete backup+tested restore/production configuration-schema-secrets verification/tested rollback/protected deployment and real runtime smoke remain **release blockers**, separately tracked in [production/debt register](../READINESS_DEBT.md). No development pass satisfies them. Production font/photo, manual screen-reader/incomplete axe/device/reflow, historical preference500, Board scaling/touch and recorded feedback/focus races remain open with their original owners. B07/profile-job revision work and future Phase7/8 redesign/capabilities remain excluded.
**P5-15-01 finding checkpoint is recorded; progression to02 is NO-GO** because01→02 requires preservation failures addressed, and significant P1 remains. Recommended next instruction: authorize a bounded DISCOVERY-01 remediation checkpoint, with provider-compatible owned query, deliberate load feedback and exact native regressions, each completed logical change committed/pushed; then reconcile AUTH-01/SETTINGS-01 and01 entry evidence before02. Do not merge/deploy `main`, resume P5-13, or declare original full Phase5 complete.
## Immediate commit/push ledger
| Completed logical unit | Commit (pushed immediately and remote verified) |
|---|---|
| Fresh backend evidence | `a7c6b5bf527a6fa3013e89b85f810343272e27bc` |
| Fresh frontend/static evidence | `74c0be6b13f87960787d20cf1f4b6447ab094ab5` |
| Fresh native fidelity/comparisons | `83d3e909f5213f39a5a3373f08849f1aee58c125` |
| Native saved-search P1 proof | `4c52b571239e0b964cf26186ca67604fc16cc79b` |
| Five ordinary audit cases, two standalone diagnostics and genuine browser results | `266e53c16a17a627765a5f484070a4e4475bda01` |
| Final audit/matrix/parent reconciliation | Commit introducing this final report, recorded in Git history and final task reply; self-referential hash is not embedded |
Final report is committed/pushed separately after document/secret/whitespace/source checks; compare the final development remote to HEAD and verify a clean working tree. These checks do not modify production `main`; final Git output is the verification source, not a deployment claim.
@@ -0,0 +1,61 @@
# P5-15-01 route results
Fresh disposable Chromium/Development API census at unchanged application source `932b962b9038ddb5ad59b982c0199475bfb50454`, 2026-10-09. [Portable execution](evidence/browser-summary.json) contains all raw entry/refresh destinations/statuses, times, command/report/test hashes and limits. [Original/source route plan](../ROUTE_ACCEPTANCE.md) retains owner/query/navigation mappings; [57-group result](PRES_RESULTS.md) records capability scope.
**32 current patterns = all31 original patterns + Analytics.** Current source has35 route declarations including wildcard/duplicate-root infrastructure,32 concrete patterns,29 pages/3redirects. No current original pattern is removed. For each pattern, anonymous, ordinary account and administrator each perform entry and hard refresh: **192 observations**. All192 reach the expected URL/heading/config state; **188 route observations satisfy all asserted conditions / 4 fail** on saved-search500s. Selected native GET observations are **98:94 expected statuses /4 failed**; the other94 route observations have no selected GET. Separately, a real anonymous→login return loses `months=6`, despite reaching Analytics.
The finite entry/refresh criterion passes31 patterns and fails1 (`/discover`). The broader workflow-status column is **30 PARTIAL / 2 FAIL** (`/login` return context and `/discover` list): native entry is not an exhaustive functional journey. Meaningful query loss is not normalized as a passed workflow. Public missing-token/config-disabled and provider-not-connected states are intentional limitations, not failures. The route census does not submit every form or exercise live providers.
## Complete concrete-pattern inventory
Every identity cell applies to both entry and refresh; selected native GETs are the current page read, not HTTP200 from a static shell. Public cases assert their actual named missing-link/config state. Scope IDs inherit the unchanged original plan.
| Pattern | Original/current disposition | PRES scope | Anonymous entry + refresh | Normal entry + refresh | Admin entry + refresh | Finite entry/read | Full workflow status / remaining proof |
|---|---|---|---|---|---|---|---|
| `/` | Preserved public page | E01/E02/E07/E08 | Public plans | Dashboard redirect | Dashboard redirect | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/login` | Preserved public page | E02–E05/E09 | Named public/config/token state | Named public/config/token state | Named public/config/token state | PASS (bounded) | FAIL AUTH-01; query lost on actual sign-in return |
| `/register` | Preserved public page | E02/E03 | Named public/config/token state | Named public/config/token state | Named public/config/token state | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/forgot-password` | Preserved public page | E02 | Named public/config/token state | Named public/config/token state | Named public/config/token state | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/reset-password` | Preserved public page | E02 | Named public/config/token state | Named public/config/token state | Named public/config/token state | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/verify-email` | Preserved public page | E02 | Named public/config/token state | Named public/config/token state | Named public/config/token state | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/confirm-email-change` | Preserved public page | E06 | Named public/config/token state | Named public/config/token state | Named public/config/token state | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/microsoft-legacy-relink` | Preserved public page | E03 | Named public/config/token state | Named public/config/token state | Named public/config/token state | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/cv/:slug` | Preserved public page | C05/C12 | Unpublished public CV404 | Unpublished public CV404 | Unpublished public CV404 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/dashboard` | Enhanced original page — P5-06 | S01/S02/E07–E09 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/analytics` | Added enhanced page — P5-07 | S01/S02/E07–E09/J05/J09 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix; direct months=6 retained, login-return loss tracked AUTH-01 |
| `/discover` | Preserved page; Jobs secondary entry | J01/J02 | Landing redirect; private main absent | Native GET500 | Native GET500 | FAIL DISCOVERY-01 | FAIL DISCOVERY-01; saved searches/control recovery blocked |
| `/jobs` | Enhanced original page — P5-03/P5-04b | J03–J07/W01/S03 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/jobs/:id` | Enhanced original page — P5-08a/b | W01–W12/M01/M02/E07–E09 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/reminders` | Preserved page; Jobs secondary entry | W10/W11 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/operations` | Preserved page; utility entry | W12/S02 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/kanban` | Legacy original pattern; redirect after P5-04b | J07/W01/E07 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/companies` | Preserved page; Jobs secondary entry | J08 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/offers` | Preserved page; Jobs secondary entry | J09/S01 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/correspondence` | Preserved primary page | M01–M06 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/correspondence/review` | Preserved legacy redirect | M05 | Landing redirect; private main absent | Gmail not connected409 + warning | Gmail not connected409 + warning | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/profile` | Preserved page; Settings/account entry | E04–E06 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/applications/:id` | Preserved legacy redirect | W01/E07 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/career` | Preserved page; Career Profile entry | C01–C04 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/career/builder` | Preserved page; CVs entry | C05 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/career/builder/:id` | Enhanced original editor — P5-09–12/P5-14 | C06–C12/W05/E07–E09 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/admin/audit` | Preserved authorized admin page | A02 | Landing redirect; private main absent | Server403; role denied | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/admin/users` | Preserved authorized admin page | A01 | Landing redirect; private main absent | Server403; role denied | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/admin/system` | Preserved authorized admin page | A03 | Landing redirect; private main absent | Server403; role denied | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/trash` | Enhanced original page — P5-03 | J06/S03 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/settings` | Preserved page; Account entry | S03–S05/J10/E08 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
| `/settings/connected-accounts` | Preserved page; Settings secondary entry | M06/E03 | Landing redirect; private main absent | Native GET200 | Native GET200 | PASS (bounded) | PARTIAL; full action/provider/manual criteria in PRES matrix |
## Compatibility and navigation actually exercised
- `/kanban?q=Acceptance&status=Saved#board` becomes `/jobs?q=Acceptance&status=Saved&view=board#board`: query/hash retained, real matching card appears; existing integration fixture adds filter/history/keyboard behavior.
- `/applications/{id}?section=documents&followMode=waiting-update#workspace` becomes `/jobs/{id}?section=documents&followMode=waiting-update`: section/followMode survive, incoming hash does not. The approved exception remains **metadata only**, not implemented compose UI. Existing navigation fixtures separately exercise routed state, all seven canonical/legacy sections, Back/Forward/reload and dirty Cancel/Discard.
- `/correspondence/review?route=all#review` becomes `/correspondence?view=review`; extra query/hash are discarded by the existing alias. In this unconnected fixture the native API returns deliberate409 `gmail_not_connected` with the named warning. This is compatibility characterization, not real Gmail qualification.
- Native normal/admin Dashboard→Jobs via existing navigation, browser Back/Forward and admin metadata distinction pass after the full census; normal-account Admin APIs deny403. The denial checks additionally assert absence of one synthetic bootstrap identity, not exhaustive redaction.
- Additional owned/foreign-account setup tests Job/CV missing and foreign direct entry+refresh: **eight genuine404s**, no foreign job title/private CV-name control, safe Job back action/legacy metadata. The generic `alert.first()` may match the Next route announcer; it does not prove specific error feedback. No unsafe dependent mutation is attempted.
- Existing inherited117 browser cases cover named Jobs→Job→Back focus, independent loading/errors/retry, dirty navigation, CV draft recovery, publication revoke, keyboard menus/dialogs and responsive mode transitions. Some deliberately inject responses; [journey report](JOURNEYS_AND_CONTROLS.md) identifies setup, mocks/faults and end-to-end limits.
## Reachability and outstanding evidence
Grouped navigation preserves Jobs/Discover/Companies/Offers/Trash, Career Profile/CV library, Analytics, Settings/account/mail and role-gated Admin destinations at their approved primary/secondary/utility entry points. The source navigation mapping and inherited command/search fixtures remain; no original capability is removed here. This is not proof that every control completes its workflow: saved-search-dependent controls are inaccessible after the failed load; successful Admin AuditUndo, every security/draft/provider mutation and real reset-mail/2FA/OAuth remain NOT VERIFIED. The API, not hidden UI, enforces observed denials.
No wildcard/RouteErrorPage is counted as a33rd concrete pattern. No production deep-link/deployment health, production provider authorization, human screen-reader, real-device/software-keyboard, complete zoom/reflow or new quick-preview host is claimed. Production remains NO-GO. The P1 saved-search defect and P2 sign-in context defect require their separate repairs before acceptance; no routes or semantics were changed in this audit.
@@ -361,6 +361,9 @@
"status": 500
}
],
"selectedNativeGetObservations": 98,
"expectedSelectedNativeGetObservations": 94,
"observationsWithoutSelectedGet": 94,
"postLoginQueryFailure": {
"requested": "/analytics?months=6",
"actual": "/analytics"
@@ -0,0 +1,285 @@
{
"auditSource": "932b962b9038ddb5ad59b982c0199475bfb50454",
"applicationChanged": false,
"ciSchemaDeploymentConfigurationChanged": false,
"candidateParent": "266e53c16a17a627765a5f484070a4e4475bda01",
"productionMain": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
"productionChanged": false,
"preservation": {
"uniqueGroups": 57,
"before": {
"PARTIAL": 56,
"DEFERRED": 1
},
"after": {
"PARTIAL": 53,
"FAIL": 3,
"DEFERRED": 1
},
"originalContractIdsUnchanged": true
},
"routes": {
"original": 31,
"addedAnalytics": 1,
"current": 32,
"originalPatternsPreserved": true
},
"testOnlyAdditions": {
"ordinaryBrowserCases": 5,
"standaloneDiagnosticCases": 2,
"productionApplicationFixes": 0
},
"staticDocumentChecks": {
"balancedTablesAndFences": true,
"currentLocalAnchorsResolved": true
},
"checks": [
{
"name": "e2e-typescript-final",
"command": [
"rtk",
"proxy",
"node",
"node_modules/typescript/bin/tsc",
"--project",
"../.artifacts/p5-15-01/e2e-tsconfig.json",
"--noEmit",
"--incremental",
"false"
],
"startedUtc": "2026-10-09T12:00:21.288329+00:00",
"finishedUtc": "2026-10-09T12:00:23.618926+00:00",
"exitCode": 0,
"logPath": ".artifacts/p5-15-01/final/e2e-typescript-final.log",
"logSha256": "a4ed4c2c830adf807283a578ea7ee8b2f659416a86da69815d6147237e7d7f36"
},
{
"name": "lint-final",
"command": [
"rtk",
"proxy",
"npm.cmd",
"run",
"lint"
],
"startedUtc": "2026-10-09T12:00:23.619427+00:00",
"finishedUtc": "2026-10-09T12:00:39.673095+00:00",
"exitCode": 0,
"logPath": ".artifacts/p5-15-01/final/lint-final.log",
"logSha256": "cfebe429755ba96788c4799da52e25090c30bf8c70ef856fb3dbb9cb1396b233"
},
{
"name": "document-links",
"command": [
"rtk",
"proxy",
"C:/Users/Connor/.cache/codex-runtimes/codex-primary-runtime/dependencies/python/python.exe",
"-X",
"utf8",
".artifacts/p4-04-check-doc-links.py"
],
"startedUtc": "2026-10-09T12:00:39.673596+00:00",
"finishedUtc": "2026-10-09T12:00:40.356468+00:00",
"exitCode": 0,
"logPath": ".artifacts/p5-15-01/final/document-links.log",
"logSha256": "3dd809c41c457dd055c1f8a2cac01ccc4fe0bafe35f1b9956af6671dc3237a70"
},
{
"name": "tracked-and-staged-secrets",
"command": [
"rtk",
"proxy",
"python",
"scripts/supply-chain.py",
"scan-secrets"
],
"startedUtc": "2026-10-09T12:00:40.356988+00:00",
"finishedUtc": "2026-10-09T12:00:42.274078+00:00",
"exitCode": 0,
"logPath": ".artifacts/p5-15-01/final/tracked-and-staged-secrets.log",
"logSha256": "da6efdc7fe0b34b8658c000c05ed2eaa8fdaf0dd62756adf51f7a770d5a4485f"
},
{
"name": "working-whitespace",
"command": [
"rtk",
"proxy",
"git",
"diff",
"--check"
],
"startedUtc": "2026-10-09T12:00:42.274572+00:00",
"finishedUtc": "2026-10-09T12:00:42.395234+00:00",
"exitCode": 0,
"logPath": ".artifacts/p5-15-01/final/working-whitespace.log",
"logSha256": "a4ed4c2c830adf807283a578ea7ee8b2f659416a86da69815d6147237e7d7f36"
},
{
"name": "staged-whitespace",
"command": [
"rtk",
"proxy",
"git",
"diff",
"--cached",
"--check"
],
"startedUtc": "2026-10-09T12:00:42.395234+00:00",
"finishedUtc": "2026-10-09T12:00:42.512268+00:00",
"exitCode": 0,
"logPath": ".artifacts/p5-15-01/final/staged-whitespace.log",
"logSha256": "a4ed4c2c830adf807283a578ea7ee8b2f659416a86da69815d6147237e7d7f36"
},
{
"name": "audit-range-whitespace",
"command": [
"rtk",
"proxy",
"git",
"diff",
"932b962b9038ddb5ad59b982c0199475bfb50454",
"--check"
],
"startedUtc": "2026-10-09T12:00:42.512770+00:00",
"finishedUtc": "2026-10-09T12:00:42.644007+00:00",
"exitCode": 0,
"logPath": ".artifacts/p5-15-01/final/audit-range-whitespace.log",
"logSha256": "a4ed4c2c830adf807283a578ea7ee8b2f659416a86da69815d6147237e7d7f36"
},
{
"name": "changed-tracked-files",
"command": [
"rtk",
"proxy",
"git",
"diff",
"932b962b9038ddb5ad59b982c0199475bfb50454",
"--name-only"
],
"startedUtc": "2026-10-09T12:00:42.644007+00:00",
"finishedUtc": "2026-10-09T12:00:42.759476+00:00",
"exitCode": 0,
"logPath": ".artifacts/p5-15-01/final/changed-tracked-files.log",
"logSha256": "f6e301b8b00ae41f8a58df3dfc708db454b2de2201b6677b64027e03b96b4a46"
},
{
"name": "local-main",
"command": [
"rtk",
"proxy",
"git",
"rev-parse",
"main"
],
"startedUtc": "2026-10-09T12:00:42.759992+00:00",
"finishedUtc": "2026-10-09T12:00:42.864402+00:00",
"exitCode": 0,
"logPath": ".artifacts/p5-15-01/final/local-main.log",
"logSha256": "897066df123bc63e82a45f42fe9b6dbc9dd0aeff602dd814ffdf3ffd8de8ec2c"
},
{
"name": "remote-branches",
"command": [
"rtk",
"proxy",
"git",
"ls-remote",
"origin",
"refs/heads/main",
"refs/heads/codex/ui-redesign-phase4"
],
"startedUtc": "2026-10-09T12:00:42.864402+00:00",
"finishedUtc": "2026-10-09T12:00:43.079888+00:00",
"exitCode": 0,
"logPath": ".artifacts/p5-15-01/final/remote-branches.log",
"logSha256": "8a41caeb1afd3a756f5ff2c74a0c1b419acd02050f693db4267c84765a052340"
},
{
"name": "development-head",
"command": [
"rtk",
"proxy",
"git",
"rev-parse",
"HEAD"
],
"startedUtc": "2026-10-09T12:00:43.079888+00:00",
"finishedUtc": "2026-10-09T12:00:43.190366+00:00",
"exitCode": 0,
"logPath": ".artifacts/p5-15-01/final/development-head.log",
"logSha256": "927b494618025d5f04b5afdbfc046bd4bf8b75ec05f226aa3d0ca2d240316dda"
}
],
"changedTrackedFiles": [
"docs/redesign/phase-5/p5-15/PRESERVATION_ACCEPTANCE.md",
"docs/redesign/phase-5/p5-15/README.md",
"docs/redesign/phase-5/p5-15/p5-15-01/DEFECTS.md",
"docs/redesign/phase-5/p5-15/p5-15-01/JOURNEYS_AND_CONTROLS.md",
"docs/redesign/phase-5/p5-15/p5-15-01/PRES_RESULTS.md",
"docs/redesign/phase-5/p5-15/p5-15-01/README.md",
"docs/redesign/phase-5/p5-15/p5-15-01/ROUTE_RESULTS.md",
"docs/redesign/phase-5/p5-15/p5-15-01/diagnostics/README.md",
"docs/redesign/phase-5/p5-15/p5-15-01/diagnostics/playwright.config.ts",
"docs/redesign/phase-5/p5-15/p5-15-01/diagnostics/preferences.spec.ts",
"docs/redesign/phase-5/p5-15/p5-15-01/evidence/backend-summary.json",
"docs/redesign/phase-5/p5-15/p5-15-01/evidence/browser-summary.json",
"docs/redesign/phase-5/p5-15/p5-15-01/evidence/dark-nb-after-page-1-comparison.png",
"docs/redesign/phase-5/p5-15/p5-15-01/evidence/discovery-failure.json",
"docs/redesign/phase-5/p5-15/p5-15-01/evidence/fidelity-summary.json",
"docs/redesign/phase-5/p5-15/p5-15-01/evidence/frontend-summary.json",
"docs/redesign/phase-5/p5-15/p5-15-01/evidence/long-nb-code-page-4-comparison.png",
"docs/redesign/phase-5/p5-15/p5-15-01/evidence/repository-summary.json",
"job-tracker-ui/e2e/functional-acceptance.spec.ts"
],
"textSourceHashes": [
{
"path": "docs/redesign/phase-5/p5-15/PRESERVATION_ACCEPTANCE.md",
"sha256": "3cb07dffa677c4133f56b1bc8967218ad70091e3e921076d7939de28df5b06cb"
},
{
"path": "docs/redesign/phase-5/p5-15/README.md",
"sha256": "6b3f6d973799ae57bd3be35fadf7c8967f92b3010fecc380ed836f64b9bd422b"
},
{
"path": "docs/redesign/phase-5/p5-15/p5-15-01/DEFECTS.md",
"sha256": "a2823b0c49bd95146e658b9f094ef4f646f9f4f2a03c416a6c77bcf064ea1a7a"
},
{
"path": "docs/redesign/phase-5/p5-15/p5-15-01/JOURNEYS_AND_CONTROLS.md",
"sha256": "0ed9a188f764465a55fd65faaa51c6736fcfb797fabd78300fc2ed99ce03636e"
},
{
"path": "docs/redesign/phase-5/p5-15/p5-15-01/PRES_RESULTS.md",
"sha256": "4a4ebba3b43ce3f878d7babeefe560714c284cde749e772e0d9fdedec95a683d"
},
{
"path": "docs/redesign/phase-5/p5-15/p5-15-01/README.md",
"sha256": "3cf7f9a7789a739d6f80aeb56b479f7f34f2b1b3bf1fb4a8256d7342a78c2f52"
},
{
"path": "docs/redesign/phase-5/p5-15/p5-15-01/ROUTE_RESULTS.md",
"sha256": "975aca216f2502e2fcf25051ea60964713c7d40f99febf74f779b43e5209e3c6"
},
{
"path": "docs/redesign/phase-5/p5-15/p5-15-01/diagnostics/README.md",
"sha256": "2b7b45344a8dfa8d9a7534a8d0d561617d1ab958fd9968924d347cff517b26a6"
},
{
"path": "docs/redesign/phase-5/p5-15/p5-15-01/diagnostics/playwright.config.ts",
"sha256": "f05fcaee1d3e63b740677f6974b8be44b07678e9d0eda98e2c696290e39be85d"
},
{
"path": "docs/redesign/phase-5/p5-15/p5-15-01/diagnostics/preferences.spec.ts",
"sha256": "d0c3a8c0dc13973e8eb1d4c9686cdd92d69bad47971f12f23ac23ca67ca8c440"
},
{
"path": "job-tracker-ui/e2e/functional-acceptance.spec.ts",
"sha256": "ccc5a7234e3a1ab9714da38563f04e6c58f652d33274bfcef2c2547e015ecdd8"
}
],
"limits": [
"Ordinary browser has3real failures; separate diagnostics have1. This hygiene record does not mark them passing.",
"Remote/head record is pre-final-document commit. Final push/tree/remote equality must be verified after that commit.",
"No production, live-model/provider, human AT, physical-device or complete release certification."
]
}