138 KiB
P5-15-01 functional preservation results
Audit source 932b962b9038ddb5ad59b982c0199475bfb50454, branch codex/ui-redesign-phase4, 2026-10-09. This document compares every original protected capability with actual current API/owner, frontend reach action, read/write boundary, inspected tests and outstanding evidence. It is a functional evidence record; no application repair, provider/model call, production operation, Docker recovery or B07 work belongs to it.
The original Phase 1 ledger, Phase 2 matrix, approved Phase 5 plan, P5-15-00 matrix and execution plan remain the contracts. Architecture follows the API/controller/service/tenant boundaries and client React Router/API layer. Each row includes the original full capability; its short test description covers representative assertions only.
Status discipline: PASS requires adequate current evidence for the whole named criterion. PARTIAL means evidenced sub-behaviors with required long-tail/manual/provider proof still missing. FAIL means an observed contradiction, including a carried defect when freshly reproduced. DEFERRED requires an approved exclusion. BLOCKED means execution cannot be performed in the available environment; NOT VERIFIED means adequate evidence has not been collected. A PARTIAL group can contain those outstanding sub-checks. Test/source existence is static observation, never an execution or PASS. Before means P5-15-00 acceptance; after means this audit's full original capability decision. Child test results may pass while their group remains PARTIAL.
Execution provenance and limits
Fresh backend/frontend execution: backend summary records 1,023/1,023 backend cases, 108/108 focused AI and 5/5 revision subsets (included within 1,023), offline sidecar 49/49, configuration helpers 3/3, supply-chain helpers 3/3, offline evaluation helpers 5/5 and extension parser 3/3; zero failures/skips. API/test Release builds passed with zero warnings/errors. Frontend/static summary records 459/459 tests across 82/82 suites, zero failed/pending/todo cases, success true; app TypeScript, complete current E2E/AI plus diagnostic TypeScript, lint and production build exited zero. Both runs used unchanged application source from the audit checkpoint. Backend runtime is Windows/.NET SDK 9.0.317, host 9.0.19; deterministic fixtures and disposable SQLite/files. Run dates, commands, counts/hashes and provider limitations are in those portable summaries.
Fresh browser/native reconciliation: browser evidence records all 117 inherited cases passing in the full run. The five added cases were rerun after harness corrections: two pass; three fail on real application behavior. The latest unique-case result is 119 pass / 3 fail / 122 total, combined across declared runs, not one all-green final run. Separate preference diagnostics are one pass / one fail, outside that total. Real-HTTP 2, rate-limit 9, ingress 6 and PDF admission 1 passed. All runs have zero skips, expected failures and flaky retries. Fresh fidelity: 16/16 (36=36 pages), settings 8/8 (24=24), unchanged tolerances; native package/revision fixtures remain green. Counts overlap across rows and must never be added into a second total. Human, provider, physical-device and production acceptance remain absent. Journeys distinguish real writes/readback, fault injection, API setup and browser interaction.
The ignored .artifacts/p5-15-01/matrix/source-checks.json records the exact 57 IDs, inspected mapped test names/assertion excerpts and file SHA-256 values. It is a local source cross-check, not a new production test framework or substitute for final run reports.
Complete 57-capability matrix
API paths below include /api; {id} means the owned resource ID and nested {jobId} means the owning job. Controller routes and HTTP attributes were inspected directly. Source ownership is an intended boundary, with negative test anchors separately mapped; it is not a blanket security certification. Read paths can seed deterministic system checklist state where specifically stated. Every reach action is a current source action to execute, not a claim that it was clicked in this static review.
| ID / complete original capability | Actual API path and owner | Frontend route / entry and concrete reach action | Read/write and ownership semantics | Inspected test anchors / protected contract | Source observation versus fresh execution | Required missing/manual/provider evidence; risk / owner | P5-15-00 before | P5-15-01 after |
|---|---|---|---|---|---|---|---|---|
| PRES-E01 — Public product explanation, Free/Pro feature comparison, honest unavailable-billing states and sign-in/register links Original contract: LandingPage, planCatalog; do not invent prices or purchasable capabilities |
GET /api/billing/status;BillingController / AccountPlans |
/ public landing: choose Sign in/Create account; compare Free/Pro | Public read; billing configuration and server entitlements determine availability; landing cannot activate payment | F:landing-page; F:planCatalog; B:AccountPlans Representative tests with inspected assertions: shows exactly Free and Pro without invented commercial terms; publishes only capability-based Free and Pro plans. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: AccountPlansTests 7/7. Frontend: landing-page.test.tsx 2/2, planCatalog.test.ts 1/1. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Smoke and all-role census verify public plans, configured-disabled registration and sign-in entry; actual billing activation remains unverified. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-E02 — Local sign-in/registration, remember-me, configured Turnstile, resend verification, reset password, verify email Original contract: LoginPage, reset/verification views, TurnstileWidget; server configuration controls availability |
GET /api/auth/config;POST /api/auth/login, register, request-password-reset, reset-password, verify-email, resend-verification-email;AuthController |
/login or /register public forms; Forgot password opens /forgot-password; emailed token opens /reset-password or /verify-email | Public token/config reads and explicit identity writes; configured registration/Turnstile, remember cookie and challenge control sign-in; never infer mail delivery | F:login-page; F:verify-email-page; B:LocalAuthIdentity; B:AuthAndSystemController; EmailOwnershipIntegrationTests.cs — actual confirmation/change-email tokens, not mailbox ownership Representative tests with inspected assertions: posts remember-me preference without storing an auth token in browser storage; confirms the account and shows success when the link is valid. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: LocalAuthIdentityTests 3/3, AuthAndSystemControllerTests 38/38, EmailOwnershipIntegrationTests 3/3. Frontend: login-page.test.tsx 13/13, verify-email-page.test.tsx 4/4. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Real local login works; anonymous route census then reproduces loss of /analytics?months=6 after sign-in. FAIL AUTH-01; missing-token/config-disabled states are intentional. Reset delivery/provider journeys remain unverified. Journey scope; native results. |
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. Confirmed defect: register; separate owner repair required. |
PARTIAL | FAIL |
| PRES-E03 — Google/Microsoft sign-in/link flows, Microsoft legacy relink, provider popup success/error handling Original contract: GoogleAuthCard, MicrosoftAuthCard, MicrosoftLegacyRelinkPage; OAuth/state/origin rules remain |
POST /api/auth/google/exchange, google/link;POST /api/auth/microsoft/exchange, microsoft/link, microsoft/legacy-relink/confirm;AuthController + token validators |
/login provider buttons; /profile link controls; emailed recovery enters /microsoft-legacy-relink | Exchange creates authenticated identity only after validated token; linking requires own local identity; OAuth popup origin/state and provider token identity remain mandatory | F:login-page; F:microsoft-legacy-relink-page; B:GoogleTokenValidator; B:MicrosoftTokenValidator Representative tests with inspected assertions: handles Microsoft cancellation without exchanging or navigating; Exchange_microsoft_token_creates_new_user_when_registration_allowed. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: AuthAndSystemControllerTests 38/38, GoogleTokenValidatorTests 1/1, MicrosoftTokenValidatorTests 17/17. Frontend: login-page.test.tsx 13/13, microsoft-legacy-relink-page.test.tsx 1/1. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: All-role census verifies missing-token Microsoft relink page only; actual external sign-in/link/consent is NOT VERIFIED. No provider calls were made. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-E04 — 2FA challenge, recovery codes, setup/verify/disable/regenerate, trusted devices and revocation Original contract: TwoFactorChallenge, TwoFactorSettingsCard; preserve sensitive confirmation and recovery presentation |
GET /api/auth/2fa/status, trusted-devices;POST setup, verify-setup, challenge, disable, recovery-codes/regenerate, trusted-devices/revoke-all;DELETE trusted-devices/{id};TwoFactorController |
/login challenge after password; account menu Profile opens /profile Security setup/verify/recovery/disable/trusted-device controls | Sensitive own-account security writes require confirmation/code/password; setup secret is pending until verification; trusted-device identity cannot bypass another account | F:two-factor-settings; F:login-page; B:TwoFactorController; B:SessionsController Representative tests with inspected assertions: shows the 2FA code step when login requires two-factor, then proceeds like a normal login on success; Login_locks_account_after_five_failed_attempts_and_rejects_sixth_even_with_correct_password. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: AuthAndSystemControllerTests 38/38, TwoFactorControllerTests 9/9, SessionsControllerTests 8/8. Frontend: login-page.test.tsx 13/13, two-factor-settings.test.tsx 2/2. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: No native authenticator/recovery-device journey added; fresh named backend/component assertions only. Full real-device security flow NOT VERIFIED. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-E05 — Active session list, current-device distinction, single/other-session revocation, logout Original contract: SessionsSettingsCard, AppShell, auth, sessionBoundary; invalidation must clear private UI |
DELETE /api/auth/sessions/{id};GET /api/auth/sessions;POST revoke-others;POST /api/auth/logout;SessionsController + AuthController |
Account menu Profile opens /profile session card; Revoke/other sessions; user menu Sign out | Owner session reads/revocations; current session distinguished; logout revokes exact principal and client clears private state | F:session-boundary; F:account-scoped-state; B:SessionsController; B:AuthSessionRevocation Representative tests with inspected assertions: Login_creates_a_user_session_row_and_threads_its_id_into_the_token; another session cannot be adopted even if the readable cookie signal is unchanged. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: SessionsControllerTests 8/8, AuthSessionRevocationTests 8/8. Frontend: session-boundary.test.ts 15/15, account-scoped-state.test.tsx 2/2. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Account-isolation browser fixtures verify finite session invalidation/private-state disposal and crafted session-context denial. Native session-card revoke/recovery long-tail remains unverified. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-E06 — Avatar upload/remove, name/display name/headline, account email-change request/cancel/confirm, local password change Original contract: ProfilePage; account identity is distinct from canonical career data |
PUT /api/auth/profile;POST/DELETE /api/auth/avatar;POST change-password, email-change/request, email-change/cancel, email-change/confirm;GET email-change;AuthController + AvatarStorage |
Account menu Profile /profile: edit names/headline, upload/remove image, security/password/email controls; emailed /confirm-email-change | Own account identity writes; password/recent proof for sensitive changes; pending email is distinct from accepted email; avatar storage is separate from career source | F:profile-page; F:verify-email-page; B:AvatarStorage; B:LocalAuthIdentity; EmailOwnershipIntegrationTests.cs — actual confirmation/change-email tokens, not mailbox ownership Representative tests with inspected assertions: confirms a pending email change and requires a fresh sign-in; GetRequiredUserId_returns_null_when_subject_claim_is_missing. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: LocalAuthIdentityTests 3/3, AuthAndSystemControllerTests 38/38, AvatarStorageTests 1/1, EmailOwnershipIntegrationTests 3/3. Frontend: verify-email-page.test.tsx 4/4, profile-page.test.tsx 15/15. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: All-role profile route/native read verified; no complete native avatar/email/password mutation journey added. Fresh named token/form cases only for those mutations. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-E07 — Collapsible desktop sidebar, mobile drawer, active subsection matching, keyboard command launcher Original contract: AppShell, QuickCommandDialog; job/company search and fixed navigation/add commands |
GET /api/jobapplications/choices;GET /api/companies;OperationsController notifications;AppShell + QuickCommandDialog |
Desktop rail collapse/mobile menu; Ctrl/Cmd+K search job/company or fixed destination/Add job; bell opens popover | Navigation/search reads only; reviewed Add job opens modal without creation; private query caches must discard on account switch; hidden Admin entry never establishes permission | F:sidebar-active-nav; F:app-shell-notifications; B:JobApplicationsAuthorization; B:CompanyRelationship Representative tests with inspected assertions: /career activates Career Workspace only; notification bell exposes its unread count and keyboard-accessible action. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: JobApplicationsAuthorizationTests 4/4, CompanyRelationshipTests 2/2. Frontend: sidebar-active-nav.test.ts 10/10, app-shell-notifications.test.tsx 3/3. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh shell/readiness/utility native keyboard, collapse/mobile controls, destination and role census pass their finite fixtures. AUTH-01 remains a cross-cutting sign-in context defect; spoken names/announcements remain unverified. Journey scope; native results. |
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). |
PARTIAL | PARTIAL |
| PRES-E08 — Theme light/dark/system, EN/Bokmål preference with server hydration, toast/confirm/prompt and error routes Original contract: themePrefs, I18nProvider, toast, confirm, prompt, route error/not-found views |
PUT /api/auth/preferences/language;GET /api/auth/me;AuthController;browser themePrefs |
Settings /settings General theme/language selectors; shell preferences; confirm/prompt/toast; unknown route and error retry | Theme is browser preference; language has local presentation and server hydration/write; modal Cancel must not mutate; toast success cannot replace server acknowledgment | F:theme-state; F:i18n-provider; B:LocalAuthIdentity Representative tests with inspected assertions: GetRequiredUserId_returns_null_when_subject_claim_is_missing; Login_locks_account_after_five_failed_attempts_and_rejects_sixth_even_with_correct_password. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: LocalAuthIdentityTests 3/3, AuthAndSystemControllerTests 38/38. Frontend: theme-state.test.tsx 7/7, i18n-provider.test.tsx 2/2. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh shell/settings theme/locale/focus/feedback fixtures pass; three genuine concurrent preference rounds persist/reload correctly. Historical intermittent 500 is not closed; no human full contrast/AT acceptance. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-E09 — Cross-tab account switch, stale mutation/read rejection, BFCache/focus revalidation and reauthentication Original contract: api, sessionBoundary, App; B02 server precondition and client unmount/abort must survive extraction |
GET /api/auth/me, csrf;SessionContextMiddleware + JobTrackerContext current-user filters |
Private shell revalidates at account/tab/focus/BFCache boundaries; sign out/sign in A then B; stale request callback | Client abort/unmount and server X-Session-Context 428/409 preserve owner; no stale read/write can adopt cookie-switched B or expose A state | F:session-boundary; F:account-scoped-state; B:SessionContextMiddleware; B:CurrentUserIdLiveEvaluation Representative tests with inspected assertions: cookie switch rejects a stale callback before transport and never adopts B's context; keeps saved views private to the account that created them. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: SessionContextMiddlewareTests 13/13, CurrentUserIdLiveEvaluationTests 2/2. Frontend: session-boundary.test.ts 15/15, account-scoped-state.test.tsx 2/2. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh account-isolation browser runs actual cookie/session transport, retained A request with B context, missing/forged context and two-tab disposal. Finite boundaries pass, not every BFCache/offline/device combination. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-J01 — Search NAV listings by role/company/municipality, sorting, source/freshness/deadline/work-arrangement details, external listing links Original contract: JobDiscoveryPage; provider failures and empty results distinguishable |
GET /api/job-discovery/search;JobDiscoveryController + NavJobDiscoverySearchService |
Primary Discover /discover: enter role/company/municipality, Search, sort, inspect listing and external source | Read discovery provider metadata; empty differs from provider failure; saving requires reviewed AddJobModal, search never creates application | F:job-discovery; B:JobDiscoveryController; B:JobOpportunitySync Representative tests with inspected assertions: distinguishes the initial guidance from a completed empty search; Search_filters_recent_active_nav_jobs. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: JobDiscoveryControllerTests 3/3, JobOpportunitySyncTests 1/1. Frontend: job-discovery.test.tsx 7/7. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Discover route/header resolves, but NAV search/import browser data are deterministic substituted provider fixtures. Saved-search500 is separately J02; real external NAV acquisition remains NOT VERIFIED. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-J02 — Named saved searches, run/delete, automatic alert preference, new/updated results and dismissal Original contract: JobDiscoveryPage, saved-search APIs; retain owner scope and alert metadata |
GET/POST/PATCH/DELETE /api/job-discovery/saved-searches;POST {id}/run;PATCH {id}/results/{externalJobId}/dismiss;JobDiscoveryController |
Discover /discover: name/save search, select/run, toggle alert, dismiss result, delete saved search | Saved search/results/alert metadata owner-scoped; run is explicit persisted search update; background baseline does not alert all existing results | F:job-discovery; B:SavedJobSearchAlert; B:JobDiscoveryController Representative tests with inspected assertions: shows honest source metadata and offers the existing reviewed save flow; Saved_search_tracks_new_seen_and_dismissed_results_per_owner. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: JobDiscoveryControllerTests 3/3, SavedJobSearchAlertTests 1/1. Frontend: job-discovery.test.tsx 7/7. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Normal and admin saved-search GETs fail500 on entry and refresh (four genuine observations); exact installed SQLite translation rejects DateTimeOffset ORDER BY. FAIL DISCOVERY-01; no app fix or provider call. Journey scope; native results. |
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. Confirmed defect: register; separate owner repair required. |
PARTIAL | FAIL |
| PRES-J03 — Add job manually or from URL/pasted listing, reviewed preview, company lookup/create, tags and dates, duplicate warning Original contract: AddJobModal; preview is not a write; keep B01 outbound boundary and existing review step |
POST /api/jobimport/preview;GET /api/jobapplications/duplicate-check;POST /api/jobapplications;GET/POST /api/companies;JobImportController + JobApplicationsController |
Shell Add job or Jobs Add job: manual/URL/pasted preview, select/create company, tags/dates, confirm Save | Preview outbound guarded by B01 and is not application write; create explicit after review; owned company association validated; duplicate warning does not imply deduplication | F:quick-capture; B:JobImportService; B:JobImportHttpTransport Representative tests with inspected assertions: auto-imports from initialUrl and prefills the form; Preview_rejects_equivalent_private_literals_before_http_send. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: JobImportServiceTests 16/16, JobImportHttpTransportTests 76/76. Frontend: quick-capture.test.tsx 4/4. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Smoke executes reviewed Add UI and observes created role; native fixture setup elsewhere is API creation, not full UI acquisition. URL/NAV imports use approved synthetic provider fixtures; live imports unverified. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-J04 — Capture via browser extension, bookmarklet and share/capture query; optional job attachment and tailored CV draft after create Original contract: QuickCaptureCard, captureUrl, App, browser-extension; preserve payload/URL contracts |
POST /api/jobimport/preview;POST /api/jobapplications;attachment and tailored-cv APIs;captureUrl + AddJobModal |
Settings Quick capture install/bookmarklet; extension/share opens capture query handled by App; reviewed Add job then optional attachment/CV | Capture query preserves URL/text payload, no auto-create; optional post-create writes bind to created owned job; extension parsing tests are not installed-browser proof | F:captureUrl; F:quick-capture; B:JobImportService; B:CvBuilder Representative tests with inspected assertions: auto-imports from initialUrl and prefills the form; Preview_rejects_equivalent_private_literals_before_http_send. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: JobImportServiceTests 16/16, CvBuilderTests 35/35. Frontend: quick-capture.test.tsx 4/4, captureUrl.test.ts 4/4. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Existing acquisition/capture assertions freshly rerun; original extension/parser3 pass. Real installed extension/PWA/platform share and external acquisition not executed. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-J05 — Job table search/filter/sort/pagination, visible columns/page size, saved named views, row/card actions Original contract: JobTable, SavedViewsMenu; mobile cards and accessible full-workspace entry already exist |
GET /api/jobapplications (paged), board, choices;JobApplicationsController |
Primary Jobs /jobs: search/filter/sort, page/page-size/columns/density, Saved views; activate row/card workspace; Board switch | Queries/saved-view owner state retain complete matching records; read Table/Board identity parity; row control events must not open workspace accidentally | F:application-workspace-overlay; F:account-scoped-state; B:JobApplicationsController; B:JobApplicationsEndpointBehavior Representative tests with inspected assertions: keeps saved views private to the account that created them; opens the dedicated workspace from the whole row and preserves list state on return. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: JobApplicationsControllerTests 2/2, JobApplicationsEndpointBehaviorTests 9/9. Frontend: account-scoped-state.test.tsx 2/2, application-workspace-overlay.test.tsx 18/18. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh density/integrated Board fixtures preserve finite filter/sort/page/selection/row-focus/density contracts. Added250 exact-ID test traverses17 Table pages and equals Board API/DOM population. Saved-view/bulk long-tail remains outstanding. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-J06 — Selection/bulk status/delete/restore, soft-delete/trash and restore, edit job/company association Original contract: JobTable, EditJobDialog; preserve partial-error handling and confirmation semantics |
PUT /api/jobapplications/{id};PATCH {id}/status;DELETE {id};POST {id}/restore;JobApplicationsController + JobApplicationLifecycleController |
Jobs select rows then bulk status/delete; row edit; secondary Trash /trash select/restore; confirmation dialogs | Owner-scoped writes and soft deletion; partial bulk failures retained; restoring differs from recreating; foreign job/company associations denied | F:application-workspace-overlay; F:confirm-flow; B:JobApplicationsController; B:JobApplicationsAuthorization Representative tests with inspected assertions: GetHistory_returns_not_found_for_other_users_job; opens the dedicated workspace from the whole row and preserves list state on return. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: JobApplicationsAuthorizationTests 4/4, JobApplicationsControllerTests 2/2. Frontend: application-workspace-overlay.test.tsx 18/18, confirm-flow.test.tsx 1/1. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh Jobs/Trash density fixtures exercise owned selection/status/delete-scope/restore/readback for named cases; backend mutations remain green. Not every bulk partial-failure/edit field is a complete browser journey. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-J07 — Kanban grouped status views, drag move, keyboard pickup/drop/cancel, direct status selection, job opening Original contract: KanbanBoard, pipeline; same records as table, not a second job model |
GET /api/jobapplications/board;PATCH /api/jobapplications/{id}/status;JobApplicationsController + JobApplicationLifecycleController |
Jobs Board /jobs?view=board; legacy /kanban redirects; drag, keyboard pickup/drop/Cancel, card status menu/open | Same owned complete matching IDs as Table; custom/unknown status represented; failed status move rolls back; explicit no-drag selector writes same status API | F:kanban-grouped-board; F:pipeline; B:JobPipeline Representative tests with inspected assertions: a custom status gets an Other column that is not a drop target; statusLabel localizes canonical and passes through custom. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: JobPipelineTests 46/46. Frontend: kanban-grouped-board.test.tsx 15/15, pipeline.test.ts 11/11. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh Board presentation/integration fixtures prove pointer/keyboard status movement, custom statuses, failed-move feedback, query/history and exact IDs. Added250 population passes; scaling and physical native touch remain unqualified. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-J08 — Company directory, recruiter/contact/source/location and pipeline/contact-date editing; company relationship job history Original contract: CompaniesTable; company creation is integrated with job/import flows, not assumed standalone CRUD |
GET/POST/PUT /api/companies;GET /api/companies/{id}/relationship;CompaniesController |
Jobs group Companies /companies; command company result opens relationship; row edit contact/recruiter/source/pipeline; creation from Add job/import | Owned directory reads and edit writes; company job/contact history owner-bound; integrated creation exists, no standalone CRUD flow inferred | F:companies-relationship; F:quick-command-preservation; B:CompanyRelationship Representative tests with inspected assertions: Relationship_combines_owned_applications_and_contact_history; opens one company relationship view with applications and recent contact. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: CompanyRelationshipTests 2/2. Frontend: companies-relationship.test.tsx 1/1, quick-command-preservation.test.tsx 9/9. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: All-role company route/native GET and existing creation/edit component/backend cases pass. Full native recruiter/contact/pipeline CRUD and outside-modal feedback race remain outstanding. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-J09 — Offer comparison including recorded compensation, decision deadline and notes, source-job links Original contract: OfferComparisonPage; no new compensation calculator implied |
GET /api/jobapplications;PUT /api/jobapplications/{id};JobApplicationsController |
Secondary Offers /offers compares offer records, open source job; source job edit compensation/deadline/notes | Recorded compensation read, no invented calculation; edit remains job owner write; missing values remain unknown | F:offer-comparison; B:AnalyticsSalary; B:JobApplicationsEndpointBehavior Representative tests with inspected assertions: Save_application_drafts_updates_cover_letter_and_notes; compares recorded offer facts without filling missing values. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: JobApplicationsEndpointBehaviorTests 9/9, AnalyticsSalaryTests 1/1. Frontend: offer-comparison.test.tsx 2/2. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: All-role Offers route/native GET passes; named compensation/offer comparison fixtures pass. Full multi-offer native editing/decision workflow not newly performed. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-J10 — JSON/CSV job export; JSON import; CSV-to-import-JSON conversion and import counts Original contract: ImportExportJobs; preserve B05 blob bytes/BOM, spreadsheet safety and typed formats; do not claim full account restore from job import |
GET /api/export/jobs;POST /api/companies, /api/jobapplications;ExportController + ImportExportJobs |
Settings General /settings Jobs Import/export: JSON/CSV download, JSON upload, CSV-to-import-JSON conversion | Blob/BOM/CSV spreadsheet safety retained; import creates owned company/job records and reports counts, not existing-record restoration; job import is not complete account restore | F:csv-export; B:CsvExport; B:JobApplicationsController Representative tests with inspected assertions: Application_package_record_exposes_expected_fields; %s download preserves server bytes and a generated safe filename. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: JobApplicationsControllerTests 2/2, CsvExportTests 25/25. Frontend: csv-export.test.tsx 2/2. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh named import/export backend/component cases pass; no complete file-upload/conversion/download UI lifecycle added. Production account restore is separate, unverified. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-W01 — Dedicated job workspace and reusable quick overlay; overview/analysis/CV/cover-letter/interview sections; old deep-link mapping Original contract: ApplicationWorkspacePage, ApplicationWorkspace, jobWorkspaceRoute; retain full-page/overlay parity |
GET /api/jobapplications/{id}/workspace;ApplicationWorkspaceController |
Jobs row /jobs/:id; legacy /applications/:id redirect; seven tabs plus aliases; reusable overlay host where already invoked | Overview read aggregates owners without copying canonical data; URL/query/Back/dirty protections; mount/navigation must not generate AI; P5-05 new quick-preview host remains deferred | F:application-workspace-overlay; F:applicationWorkspace; B:ApplicationWorkspace Representative tests with inspected assertions: opens the dedicated workspace from the whole row and preserves list state on return; workspace navigation exposes seven purposes and preserves legacy links. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: ApplicationWorkspaceTests 10/10. Frontend: application-workspace-overlay.test.tsx 18/18, applicationWorkspace.test.ts 3/3. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh job-section/Overview/preservation plus32-route census verify direct/alias entry, refresh, sections, Back/Forward and Jobs context; foreign/missing Job404 has no private title. Quick-preview host remains unused/approved deferred. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-W02 — Job detail/status/progression, next actions, dates, description, recruiter/contact and timeline Original contract: JobDetailsSection, ApplicationProgress, ApplicationTimeline; do not redefine pipeline enums or history |
GET /api/jobapplications/{id};PATCH {id}/status, followup;GET {id}/history, timeline;JobApplicationLifecycleController + ApplicationIntelligenceController |
Job workspace Overview header/status/Edit; Timeline Activity subview | Owned status/date writes and append-only history; moving backward has explicit applied-date semantics; human notes differ from package answers/events | F:application-intelligence; F:workflow-trust-signals; B:JobApplicationsWorkflowSignals; B:JobApplicationsAppliedDateHistory Representative tests with inspected assertions: timeline renders grouped days, milestones and readable summaries; follow-up workflow signals route all overview surfaces to the same follow-up workspace. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: JobApplicationsWorkflowSignalsTests 2/2, JobApplicationsAppliedDateHistoryTests 4/4. Frontend: application-intelligence.test.tsx 11/11, workflow-trust-signals.test.tsx 3/3. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh populated/sparse Overview and sections fixtures exercise header/status/metadata/actions/timeline under four theme/locale pairs; no inferred events. Long-tail contact/date/history mutations remain outstanding. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-W03 — Analysis, profile match/gaps, strategy snapshot, workflow assistance and status suggestions Original contract: ApplicationAnalysis, ApplicationMatch, ApplicationStatusSuggestion, ApplicationStrategySnapshot; show provenance/loading/failure and confirmation |
GET /api/jobapplications/{id}/analysis, match, status-suggestion, focus-plan;POST focus-plan/operations, {id}/refresh-ai;ApplicationIntelligenceController + StrategySnapshotController |
Job workspace Match; refresh/strategy generation and suggestion Apply controls | Saved/read projections distinct from explicit provider generation; accepted status suggestion writes only after confirmation; owner/provenance/failure state retained | F:application-intelligence; F:application-workflow-assist; B:ApplicationIntelligence; B:StrategySnapshotOperation Representative tests with inspected assertions: timeline renders grouped days, milestones and readable summaries; recruiter status suggestions require an explicit apply action. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: ApplicationIntelligenceTests 19/19, StrategySnapshotOperationTests 4/4. Frontend: application-intelligence.test.tsx 11/11, application-workflow-assist.test.tsx 2/2. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh deterministic analysis/strategy/match suites and native section presentation pass finite behavior; no live model quality or new grounded analysis generated for qualification. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-W04 — Checklist create/edit/complete/delete/order, progress and recommended next action Original contract: ApplicationChecklist; keep keyboard reorder and persisted item identity |
GET/POST/PATCH/DELETE /api/jobapplications/{id}/checklist;PUT checklist/order;ApplicationChecklistController |
Job workspace Tasks: add/edit/complete/delete task, keyboard move up/down, progress/next action | Item IDs owned through job; first read can seed/recompute deterministic system checklist, not AI generation; manual reorder persists identity | F:application-checklist; B:ApplicationChecklist Representative tests with inspected assertions: reordering sends the new id order; Reordering_persists_the_new_order. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: ApplicationChecklistTests 15/15. Frontend: application-checklist.test.tsx 7/7. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh sections/checklist fixtures exercise owned task completion/edit/readback and next-action presentation. GET seed/recompute remains an existing server write contract; all scheduler/CRUD combinations not certified. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-W05 — Select/attach a CV, create/tailor document variants, review tailoring guidance and selected-source context Original contract: ApplicationCvSection, ApplicationTailoringSection, applicationWorkspace; owner+job association enforced by API |
GET/PUT /api/jobapplications/{id}/cv;GET tailoring;tailored-cv-draft GET/PUT/generate;ApplicationAssetsController + JobApplicationsController |
Job workspace Application CV: select/attach/detach, create/tailor variant, open identified CV builder | Association changes owned job pointer and does not mutate canonical profile/other CV; selected CV must share owner; generation explicit and guidance requires review | F:application-assets; F:cv-builder-deep-link; B:ApplicationAssets; B:CvBuilder Representative tests with inspected assertions: Resolver_defaults_include_every_populated_section; cv section shows the attached variant and the ones available to attach. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: CvBuilderTests 35/35, ApplicationAssetsTests 15/15. Frontend: application-assets.test.tsx 18/18, cv-builder-deep-link.test.tsx 41/41. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh native preservation/section fixtures select owned CV/tailoring source and preserve captured CV association after source changes; backend native ZIP proof separately passes. Job tailoring live-model quality not qualified. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-W06 — Cover-letter editing, AI suggestion review/reject/apply, saved versions and restore, unsaved navigation protection Original contract: ApplicationAssets, CoverLetterAiAssistant; document override must not mutate master profile |
GET/PUT /api/jobapplications/{id}/cover-letter;POST cover-letter/versions/{version}/restore;ApplicationAssetsController + AiWorkspaceController |
Job workspace Application Cover letter: edit/save, request AI/review/apply/reject, versions restore; attempt leaving dirty | Owned document versions separate from canonical source; no write on navigation; Cancel keeps draft, Discard permits leave; restore is explicit new document state | F:application-assets; F:application-workspace-overlay; B:ApplicationAssets Representative tests with inspected assertions: opens the dedicated workspace from the whole row and preserves list state on return; cover letter loads the current text and its history. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: ApplicationAssetsTests 15/15. Frontend: application-workspace-overlay.test.tsx 18/18, application-assets.test.tsx 18/18. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh workspace draft/navigation fixtures cover dirty Cancel/Discard and native cover-letter state; named accept/reject/history backend/component cases pass. No live provider or every restore race qualification. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-W07 — Application draft fields, submission/package preparation, frozen submitted-package versions and archived attachment download Original contract: ApplicationAssets, SubmittedPackagesSection, applicationWorkspace; historical package is distinct from current draft |
PUT /api/jobapplications/{id}/application-drafts;GET/POST submitted-packages;GET submitted-packages/{packageId}/attachments/{attachmentId};ApplicationAssetsController + SubmittedApplicationPackageService |
Job workspace Application Answers/Submission: edit drafts, prepare/capture, open frozen version, download ZIP/archive attachment | Current drafts differ from immutable historical capture; answer markers preserve human notes; exact archived bytes/hash survive source edits/delete; owner+job+package enforced | F:application-assets; F:application-drafts; B:SubmittedApplicationPackage; B:JobApplicationsApplicationPackage Representative tests with inspected assertions: document package history is read-only and separates captured notes from answers; application answer helpers keep human notes separate. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: SubmittedApplicationPackageTests 4/4, JobApplicationsApplicationPackageTests 11/11. Frontend: application-assets.test.tsx 18/18, application-drafts.test.ts 3/3. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh browser capture/immutable JSON/readback/archive-file download and fresh native backend ZIP/extraction fixture pass. Frozen source/answers/attachments remain historical; production storage/restore not tested. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-W08 — Attachments upload/drag-drop, category/purpose, rename, AI-use flag, preview/download/delete Original contract: Attachments; owner-scoped binary retrieval, consent selection and size/error handling |
GET/POST /api/attachments;GET /api/attachments/{jobId}, download/{id};PATCH/DELETE {id};AttachmentsController |
Job workspace Documents: Upload/drop file, category/purpose/name/AI-use, preview/download/delete confirmation | Binary and metadata owner-scoped; 10 MB/type/storage boundaries; per-file consent controls AI use; archive retention independent from current attachment deletion | F:attachments; B:AttachmentsController; B:AttachmentConsistency Representative tests with inspected assertions: attachments metadata controls update purpose and ai usage; Controller_requires_local_authorization. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: AttachmentsControllerTests 3/3, AttachmentConsistencyTests 14/14. Frontend: attachments.test.tsx 3/3. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh attachment/section fixtures retain owned archived/current file relationships and download/delete behavior; owner-negative backend cases pass. Initial attachment-focus race/human and all MIME/device combinations remain open. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-W09 — Interview questions/categories, manual items, answers, ready status, remove, contextual AI review/add-to-prep Original contract: InterviewPrep, applicationWorkspace; generated facts/answers require review |
GET/POST/PATCH/DELETE /api/jobapplications/{id}/interview-prep;POST {id}/ai/generate;InterviewPrepController + AiWorkspaceController |
Job workspace Interview: add question/category/answer, ready toggle/remove; AI generate/review/Add to prep | Owned prep items only explicitly accepted from AI history; generated facts/answers must not become truth automatically; source context/refresh and consent retained | F:interview-prep; B:InterviewPrepPersistence; B:InterviewAiContext Representative tests with inspected assertions: prep renders grouped items with progress and marks AI-sourced ones; GetInterviewPrep_persists_and_reuses_the_generated_note. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: InterviewPrepPersistenceTests 3/3, InterviewAiContextTests 8/8. Frontend: interview-prep.test.tsx 13/13. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh interview manual question/preparation/context section fixtures pass; deterministic grounded AI cases only. Actual provider quality and every question/answer manipulation not newly certified. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-W10 — Interview debrief template and follow-up content/date, readiness and next-action state Original contract: InterviewPrep; neutral prompts must not seed invented company/achievement facts |
GET/PUT /api/jobapplications/{id}/follow-up;GET {id}/followup-draft, readiness;InterviewPrepController + JobApplicationsController |
Job workspace Interview Debrief template/answer and follow-up edit/date; Overview next-action opens Timeline correspondence | Neutral template, no invented achievements; own follow-up content/date writes; old send-followup gone, real delivery belongs to Mail; followMode only metadata | F:interview-prep; B:JobApplicationsFollowUpDraft; B:InterviewPrep Representative tests with inspected assertions: starts a structured interview debrief without inventing answers; Follow_up_draft_uses_imported_thread_and_saved_package_context. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: JobApplicationsFollowUpDraftTests 2/2, InterviewPrepTests 11/11. Frontend: interview-prep.test.tsx 13/13. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh interview/debrief/next-action and section query fixtures pass named state; followMode retains compatibility metadata only. Mode-specific follow-up compose UI remains approved later-mail deferral. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-W11 — Follow-up/reminder workflow, rule-driven dates/stages, notifications, deadline/follow-up ICS and Google/Outlook calendar event actions Original contract: RemindersView, RulesSettingsCard, ApplicationCalendarActions; calendar integration already exists, date-only/timestamp semantics must survive |
GET /api/jobapplications/reminders;GET/PUT /api/rules;PATCH {id}/followup;GET /api/calendar/status, jobs/{id}/events.ics;POST jobs/{id}/events;ApplicationCalendarController |
Reminders /reminders opens job/follow-up; Settings Follow-ups; job calendar menu Download ICS/Add Google/Outlook | Owned reminder/date writes; rules do not ghost prospects; date-only all-day vs timestamp preserved; provider connection does not imply writable calendar consent | F:daily-control-loop; F:application-calendar; B:ApplicationCalendarController; B:RulesEngineProspect Representative tests with inspected assertions: dashboard attention card opens follow-up workspace; adds the selected application date to a writable connected calendar. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: ApplicationCalendarControllerTests 4/4, RulesEngineProspectTests 5/5. Frontend: daily-control-loop.test.tsx 4/4, application-calendar.test.tsx 3/3. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh reminders route/read, calendar/rule/date/export backend/component fixtures pass; native Rules draft loss is recorded under S03. External calendar operations and actual scheduled delivery remain NOT VERIFIED. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-W12 — Async operation progress, pending/failed/retry/cancel states and associated notifications Original contract: OperationsPage, profile processing components; preserve operation IDs and server state, avoid duplicate starts on rerender |
GET /api/operations, {id};POST {id}/retry, cancel;GET /api/notifications;OperationsController + UserOperationStore |
Account/utility Operations /operations: inspect pending/failure, Retry/Cancel; bell opens linked operation | Persistent owner operation IDs, explicit retry/cancel and notification read/dismiss; idempotent producer/worker claims; rerender is not duplicate generation authorization | F:operations-page; F:profile-page; B:OperationsController; B:UserOperationStore Representative tests with inspected assertions: profile page loads persisted structured cv and can re-parse it; shows persistent operation and notification states with accessible actions. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: OperationsControllerTests 3/3, UserOperationStoreTests 10/10. Frontend: profile-page.test.tsx 15/15, operations-page.test.tsx 3/3. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: All-role Operations route/native GET and named dispatcher/operation cancellation/retry suites pass. No production worker/provider execution launched; full async delivery remains unverified. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-C01 — Canonical structured career profile: personal details, summary, skills, work, education, languages, interests and long-tail/custom sections Original contract: CareerProfilePage, views/career/*; profile save is an account singleton, CV is an identified derived resource |
GET/PUT /api/career/profile;CareerProfileController + CareerProfileService |
Career /career section Profile: structured personal/summary/work/education/skills/languages/interests/custom fields Save | Canonical account singleton write with version history; CV identified lens separate; no selected-CV override may replace canonical source | F:profile-page; B:CareerProfileController; B:CareerProfileService Representative tests with inspected assertions: profile page loads persisted structured cv and can re-parse it; Put_then_get_round_trips_the_profile_and_updates_the_projection. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: CareerProfileControllerTests 6/6, CareerProfileServiceTests 21/21. Frontend: profile-page.test.tsx 15/15. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh source-scope/preservation native fixtures prove canonical source versus selected/sibling CV isolation and readback; no complete all-entry canonical CRUD/import journey. Named backend/component cases pass. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-C02 — Profile overview, completeness/import guidance, manual edit, copy raw CV text, avatar and version history/restore Original contract: CareerWorkspacePage, CareerProfilePage; preserve projection/history behavior without redesigning schema |
GET /api/career/profile/completeness, versions;POST versions/{version}/restore;GET /api/profile-cv/runs;CareerProfileController |
Career /career overview/profile: completeness/import guidance, edit, raw-text copy/avatar, History Restore | Projection read and explicit profile restore writes a canonical version; account avatar identity remains separate; source history not CV settings history | F:career-workspace-page; F:profile-page; B:CareerProfileService Representative tests with inspected assertions: /career shows the profile completeness overview; SaveVersionAsync_assigns_stable_ids_to_items_missing_one. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: CareerProfileServiceTests 21/21. Frontend: profile-page.test.tsx 15/15, career-workspace-page.test.tsx 7/7. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh current Career route/read and revision/profile named suites pass; complete native canonical-history restore/avatar/raw-copy long-tail remains outstanding. No new profile-snapshot semantics invented. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-C03 — CV/file upload and extraction, rebuild/improve/reprocess, progress/history, diff, explicit low-confidence selection, accept/discard, retry/cancel Original contract: CareerProfilePage, /profile-cv/*; uploaded proposal is not silently canonical truth |
POST /api/profile-cv/upload, rebuild, improve, reprocess;GET runs, runs/{id}/diff;POST runs/{id}/accept, discard;ProfileCvController + operation store |
Career /career Profile Import/upload/history/diff: select low-confidence changes, Accept/Discard, Retry/Cancel | Owned extracted proposal not silently canonical; explicit accept only selected content; file artifacts/progress/failed operations require retention and recovery | F:profile-page; B:ProfileCvController; B:CvProfileDiffService Representative tests with inspected assertions: pending CV extraction can be reviewed and applied; Upload_rejects_unsupported_extension. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: ProfileCvControllerTests 32/32, CvProfileDiffServiceTests 11/11. Frontend: profile-page.test.tsx 15/15. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh deterministic extraction/review/progress/selection regression suites pass. Actual external extraction/provider/cancellation delivery and all formats/low-confidence combinations remain unverified. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-C04 — Evidence bank: sourced statement/title/category/tags, add/list/delete and truthfulness guidance Original contract: CareerEvidenceBank; evidence belongs to profile owner and is not AI-invented experience |
GET/POST/PUT/DELETE /api/career/evidence;CareerEvidenceController |
Career /career Evidence: add sourced title/statement/category/tags, list/delete | Own user-approved evidence with provenance; statements cannot become invented employment; deletion explicit and tenant-bound | F:career-evidence; B:CareerEvidenceController Representative tests with inspected assertions: saves factual evidence with provenance and tags; Evidence_is_user_approved_tenant_scoped_and_deletable. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: CareerEvidenceControllerTests 1/1. Frontend: career-evidence.test.tsx 1/1. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh evidence-bank CRUD/owner backend/component cases pass; no native full add/tag/delete route traversal added. Evidence-source factual review remains a human obligation. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-C05 — CV library create/name/copy/delete, template gallery and real sample thumbnails, publish/unpublish/share and PDF download Original contract: CvBuilderPage, cvBuilder; separate public slug from numeric private ID |
GET/POST/PUT/DELETE /api/cv/variants;POST {id}/duplicate;PUT {id}/public;themes/preview;CvVariantController |
CV library /career/builder: Create/name/copy/delete, template card real sample, Publish/Unpublish/Share/PDF; open /:id | Owned private numeric IDs distinct from public slug; publish explicit; copying preserves selected settings; deleting/unpublishing removes public reach as documented | F:cv-builder-page; F:cv-template-thumbnail; B:CvBuilder; B:PublicCvController Representative tests with inspected assertions: Create_then_save_increments_version_and_keeps_history; shows the empty state and creates a CV then navigates to the editor. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: CvBuilderTests 35/35, PublicCvControllerTests 3/3. Frontend: cv-builder-page.test.tsx 6/6, cv-template-thumbnail.test.tsx 1/1. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh smoke API setup publishes synthetic public CV and downloads anonymous HTML/PDF; editor-frame UI revoke and library/template fixtures pass. This is not full UI creation/publication lifecycle or deployed rendering proof. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-C06 — Studio Template/Content/Customize/AI Tools/History navigation; debounced preview, page boundaries/automatic fit and save state Original contract: CvBuilderEditor; existing mobile edit/preview and desktop split must retain parity; automatic fit is not a manual zoom control |
GET /api/cv/variants/{id}, preview;POST /api/cv/preview;PUT variants/{id};CvVariantController |
Identified studio /career/builder/:id Template/Content/Customize/AI Tools/History; mobile Edit/Preview and Fit/Return | Debounced read preview and queued explicit/autosave owner revision write; white document page/count separate from application theme; fit not manual zoom | F:cv-builder-deep-link; B:CvBuilder Representative tests with inspected assertions: Section_presentation_is_normalized_and_shared_by_preview_and_pdf_renderer; pane navigation focuses the existing preview without changing the pending draft. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: CvBuilderTests 35/35. Frontend: cv-builder-deep-link.test.tsx 41/41. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh CV frame/responsive/preview native fixtures verify five tabs, save/history access, mode switching, region names, fit/page indicators and retention; measured16/16 standard fidelity. Human/device/production-font acceptance open. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-C07 — Built-in item visibility/order, custom sections, preset/free-text section catalog, item/content overrides, hide/remove, native section drag and keyboard reorder Original contract: CvBuilderEditor, components/cv/*, useDragReorder; selected profile source and overrides remain distinguishable |
PUT /api/cv/variants/{id};GET /api/cv/outline;CvVariantController + CvVariantService |
Studio Content: show/hide/remove, source/reset override, custom preset/free-text section, move up/down/native drag | Selected CV settings/override writes retain stable source/item IDs; omitted differs from deleted canonical; custom section ownership and nested/foreign drop boundaries retained | F:cv-builder-deep-link; F:cvBuilder; B:CvBuilder Representative tests with inspected assertions: Resolver_applies_item_override_bullets_without_touching_the_master; [P5-10 PRES-C07 C10] resetting one entry field preserves omission, sibling override and order and supports undo. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: CvBuilderTests 35/35. Frontend: cv-builder-deep-link.test.tsx 41/41, cvBuilder.test.ts 13/13. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh source-scope/responsive native fixtures verify override/reset/omission/CV-only entry, section order/reorder alternatives and canonical isolation; native browser pointer automation is not physical-touch acceptance. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-C08 — Template-capability-aware typography/colors/header/headings, skills presentation/groups, one/two-column and sidebar settings, photo/icons Original contract: CvCustomizeTab, theme registry; retain unsupported-setting handling and server render equivalence |
GET /api/cv/themes;PUT /api/cv/variants/{id};CvVariantController + theme renderer registry |
Studio Template/Customize Style: typography/color/header/headings/skills/groups/columns/sidebar/photo/icons | Capability-aware setting writes; unsupported controls/default reset do not erase unrelated dormant values; server renderer authoritative, theme toggle must not change document palette | F:cv-builder-deep-link; F:cvBuilder; B:CvBuilder Representative tests with inspected assertions: Resolver_defaults_include_every_populated_section; choosing a template restores its own structure instead of inheriting the previous template layout. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: CvBuilderTests 35/35. Frontend: cv-builder-deep-link.test.tsx 41/41, cvBuilder.test.ts 13/13. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh template/style controls and8 native settings exports pass; representative capabilities/IDs/colors/fonts retained. Production font/photo and every template/capability combination remain unqualified. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-C09 — A4/Letter, density, margins/spacing, date format, document language, per-section rows/grid/compact/bubbles and columns Original contract: cvBuilder, CvCustomizeTab, content controls; do not drop advanced controls merely to simplify layout |
PUT /api/cv/variants/{id};POST variants/{id}/export-pdf;CvVariantController |
Studio Customize Layout/Advanced: A4/Letter/density/margin/spacing/date/language/rows/grid/compact/bubbles/columns | Validated document settings owner revision write; retained advanced fields/render semantics; locale of controls distinct from document language; geometry oracles unchanged | F:cvBuilder; F:cv-builder-deep-link; B:CvBuilder Representative tests with inspected assertions: Variant_settings_reject_css_injection_in_visual_overrides; editor sections, design controls and document settings render in Bokmål. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: CvBuilderTests 35/35. Frontend: cv-builder-deep-link.test.tsx 41/41, cvBuilder.test.ts 13/13. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh settings/Layout control before/after exports yield24 preview=24PDF pages; standard36=36 also passes unchanged tolerances. Actual wider zoom/reflow and arbitrary settings combinations remain unverified. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-C10 — Undo/redo of editor settings, save queue, unsaved guard, history/version restore and preview lifecycle Original contract: CvBuilderEditor; current queue serializes one mounted editor only, not concurrent browsers |
PUT /api/cv/variants/{id};GET versions;POST versions/{version}/restore;CvVariantController + CvVariantService |
Studio Undo/Redo, save status/retry/recovery; History select Restore; dirty navigation Keep editing/Discard | Undo local settings vs reset live-source override vs persisted history lens distinct; expected revision blocks lost update; queue serializes mounted editor, not all browsers | F:cv-builder-deep-link; B:CvBuilder Representative tests with inspected assertions: Resolver_defaults_include_every_populated_section; revision conflict retains the draft and blocks later autosaves until explicit reload. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: CvBuilderTests 35/35. Frontend: cv-builder-deep-link.test.tsx 41/41. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh five backend revision safety cases plus browser dirty/conflict/recovery/history access and undo/redo fixtures pass; generated/unaccepted AI history protections deterministic. No all multi-device race certification. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-C11 — Per-section AI improve/translate/custom instruction and whole-document translate/improve/spelling review Original contract: AiSectionAssistant, builder AI tab; source/target language, current/suggestion comparison, apply/reject |
POST /api/cv/ai/assist, variants/{id}/ai/apply;CvVariantController + optional CvAiSuggestionService |
Studio AI Tools and per-section assistant: improve/translate/custom/spelling, compare, Apply/Reject | Pro entitlement, owner/revision/proposal binding and explicit apply; Production service withheld 503 cv_ai_unavailable; qualification/review UI obligation deferred, not fulfilled by safety tests | F:ai-section-assistant; F:cv-builder-deep-link; B:AiWorkspace; B:AiPrivacyPolicy ; Production no-write checks, isolated HTTP contract Representative tests with inspected assertions: [PRES-C11 PRES-C07] whole-document AI %s changes only an explicitly accepted CV override; section AI uses the CV document language and requires explicit server acceptance. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: AiWorkspaceTests 9/9, AiPrivacyPolicyTests 9/9, CvAiReadinessTests 29/29. Frontend: cv-builder-deep-link.test.tsx 41/41, ai-section-assistant.test.tsx 14/14. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Approved P5-13 deferral:0/366 configured-model calls,0 human reviews, UI unimplemented. Fresh108 deterministic AI and realHTTP2 prove Production503 before provider/write and unrelated AI fixture availability only. Journey scope; native results. |
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. |
DEFERRED | DEFERRED |
| PRES-C12 — Authenticated PDF export and anonymous published-CV preview/PDF; long searchable multipage documents Original contract: PublicCvPage, cvBuilder, server renderer; B03 shared resource admission and public ownership/publication checks |
POST /api/cv/variants/{id}/export-pdf;GET /api/public-cv/{slug}, {slug}/pdf;CvVariantController + PublicCvController + PdfRenderAdmission |
Private studio/library PDF; Share public /cv/:slug anonymous page and PDF download | Private owner check; anonymous only published slug; revoke/unknown slug denies render; shared owner/global admission prevents overlaunch; long searchable pages require native output proof | F:public-cv-page; B:PublicCvController; B:PdfRenderAdmission Representative tests with inspected assertions: Pdf_download_is_rate_limited; public CV exposes the rendered CV and PDF download. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: PublicCvControllerTests 3/3, PdfRenderAdmissionTests 22/22. Frontend: public-cv-page.test.tsx 1/1. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh16 standard and8 settings native preview/PDF exports pass exact page membership and unchanged metrics; browser public/download and native frozen attachment proof pass. Production fonts/photos/storage/render deployment unverified. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-M01 — Job-scoped manual note/email log, search, delete, paste/import message; current job/company context Original contract: Correspondence; manual record is different from sending a real email |
GET/POST /api/correspondence;GET {jobId}, message/{id}, page;DELETE {id};CorrespondenceController |
Job workspace Timeline Correspondence: log note/email, contextual search, paste/import, delete | Owner/job-bound manual records and search; recording is not delivery; imported text/context cannot bypass owned job relationship | F:end-to-end-trust-loop; F:correspondence-search-context; B:CorrespondenceController Representative tests with inspected assertions: overview entry opens the canonical communication workspace without sending mail; builds contextual suggestions for the shared application correspondence view. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: CorrespondenceControllerTests 3/3. Frontend: end-to-end-trust-loop.test.tsx 1/1, correspondence-search-context.test.ts 2/2. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh timeline/correspondence section fixture and native inbox GET pass; full mail filters/open/reply/send/provider lifecycle not traversed. Named backend/component cases prove their finite contracts. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-M02 — Gmail candidate search/import, linked-thread refresh/sync history, import thread, unlink/relink/move with job selection Original contract: Correspondence; cross-job relationship changes remain owner-bound |
GET /api/gmail/job-candidates, messages;POST import, import-thread, refresh-linked-threads, manual-sync, unlink-thread, relink-thread;GmailController |
Job Timeline Correspondence Gmail tools: candidate/import/thread/refresh, unlink/relink/move owned job picker | Owner provider grant + job/thread/message links; move cannot cross tenant; provider absence/error distinct from no correspondence; sync is external and remains sandbox-unverified | F:correspondence-gmail-import; B:GmailController; B:EmailOwnershipIntegration Inherited EmailOwnershipIntegration anchor is an identity-token suite and is excluded from this mail group’s fresh coverage. Representative tests with inspected assertions: automatically refreshes already-linked Gmail threads without manual re-import; Import_thread_rejects_missing_message_ids. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: GmailControllerTests 19/19. Frontend: correspondence-gmail-import.test.tsx 6/6. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh named draft/correspondence owner and conflict tests pass; no real delivery/provider integration executed. Identity email-token tests are excluded from mailbox ownership evidence. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-M03 — Global correspondence inbox with pagination/search/filter/direction/provider/link state, full message and attachment information, source-job links Original contract: CorrespondenceInboxPage; provider read failure distinct from no messages |
GET /api/correspondence/page, message/{id};GET /api/email/providers, messages, thread, message;EmailController + CorrespondenceController |
Secondary Correspondence /correspondence: search/filter/page/provider/direction/link; open message and source-job link | Owned saved inbox can display while provider unavailable; fetched plain text avoids provider HTML injection; large mailbox/binary attachment delivery not proven by mock detail | F:correspondence-inbox-page; B:EmailController; B:EmailOwnershipIntegration Inherited EmailOwnershipIntegration anchor is an identity-token suite and is excluded from this mail group’s fresh coverage. Representative tests with inspected assertions: keeps saved correspondence visible when provider status is unavailable; Provider_status_is_owner_scoped_and_does_not_claim_send_support. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: EmailControllerTests 3/3. Frontend: correspondence-inbox-page.test.tsx 16/16. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh named provider/correspondence ownership tests pass; no external binary mailbox sync or live reconnect exercised. Identity email confirmation tests contribute no mailbox isolation proof. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-M04 — Compose/reply, choose connected provider and job/recipient, save/resume/delete drafts, review/confirm send, delivery states and explicit new attempt Original contract: CorrespondenceInboxPage; persisted draft revision and send idempotency/uncertain delivery controls must survive navigation changes |
GET/POST/PUT/DELETE /api/email/drafts;POST {id}/new-attempt;POST /api/email/send;EmailDraftsController + EmailController |
Correspondence /correspondence Compose or message Reply; select provider/job/recipient, Save/Resume/Delete, review final Send | Owned draft revision + ClientRequestId/send identity; explicit send confirmation; uncertain delivery never auto-retried; definitive failure permits explicit new attempt only; followMode compose UI deferred | F:correspondence-inbox-page; B:EmailDraftsController; B:EmailDraftPersistence Representative tests with inspected assertions: resumes a saved draft and surfaces revision conflicts without overwriting it; Revision_conflicts_prevent_lost_updates_and_cross_tenant_deletes. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: EmailDraftsControllerTests 5/5, EmailDraftPersistenceTests 1/1. Frontend: correspondence-inbox-page.test.tsx 16/16. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh named inbox/draft/send conflict and section entry fixtures pass finite semantics; no real send/reconnect or every dirty/uncertain interruption journey. followMode UI remains deferred, no automatic resend. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-M05 — Gmail review candidates, proposed jobs, link/reject/keep decisions, notes, manual sync and create suggested job Original contract: GmailReviewPage embedded in inbox; retain legacy review redirect |
GET /api/gmail/review-candidates, suggested-jobs;POST review-decision, manual-sync, create-suggested-job;GmailController |
Correspondence Review view /correspondence?view=review; /correspondence/review alias; Link/Reject/Keep/notes/Sync/Create | Reviewed owner decisions; no create on navigation/sync; proposed-job creation explicit and retains connection/thread association; real provider source unknown | F:gmail-review-page; F:correspondence-inbox-page; B:GmailController Representative tests with inspected assertions: Save_review_decision_links_thread_and_imports_messages; renders correspondence inbox items and reloads with filters. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: GmailControllerTests 19/19. Frontend: correspondence-inbox-page.test.tsx 16/16, gmail-review-page.test.tsx 3/3. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: All-role review alias retains destination and intentional Gmail-not-connected409 with named warning; fresh review/component/backend cases pass. Actual provider suggested-job/link/create not exercised. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-M06 — Gmail/Google and Microsoft Graph connection/status/disconnect, IMAP connection/status/disconnect Original contract: EmailProviderConnections, ConnectedAccountsPage; login identity and mail-provider identity are separate capabilities |
GET /api/gmail/status, connect-url;DELETE connection;/api/microsoft-graph equivalents;GET /api/imap/status;POST connect;DELETE connection;provider controllers |
Settings Manage connected accounts /settings/connected-accounts; Google/Outlook Connect/Disconnect; IMAP host/user/password connection | Owner provider authorization independent from sign-in link; IMAP SSRF/ciphertext credential handling; actual token revocation/expiry/reconnect remains external evidence | F:email-provider-connections; B:MicrosoftGraphController; B:ImapController Representative tests with inspected assertions: renders connection controls in Norwegian Bokmål; Status_returns_sync_state_fields_for_connected_account. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: MicrosoftGraphControllerTests 7/7, ImapControllerTests 9/9. Frontend: email-provider-connections.test.tsx 3/3. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: All-role connected-account route observes genuine Gmail status; backend/component Graph/IMAP contracts pass. Full live Gmail/Graph/IMAP grant/revoke/expiry and every status not established by census. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-S01 — Personal dashboard counts, activity/funnel/company/skill trends, stage/salary insights and actionable next steps Original contract: DashboardView, analytics APIs; chart transformations and empty/error states preserved |
GET /api/jobapplications/stats, analytics, analytics-overview, tag-trends;JobApplicationAnalyticsController |
Primary Dashboard /dashboard and Analytics /analytics: report period/table/value/insight/action drill-down | Read owned exact population/period/stage/salary metrics; no invented compensation/denominator; error distinct from empty; Dashboard flags do not hide Analytics report families | F:daily-control-loop; F:workflow-trust-signals; B:StageAnalytics; B:AnalyticsSalary Representative tests with inspected assertions: Salary_insights_keep_currency_and_period_groups_separate; follow-up workflow signals route all overview surfaces to the same follow-up workspace. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: AnalyticsSalaryTests 1/1, StageAnalyticsTests 4/4. Frontend: workflow-trust-signals.test.tsx 3/3, daily-control-loop.test.tsx 4/4. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh Dashboard/Analytics browser fixtures validate real recorded cohorts/exact chart alternatives/periods/drill-down and account isolation; four theme/locale pairs. New unsupported metrics remain absent; production timezone/provider/human chart reading not certified. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-S02 — Five per-owner local visibility preferences; onboarding progress and dismiss; notification bell/unread/read/dismiss Original contract: DashboardView, OnboardingChecklist, NotificationsPopover; no server widget-order/resize contract exists yet |
GET /api/notifications, unread-count;POST {id}/read;DELETE {id};OperationsController;browser owner-local flags |
Dashboard visibility toggles/onboarding Dismiss; shell bell read/dismiss/open notification | Five local flags owner keyed; no server widget-order/resize/reset contract; notification writes tenant-bound and idempotent; server language save is distinct from local flag persistence | F:onboarding-checklist; F:notifications-popover; B:JobLifecycleEvent Representative tests with inspected assertions: uses structured career data and connected inbox status for onboarding progress; shows notifications and updates read and dismissed state in place. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: JobLifecycleEventTests 9/9. Frontend: onboarding-checklist.test.tsx 1/1, notifications-popover.test.tsx 6/6. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh Dashboard five owner-local visibility flags/reload/account-switch and shell notification fixtures pass. Three language/notification overlap rounds pass separately; earlier generic language500 remains open, not a Dashboard-toggle failure. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-S03 — Follow-up/ghosting rule settings, email reminder preference, table preferences, theme/language and connected-account links Original contract: SettingsView, RulesSettingsCard; preferences have different scopes, do not replace with one unsafely shared object |
GET/PUT /api/rules, notification-settings;PUT /api/auth/preferences/language;RulesController + NotificationSettingsController + AuthController |
Settings General/Follow-ups/Notifications tabs or mobile section picker; edit/Save rules and reminders, table/theme/language; connections link | Rules/reminder/language server writes vs browser/table preferences have separate scopes; failure must preserve actionable draft; tab unmount discards local RulesSettingsCard draft in current source | F:settings-view; F:theme-state; B:NotificationSettingsController; B:RulesEngineProspect Representative tests with inspected assertions: uses one browser preference and falls back to System; A_prospect_is_never_followed_up_or_ghosted_however_old. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: RulesEngineProspectTests 5/5, NotificationSettingsControllerTests 3/3. Frontend: theme-state.test.tsx 7/7, settings-view.test.tsx 5/5. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Native Rules diagnostic loses unsaved5 back to14 on tab return; persisted14 and zero writes. FAIL SETTINGS-01. Saved rule/readback and three overlapping language/notification saves pass, but historical500 remains open. Journey scope; native results. |
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. Confirmed defect: register; separate owner repair required. |
PARTIAL | FAIL |
| PRES-S04 — AI privacy settings, usage/limits, honest Free/Pro lock states, billing status, conditional checkout and portal Original contract: AiPrivacySettingsCard, AiUsageCard, AccountPlanProvider; server entitlement authoritative, not client context defaults |
GET/PUT /api/ai/settings;GET /api/ai/usage;GET /api/billing/status;POST checkout, portal;AiSettingsController + AiUsageController + BillingController |
Settings General privacy/usage/plan; Pro locks in domains; Upgrade/Manage only when server billing available | Server entitlement and monthly owner metering authoritative; privacy consent external processing gated; conditional billing is not real checkout proof; C11 Production exception bounded | F:settings-view; F:ai-usage-card; B:AiPrivacyPolicy; B:AiUsageMeter Representative tests with inspected assertions: External_processing_requires_admin_gate_user_consent_and_pro; settings view has no accent picker and uses one follow-up section, one notification section. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: AiPrivacyPolicyTests 9/9, AiUsageMeterTests 3/3. Frontend: settings-view.test.tsx 5/5, ai-usage-card.test.tsx 2/2. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh entitlement/privacy/usage deterministic suites and realHTTP withholding fixtures pass; existing unrelated AI remains available in fixture. No live checkout/webhook/provider consent or P5-13 semantic qualification. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-S05 — Account export, encrypted backup download, lifecycle status and deliberate deletion confirmation Original contract: BackupCard; recent-auth/password/provider restrictions remain; a downloadable backup is not proven restore readiness |
POST /api/export/account, /api/backup/encrypted;GET /api/account-lifecycle/status;POST delete;ExportController + BackupController + AccountLifecycleController |
Settings Backup: readable ZIP/encrypted download; lifecycle/deletion enabled server flag then deliberate confirmation | Recent-auth/password/provider restrictions; complete owner ZIP/redaction distinct from full recoverable restore; account deletion destructive, not run in this audit | F:account-data-export; B:AccountDataExport; B:BackupController Representative tests with inspected assertions: downloads the readable account ZIP from the protected endpoint; Readable_zip_is_complete_checksummed_owner_isolated_and_redacted. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: AccountDataExportTests 3/3, BackupControllerTests 3/3. Frontend: account-data-export.test.tsx 4/4. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh account ZIP/encrypted backup/lifecycle backend/component cases pass; native Job-package ZIP proof is distinct. No current production database backup/restore or destructive account lifecycle rehearsal. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-A01 — Admin user list/create, role promotion/demotion guards, reset link and delete with last-admin/self warnings Original contract: AdminUsersPage, /users; API roles enforce privilege regardless of navigation |
GET/POST /api/users;PUT {id}/roles;DELETE {id};POST {id}/send-password-reset;UsersController |
Admin Users /admin/users via role-gated Admin group; create/list/promote/demote/reset/delete confirmations | Admin API authority independent from shell; last-admin guard and self-confirmation, role changes revoke sessions/trusted devices; actual reset email not proved by controller mock | F:admin-users-page; B:UsersController; B:ApiAuthorizationPosture Representative tests with inspected assertions: warns before demoting another administrator; SetRoles_rejects_removing_the_final_administrator. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: UsersControllerTests 7/7, ApiAuthorizationPostureTests 5/5. Frontend: admin-users-page.test.tsx 4/4. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh32-route census normal403/admin200 and account metadata distinction; guarded role/last-admin/self backend suites pass. Full native successful user mutations/reset delivery/role revocation not performed. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-A02 — Admin audit event list/detail, supported undo and job restore Original contract: AdminAuditPage; preserve event/ownership semantics rather than generic mutation buttons |
GET /api/admin/audit;POST {id}/undo;AdminAuditController |
Admin Audit /admin/audit: filters/list/detail, supported Undo/job restore | Admin read/mutation with supported event semantics and restore ownership; unsupported undo unavailable; role posture test alone is not successful undo proof | F:admin-audit-page; B:AuthAndSystemController; B:ApiAuthorizationPosture Inherited AuthAndSystemController anchor has no Audit/Undo assertion and is excluded from this group’s fresh coverage. Authorization posture is reflection evidence only. Representative tests with inspected assertions: Every_controller_either_requires_authorization_or_is_listed_as_public; distinguishes an unavailable audit log from an empty audit log and retries. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: ApiAuthorizationPostureTests 5/5. Frontend: admin-audit-page.test.tsx 2/2. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh normal403/admin200 route/read and named error/retry UI/authorization-posture cases pass. Successful native AuditUndo/job restore remains NOT VERIFIED; no false attribution of38 auth/system tests. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
| PRES-A03 — Separate system health/build/database/AI/email status, SMTP settings/test, AI probe, CV corpus benchmark and maintenance run controls Original contract: AdminSystemPage; sensitive config values/logs must not move into personal dashboard |
GET /api/admin/system, email-settings, cv-benchmark, maintenance-jobs;PUT email-settings;POST ai/probe, maintenance-jobs/{jobId}/runs;POST /api/users/send-test-email;AdminSystemController |
Admin System /admin/system status/build/database/AI/mail; SMTP Settings/Test, probe, benchmark/maintenance control | Admin-only sensitive reads/writes; secret redaction and allowlisted dispatch; actual production SMTP/model/probe/maintenance external operations not performed | F:admin-system-page; B:AuthAndSystemController; B:MaintenanceJobDispatcher Representative tests with inspected assertions: Login_locks_account_after_five_failed_attempts_and_rejects_sixth_even_with_correct_password; loads and saves smtp settings from the settings tab. These protect finite fixtures; mocked UI/controller providers do not prove real delivery or every listed control. |
Observed source: owner/entry/call boundary and assertion excerpts inspected. Fresh execution: Backend: AuthAndSystemControllerTests 38/38, MaintenanceJobDispatcherTests 3/3. Frontend: admin-system-page.test.tsx 4/4. All above mapped cases passed at audit source; counts overlap between rows and are not additive. Fresh native/observed outcome: Fresh normal403/admin200 system route/read and named SMTP/allowlisted dispatcher tests pass. No live SMTP/probe/model/maintenance run or production sensitive-output qualification. Journey scope; native results. |
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. |
PARTIAL | PARTIAL |
Discrepancies and separate exceptions
- S03 draft-loss blind spot:
SettingsView.tsx:43–44returnsnullfor inactive tab panels;RulesSettingsCardkeeps an unsaved draft in mounted component state. Changing tabs therefore destroys that draft. The existing native preservation test atredesign-preservation.spec.ts:209resizes with the draft mounted, saves rules, then changes tabs; it does not protect unsaved tab traversal. The separate native diagnostic now fails that exact unsaved tab traversal:14→5→14, no writes. S03 is FAIL under SETTINGS-01; this is a freshly confirmed previously recorded risk, not a newly introduced audit regression. - Preference reliability: P4-04-O02 notification SQLite lock/500 and P5-06-O01 language-save 500 during overlapping reads are distinct inherited failures. Sequential successful saves, local flag reload, or a non-recurrence do not establish concurrency safety or erase those records. Fresh repetition/API exception/DB-provider evidence belongs to the functional audit; bounded remediation belongs to an explicit owning checkpoint.
- Approved
followModeexception:jobWorkspaceRoute.tsproduces it andApplicationWorkspacePageclones current query parameters before changingsection/sub. No consumer of it is present in the workspace or inbox compose owner. Metadata preservation is testable; mode-specific compose UI remains the approved mail deferral and is not accepted by URL assertions. This affects W10/W11/M04 reach meaning, without inventing missing behavior as a new implementation request. - P5-05 separate: a new active quick-preview host remains reserved/deferred. W01 still protects actual full-workspace and reusable overlay contracts. An unused host is not an executed journey, and P5-05 is not C11 or a failure inferred from absence.
- C11 explicitly DEFERRED: P5-13 qualification has zero configured-model calls/human reviews and its new review UI remains unfinished. Current Production optional-service absence yields
503 cv_ai_unavailablebefore generation/Apply writes. Passing deterministic guards and unrelated-AI availability prove controlled withholding only; they do not fulfill original AI generation/review. - Superseded historical failures: original Phase 2 P2-D01 expected failure, stale-CV revision failures and repaired P5-10/P5-14 drag/geometry cases retain their historical records but have newer bounded native/revision evidence. Do not reinstate expected failures or claim their supersession satisfies all provider/manual/render combinations.
- Ownership test precision: authorization posture tests assert endpoint attributes; controller/service tests assert scoped resources; browser account-isolation and crafted API denials test transport behavior. None alone proves every route's successful control traversal, mounted-role revocation, real OAuth, BFCache variation, mailbox binary or successful Admin undo.
- GET is not database-pure:
ApplicationWorkspaceService:111–112obtains checklist state throughApplicationChecklistService.GetAsync. First reads seed missing owned deterministic checklist rows; recomputation can save system completion state. These behaviors are covered by the retained checklist tests. Browser zero mutation-request counts establish no frontend-triggered unintended mutation/AI generation; they cannot establish zero server persistence on every GET. The matrix preserves the existing seed/recompute contract explicitly rather than proposing a behavioral repair during this audit. - Inherited mail/audit mappings corrected:
EmailOwnershipIntegrationTestscontains exactly three real Identity confirmation/change-email token cases, no Gmail/mailbox tenant assertions; inherited M02/M03 anchors therefore contribute zero mail behavioral cases here. They are relevant E02/E06 identity evidence.AuthAndSystemControllerTestscontains no AdminAudit/Undo assertions; its 38 passing cases are excluded from A02, while AdminSystem/auth evidence remains valid. A02’s frontend error/retry/localization and API authorization reflection assertions do not prove successful undo/job restore. Both are documentary coverage discrepancies, not evidence of an application security failure.
Reconciliation
Exact census: 57 unique rows = E9 + J10 + W12 + C12 + M6 + S5 + A3. Before: 56 PARTIAL, 1 DEFERRED (C11). After: 53 PARTIAL, 3 FAIL (E02/J02/S03), 1 DEFERRED (C11). Whole-group statuses are deliberately conservative: no full group is promoted solely from a representative test, source review, route header or axe scan. A PARTIAL row states which finite behavior passes and what remains NOT VERIFIED/BLOCKED; absence of human/provider evidence is not a functional FAIL.
| Status | P5-15-00 before | P5-15-01 verified after |
|---|---|---|
| PASS | 0 | 0 |
| PARTIAL | 56 | 53 |
| FAIL | 0 | 3 |
| DEFERRED | 1 | 1 |
| BLOCKED | 0 | 0 |
| NOT VERIFIED | 0 | 0 |
| Total | 57 | 57 |
Zero whole-group BLOCKED/NOT VERIFIED does not erase blocked or unverified sub-workflows: every PARTIAL group has fresh representative executable evidence, with its remaining gaps listed. This matrix cannot declare exhaustive behavioral acceptance. Confirmed failures are one P1 saved-search availability defect and two P2 recoverable context/draft failures; E07 also references AUTH-01 but is not double-counted as a second defect.
Original full Phase 5 acceptance remains unavailable with C11/P5-13 and mandatory human/device/provider obligations outstanding. Production remains NO-GO; no production, provider, model, destructive account/DB or deployment operation occurred in this matrix task.