diff --git a/docs/redesign/phase-5/p5-15/PRESERVATION_ACCEPTANCE.md b/docs/redesign/phase-5/p5-15/PRESERVATION_ACCEPTANCE.md index 854b8ad..3d8fd17 100644 --- a/docs/redesign/phase-5/p5-15/PRESERVATION_ACCEPTANCE.md +++ b/docs/redesign/phase-5/p5-15/PRESERVATION_ACCEPTANCE.md @@ -1,6 +1,12 @@ # P5-15 preservation acceptance — 57 original groups -## Current P5-15-01 reconciliation +## Current P5-15-01R-01 reconciliation + +The [bounded saved-search repair](p5-15-01/saved-search-repair/README.md) supersedes only DISCOVERY-01. Its native SQLite listing, persistence, owner denials and localized error/retry proof change **PRES-J02 from FAIL to PARTIAL**. Scheduler delivery, live providers and human/device checks remain unverified; no entire group is promoted to PASS. + +Current totals: **PASS0 / PARTIAL54 / FAIL2 / DEFERRED1 / BLOCKED0 / NOT VERIFIED0 =57**. E02 (Analytics sign-in query loss) and S03 (unsaved Rules draft loss) remain FAIL. C11 remains approved DEFERRED/Production-withheld. Zero wholly NOT VERIFIED groups does not close the unverified sub-workflows in every PARTIAL row. The original00 and01 columns and failed audit evidence are preserved; the new successor column shows current status. Production remains NO-GO and P5-15-02 has not begun. + +## Historical 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. @@ -21,71 +27,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 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. +The original00column has **56PARTIAL,1DEFERRED,0PASS/FAIL/whollyNOT VERIFIED groups**; the added01column records the historical audit53PARTIAL/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 | 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. | +| 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 | P5-15-01R-01 current | 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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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 search semantics/service retained; R-01 adds independent saved-list feedback. | [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) | **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 run/alert semantics retained; R-01 repairs list loading and feedback. | [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) | **PARTIAL**; [R-01 native proof](p5-15-01/saved-search-repair/README.md); [SQLite10cases](../../../../JobTrackerApi.Tests/SavedJobSearchSqliteTests.cs) | DISCOVERY-01 SQLite listing and suppressed error are repaired; native create/reload/apply UI, pause/resume/delete and owner denial have bounded proof. Provider-dependent browser output is intercepted; real SQLite runner uses a deterministic service. Scheduler-to-notification delivery, mobile delete confirmation, live MariaDB/PostgreSQL and human screen reader remain unverified. | 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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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) | **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 diff --git a/docs/redesign/phase-5/p5-15/README.md b/docs/redesign/phase-5/p5-15/README.md index 86d34f2..73157e5 100644 --- a/docs/redesign/phase-5/p5-15/README.md +++ b/docs/redesign/phase-5/p5-15/README.md @@ -1,10 +1,17 @@ # P5-15 — Phase 5 final acceptance -## Current checkpoint: P5-15-01 functional/preservation audit +## P5-15-01R-01 — Current bounded saved-search successor + +[Saved-search repair and evidence](p5-15-01/saved-search-repair/README.md) resolves the native SQLite GET500 and hidden error. PRES-J02 moves FAIL→PARTIAL; current57 totals are **0PASS/54PARTIAL/2FAIL/1DEFERRED/0BLOCKED/0NOT VERIFIED**. The01 audit remains historical below. AUTH-01 Analytics query loss and SETTINGS-01 Rules draft loss stay open/failing; no automatic P2 repair or P5-15-02 progression is authorized. Production remains NO-GO; `main` is unchanged. P5-13 stays deferred/unqualified/Production-withheld with0/366calls,0human reviews and no review UI. + +R-01 fresh results: **backend1,033 / frontend464 / ordinary browser124pass+1fail / separate diagnostics1pass+1fail**. All117 inherited browser cases pass; three new repair cases pass and the original normal/admin saved-search failures are resolved. Sidecar49, focusedAI108, realHTTP2, revision5, fidelity16/16(36=36), settings8/8(24=24) and security/config9/6/1/3 pass. Fresh251axe scans have0reported violations and**1,880incomplete node occurrences**; no human/device acceptance is implied. [Current evidence and limits](p5-15-01/saved-search-repair/README.md#fresh-validation-and-diagnostic-reconciliation) supersede only the named outcomes, not mandatory acceptance scope. + + +## Historical 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. +Exact PRES totals at the01 audit: **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 were native failures at that checkpoint, not56 assumed defects or an assertion that the audit introduced them. The successor above supersedes J02 only. 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. diff --git a/docs/redesign/phase-5/p5-15/p5-15-01/DEFECTS.md b/docs/redesign/phase-5/p5-15/p5-15-01/DEFECTS.md index 40f80c9..d2133f0 100644 --- a/docs/redesign/phase-5/p5-15/p5-15-01/DEFECTS.md +++ b/docs/redesign/phase-5/p5-15/p5-15-01/DEFECTS.md @@ -1,12 +1,14 @@ # P5-15-01 functional defect register +**R-01 current disposition:** DISCOVERY-01 is **CLOSED for the verified SQLite listing/error/recovery defect** by the [bounded repair](saved-search-repair/README.md). Live deployed-provider qualification and complete PRES-J02 delivery/device acceptance remain open. AUTH-01 and SETTINGS-01 remain P2/OPEN; current reproduced open counts areP0=0/P1=0/P2=2/P3=0. Original reproduction/severity/evidence below remain historical; closing this defect does not erase release blockers or grant full-group PASS. + 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. +**Confirmed P1 at audit / CLOSED by R-01 for the verified SQLite defect.** PRES-J02; `/discover`; `GET /api/job-discovery/saved-searches`. The original local SQLite workflow was NO-GO; see the successor native proof. Production release remains blocked by its separate readiness/provider verification obligations; a SQLite exception is not proof of the deployed MariaDB result. | Field | Evidence-based finding | |---|---| @@ -72,6 +74,6 @@ The two standalone [preference diagnostics](diagnostics/README.md) assert intend | 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. +**No P0 is demonstrated by the collected evidence.** That is a bounded finding, not an exhaustive security certification. At the original audit, P1 saved-search verification and dependent activity were blocked; R-01 now supplies the scoped repair proof; 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. +Original audit finding totals: **P0 0 / P1 1 / P2 2 / P3 0**. Current open reproduced totals after R-01: **P0 0 / P1 0 / 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. diff --git a/docs/redesign/phase-5/p5-15/p5-15-01/PRES_RESULTS.md b/docs/redesign/phase-5/p5-15/p5-15-01/PRES_RESULTS.md index c76edca..00f4eda 100644 --- a/docs/redesign/phase-5/p5-15/p5-15-01/PRES_RESULTS.md +++ b/docs/redesign/phase-5/p5-15/p5-15-01/PRES_RESULTS.md @@ -1,5 +1,7 @@ # P5-15-01 functional preservation results +**Successor R-01:** [saved-search repair](saved-search-repair/README.md) verifies the native SQLite/list feedback repair. J02 is now PARTIAL; current57 totals are54PARTIAL/2FAIL/1DEFERRED in the [parent successor column](../PRESERVATION_ACCEPTANCE.md). This01 matrix and its53PARTIAL/3FAIL/1DEFERRED totals remain the original audit outcome, not a current open-defect count. No full group has been certified PASS. + 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. diff --git a/docs/redesign/phase-5/p5-15/p5-15-01/README.md b/docs/redesign/phase-5/p5-15/p5-15-01/README.md index 3ec7461..cce3134 100644 --- a/docs/redesign/phase-5/p5-15/p5-15-01/README.md +++ b/docs/redesign/phase-5/p5-15/p5-15-01/README.md @@ -1,5 +1,7 @@ # P5-15-01 — Functional and preservation audit +**Successor checkpoint:** [P5-15-01R-01](saved-search-repair/README.md) repairs DISCOVERY-01 on SQLite and visible list failure/retry. The original audit findings/counts below are preserved historically. The parent matrix now records54PARTIAL/2FAIL/1DEFERRED; Analytics AUTH-01 and Rules SETTINGS-01 remain open ordinary failures. R-01 does not authorize P5-15-02 or production. + **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. diff --git a/docs/redesign/phase-5/p5-15/p5-15-01/ROUTE_RESULTS.md b/docs/redesign/phase-5/p5-15/p5-15-01/ROUTE_RESULTS.md index a1d8086..e665852 100644 --- a/docs/redesign/phase-5/p5-15/p5-15-01/ROUTE_RESULTS.md +++ b/docs/redesign/phase-5/p5-15/p5-15-01/ROUTE_RESULTS.md @@ -1,5 +1,7 @@ # P5-15-01 route results +**R-01 successor:** [native saved-search repair](saved-search-repair/README.md) reruns all32 patterns/192 entry-refresh observations. The four normal/admin Discover reads now return200, with98 selected native reads and no remaining500. All entry-refresh assertions pass; the separately asserted sign-in query return still fails. Current broader workflow disposition is31PARTIAL/1FAIL (Login), not32 fully accepted workflows. The original01 table, failed observations and30PARTIAL/2FAIL outcome below remain historical. + 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. diff --git a/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/README.md b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/README.md new file mode 100644 index 0000000..c13e4d2 --- /dev/null +++ b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/README.md @@ -0,0 +1,180 @@ +# P5-15-01R-01 — Saved-search loading and error visibility + +Source: `54a377054f6138c5645a3da293dacd84d3056237`, development branch `codex/ui-redesign-phase4`, 2026-10-09. This bounded checkpoint repairs **P5-15-01-DISCOVERY-01** only. Production remains **NO-GO**; production `main` is unchanged at `27657f31131cd95d42f0e1290853ec9c9b3959a4`. + +The affected feature is **saved NAV searches in Discover (`/discover`)**, reached from the Jobs secondary navigation. It uses `SavedJobSearch` and `/api/job-discovery/saved-searches`. Jobs Table **Saved views** are a separate filter-preference domain. Neither the Table/Board query contract nor route hierarchy is changed. + +## Original reproduction and root cause + +The original audit recorded four genuine HTTP500s: normal/admin entry and refresh. This checkpoint reran the normal-user census **before any backend repair** and reproduced two more native saved-search GET500s against the existing disposable SQLite application. The new real-SQLite regression then failed for an empty owner, previously persisted records and a create/run/readback journey: **3 failed / 7 passed / 0 skipped**. + +The exact failing operation was `OrderByDescending(x => x.UpdatedAtUtc)` inside `ListSavedSearches`, followed by `ToListAsync`. `UpdatedAtUtc` is an unconverted `DateTimeOffset`; installed EF Core SQLite raises: + +> SQLite does not support expressions of type 'DateTimeOffset' in ORDER BY clauses. + +This is a translation failure **before SQL execution**, not a missing account, corrupted search record, serializer exception, NAV outage or SQL statement rejected by SQLite. There is therefore no successfully executed failing SQL to reproduce. [Sanitized before/after evidence](evidence/validation.json) retains the exception, clean RED/GREEN counts, native request observations and fingerprints of raw logs/results. + +| Stage | Actual behavior / authoritative boundary | +|---|---| +| Frontend | Discover requests the saved list; the old catch silently retained an empty array | +| API/authentication | Local authorization runs; the current-user service resolves the authenticated owner | +| Persistence | `Where(OwnerUserId == owner)` is retained, but the old unsupported timestamp ordering fails query translation | +| Materialization/serialization | The old query never reaches materialization or DTO serialization; native transport returns500 | +| User feedback | Old UI presented “No saved searches yet”; new UI announces the failed read and offers Retry | + +Initial test-harness errors are separate from product evidence: async principal setup in a direct-controller fixture was corrected before the clean RED; validation asserts `ProblemDetails` rather than a formatter status unavailable outside MVC execution. The first new browser matrix run expected language-preference200 instead of its existing204 contract; only that fixture assertion was corrected. None of these errors was counted as a product pass or used to weaken the saved-search assertions. + +## Smallest repair and compatibility + +`JobDiscoveryController.ListSavedSearches` now projects owner-filtered **summary scalars and two SQL aggregate counts**. It does not materialize search-result entities. SQLite sorts the materialized **owned summaries** by `DateTimeOffset` instant; non-SQLite providers retain database ordering. Mixed-offset fixtures prove actual chronological order rather than lexical timestamp order. + +Ownership filtering and result counts remain in SQL. The API already returns all of an owner's saved-search summaries; this preserves that response contract. SQLite's sort costs O(n log n) time/O(n) summary memory for that owner, rather than loading every account or every stored result. This is not client-side ownership/filter evaluation. No arbitrary limit, truncation, schema migration, timestamp rewrite, database reset or data deletion is introduced. + +Existing DTO fields, descending-update semantics, cancellation, create trimming/validation, alert toggle, explicit run, result dismissal and delete/cascade behavior remain intact. No separate read-by-id endpoint or renamed search mutation is invented: the existing PATCH updates `IsActive`, not stored query/name. The real runner still uses the current service and normal persistence path. + +### Provider qualification + +The repository configures **SQLite and Pomelo MySQL/MariaDB**, with MariaDB11 in the existing deployment. It does **not** currently configure Npgsql/PostgreSQL. The non-SQLite branch retains server-side ordering and uses ordinary owner-filtered projections/counts; no SQLite-only schema workaround changes that branch. + +**Live MariaDB and PostgreSQL integration are NOT VERIFIED.** No approved server/credential fixture was available and none was added. Source compatibility and Release compilation are evidence for the query shape, not successful execution against either server. PostgreSQL parity cannot be claimed for an unconfigured provider. Deployed provider/schema qualification remains a separate production obligation. + +## Frontend states and recovery + +| State | User-facing behavior | +|---|---| +| Loading | Named `status`, busy saved-search region; no successful-empty message; creation disabled | +| Loaded empty | Existing “No saved searches yet” message after a valid empty response | +| Loaded populated | Existing run/alert/delete controls and metadata; no interface redesign | +| Error / malformed response | Existing outlined MUI error Alert with localized concise wording and Retry; no internal server details; list not presented as refreshed | +| Retry | Reloads only the saved-search resource. Current role/company, municipality, discovery result set and sorting remain available | + +The page validates the received list's existing DTO shape. A200 containing null, an object, or incomplete rows is a failed read, not an empty successful account. An unmounted/obsolete effect cannot publish its response. Saved rows are hidden while loading/failed, so stale data is not represented as successfully refreshed. + +Save search remains disabled until a list is loaded. Review reproduced the otherwise-hidden-success risk after a failed initial read; a focused RED assertion failed before this guard and passes afterward. Retry restores creation without silently appending to an unknown list. This does not discard the user's search-name or discovery draft. + +Translations: + +- EN: “Loading saved searches…” / “Saved searches could not be loaded. Try again.” +- Bokmål: “Laster lagrede søk…” / “Lagrede søk kunne ikke lastes. Prøv igjen.” + +Existing Retry wording and shared MUI semantics are reused. No new global resource framework, notification system or settings surface is added. + +## Files changed and scope justification + +| File | Bounded reason | +|---|---| +| `JobTrackerApi/Controllers/JobDiscoveryController.cs` | Owns the failed query; owner-filtered projection/counts and provider-compatible ordering | +| `JobTrackerApi.Tests/SavedJobSearchSqliteTests.cs` | Ten new real-SQLite cases, real current-user service; no EF InMemory proof for the provider defect | +| `job-tracker-ui/src/views/JobDiscoveryPage.tsx` | Owns the suppressed saved-list failure and recovery without changing discovery/query semantics | +| `job-tracker-ui/src/i18n/translations.ts` | Two new labels in both existing languages; no new terminology domain | +| `job-tracker-ui/src/job-discovery.test.tsx` | Five new behavior cases; one old fixture now includes its actual `isActive` DTO field; existing seven tests retained | +| `job-tracker-ui/e2e/saved-search-repair.spec.ts` | Three new native transport/UI contract cases, explicit provider interception and injected fault boundaries | +| This record and P5-15 acceptance/defect evidence | Current status and traceability; original failed audit evidence remains historical | + +No application code outside the discovery controller/page and shared translation owner changes. No authentication/session boundary, route, Jobs Table/Board, renderer, model/schema, CI/deployment, AI configuration or dependency changes occur. + +## Behavioral verification + +| Requirement | Evidence / result scope | +|---|---| +| New user empty list | Real SQLite integration and native authenticated GET/UI return200 + `[]`; no provider call | +| Previously persisted records | Save seeded owned/foreign records, clear tracking and reread; exact owned IDs/counts and mixed-offset descending instants; no entities tracked | +| Create/navigation/reload | Native201 from UI, navigate Jobs→Discover, refresh and compare exact persisted DTO; reload after pause/resume and delete | +| Apply saved search | UI action restores saved query/municipality and renders the provider fixture; native SQLite controller/runner verifies actual filter inputs, run/result persistence and subsequent readback | +| Update/delete | Native pause/resume200 and delete204, readback/refresh; backend verifies result cleanup and missing/foreign404 | +| Isolation | Native second account cannot list or mutate first account's search; forged owner/id payloads remain caller-owned; six anonymous list/create/update/delete/run/dismiss requests return401 | +| Foreign persisted result | Real-SQLite fixture seeds a foreign result and verifies dismissal denial/readback. Browser foreign dismissal uses an unavailable result, so it is not the sole proof of relationship ownership | +| Failure/recovery | Jest HTTP500 and malformed payload cases; browser deliberately faults only saved-list reads and retries the **native GET**, preserving edited filters and existing one-off results | +| Table/Board | Existing full-suite ID-membership/query/alias/owner tests retained; Jobs Saved views stays separate. Saved NAV repair does not modify that domain | + +### Explicit test boundaries + +The browser uses the real disposable local SQLite API for list/create/toggle/delete/authentication and owner denials. Only the **owner's provider-dependent run output and one-off vacancy search** are intercepted; NAV's base URL is external and no new live-provider processing is authorized. The backend tests exercise the real runner with a deterministic `IJobDiscoverySearchService`, real SQLite and real current-user resolution. This is stronger persistence evidence than mocked repositories, but not live NAV qualification. + +The existing saved-alert worker is disabled **only by the browser-run environment flag** `Workers__SavedJobSearchAlertsEnabled=false` to avoid unintended external calls. No configuration file or production behavior is changed. Scheduler-to-notification/live delivery remains outside this proof. + +Reload restores the persisted search **list**. Existing Discover semantics do not automatically rerun a search or persist the current one-off input as URL state. Explicit Apply restores the saved inputs. The checkpoint does not invent automatic query execution on reload. + +## Preservation reconciliation + +| PRES | Existing contract → defect/change → evidence → current acceptance | +|---|---| +| **J02** | Named saved searches/run/delete/alerts/result state → list500 + silent error → scalar read repair and visible independent error/retry → ten SQLite cases, native lifecycle/denial/recovery cases plus retained alert tests → **FAIL→PARTIAL**, not whole-group PASS | +| **J01** | NAV source/search/reviewed save → list failure must not disable one-off discovery → retry retains form/results; existing discovery behavior tests remain green → **PARTIAL unchanged** | +| **J05/J07** | Table filters/saved views and Board population/status/navigation → distinct saved-search domain → no Table/Board source changes; existing full browser membership/alias tests → **PARTIAL unchanged** | +| **E07/E08/E09** | Reachability, accessible named loading/error/retry, authenticated ownership → same Discover secondary entry and safe feedback → browser navigation/roles, finite axe, native tampering/anonymous denial → **PARTIAL unchanged** | + +All original57 groups remain reconciled in the [parent matrix](../../PRESERVATION_ACCEPTANCE.md). This scoped repair cannot certify scheduler delivery, mobile delete confirmation, real providers or human screen-reader acceptance. The original01 columns retain their failed observations; the successor column records current evidence. + +## Fresh validation and diagnostic reconciliation + +All results below are **fresh local executions**, not inherited passes. [Validation/commands/fingerprints](evidence/validation.json), [saved-search RED/GREEN/native proof](evidence/saved-search-proof.json) and [repository/build/document checks](evidence/repository-validation.json) retain provenance. Raw logs/TRX/JSON/PDF files remain under the ignored `.artifacts/p5-15-01R-01/`; portable fingerprints and finite synthetic screenshots are committed. + +| Gate | Inherited / audit source | Fresh final result | Count reconciliation | +|---|---|---|---| +| Backend | 1,023 | **1,033 passed**, 0failed/0skipped | +10 actual SQLite cases described above | +| Frontend | 459 /82suites | **464 passed /82suites**, 0failed/0skipped | +5 loading/error/malformed response cases; old7 discovery cases retained | +| Ordinary browser | 117 inherited +5 audit cases:119pass/3fail | **124 passed /1 failed /125 total**, 0skipped/0expected failures | All117 inherited pass; original five audit cases now4pass/1fail; +3 new repair cases pass | +| Saved-search focused browser | No dedicated native repair cases | **3/3 passed** | These same cases are also in the125-case full run; do not add them twice | +| Separate diagnostics | 1pass/1fail | **1pass/1fail** | Preference concurrency pass; Rules draft failure unchanged; not counted inside125 | +| Focused AI | 108 | **108 passed** | Backend subset; deterministic guards, not model qualification | +| Sidecar | 49 | **49 passed** | Offline; no model/provider qualification | +| Real HTTP | 2 | **2 passed** | Production CV-review withholding and authoritative proposal boundary remain protected | +| Revision safety | 5 | **5/5 passed** | Backend subset; no revision changes | +| Standard fidelity | 16;36=36pages | **16/16;36 preview=36 PDF pages** | Same corpus and declared tolerances | +| Settings exports | 8;24=24pages | **8/8;24 preview=24 PDF pages** | Same settings corpus and declared tolerances | +| Rate-limit / ingress / PDF admission / configuration | 9/6/1/3 | **9/6/1/3 passed** | Local security/configuration evidence; not deployed F04 proof | +| Additional offline supply / evaluator / extension | 3/5/3 | **3/5/3 passed** | No live evaluation, extension deployment or provider calls | +| TypeScript / E2E TypeScript / lint / frontend production / API Release builds | Passing | **Passed** | App and test typing, global lint, both builds; API warnings/errors0 | +| Secrets / whitespace / documents /57-group reconciliation | Passing | **Passed** | [Recorded checks](evidence/repository-validation.json); original contracts and route inventory unchanged | + +The complete browser command exits1 because **AUTH-01 remains an ordinary failed case**: `/analytics?months=6` loses its period query after sign-in. The separate diagnostics command exits1 because **SETTINGS-01 remains an ordinary failed case**: unsaved14→5→tab round trip returns14, persisted14, zero writes. These are **not** skipped, quarantined, expected failures or repaired here. Both original normal/admin route failures caused by DISCOVERY-01 now pass. P2-D01 remains an ordinary passing case. + +An initial new browser fixture expected200 from the existing language-preference PUT, whose actual contract is204; that harness assertion was corrected before the genuine3/3 run. No saved-search failure expectation was weakened. The first post-final-change Jest run observed463pass/1fail in an unchanged CV preview “Unsaved” assertion. Its isolated rerun and subsequent **complete464-case rerun** pass. The failed report remains fingerprinted; the cause is **not established**, no CV code/test is changed and no product fix is claimed. This is an open recurrence/verification risk for later CV acceptance. An earlier full frontend run began before the last UI guard change and is retained as intermediate evidence, not the final baseline. + +The fresh route census covers all32 patterns/192 entry-refresh observations and98 selected native reads, with no remaining saved-search500. Four normal/admin Discover entry-refresh GETs now return200. All entry-refresh assertions pass; login query continuity remains failed. Broader route status is therefore **31PARTIAL/1FAIL**, not32 fully accepted workflows. [Original route evidence](../ROUTE_RESULTS.md) is retained historically. + +## Visual, localisation and accessibility evidence + +The new browser matrix tests **EN/light1440px, EN/dark390px, Bokmål/light390px and Bokmål/dark1440px**, including loading, fault and native retry, with edited inputs and a retained one-off result. It captures13 actual screenshots and checks document width against viewport width. These are Chromium mouse/viewport checks, not physical phone/touch/software-keyboard acceptance. + +| Captured state | Evidence | +|---|---| +| Persisted saved search after native reload | [EN/light desktop](evidence/saved-search-native-persisted-en-light-desktop.png) | +| Error with preserved current discovery results | [EN/light desktop](evidence/saved-search-en-light-1440-load-error.png) | +| Narrow error message and Retry | [EN/dark390px](evidence/saved-search-en-dark-390-load-error.png) | +| Native retry restores saved controls while retaining changed inputs/results | [Bokmål/light390px](evidence/saved-search-nb-light-390-native-retry.png) | +| Named pending load, no false empty state | [Bokmål/dark desktop](evidence/saved-search-nb-dark-1440-loading.png) | + +The coding agent inspected the genuine desktop error, dark narrow error and Bokmål narrow retry images: controls/text reflow, current results remain present and the message has no internal details. This is **agent visual inspection**, not independent human or screen-reader acceptance. + +Scoped saved-search scans: **9 axe scans,0 violations,52 incomplete color-contrast node occurrences**. The complete fresh browser run records **251 scans,0 reported violations,1,880 incomplete node occurrences**. Incompletes are unaccepted; repeated occurrences are not a count of unique defects. Named status/Alert/Retry controls have automated evidence, but spoken announcements, actual screen reader, physical touch and complete zoom/reflow remain open. Existing manual accessibility requirements are preserved. + +## Current debt and stopping boundary + +| Item | Disposition after this checkpoint | +|---|---| +| DISCOVERY-01 P1 | **Closed for demonstrated SQLite listing + suppressed-error/recovery defect**; no data deletion or ownership regression observed | +| AUTH-01 P2 Analytics sign-in query | **OPEN/failing**, separate bounded repair required | +| SETTINGS-01 P2 Rules draft retention | **OPEN/failing**, separate bounded repair required | +| Historical Dashboard/language preference-save500 | **OPEN**; bounded concurrency diagnosis passes again, not reproduced does not mean fixed | +| Live MariaDB/PostgreSQL/NAV; saved-alert delivery | **NOT VERIFIED**; provider/scheduler qualification remains separate; PostgreSQL not configured | +| Transient CV “Unsaved” assertion | First full attempt failed; isolated and subsequent full passes; cause unestablished, retained for later recurrence triage | +| Manual screen reader, incomplete axe, physical touch/software keyboard, broader zoom/reflow, production fonts/photos | **OPEN/NOT VERIFIED**, preserved for assigned acceptance owners | +| Board scaling/native touch; metadata-only `followMode` compose UI | **OPEN/deferred** per existing plan; no remediation | +| P5-05/P5-13/B07 | No implementation; P5-13 remains unqualified,0/366calls,0human reviews, review UI deferred, Production withholding active | +| F04, current backup/restore, production configuration/schema/secrets and tested rollback | **Release blockers remain NOT VERIFIED**; no infrastructure recovery or deployment | + +The [defect register](../DEFECTS.md) retains the original three findings and now distinguishes the two currently open reproduced defects from the closed SQLite defect. J02 stays PARTIAL and the whole57 matrix is **PASS0/PARTIAL54/FAIL2/DEFERRED1/BLOCKED0/NOT VERIFIED0**. No original contract is weakened and no unrelated failure is closed by this repair. + +## Checkpoints and decision + +| Logical checkpoint | Commit / immediate push evidence | +|---|---| +| Real-SQLite reproducer and owner-filtered summary repair | **`bcc959904915e381ef6bfe5c236d9626021681d4`**; pushed and remote equality verified before continuing | +| Visible load/failure/retry, guarded creation, localized labels and behavior/native browser regressions | **`2753d03db643c4b90b12c62748b0e844981d48b8`**; pushed and remote equality verified before final documentation | +| Final validation, scoped proof and acceptance/defect reconciliation | This independently pushed documentation checkpoint; final hash and remote/clean-tree confirmation are reported to the owner after commit | + +**P5-15-01R-01: GO for the bounded saved-search repair.** The original HTTP500 is fixed, previously persisted data and current create/reload/apply controls work at the declared native/provider boundaries, real SQLite regressions and ownership denials pass, and failed reads have safe accessible recovery. All relevant saved-search cases pass. The complete baseline remains explicitly red for the two unrelated P2 defects. + +**Production: NO-GO. P5-15-02 is not started or cleared by this checkpoint.** Reconcile AUTH-01/SETTINGS-01 through separately authorized bounded work. Stop here; no Analytics/Rules repair, P5-13, B07, production merge or deployment follows automatically. diff --git a/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/repository-validation.json b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/repository-validation.json new file mode 100644 index 0000000..cd06763 --- /dev/null +++ b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/repository-validation.json @@ -0,0 +1,252 @@ +{ + "status": "PASS for repository/build/static checks only", + "codeCheckpoint": "2753d03db643c4b90b12c62748b0e844981d48b8", + "finalDocumentCommit": "This record; final push/tree equality is verified after commit and reported to the owner.", + "productionMain": "27657f31131cd95d42f0e1290853ec9c9b3959a4", + "productionChanged": false, + "checks": [ + { + "name": "api-release-final", + "command": [ + "rtk", + "proxy", + "C:/Users/Connor/.dotnet/dotnet.exe", + "build", + "JobTrackerApi/JobTrackerApi.csproj", + "--configuration", + "Release", + "--no-restore", + "-warnaserror" + ], + "startedUtc": "2026-10-09T13:24:53.501352+00:00", + "finishedUtc": "2026-10-09T13:25:03.683070+00:00", + "exitCode": 0, + "logSha256": "9367b7240ef6eead402c931d7133cf6570b120ee3d25c9deb0d853693c9b2b39" + }, + { + "name": "e2e-typescript", + "command": [ + "rtk", + "proxy", + "node", + "node_modules/typescript/bin/tsc", + "--project", + "../.artifacts/p5-15-01/e2e-tsconfig.json", + "--noEmit", + "--incremental", + "false" + ], + "startedUtc": "2026-10-09T13:25:03.683565+00:00", + "finishedUtc": "2026-10-09T13:25:06.152292+00:00", + "exitCode": 0, + "logSha256": "a4ed4c2c830adf807283a578ea7ee8b2f659416a86da69815d6147237e7d7f36" + }, + { + "name": "lint-final", + "command": [ + "rtk", + "proxy", + "npm.cmd", + "run", + "lint" + ], + "startedUtc": "2026-10-09T13:25:06.152793+00:00", + "finishedUtc": "2026-10-09T13:25:38.707043+00:00", + "exitCode": 0, + "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-09T13:25:38.707553+00:00", + "finishedUtc": "2026-10-09T13:25:39.452916+00:00", + "exitCode": 0, + "logSha256": "168e84db44c16efddb29f55c5da708c253b9ea8043355277bf25811d3abe19f3" + }, + { + "name": "secret-scan", + "command": [ + "rtk", + "proxy", + "C:/Users/Connor/.cache/codex-runtimes/codex-primary-runtime/dependencies/python/python.exe", + "-X", + "utf8", + "scripts/supply-chain.py", + "scan-secrets" + ], + "startedUtc": "2026-10-09T13:25:39.453419+00:00", + "finishedUtc": "2026-10-09T13:25:41.316106+00:00", + "exitCode": 0, + "logSha256": "da6efdc7fe0b34b8658c000c05ed2eaa8fdaf0dd62756adf51f7a770d5a4485f" + }, + { + "name": "working-whitespace", + "command": [ + "rtk", + "proxy", + "git", + "diff", + "--check" + ], + "startedUtc": "2026-10-09T13:25:41.316106+00:00", + "finishedUtc": "2026-10-09T13:25:41.438960+00:00", + "exitCode": 0, + "logSha256": "a4ed4c2c830adf807283a578ea7ee8b2f659416a86da69815d6147237e7d7f36" + }, + { + "name": "staged-whitespace", + "command": [ + "rtk", + "proxy", + "git", + "diff", + "--cached", + "--check" + ], + "startedUtc": "2026-10-09T13:25:41.439516+00:00", + "finishedUtc": "2026-10-09T13:25:41.555188+00:00", + "exitCode": 0, + "logSha256": "a4ed4c2c830adf807283a578ea7ee8b2f659416a86da69815d6147237e7d7f36" + }, + { + "name": "checkpoint-whitespace", + "command": [ + "rtk", + "proxy", + "git", + "diff", + "54a377054f6138c5645a3da293dacd84d3056237", + "--check" + ], + "startedUtc": "2026-10-09T13:25:41.555730+00:00", + "finishedUtc": "2026-10-09T13:25:41.688445+00:00", + "exitCode": 0, + "logSha256": "a4ed4c2c830adf807283a578ea7ee8b2f659416a86da69815d6147237e7d7f36" + }, + { + "name": "checkpoint-files", + "command": [ + "rtk", + "proxy", + "git", + "diff", + "54a377054f6138c5645a3da293dacd84d3056237", + "--name-only" + ], + "startedUtc": "2026-10-09T13:25:41.688445+00:00", + "finishedUtc": "2026-10-09T13:25:41.801172+00:00", + "exitCode": 0, + "logSha256": "b3f0d534993b8b8b2f0e231154771d1f1baa2e1a9341a31446bfa256027b9e16" + }, + { + "name": "original-contracts-unchanged", + "command": [ + "rtk", + "proxy", + "git", + "diff", + "54a377054f6138c5645a3da293dacd84d3056237", + "--", + "docs/redesign/phase-2", + "docs/redesign/audit/ROUTE_MAP.md" + ], + "startedUtc": "2026-10-09T13:25:41.801686+00:00", + "finishedUtc": "2026-10-09T13:25:41.916281+00:00", + "exitCode": 0, + "logSha256": "a4ed4c2c830adf807283a578ea7ee8b2f659416a86da69815d6147237e7d7f36" + }, + { + "name": "main-revision", + "command": [ + "rtk", + "proxy", + "git", + "rev-parse", + "main" + ], + "startedUtc": "2026-10-09T13:25:41.916281+00:00", + "finishedUtc": "2026-10-09T13:25:42.022752+00:00", + "exitCode": 0, + "logSha256": "897066df123bc63e82a45f42fe9b6dbc9dd0aeff602dd814ffdf3ffd8de8ec2c" + }, + { + "name": "remote-branches", + "command": [ + "rtk", + "proxy", + "git", + "ls-remote", + "origin", + "refs/heads/main", + "refs/heads/codex/ui-redesign-phase4" + ], + "startedUtc": "2026-10-09T13:25:42.023246+00:00", + "finishedUtc": "2026-10-09T13:25:42.245781+00:00", + "exitCode": 0, + "logSha256": "0e50b46b0bf8069c66d5d95937e05ad3eff7fa05bad450f21853e3f3cdd583c3" + }, + { + "name": "code-head", + "command": [ + "rtk", + "proxy", + "git", + "rev-parse", + "HEAD" + ], + "startedUtc": "2026-10-09T13:25:42.246279+00:00", + "finishedUtc": "2026-10-09T13:25:42.356820+00:00", + "exitCode": 0, + "logSha256": "82cb2a0e4c3c76f65eb68dfa103998771793211a3b53e1106207687b00f16382" + } + ], + "changedTrackedFiles": [ + "JobTrackerApi.Tests/SavedJobSearchSqliteTests.cs", + "JobTrackerApi/Controllers/JobDiscoveryController.cs", + "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/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/saved-search-repair/README.md", + "docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-en-dark-390-load-error.png", + "docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-en-light-1440-load-error.png", + "docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-native-persisted-en-light-desktop.png", + "docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-nb-dark-1440-loading.png", + "docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-nb-light-390-native-retry.png", + "docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-proof.json", + "docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/validation.json", + "job-tracker-ui/e2e/saved-search-repair.spec.ts", + "job-tracker-ui/src/i18n/translations.ts", + "job-tracker-ui/src/job-discovery.test.tsx", + "job-tracker-ui/src/views/JobDiscoveryPage.tsx" + ], + "preservation": { + "total": 57, + "historical": { + "PARTIAL": 53, + "FAIL": 3, + "DEFERRED": 1 + }, + "current": { + "PARTIAL": 54, + "FAIL": 2, + "DEFERRED": 1 + }, + "originalIdsUnchanged": true + }, + "routePatterns": 32, + "balancedMarkdown": true, + "limits": [ + "Browser remains124pass/1failure; standalone diagnostics1pass/1failure.", + "No production, human AT/device or live-provider qualification." + ] +} diff --git a/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-en-dark-390-load-error.png b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-en-dark-390-load-error.png new file mode 100644 index 0000000..7775034 Binary files /dev/null and b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-en-dark-390-load-error.png differ diff --git a/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-en-light-1440-load-error.png b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-en-light-1440-load-error.png new file mode 100644 index 0000000..dd21b18 Binary files /dev/null and b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-en-light-1440-load-error.png differ diff --git a/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-native-persisted-en-light-desktop.png b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-native-persisted-en-light-desktop.png new file mode 100644 index 0000000..9c41dbf Binary files /dev/null and b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-native-persisted-en-light-desktop.png differ diff --git a/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-nb-dark-1440-loading.png b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-nb-dark-1440-loading.png new file mode 100644 index 0000000..aa57749 Binary files /dev/null and b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-nb-dark-1440-loading.png differ diff --git a/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-nb-light-390-native-retry.png b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-nb-light-390-native-retry.png new file mode 100644 index 0000000..55ea6af Binary files /dev/null and b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-nb-light-390-native-retry.png differ diff --git a/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-proof.json b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-proof.json new file mode 100644 index 0000000..c5f89d7 --- /dev/null +++ b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-proof.json @@ -0,0 +1,202 @@ +{ + "sourceCheckpoint": "54a377054f6138c5645a3da293dacd84d3056237", + "scope": "Synthetic disposable native SQLite transport plus explicitly intercepted provider output; no production, live NAV/model, human screen reader or physical touch qualification.", + "beforeNativeReads": [ + { + "pattern": "/discover", + "mode": "entry", + "destination": "/discover", + "status": 500 + }, + { + "pattern": "/discover", + "mode": "refresh", + "destination": "/discover", + "status": 500 + } + ], + "beforeRouteObservationCount": 64, + "savedFocusedStats": { + "startTime": "2026-10-09T12:51:20.074Z", + "duration": 51321.988999999994, + "expected": 3, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "nativeOwnerEvidence": { + "mockBoundary": "No endpoint interception in this case; denied run checks ownership before any provider call.", + "evidence": [ + { + "operation": "foreign list with forged owner/id/filter", + "status": 200 + }, + { + "operation": "foreign update", + "status": 404 + }, + { + "operation": "foreign delete", + "status": 404 + }, + { + "operation": "foreign run", + "status": 404 + }, + { + "operation": "foreign dismiss", + "status": 404 + }, + { + "operation": "anonymous list", + "status": 401 + }, + { + "operation": "anonymous create", + "status": 401 + }, + { + "operation": "anonymous update", + "status": 401 + }, + { + "operation": "anonymous delete", + "status": 401 + }, + { + "operation": "anonymous run", + "status": 401 + }, + { + "operation": "anonymous dismiss", + "status": 401 + } + ] + }, + "nativeRetryEvidence": [ + { + "variant": "saved-search-en-light-1440", + "faultStatus": 500, + "retryStatus": 200, + "delayedStatus": 200 + }, + { + "variant": "saved-search-en-dark-390", + "faultStatus": 200, + "retryStatus": 200, + "delayedStatus": 200 + }, + { + "variant": "saved-search-nb-light-390", + "faultStatus": 500, + "retryStatus": 200, + "delayedStatus": 200 + }, + { + "variant": "saved-search-nb-dark-1440", + "faultStatus": 200, + "retryStatus": 200, + "delayedStatus": 200 + } + ], + "axe": { + "scans": 9, + "violations": 0, + "incompleteNodeOccurrences": 52 + }, + "incompleteRules": { + "color-contrast": 52 + }, + "screenshots": [ + { + "path": "docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-native-persisted-en-light-desktop.png", + "sha256": "833d216db43a39b0f09405d2436504655b9b3aa2d3df9888dd735fd531505783" + }, + { + "path": "docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-en-light-1440-load-error.png", + "sha256": "c49d7377f32647341fc41ac793e97d3c70ce04d5eb747af218e197e00c0b5f2f" + }, + { + "path": "docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-en-dark-390-load-error.png", + "sha256": "f4c35c43d71668919432436147c4b8c58a540f86e98038d8a66876c9136e2a72" + }, + { + "path": "docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-nb-light-390-native-retry.png", + "sha256": "d331ae3ffef8fa7ce3867f04b290e4f8feeaf90215443437474172eba8cf0d59" + }, + { + "path": "docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/saved-search-nb-dark-1440-loading.png", + "sha256": "e115a9af730ab6a1e672423a2be83d38e67049a21278f19a56df7ddd7f3450ed" + } + ], + "sourceHashes": [ + { + "path": "JobTrackerApi/Controllers/JobDiscoveryController.cs", + "sha256": "06dece853bf6a09662692058fa166dc748c3a86dc0aba0a73e7db583b5cc36b6" + }, + { + "path": "JobTrackerApi.Tests/SavedJobSearchSqliteTests.cs", + "sha256": "cce4ec28606b53a4756f6056afbc4ae626cdcb6f624a85ede0268cacd6c1bf50" + }, + { + "path": "job-tracker-ui/src/views/JobDiscoveryPage.tsx", + "sha256": "9407a04a8ea39f21cff6631367cd8a744a101807be0a7777d8d03ae8a01c299f" + }, + { + "path": "job-tracker-ui/src/i18n/translations.ts", + "sha256": "1fd49ffa0bfac4500a0dda0d9ee0c02e42ccc201160f7fee13800b88c6398ed5" + }, + { + "path": "job-tracker-ui/src/job-discovery.test.tsx", + "sha256": "b334cb40fd7d7450ea3585631fb64b9ca9ded7194a714f6ce524bf57668afd4e" + }, + { + "path": "job-tracker-ui/e2e/saved-search-repair.spec.ts", + "sha256": "d18d064da6ebba4ba9096076c061addfdf103c9ed4cc504d07e3263a494d61f8" + } + ], + "rawEvidence": [ + { + "path": ".artifacts/p5-15-01R-01/browser-red.json", + "sha256": "e854d8fabcde614ebb2be1f2535b0f7822554956beb387044a2fbc0a5cedd0b1" + }, + { + "path": ".artifacts/p5-15-01R-01/browser-red-command.json", + "sha256": "8f3066a17d5fa3c5c52eefa73318564d63b37755c18baf65e698b2d47fb84f19" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/saved-focused.json", + "sha256": "07ddf0a473ed6399d69f3521b412c8d36af344044aff59ec028cfffb906c9521" + }, + { + "path": ".artifacts/p5-15-01R-01/backend/focused-summary.json", + "sha256": "23a227c35f0c8cbd5c8aacde7012f8d28b6862ef2afa0cfe513560d9c53664f6" + }, + { + "path": ".artifacts/p5-15-01R-01/backend/sqlite-list-before.txt", + "sha256": "15a2d4399a1eb49634dc905d8a40496bbb31e2add7bdb985bbda1b737a4cfc08" + }, + { + "path": ".artifacts/p5-15-01R-01/backend/sqlite-list-after.sql", + "sha256": "d509d2d53f0560455bb8377d98858c627b2ff004359a509dfe7af01b0e6e1f32" + }, + { + "path": ".artifacts/p5-15-01R-01/frontend-red.json", + "sha256": "0c81161c4cba8cb51cdc63f6dc5b9f53e903a2dcd580a53e2f7769bb3fef3693" + }, + { + "path": ".artifacts/p5-15-01R-01/frontend-error-create-red.json", + "sha256": "f1522072f39e1315d66e8e7b37a6010824f22f0b7b51e1fa2beafac76b43b12e" + }, + { + "path": ".artifacts/p5-15-01R-01/frontend-final-focused.json", + "sha256": "195e8ef97e7f7403b7a3f40c88a06af2d66470a4539d6a3d2b53d89948dbaf1e" + } + ], + "limitations": [ + "Provider-run browser output intercepted; real runner SQLite test uses a deterministic external service.", + "Worker disabled only in test environment; no scheduler-to-notification qualification.", + "Live MariaDB and PostgreSQL not exercised; PostgreSQL is not currently configured.", + "Axe incomplete and human/device checks remain open." + ] +} diff --git a/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/validation.json b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/validation.json new file mode 100644 index 0000000..e270cab --- /dev/null +++ b/docs/redesign/phase-5/p5-15/p5-15-01/saved-search-repair/evidence/validation.json @@ -0,0 +1,873 @@ +{ + "sourceCheckpoint": "54a377054f6138c5645a3da293dacd84d3056237", + "repairCodeCommits": [ + "bcc959904915e381ef6bfe5c236d9626021681d4", + "2753d03db643c4b90b12c62748b0e844981d48b8" + ], + "recordedUtc": "2026-10-09T13:23:40.922708+00:00", + "scope": "Full fresh local regression after final application change; two unrelated P2 failures remain ordinary failing cases. No production, live NAV/model/provider, human AT or physical-device certification.", + "backend": [ + { + "name": "backend-full", + "command": [ + "rtk", + "proxy", + "C:/Users/Connor/.dotnet/dotnet.exe", + "test", + "JobTrackerApi.Tests/JobTrackerApi.Tests.csproj", + "--configuration", + "Release", + "--no-build", + "--logger", + "trx;LogFileName=backend-full.trx", + "--results-directory", + ".artifacts/p5-15-01R-01/backend/final", + "--", + "xUnit.parallelizeTestCollections=false", + "xUnit.maxParallelThreads=1" + ], + "startedUtc": "2026-10-09T12:50:36.292101+00:00", + "finishedUtc": "2026-10-09T12:51:14.850457+00:00", + "exitCode": 0, + "total": 1033, + "passed": 1033, + "failed": 0, + "logSha256": "12fe4a7908242bc2451c21b68d7250e34f212c742d202becd6ed640d2562ce00", + "resultSha256": "cf9ca7ee77e29e7f3b6dbb816eb5d8f63df7e171b0c4f10391185d7813868bef" + }, + { + "name": "cv-revision", + "command": [ + "rtk", + "proxy", + "C:/Users/Connor/.dotnet/dotnet.exe", + "test", + "JobTrackerApi.Tests/JobTrackerApi.Tests.csproj", + "--configuration", + "Release", + "--no-build", + "--filter", + "FullyQualifiedName~CvRevisionReadinessTests", + "--logger", + "trx;LogFileName=cv-revision.trx", + "--results-directory", + ".artifacts/p5-15-01R-01/backend/final", + "--", + "xUnit.parallelizeTestCollections=false", + "xUnit.maxParallelThreads=1" + ], + "startedUtc": "2026-10-09T12:51:14.884357+00:00", + "finishedUtc": "2026-10-09T12:51:23.769542+00:00", + "exitCode": 0, + "total": 5, + "passed": 5, + "failed": 0, + "logSha256": "65c5d0bdacfbdb7e6445dce4c2430de022b01bbe76665e1b74539ff33a079f2d", + "resultSha256": "de68eef51c333707474827efdc3a3d0ea4017d95f6b5658b1b79307f242a0287" + }, + { + "name": "focused-ai", + "command": [ + "rtk", + "proxy", + "C:/Users/Connor/.dotnet/dotnet.exe", + "test", + "JobTrackerApi.Tests/JobTrackerApi.Tests.csproj", + "--configuration", + "Release", + "--no-build", + "--filter", + "FullyQualifiedName~CvAi|FullyQualifiedName~AiWorkspace|FullyQualifiedName~AiPrivacyPolicy|FullyQualifiedName~MeteredSummarizerService", + "--logger", + "trx;LogFileName=focused-ai.trx", + "--results-directory", + ".artifacts/p5-15-01R-01/backend/final", + "--", + "xUnit.parallelizeTestCollections=false", + "xUnit.maxParallelThreads=1" + ], + "startedUtc": "2026-10-09T12:51:23.771541+00:00", + "finishedUtc": "2026-10-09T12:51:36.791416+00:00", + "exitCode": 0, + "total": 108, + "passed": 108, + "failed": 0, + "logSha256": "c43ec1fdc923469e004c4a70ca0c781896802b279ad5f6b2acb971d6c8f26cf5", + "resultSha256": "df115fb5e161b109de8f38e88965c800f7f91de1d12d3ec3d0dfcc71132db7b0" + } + ], + "backendBuilds": [ + { + "name": "api-release-build", + "command": [ + "rtk", + "proxy", + "C:/Users/Connor/.dotnet/dotnet.exe", + "build", + "JobTrackerApi/JobTrackerApi.csproj", + "--configuration", + "Release", + "--no-restore", + "-warnaserror" + ], + "startedUtc": "2026-10-09T12:42:23.030024+00:00", + "finishedUtc": "2026-10-09T12:42:24.991361+00:00", + "exitCode": 0, + "log": ".artifacts\\p5-15-01R-01\\backend\\full\\api-release-build.log", + "logSha256": "44bcf29e7f4181ef797bc566ef0410debaafcba274e1b8bb6c6eb02f9f0a6c7b", + "warnings": 0, + "errors": 0 + }, + { + "name": "backend-test-project-release-build", + "command": [ + "rtk", + "proxy", + "C:/Users/Connor/.dotnet/dotnet.exe", + "build", + "JobTrackerApi.Tests/JobTrackerApi.Tests.csproj", + "--configuration", + "Release", + "--no-restore", + "-warnaserror" + ], + "startedUtc": "2026-10-09T12:42:24.994735+00:00", + "finishedUtc": "2026-10-09T12:42:27.962238+00:00", + "exitCode": 0, + "log": ".artifacts\\p5-15-01R-01\\backend\\full\\backend-test-project-release-build.log", + "logSha256": "cd0b2eb3404c9e9d059394ca8b4dcd074fbdd455a9a93c08ff06804f38d6983f", + "warnings": 0, + "errors": 0 + } + ], + "offlineHelpers": [ + { + "name": "sidecar", + "command": [ + "rtk", + "proxy", + "tools/summarizer/.venv/Scripts/python.exe", + "-m", + "pytest", + "tools/summarizer/tests", + "-q", + "-o", + "cache_dir=E:/Storage/Projects/Active/Job tracker/.artifacts/p5-15-01R-01/backend/full/helpers/pytest-cache", + "--basetemp=E:/Storage/Projects/Active/Job tracker/.artifacts/p5-15-01R-01/backend/full/helpers/pytest-tmp", + "--junitxml=E:/Storage/Projects/Active/Job tracker/.artifacts/p5-15-01R-01/backend/full/helpers/sidecar.xml" + ], + "startedUtc": "2026-10-09T12:43:47.564095+00:00", + "finishedUtc": "2026-10-09T12:44:16.395351+00:00", + "durationSeconds": 28.831, + "exitCode": 0, + "expectedPassed": 49, + "log": ".artifacts/p5-15-01R-01/backend/full/helpers/sidecar.log", + "logSha256": "634ab03038f5a35121b63aad69a1bd0c8961a00b1cf58af9e69aeb235edc2186", + "logModifiedUtc": "2026-10-09T12:44:14.862921+00:00", + "offlineEnvironment": { + "AI_SERVICE_SKIP_MODEL_LOAD": "1", + "HF_HUB_OFFLINE": "1", + "TRANSFORMERS_OFFLINE": "1" + }, + "resultFile": ".artifacts/p5-15-01R-01/backend/full/helpers/sidecar.xml", + "resultFileSha256": "fafd4a05635473afb5a9b0f14a92b1811ae28f0c6932a1574ece8501d6c6dab1", + "total": 49, + "passed": 49, + "failed": 0, + "errors": 0, + "skipped": 0, + "countEvidence": "Fresh JUnit testcase elements and child outcomes", + "result": "PASS", + "includedInBackendTotal": false + }, + { + "name": "configuration-tests", + "command": [ + "rtk", + "proxy", + "C:/Users/Connor/.cache/codex-runtimes/codex-primary-runtime/dependencies/python/python.exe", + "-X", + "utf8", + "scripts/test-ingress.py" + ], + "startedUtc": "2026-10-09T12:44:16.400409+00:00", + "finishedUtc": "2026-10-09T12:44:18.583189+00:00", + "durationSeconds": 2.183, + "exitCode": 0, + "expectedPassed": 3, + "log": ".artifacts/p5-15-01R-01/backend/full/helpers/configuration-tests.log", + "logSha256": "aa637d65ede334309d02f12566eced759eff89e1db332ff863588039ff458ed9", + "logModifiedUtc": "2026-10-09T12:44:18.538095+00:00", + "offlineEnvironment": { + "AI_SERVICE_SKIP_MODEL_LOAD": "1", + "HF_HUB_OFFLINE": "1", + "TRANSFORMERS_OFFLINE": "1" + }, + "total": 3, + "passed": 3, + "failed": 0, + "errors": 0, + "skipped": 0, + "countEvidence": "Completed unittest count and final status in fresh log", + "unittestStatus": "OK", + "result": "PASS", + "includedInBackendTotal": false + }, + { + "name": "supply-chain-tests", + "command": [ + "rtk", + "proxy", + "C:/Users/Connor/.cache/codex-runtimes/codex-primary-runtime/dependencies/python/python.exe", + "-X", + "utf8", + "scripts/test-supply-chain.py" + ], + "startedUtc": "2026-10-09T12:44:18.585710+00:00", + "finishedUtc": "2026-10-09T12:44:19.199927+00:00", + "durationSeconds": 0.614, + "exitCode": 0, + "expectedPassed": 3, + "log": ".artifacts/p5-15-01R-01/backend/full/helpers/supply-chain-tests.log", + "logSha256": "6924b28cc88b7cac53870e7e2d408fce1a1a9bbfaeec3d703a81cecd9f45f47d", + "logModifiedUtc": "2026-10-09T12:44:19.147321+00:00", + "offlineEnvironment": { + "AI_SERVICE_SKIP_MODEL_LOAD": "1", + "HF_HUB_OFFLINE": "1", + "TRANSFORMERS_OFFLINE": "1" + }, + "total": 3, + "passed": 3, + "failed": 0, + "errors": 0, + "skipped": 0, + "countEvidence": "Completed unittest count and final status in fresh log", + "unittestStatus": "OK", + "result": "PASS", + "includedInBackendTotal": false + }, + { + "name": "offline-evaluation-tests", + "command": [ + "rtk", + "proxy", + "C:/Users/Connor/.cache/codex-runtimes/codex-primary-runtime/dependencies/python/python.exe", + "-X", + "utf8", + "scripts/test-ollama-evaluation.py" + ], + "startedUtc": "2026-10-09T12:44:19.204129+00:00", + "finishedUtc": "2026-10-09T12:44:21.074598+00:00", + "durationSeconds": 1.87, + "exitCode": 0, + "expectedPassed": 5, + "log": ".artifacts/p5-15-01R-01/backend/full/helpers/offline-evaluation-tests.log", + "logSha256": "a820afabfc6e7fa7237921782b7986fa449905db745e943ddf53c077e2cb9dd2", + "logModifiedUtc": "2026-10-09T12:44:20.997248+00:00", + "offlineEnvironment": { + "AI_SERVICE_SKIP_MODEL_LOAD": "1", + "HF_HUB_OFFLINE": "1", + "TRANSFORMERS_OFFLINE": "1" + }, + "total": 5, + "passed": 5, + "failed": 0, + "errors": 0, + "skipped": 0, + "countEvidence": "Completed unittest count and final status in fresh log", + "unittestStatus": "OK", + "result": "PASS", + "includedInBackendTotal": false + }, + { + "name": "extension-tests", + "command": [ + "rtk", + "proxy", + "node", + "--test", + "browser-extension/tests/capture-url.test.mjs" + ], + "startedUtc": "2026-10-09T12:44:21.078100+00:00", + "finishedUtc": "2026-10-09T12:44:21.695324+00:00", + "durationSeconds": 0.617, + "exitCode": 0, + "expectedPassed": 3, + "log": ".artifacts/p5-15-01R-01/backend/full/helpers/extension-tests.log", + "logSha256": "f7a52d7888df13403de0b520d1a18ad94ea3fe06253035e4bb3fbdd9804d5862", + "logModifiedUtc": "2026-10-09T12:44:21.645359+00:00", + "offlineEnvironment": { + "AI_SERVICE_SKIP_MODEL_LOAD": "1", + "HF_HUB_OFFLINE": "1", + "TRANSFORMERS_OFFLINE": "1" + }, + "total": 3, + "passed": 3, + "failed": 0, + "cancelled": 0, + "skipped": 0, + "todo": 0, + "countEvidence": "Node test-runner final counters in fresh log", + "result": "PASS", + "includedInBackendTotal": false + } + ], + "frontend": { + "passed": 464, + "failed": 0, + "total": 464, + "suites": 82, + "commands": [ + { + "name": "app-typescript", + "command": [ + "rtk", + "proxy", + "npm.cmd", + "run", + "typecheck" + ], + "startedUtc": "2026-10-09T12:47:29.839544+00:00", + "finishedUtc": "2026-10-09T12:48:00.153621+00:00", + "exitCode": 0 + }, + { + "name": "frontend-lint", + "command": [ + "rtk", + "proxy", + "npm.cmd", + "run", + "lint" + ], + "startedUtc": "2026-10-09T12:48:00.153621+00:00", + "finishedUtc": "2026-10-09T12:48:59.698786+00:00", + "exitCode": 0 + }, + { + "name": "frontend-production-build", + "command": [ + "rtk", + "proxy", + "npm.cmd", + "run", + "build" + ], + "startedUtc": "2026-10-09T12:48:59.703350+00:00", + "finishedUtc": "2026-10-09T12:49:13.505463+00:00", + "exitCode": 0 + } + ], + "intermediateRun": { + "command": { + "name": "frontend-full", + "command": [ + "rtk", + "proxy", + "npm.cmd", + "test", + "--", + "--runInBand", + "--watchAll=false", + "--json", + "--outputFile=../.artifacts/p5-15-01R-01/frontend/jest.json" + ], + "startedUtc": "2026-10-09T12:41:15.067098+00:00", + "finishedUtc": "2026-10-09T12:47:29.836544+00:00", + "exitCode": 0 + }, + "startedBeforeLastUiChange": true, + "usedForFinalBaseline": false + }, + "finalRun": { + "command": [ + "rtk", + "proxy", + "npm.cmd", + "test", + "--", + "--runInBand", + "--watchAll=false", + "--json", + "--outputFile=../.artifacts/p5-15-01R-01/frontend-final/jest.json" + ], + "startedUtc": "2026-10-09T12:57:45.984405+00:00", + "finishedUtc": "2026-10-09T13:00:48.715429+00:00", + "exitCode": 0 + }, + "earlierAttempt": { + "passed": 463, + "failed": 1, + "case": "[P5-11 PRES-C06 C10 E08] returning from preview focuses the existing editor without changing the pending draft", + "isolatedRerunPassed": 1, + "applicationCodeChangedForRetry": false, + "cause": "Not established; intermittent observed assertion failure retained, no CV repair." + } + }, + "ordinaryBrowser": { + "passed": 124, + "failed": 1, + "total": 125, + "inheritedPassing": 117, + "auditPassing": 4, + "auditFailing": 1, + "repairPassing": 3, + "skipped": 0, + "expectedFailures": 0, + "failedCases": [ + "[P5-15-01 E02 E07 A01] all 32 routes retain native entry, refresh and anonymous permissions" + ], + "stats": { + "startTime": "2026-10-09T12:52:47.261Z", + "duration": 1586652.9170000001, + "expected": 124, + "skipped": 0, + "unexpected": 1, + "flaky": 0 + } + }, + "diagnostics": { + "passed": 1, + "failed": 1, + "total": 2, + "rulesDraft": { + "original": 14, + "draft": 5, + "visibleDraft": "14", + "persisted": 14, + "ruleWrites": 0, + "readbackStatus": 200 + }, + "stats": { + "startTime": "2026-10-09T13:20:05.270Z", + "duration": 15429.199, + "expected": 1, + "skipped": 0, + "unexpected": 1, + "flaky": 0 + } + }, + "securityHttp": { + "http": { + "startTime": "2026-10-09T13:19:14.621Z", + "duration": 16866.354, + "expected": 2, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "rate-limit": { + "startTime": "2026-10-09T13:19:32.060Z", + "duration": 14271.636, + "expected": 9, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "ingress": { + "startTime": "2026-10-09T13:19:46.906Z", + "duration": 7677.677000000001, + "expected": 6, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "pdf-admission": { + "startTime": "2026-10-09T13:19:55.190Z", + "duration": 9524.312, + "expected": 1, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + } + }, + "fidelity": { + "fidelity": { + "passed": 16, + "total": 16, + "previewPages": 36, + "pdfPages": 36, + "tolerances": { + "pageDimensionMm": 0.5, + "positionMm": 2, + "fontPt": 0.5, + "rgbComponent": 0.00392156862745098, + "pageCountAndMembership": "exact" + }, + "measurementFingerprint": { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/measurements.json", + "sha256": "31b649504e77a89cc9b326ff53c4c9d430a21bcad14f721bb1b957d6ba6d4266" + }, + "resultFingerprint": { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/fidelity-results.json", + "sha256": "98abd84d63708f1c632e29c8b8d37e1083811979365162ffea2e4e1bf48ea373" + }, + "nativeFiles": [ + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-modern/render.html", + "sha256": "8e768156c7ffd4ad8dae6914a6a57baa5114668dc53a861f3925e0be8cffb8aa" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-modern/export.pdf", + "sha256": "2d31acf639756cc3a62bcd69ef71c37ebffb4b785118eb672b07f0feea55c67b" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-minimal/render.html", + "sha256": "26bd74195f0f5ed917751ec5aeb0321ef156f93f105e889cea3fa67b2952bb1c" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-minimal/export.pdf", + "sha256": "41344fe30597e3ac6abc9b170fc71fa57a8dca5752fa428af8662d1f898841ee" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-executive/render.html", + "sha256": "d57da767c7c6cf446fe351fd381d33b95b555423db21feb84c9c1346775d8c48" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-executive/export.pdf", + "sha256": "730b3c03f5b9c5be768de30cbd2dc3a7e5850b93e4281360f8353bd17d33c80b" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-technical/render.html", + "sha256": "681554ff60e68efa848e0a9e0ea6c2776526ea6a2017a05952ef724b08fc9e95" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-technical/export.pdf", + "sha256": "83999e14263d0f736b8b903afbd1979f080f2bf4414c08a4def3dc3000fd099b" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-ats-classic/render.html", + "sha256": "f290eeef533983ea8a46c536e9747c0d88ee2cb7275f94366561c89645dc947b" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-ats-classic/export.pdf", + "sha256": "282bdfc748e8c6ee00b95f4f26db492e9c4d9befa5e2c8bf77813eb11dc1ace0" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-nordic/render.html", + "sha256": "361c0d55d3596a6e56d03b02bdecd9c9dbf6b48b7cb0a4add7d75382ca3e2958" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-nordic/export.pdf", + "sha256": "5f2ea45ce8347d3c0a6574c37e12a1aef68aad14d6dff1c504cd1edc764ea8fb" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-elegant/render.html", + "sha256": "816163e97d55be1fd726228fad0f7da471c707ca7879f0fbb036a1324dbdea47" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-elegant/export.pdf", + "sha256": "1beae06e1d2751312235db35220a7bea05d56bdd8327865075aac8f714ffbadf" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-creative/render.html", + "sha256": "1cd723eb101ac3d06f87b4c2f8fa28e53252075a0f3ff5aa6002d6f6c2be6799" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-creative/export.pdf", + "sha256": "0ef17ff5abfc6d62a68763b20294f05d02eabbbf7cb91a1eeec1efb450ccaad5" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-code/render.html", + "sha256": "579dbd0e1c14afdee09f29f652e7742f5082c22e2de5f7c7ed06b954a2568d35" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/default-code/export.pdf", + "sha256": "c72514d04a456c0c41cd20564c32069eda8232a68c483be524929c7627f9e281" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/long-en-minimal/render.html", + "sha256": "2506bfc9473a1096e29f643b6d2958ff941e226e91ee67b7f05323dd28646a6a" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/long-en-minimal/export.pdf", + "sha256": "22713afc57374b9540cdee70b971f7b79cba0dead13fa3b94c922bbbf51d6763" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/long-nb-code/render.html", + "sha256": "48bcca5d8713960e7543d4f150bf1c7cc96e7227d9b04b69ed063241dbbc68df" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/long-nb-code/export.pdf", + "sha256": "bd0c4f641e80383cbef93f8cd2d0d3d7bd62cfc77895333a9ef05f36e6c103ee" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/compact-8mm-letter/render.html", + "sha256": "515fbd6d8e0d031d86fa4cf08dc71c8c508fb84ea385aa19116f6cf13c9c7567" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/compact-8mm-letter/export.pdf", + "sha256": "f6a2718b4da4c857d038645e711d4003a25c5766e1aa334ca68a6f58549aaf80" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/roomy-28mm-nb/render.html", + "sha256": "cc0052318c874c2600ea0c137bd377411c0f6cd1c0115c1ed65c0d1173a3f1b9" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/roomy-28mm-nb/export.pdf", + "sha256": "838ce6a51f0269a7a4c4c02a4ca1ed27d1f9ef960c041943f350bcfb283b4825" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/grid-and-bubbles/render.html", + "sha256": "1e5fc270a8ecf02a6e6bd7ac7b0d1d50c9f15baa00fb4c37a39b7ab3c141de37" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/grid-and-bubbles/export.pdf", + "sha256": "9ea510229adf6474ecaf685dc30393bdba2227960b05bd4bc9c1cd4d0e44f6ca" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/long-sidebar-nb/render.html", + "sha256": "823db293254304db0d8ca2a9bf249af6dd343de959d4a965e741ae4cde633590" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/long-sidebar-nb/export.pdf", + "sha256": "9a948cc39f5cfd90f7691d8e7d6e4064005ffef32e7270be7573dabe84895915" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/unbreakable-and-boundary/render.html", + "sha256": "3faf425eb9ecf0be7e5294b5f60859133f24276df9a9d6ed2e569c3cd7069978" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity/unbreakable-and-boundary/export.pdf", + "sha256": "9564c015ec418b34ca0c9ded3a1c2ffbf7731df664e3cbefc68aa53a8d2bd0f9" + } + ] + }, + "settings-fidelity": { + "passed": 8, + "total": 8, + "previewPages": 24, + "pdfPages": 24, + "tolerances": { + "pageDimensionMm": 0.5, + "positionMm": 2, + "fontPt": 0.5, + "rgbComponent": 0.00392156862745098, + "pageCountAndMembership": "exact" + }, + "measurementFingerprint": { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/measurements.json", + "sha256": "8f98e92f62c7dfcbbf645cba88b139ec977e881a9f8f9fc25144708fa97c4016" + }, + "resultFingerprint": { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/fidelity-results.json", + "sha256": "baf25ba3f32119734b6aacf541648df6d74474274346b7f8d5db256cd0bdbcd9" + }, + "nativeFiles": [ + { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/dark-en-before/render.html", + "sha256": "846199be1b9e432aa9acfc0836a258e7e349a59f7ae2f199284e276c2a94f159" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/dark-en-before/export.pdf", + "sha256": "ef8341dd75bc5d08d1c9bc3498a141d4703ddcafaad63197850c1d65c9e61564" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/dark-en-after/render.html", + "sha256": "fc201751536f5f853fafafffe8d3ab6d6801a54fd561f2325b984044b292ae3c" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/dark-en-after/export.pdf", + "sha256": "f564cebb2e75b2bc286ffd3eb65c1ac803e884d10d9e25fd44cffcf8bbee8a1b" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/dark-nb-before/render.html", + "sha256": "b5972b49c6b2d19f22af90b1ab72088aac0548e068695f301764f24ca1b362e2" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/dark-nb-before/export.pdf", + "sha256": "0afa5935e0481b958ff0db10eba9c403cf983994e88c678d94d71c8d363848ab" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/dark-nb-after/render.html", + "sha256": "6922fe87ff0a6bcd83500fbb12bccd1d6091f35486aa39a8fc6b9c358817e64d" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/dark-nb-after/export.pdf", + "sha256": "d38a185bb38f9c16a5475efa8672a20865a0f633d16c74dbb653e8cf12403054" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/light-en-before/render.html", + "sha256": "846199be1b9e432aa9acfc0836a258e7e349a59f7ae2f199284e276c2a94f159" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/light-en-before/export.pdf", + "sha256": "4694d0f9067fcea93c68fd6076a9b19ecdeb0672522a900f4eab9275058a930a" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/light-en-after/render.html", + "sha256": "fc201751536f5f853fafafffe8d3ab6d6801a54fd561f2325b984044b292ae3c" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/light-en-after/export.pdf", + "sha256": "e6f3ef1059ab4cf56a41aa16cdd1b128ebabff9c738f09a6bbe93e13b751bad0" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/light-nb-before/render.html", + "sha256": "b5972b49c6b2d19f22af90b1ab72088aac0548e068695f301764f24ca1b362e2" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/light-nb-before/export.pdf", + "sha256": "10fd4dbd848f75c25897c811ff55387efefbb39b2d1cd4ee8d3f5c111ff65598" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/light-nb-after/render.html", + "sha256": "6922fe87ff0a6bcd83500fbb12bccd1d6091f35486aa39a8fc6b9c358817e64d" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/settings-fidelity/light-nb-after/export.pdf", + "sha256": "9d6f0a3bb13b401a6a4db959879a99427772ff03aef740b8563dd62e7301ae48" + } + ] + } + }, + "nativeSavedSearchAfterReads": [ + { + "identity": "normal", + "pattern": "/discover", + "mode": "entry", + "destination": "/discover", + "status": 200 + }, + { + "identity": "normal", + "pattern": "/discover", + "mode": "refresh", + "destination": "/discover", + "status": 200 + }, + { + "identity": "admin", + "pattern": "/discover", + "mode": "entry", + "destination": "/discover", + "status": 200 + }, + { + "identity": "admin", + "pattern": "/discover", + "mode": "refresh", + "destination": "/discover", + "status": 200 + } + ], + "routes": { + "patterns": 32, + "original": 31, + "analyticsAdded": 1, + "observations": 192, + "selectedNativeReads": 98, + "failed500Reads": 0, + "allEntryRefreshAssertionsSatisfied": true, + "loginQueryFailureRemains": true + }, + "axe": { + "scans": 251, + "violationEntries": 0, + "incompleteNodeOccurrences": 1880 + }, + "incompleteRules": { + "color-contrast": 1624, + "aria-prohibited-attr": 209, + "aria-hidden-focus": 25, + "aria-valid-attr-value": 18, + "th-has-data-cells": 4 + }, + "preservationCurrent": { + "PASS": 0, + "PARTIAL": 54, + "FAIL": 2, + "DEFERRED": 1, + "BLOCKED": 0, + "NOT VERIFIED": 0, + "total": 57 + }, + "rawEvidence": [ + { + "path": ".artifacts/p5-15-01R-01/browser/commands.json", + "sha256": "fec661f95d4a70c4aac54637c783aefdfc8c99ddf651b6248a98da15da37ffdc" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/fidelity-commands.json", + "sha256": "6fe384df5d3db04ac78ac9ae74bcf1c3b4fa822f0628e7054e761d6c40d5d213" + }, + { + "path": ".artifacts/p5-15-01R-01/frontend-final/command.json", + "sha256": "f93df3459e4d6864717fb4073c4ac0b458db2fc2f0927d918c372e2a21d08fa7" + }, + { + "path": ".artifacts/p5-15-01R-01/frontend-final/jest.json", + "sha256": "0f45ad07fd7cca7941d1695c0271d552c4c6832b5de957ec4202c84649eaaee3" + }, + { + "path": ".artifacts/p5-15-01R-01/frontend-final/attempt1-command.json", + "sha256": "445412085d24578774ae349ea05ecdd678ce898bae3a7b618edbaf57ba73674e" + }, + { + "path": ".artifacts/p5-15-01R-01/frontend-final/attempt1-jest.json", + "sha256": "2ba7294cb7314345d70d2d8cfe7f1f6b3f04ec348a20c108f7e86c83b0a1d3f8" + }, + { + "path": ".artifacts/p5-15-01R-01/frontend-final/cv-preview-diagnostic.json", + "sha256": "0eb314d9f7286b57790219db78ac8660fe014a7d50acf39129bcdf689e8cce62" + }, + { + "path": ".artifacts/p5-15-01R-01/frontend/summary.json", + "sha256": "7e095c1903e3e342cc3adf7ef072e976f4d605780936662803975ba0836e37c2" + }, + { + "path": ".artifacts/p5-15-01R-01/backend/final/summary.json", + "sha256": "49da5559757106c1857c515f272b31e7b16e18048db01cc097ead4467fae2156" + }, + { + "path": ".artifacts/p5-15-01R-01/backend/full/helpers/helper-summary.json", + "sha256": "238300c66b07173ffc25b4e0db3d9b55fc2d2970e52d2399f8004141f5a3191b" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/main.json", + "sha256": "6ee325e33a49f0ef4960ab9c6558452d3e1d4cddb4be4162c6a9a7c98bd0510b" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/diagnostics.json", + "sha256": "12e1f44134e2f31913fadef91e9e52b27057e6b1b004936defb383162491f7a3" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/http.json", + "sha256": "9bd34045eacfe9d8e633e9009f9c93a9556c7df7fb58cc03cca0f42e20d86333" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/rate-limit.json", + "sha256": "b0712bafb26e9d3a09a258f49d71a837c675017554f63cbaf0dfee5219b92a66" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/ingress.json", + "sha256": "4227372db35dae85a22b3d1bb993d37a3edb64738d82caf401256a5c0db2a218" + }, + { + "path": ".artifacts/p5-15-01R-01/browser/pdf-admission.json", + "sha256": "ea2295b623b2320b8905e8cedfed90ae96e0dfe73dba96db5778f94eca216e56" + } + ], + "manualVisualReview": { + "by": "Coding agent inspecting genuine captured images, not an independent human or assistive-technology acceptance.", + "observations": [ + "EN light desktop saved-list error and Retry remain visible beside a usable one-off result.", + "EN dark390px failure wraps without horizontal overflow; retry is reachable.", + "Bokmål light390px native retry restores saved controls while preserving changed input/result." + ] + }, + "production": { + "decision": "NO-GO", + "branch": "main", + "revision": "27657f31131cd95d42f0e1290853ec9c9b3959a4", + "modified": false + }, + "limits": [ + "Live MariaDB/PostgreSQL/NAV not qualified; PostgreSQL not configured.", + "Provider-dependent browser output intercepted; actual SQLite runner uses a deterministic external service.", + "Scheduler/browser notification chain, physical touch and human screen-reader checks remain unverified.", + "F04, backup/restore, production config/schema/keys and rollback remain release blockers.", + "P5-13 remains deferred/unqualified/Production-withheld; no qualification/UI/activation.", + "No P5-15-02, Analytics/Rules repair, B07 or production deployment." + ] +}