36 KiB
Phase 5 implementation plan
Documentation only. No implementation slice is authorized or started by this checkpoint. Start from 2a2f9e48052c562ef599825458d0d3a6f9f9fc61 on codex/ui-redesign-phase4. Each row below is a separately reviewable implementation checkpoint when explicitly requested. Stop after each; never run automatically into the next slice.
Sources: Phase 3 sequencing, P4-06 conditional acceptance, readiness gates, navigation contract, 57-contract impact, visual acceptance. This plan makes Phase 3 proposals concrete; it does not supersede preserved functionality or turn missing APIs into existing capabilities.
Order and conditional branches
| Order / ID | Name | Type / user impact | Dependency and checkpoint boundary |
|---|---|---|---|
| 1 — P5-00 | Shell readiness gates | Interaction/accessibility; small corrective change | G-SHELL; existing shell only, before P5-01 |
| 2 — P5-01 | AppShell and grouped navigation | First major visible UI redesign, high impact on every authenticated visit | Accepted P5-00; same routes/providers |
| 3 — P5-02 | Global shell utilities | Interaction and visible UI; medium | P5-01; existing command and notification capabilities |
| 4 — P5-03 | Jobs Table and mobile cards | Major visible UI; high | P5-01/02, G-JOBS behavior fixtures; includes shared Trash consumer |
| 5 — P5-04a | Board presentation | Major visible UI; high | P5-03; keep /kanban and existing population |
| 6 — P5-04b | Table/Board workspace integration | Architecture/interaction; medium | G-JOBS proven by separate readiness; integration record owns current acceptance |
| 7 — P5-06 | Dashboard presentation | Major visible UI; high | P5-01/02 and G-METRICS; need not wait for 04b |
| 8 — P5-07 | Existing-report Analytics destination | Presentation/refactoring; high | P5-06; exact existing report inventory/definitions and preference proof |
| 9 — P5-08a | Job header and Overview | Major visible UI; high | Jobs entry regression, G-WORKSPACE mobile proof; no package relocation |
| 10 — P5-08b | Job section architecture and existing domain content | Architecture/visible UI; high | 08a + G-PACKAGE, section/query/dirty evidence |
| 11 — P5-09 | CV editor frame and navigation | Major visible UI; high | G-CV-REV + G-CV-RENDER, relevant G-CV-BEHAVIOR |
| 12 — P5-10 | CV section editing and source scope | Interaction/visible UI; high | 09 + item/source/reset/reorder proof |
| 13 — P5-11 | Live preview presentation | Visible UI/interaction; high | 09/10 + accepted rendering evidence; no renderer replacement |
| 14 — P5-12 | Template and document controls | Visible UI/progressive disclosure; high | 11 + supported-setting matrix |
| 15 — P5-13 | CV AI review presentation | Interaction/visible UI; medium | 10/12 + explicit accept/reject/grounding guards |
| 16 — P5-14 | Complete responsive CV journey | Interaction/accessibility acceptance; medium | 09–13; all earlier slices already require mobile parity |
| 17 — P5-15 | Phase 5 acceptance checkpoint | Validation only; no intended UI change | All attempted slices reviewed; blocked/deferred work explicitly excluded from completion |
P5-05 is deliberately reserved, not an executable ticket: an active quick-preview drawer would be NEW-10, not a redesign of a mounted production feature. Current ApplicationWorkspace has reusable overlay props but only a full-page production caller. Keep direct title/open and Back/focus behavior in P5-03/04/08. Defer a new preview host until Phase 6 review establishes its value and its read-only/ownership/focus contract is separately approved. Do not add it merely to fill a numbering slot.
04a/04b are separated because the current board read cannot support table filter parity. 08a/08b are separated because a header/overview can improve without moving broken package operations. CV is late and conditional; absent revision/rendering evidence, defer 09–14 explicitly rather than call a partially migrated builder finished. P5-15 can assess completed independent slices with a conditional/partial verdict; full Phase 5 acceptance requires all retained representative scope, or Connor's explicit scope revision.
Common contract for every implementation checkpoint
- Before editing, re-read its owners, affected PRES rows and the previous checkpoint; add missing high-risk behavioral assertions before changing the protected workflow. Component/service tests do not replace native ownership/package proof.
- Use existing MUI/Emotion, semantic focus/color/status roles, PageHeader/PageSection and width/density aliases. No new theme, table framework, provider tree, persistent private store, generic save framework, or final brand/font/logo decision.
- Retain all 31 current routes and compatibility paths. Add
/analyticsonly in P5-07 with meaningful existing content. P5-04b preserves/kanbanas an alias only after parity; never remove it. Deep-link and dirty/account lifetimes are acceptance conditions, not cleanup. - Every slice applies visual acceptance, including light/dark × EN/NB, real populated/error data, desktop/phone and keyboard checks. All migrations are mobile-capable immediately; P5-14 is additional end-to-end review.
- After final code change run full inherited backend/frontend/browser/type/lint/build/security/config/secret/whitespace checks per README. Explain added/removed case counts, retain P2-D01 until separately proven fixed. Update a slice trace with actual commit/tests/evidence, not this plan's future tense.
- Roll back a slice's presentation and adapters together, retaining original data and URLs. No schema migration is included. Keep regression tests that describe still-required behavior; do not disable security gates to revert UI. A later compatibility URL already shared must continue resolving during rollback.
- Stop on unknown ownership/product semantics, newly required schema/provider/renderer replacement, unsafe query truncation or a failing preserved workflow. Document the affected scope; independent slices may proceed only by a subsequent instruction.
P5-00 — Shell readiness gates
Objective/scope: close the five G-SHELL prerequisites against current UI: mobile collapse/occlusion, long admin badge reflow, command list semantics, shared Tooltip contrast and actionable-toast overlap. Retain existing modal mechanics. Add real-App drawer/account/command/private-state fixtures. Sub-diffs may be reviewed in that order; deliver one bounded readiness checkpoint.
Owners/routes/PRES: layout/AppShell.tsx, components/QuickCommandDialog.tsx, shared theme.ts Tooltip and toast.tsx, narrowly necessary labels/tests; shell on authenticated routes, representative /settings, /jobs, /career/builder/:id; PRES-E07/E08/E09, E05, S02/S03/S05, A03; indirect C06 and J05 for tooltip controls. G-SHELL defines exact failure reproductions.
Out of scope: navigation regrouping, shell visual identity, expanded search entities/arrow navigation, modal company-save semantics, feature pages, provider/router changes, global overlay framework.
Proof: existing sidebar/command/dialog/theme/toast tests plus native collapse→reload→mobile, open-toast hit testing, long admin metadata, account switch with open utilities and dirty cancel. Visual sets VS-SHELL/UTILITY/SETTINGS, including 320px while toast is present. Remove only repaired known axe exceptions after evidence; do not touch P2-D01.
Dependency/rollback: no external infrastructure required. Revert each responsible component/style sub-diff if its contract fails; do not start P5-01 until all G-SHELL items accepted. Expected impact is corrective, not the major redesign.
P5-01 — AppShell and grouped navigation
Objective/scope: implement the visible shell in NAVIGATION_MIGRATION: grouped primary/secondary navigation, readable sidebar/rail, selected/hover/focus states, mobile drawer, account area and restrained utility bar. Preserve title/breadcrumb and width owners; use existing PageHeader semantics without duplicating h1. Add skip link/route-heading focus where absent, tested through dirty cancellation. Existing utility content remains for P5-02.
Owners/routes/PRES: App.tsx navigation/title metadata, layout/AppShell.tsx and its existing activeNavTo helper, localized strings and tests. All 31 patterns regression; direct PRES-E07/E08, E05/E06/E09, S02/S03, A01–A03 navigation; all J/W/C/M groups retain entry points as listed in the impact matrix. No provider-order or router-creation refactor.
Out of scope: new Documents/Admin/Notifications routes, dashboard/table/editor forms, capture logic, new AI panel, new brand asset, page-size preference store. Do not introduce a routing framework to represent groups.
Before: accepted P5-00; logical parent tests for non-nested Jobs paths and /career/builder/:id; route/callback inventory, existing real B02/permission tests; dirty CV/letter → theme/language/command/drawer navigation, Cancel retains draft. Characterize current persisted collapse separately from non-persisted mobile open state.
After: every destination accessible expanded/collapsed/phone, current parent/child correct, Back/refresh/deep links and public token routes intact, admin hidden plus API denied, no stale account data. VS-SHELL four theme/locale pairs at desktop/phone plus long admin 320, 767/768 transition, settings and dirty editor as unchanged content controls. One main/h1; focus return and unobscured route heading. This is the first substantial change visible when opening an authenticated page.
Rollback: isolated shell/navigation presentation; keep all URLs and page owners, no persisted collapse-key rename. Revert metadata/component together; stop before P5-02.
P5-02 — Global shell utilities
Objective/scope: refine existing QuickCommandDialog and NotificationsPopover presentation. Commands: grouped six existing static commands and job/company results, labelled search, Arrow/Enter/Home/End/Escape/IME behavior, explicit loading/no-match/error/Retry and stale-result cancellation using the existing API boundary. Bell: recent notifications, unread/read/dismiss/result/operation links with correct focus and no task completion side effect. Integrate utility triggers with shell headers without repeating page actions.
Owners/routes/PRES: App keyboard/utility callbacks only, QuickCommandDialog, NotificationsPopover, notifications client, existing localization. Entries target current Dashboard/Jobs/Companies/Reminders/Settings and /operations; PRES-E07/E08/E09, J03/J08, S02, W11/W12. P3-O02 search outage-as-empty is deliberately owned here.
Out of scope: CV/document search, notification producers, full /notifications, new command platform, global AI assistant, email scheduling/send, persisted query history. Navigation to already-existing pages may use the shell metadata, but no automatic mutation command or admin maintenance shortcut.
Before: quick-command-preservation, notifications-popover, app-shell-notifications, account isolation; add delayed A-result-after-close/B-login, two overlapping queries, dirty navigation cancel, genuine provider-independent error versus no matches and read/dismiss distinction.
After: VS-UTILITY full matrix, empty/query/error/selected/focus, notification load/error/unread/action states, phone keyboard-sized viewport; result count announcements not per-keystroke spam; ordinary Tab remains usable with one trap. Keep no-write Add behavior and current job/company targets. Manual screen-reader command and notification task, or explicitly block that accessibility acceptance pending operator proof.
Dependency/rollback: P5-01. Revert utility content/callback adjustments together; no new store/API. Search cancellation must not create a second unauthenticated client.
P5-03 — Jobs Table and mobile cards
Objective/scope: visible Table toolbar/header/rows and existing phone cards, restrained status/action presentation, secondary Jobs navigation and P4-05 density. Preserve current data columns, page sizes, filters/search/saved views, sorting/selection/actions and Trash mode. Display standard statuses via existing localized semantics; preserve raw custom labels/values. Resolve P4-05-O01 at display boundaries only; dates use UI locale without changing date meaning/timezone storage.
Owners/routes/PRES: JobTable, SavedViewsMenu, existing EditJobDialog call sites, pipeline display helpers and Jobs shell header metadata. /jobs, /trash; links to /jobs/:id, capture Add, /discover, /companies, /offers, /reminders, /settings. PRES-J03–J06, J08–J10 entry only, W01/W02, E07–E09, S03.
Out of scope: new priority/favorite fields, configurable status definitions, Board data consolidation, new preview host, new columns needing N+1 fetches, persisted density, backend schema, Add/import redesign. Trash is the same renderer, not a second screen redesign.
Before: G-JOBS tests; native saved-view CRUD/owner, partial bulk failure retains failed items, row action versus navigation, real App Back/filter/page/focus, 15/20/25 preferences without data loss and unmounted versus mounted density lifetime. Preserve default column choices; Phase 3's suggested new defaults are proposals, not permission to hide current columns.
After: VS-JOBS includes both densities, all columns, custom/long labels, selection/sort, empty/filtered-empty/error/Retry, bulk confirm/partial failure, Trash restore; 1440/1024/768 plus 390/320 cards, all four theme/locale pairs. Header associations/sort state, 32px fine/44px phone targets, visible horizontal-scroll focus. Selection clearing on result changes is explicit and cannot act on unseen stale IDs. No new workflow writes from density/filter presentation.
Dependency/rollback: P5-01/02 + behavioral gate. Keep list query/persistence owner; revert presentation and localized display together. If the existing router preference dependency causes a reproduced state-loss blocker, stop and specify a separate minimal prerequisite rather than rewrite routing here.
P5-04a — Board presentation
Objective/scope: apply the same Jobs hierarchy, surfaces, statuses and useful density to existing grouped Kanban columns/cards. Keep its full-board read and /kanban entry. Offer visible Table/Board navigation but explicitly keep separate view scope while parity is pending; do not imply filters transfer when they do not.
Owners/routes/PRES: KanbanBoard, existing pipeline/group helpers and Jobs secondary navigation. /kanban and /jobs links; PRES-J07, J05 navigation, W01/W02 status/open, E07–E09.
Out of scope: filtered board API, alias/route replacement, replacing three groups with ten columns, arbitrary drag library, custom status configuration, hiding Other or altering group-drop destinations.
Before: kanban-grouped-board, kanban-theme browser; add failed move retains correct card/status/focus, keyboard pickup/move/drop/cancel, exact status menu, unknown Other, >25 jobs and direct job open with return context.
After: VS-BOARD across themes/locales/phone/tablet/desktop. Saved/Applied/Rejected remain coarse group destinations; precise menu retains every supported status, Offer remains active, Other is not a drop target. Native drag and no-drag alternatives, move announcements, visible focus/scroll and long labels; empty/error/Retry. No forced dense table on phone.
Dependency/rollback: P5-03 styling contract; independent of G-PACKAGE/CV. Revert board presentation while retaining its current API/path.
P5-04b — Table/Board integration (blocked contract)
Objective/scope: once G-JOBS read parity is separately accepted, introduce one presentation view=table|board choice and compatible /kanban alias. Shared committed filter/query state, explicit selection lifetime, refresh and return context; reuse both renderers and the accepted read contract.
Owners/routes/PRES: bounded Jobs workspace owner composed from JobTable/KanbanBoard, App route adapter, existing query helpers. /jobs?view=…, /kanban, job return state; PRES-J05/J06/J07, W01/W02, E07–E09, S03.
Out of scope: silently defining a new backend population, loading all pages in the browser, schema, generic query framework, changing SavedView schema, removing /kanban or current all-board capability. No per-account view persistence added.
Before: accepted read contract with identical filtered population, completeness and ordering rules; API tests on >25 rows/custom statuses/deleted/follow-up/readiness, native list/board membership and stale move/error behavior. Explicit URL wins; no view specified means Table. Filter changes/page transitions and Back/Forward cannot lose source query.
After: VS-JOBS/BOARD comparison with the same fixture/query, saved filters, selection cleared or retained according to documented page scope, mobile view switch. Legacy /kanban replace preserves safe query/hash/state without loops; all records remain reachable. Do not claim parity from first-page equality.
Dependency/rollback: may be deferred while 06/07 proceed. On rollback keep canonical new shared links functional (map view=board to retained board); do not revert to ignoring shared URLs. No redirect before proof.
P5-06 — Personal Dashboard presentation
Objective/scope: redesign existing summary/attention, five visibility-controlled groups, activity/current pipeline/company/tag charts and existing detail panels. Put next actions and honest counts first; compact metric rows, informative charts and plain sections. Preserve onboarding, all five owner-local flags and existing 6/12/24 month control. No chart disappearance before its tested destination exists.
Owners/routes/PRES: DashboardView, existing OnboardingChecklist, small chart/metric presentation extractions only as consumed. /dashboard, source Jobs/Reminders/Career links; PRES-S01/S02, E07–E09, W11/W12 navigation, J05/J09 links.
Out of scope: order/resize/reset/layout persistence (Phase 8), new aggregate backend, weekly goals, upcoming interview appointments, unsupported match/CV performance/sector metrics, auto-AI, new admin analytics.
Before: G-METRICS. daily-control-loop, workflow-trust-signals, StageAnalyticsTests, AnalyticsSalaryTests; add native five toggles/reload/A→B isolation, partial summary versus trends failure, exact chart transformations and source query links. Keep the dashboardPrefs:<owner> key and meanings.
After: VS-DASHBOARD: populated, first-use, all-hidden, no-data-in-window, loading, independent error/Retry, all four locales/themes/widths; values tables/legends/period/sample and keyboard alternatives. Label non-deleted count “Tracked jobs”; interview-prep is preparation, not an appointment; current stage counts are not historical conversion. Unknown/unsupported is not fabricated zero. Existing salary currencies/periods remain separate.
Dependency/rollback: P5-01/02; may proceed without 04b/package/CV proof. Preserve current five visibility groups, no automatic reset/show-on migration. Revert view/extracted presentation together without clearing preferences.
P5-07 — Existing-report Analytics destination
Objective/scope: expose a meaningful /analytics using the reports currently inside Dashboard: monthly applications/responses, current status pipeline, company/source reports, tags/trends, current-stage age and salary groups. Separate detailed reading from daily attention. Add Insights → Analytics only with this page. Reuse existing reads and chart presentation; no new metrics endpoint.
Owners/routes/PRES: chart/series helpers extracted from DashboardView as needed, new thin Analytics page, App route/title/nav and source-link helpers. New /analytics, existing /dashboard remains; PRES-S01/S02/E07/E08/E09, J05/J09 source links. G-METRICS mandatory.
Out of scope: full analytical product from Phase 7, new cohort conversions/history, global activity/task/CV queries, admin aggregation, user layout settings, silently moving all five preference-controlled groups off Dashboard.
Before: inventory each existing report/action/period and endpoint. Preserve Dashboard access and five flag semantics; initially detail page may reuse the same presentation component while Dashboard keeps its current groups. Avoid a second calculation implementation or parallel duplicate requests within one mounted route. Add direct-load/back/source-filter/denominator tests and current-versus-window labels.
After: VS-ANALYTICS loaded/empty/error/period changes, accessible exact values, no hover-only data, all mode/locale pairs/phone. Disclose truncated top lists, all-time tags versus window trends, response sample and stage occupancy. Don't obtain an unknown bucket by subtracting mismatched populations; display raw byStatus separately when canonical funnel omits custom values.
Dependency/rollback: P5-06. This is a bounded advancement of existing-report presentation from Phase 7, justified by already available data; full new Analytics features remain later. Once shared, /analytics must remain meaningful even on rollback (retained report view or direct compatibility entry to existing reports), not a 404. No document/admin route follows automatically.
P5-08a — Job header and Overview
Objective/scope: bounded persistent role/company/status/location/deadline/actions header and clearer Overview hierarchy, reusing current job details/progress/next action/description. Fix the specifically assigned mobile progress-scroll semantics at that boundary before restyling it. Keep current five section keys and unchanged children.
Owners/routes/PRES: ApplicationWorkspacePage local WorkspaceHeader, Overview composition, ApplicationProgress/JobDetailsSection call sites; /jobs/:id, /applications/:id and existing sections. PRES-W01/W02/W03 entry/W11/W12 links, J05/J07 entry, E07–E09. Relevant F01 job write semantics remain unchanged.
Out of scope: package capture/tailoring/document relocation, changing save/status API, compulsory wizard, new favorite/match metrics, remounting section owners, changing mail send.
Before: G-WORKSPACE progress/focus fixture, real detail missing/foreign, status/next-step link, dirty Cancel/Discard and safe Back/focus tests. Layout opening must not trigger analysis/render/create/write.
After: VS-WORKSPACE Overview including long title, unknown data, error/Retry, status actions, mobile progress keyboard access, both themes/locales. No giant header, retained source/metadata via disclosure, no invented appointment/submission claims.
Dependency/rollback: Jobs entry tests pass, 04b not required. Existing tabs/package children stay untouched, so G-PACKAGE does not gate this header-only slice. Revert header/overview together, not API state.
P5-08b — Job sections and preserved domain content
Objective/scope: after G-PACKAGE, introduce Overview, Match, Application, Documents, Timeline, Notes & tasks, Interview navigation using the Phase 3 adapter. Recompose existing children without rewriting their persistence. Application exposes CV/letter/answers/submission; Timeline retains correspondence. Correct followMode/safe query retention and literal AI context {name} at affected navigation/label boundaries.
Owners/routes/PRES: ApplicationWorkspacePage, applicationWorkspace section adapter, wrappers around ApplicationAssets, Attachments, Correspondence, InterviewPrep, ApplicationChecklist, ApplicationTimeline. /jobs/:id, /applications/:id and every current section/numeric alias; PRES-W01–W12, M01/M02, M04/M05 navigation, C01/C05–C12 relationships, E07–E09.
Out of scope: rewriting these domain components, mail draft/send/revision changes, generic task/event/document store, global Documents page, altering canonical/CV ownership, atomic send+status+freeze, new scheduling, provider integration.
Before: G-PACKAGE native archive proof; adapter tests for overview/analysis/match/cv/cover-letter/interview/documents/timeline/checklist/communication/job-details and numeric 0–9; followMode, Back/search/state retained. Native all-child entry, manual vs answer Notes, CV attach/detach, document AI-use consent, dirty letter navigation and AI accept/reject; mocked provider failures remain identified as such.
After: VS-WORKSPACE for every populated section, key empty/error/dirty/dialog states, draft versus frozen/current/public labels, keyboard and mobile selector; provider-unavailable/manual routes remain reachable. Explicit source/CV/job scope and partial operation failures. No double editor or auto-send on mount. Retain existing overlay props without adding a host.
Dependency/rollback: 08a + package and relevant integrity proof. One route-adapter/composition checkpoint; if state extraction or API changes become necessary, stop and split before implementation. Keep old aliases on rollback and restore exact child entry, never rewrite saved data.
P5-09 — CV editor frame and navigation
Objective/scope: clean editor + live preview frame, compact name/scope/save/export header and five studio tabs with Content primary; retain current tab capabilities/history loading. Reuse the single current editor/settings/save owner. No new editor state architecture.
Owners/routes/PRES: CvBuilderEditor header/pane/tab composition, shared PageHeader layout only where appropriate. /career/builder/:id, library/public links; PRES-C05/C06/C10/C12, E07–E09, W05 entry. Current 900px edit/preview and 1024px grid behavior require explicit transition tests, not forced global breakpoint alignment.
Out of scope: section editor rewrite, template geometry, save/revision implementation, library redesign, share model changes, new zoom, global density applied to print.
Before: G-CV-REV/RENDER and behavioral save failure/retry/undo/redo/native history restore, duplicate/public lifecycle, selected source and pending save during tabs/theme/locale/resize/dirty navigation. No simultaneous integrity edits in this file.
After: VS-CV all five tabs reachable, one/multi-page preview stays keyboard accessible, correct save acknowledgement, edit/preview preserves focus/draft/scroll across 899/900/1024; EN/NB/dark/light. Clear “This CV only” and linked job without global-profile implication.
Dependency/rollback: blocked until gates; package also required if touching job-bound association. Revert frame/tab ordering, retain settings/source IDs and accepted revision protocol. Do not roll back security/integrity prerequisites.
P5-10 — CV section editing and source scope
Objective/scope: improve existing ContentTab/SectionRow/EntryEditor hierarchy, scope indicators, expand/collapse and progressive editing. Retain custom/preset/free-text sections, per-item overrides, inclusion, ordering and drag plus keyboard alternatives. Reset-to-source is explicit and CV-only.
Owners/routes/PRES: these existing functions within CvBuilderEditor, AiSectionAssistant entry only, existing reorder/settings helpers; builder Content route/state, source /career link; PRES-C01/C02 relationship, C06/C07/C10/C11 entry, W05, E08/E09.
Out of scope: new canonical editor, fact inference, generic rich-text framework, source schema, inline AI auto-apply, invented content, removal of long-tail sections.
Before: accepted 09/gates; native item override/reset/inherit after source change and sibling/canonical readback; reorder/hide/custom/delete confirmation; mouse/keyboard equivalents and save error retains draft.
After: VS-CV Content long/empty/omitted/selected/edit/error/reorder states in full matrix. Omission uses existing labels/icons, never whole-container opacity that reduces editable contrast. All existing advanced actions reachable; no focusable decorative cards.
Rollback: Content presentation only; do not re-key saved sections/items or change override serialization. Preserve update callback and undo transaction semantics.
P5-11 — Live preview presentation
Objective/scope: improve pane header/page indicator/fit and loading/error/overflow presentation around the accepted preview engine. Preserve labelled scroll region, automatic fit, page boundaries, hidden measuring iframe, current source freshness and late-result handling.
Owners/routes/PRES: preview helpers/pane in CvBuilderEditor; builder and public/private export regression; PRES-C06/C08/C09/C10/C12, E08/E09.
Out of scope: padding/pagination algorithm changes disguised as layout, renderer/Chromium stack replacement, new template/font system, manual zoom unless separately requested, save changes, new public exposure. Geometry corrections must already be accepted in G-CV-RENDER.
Before: 09/10 + same-source/settings preview/PDF corpus from rendering gate; native out-of-order/delayed/failed preview, PDF busy/timeout, account disposal and undo/reload. B03 shared admission stays enforced.
After: VS-CV preview on all viewport boundaries and real PDF page images/dimensions/text; light/dark application surrounds same intentional paper styling. No missing/duplicated text, extra blank pages or misleading Saved while preview stale. Preview keyboard region and iframe entry/exit remain visible under sticky UI.
Rollback: pane presentation only, maintain renderer evidence and revised backend contract. Any new geometry failure stops this slice rather than broadening it.
P5-12 — Template and document controls
Objective/scope: reorganize existing CvCustomizeTab Template/Customize modes into sensible defaults and Advanced disclosure. Keep every supported template, typography, accent, photo/header/icons, skills/sidebar/column, A4/Letter, margins/spacing/document density/date/language/section presentation control.
Owners/routes/PRES: components/cv/CvCustomizeTab, existing registry/normalization call sites and builder tab composition; /career/builder/:id; PRES-C06/C07/C08/C09/C10/C12, E08/E09.
Out of scope: reducing capability set to brief examples, font/brand choice, arbitrary positioning/word processor, silently dropping unsupported saved values, application density as print density, API/schema.
Before: 11 + explicit setting→control→normalized value→render matrix. Pro/template locks, old saved settings, switch compatible/incompatible options and confirmation/reset behavior; all template default outputs and risk-based advanced combos.
After: VS-CV Customize/Template/Advanced full matrix; labels/errors/explanations, keyboard color/size choices, long NB control names, phone reachability and unchanged exported document from equal settings. No buried capability accessible only by pointer.
Rollback: control grouping only; retain serialized names/defaults and normalization. G-CV-RENDER repairs cannot be undone as part of UI rollback.
P5-13 — CV AI review presentation
Objective/scope: align existing section assistant and whole-document current/proposed views, explicit source/target scope, edit/compare/accept/reject/regenerate/error/locked states. Share a small review layout only if both existing consumers justify it; domain validators remain local.
Owners/routes/PRES: AiSectionAssistant, DocumentAiTab inside builder, existing aiWorkspace callbacks; builder Content/AI Tools; PRES-C06/C07/C10/C11, S04, E08/E09. Other AI domains are regression dependencies, not migrated here.
Out of scope: global chat, new model/provider, automatic facts or profile writes, letter/interview AI redesign, replacing extraction/block validators, relaxing Free/Pro or privacy gates.
Before: 10/12 and AI tests: Reject/close/error no changes; edited acceptance only intended block; invalid/missing/duplicate IDs rejected; source changes while proposal open, late response/account switch discarded; malicious/unsupported claim fixture does not silently become accepted fact. Prompt constraints or UI review are not universal model factual proof.
After: VS-CV AI short/long diff, unavailable/Free-disabled/provider-error, keyboard compare/apply/reject, all themes/locales/mobile. Show known source material; unknown facts flagged for review, no implied validation of invented employment/skills. Retain explicit user authority over edits.
Rollback: review frame only; callbacks/validators/entitlements unchanged. Never rollback grounding/ownership guards for presentation convenience.
P5-14 — Responsive CV workflow checkpoint
Objective/scope: verify and address only integration regressions introduced by 09–13 across complete edit→preview→AI review→undo/history→save→export workflow. Refine existing mobile pane/action placement if their combination fails; mobile support was required in every earlier slice, not deferred until here.
Owners/routes/PRES: existing builder composition and focused tests; identified/private/public routes; PRES-C05–C12, W05/W07 if job-bound fixture, E07–E09/S04. G-PACKAGE required for real submitted variant comparison.
Out of scope: new mobile editor, unrelated Career Profile/library or template repair, broad animations, new state/persistence abstractions.
Before: accepted 09–13 and all gates; real native source/sibling/history/package tests and output corpus. Keep preview/scroll and open review stable across 320/390/768/899/900/1024/1440 transitions.
After: VS-CV full journey, light/dark EN/NB, sticky controls versus keyboard, manual AT/zoom/touch evidence or explicit unaccepted gaps. Every long form/action remains reachable; no premature slot release/PDF parallelism change. Any unrelated baseline issue returns to its owner.
Rollback: only checkpoint integration corrections; no wholesale builder rollback that discards prerequisite integrity contracts.
P5-15 — Representative-screen acceptance
Objective/scope: tests/docs review of all completed P5 slices against all 57 contracts and all retained routes. Reconcile shared shell/headers/density/theme/dialog interactions, actual data/read boundaries, visual differences and performance/request counts. No new screen architecture.
Owners/routes/PRES: scoped acceptance records, existing suites/fixtures; all 31 preserved patterns plus /analytics if implemented; every PRES group. Regenerate a complete acceptance matrix with direct/entry-only/unchanged touches and remaining provider/manual/production gaps.
Out of scope: implementing blocked CV/board work, fixing unrelated defects, removing aliases or expected failures without proof, Phase 6/7/8, B07, production deployment.
Before/after evidence: execute complete final baseline and all VS sets for actually migrated screens, compare against P4-06 and immediate predecessors, record visual reviewer observations and every incomplete axe/manual check. Full route/draft/identity/package/source tests as applicable; fresh exact test counts and inherited-vs-new-vs-expected-failure split. Check no unsupported dashboard metric or lost advanced action. Full acceptance cannot silently exclude a blocked planned representative screen.
Verdict/rollback: GO only for the reviewed migrated scope with required gates met; CONDITIONAL/PARTIAL if explicitly deferred board/CV/manual evidence remains, NO-GO for a preservation regression. F04 stays a separate production gate regardless of local verdict. Recommend Phase 6 review next only if supported; stop, do not implement it. Docs/test adjustments revert independently; functional regressions return to their originating slice.
Ownership and scheduling
Default execution is serial checkpoint-by-checkpoint. Read-only fixture/spec work for future screens can occur independently. Separate backend package/revision/rendering work is possible only with explicit authorization and ownership; never co-edit CvBuilderEditor during integrity repairs. Serialize App.tsx, AppShell, theme/toast, list/board query ownership and Dashboard report extraction. Do not run several browser suites against the same disposable API port simultaneously.
Provider mail/calendar, Career Profile, CV library, Documents/global projections, Settings/Admin and full Notifications remain Phase 7. Dashboard customization remains Phase 8. New status configuration/favorite/weekly goals/aggregate admin metrics retain separate NEW/OD contracts. No prerequisite here starts the security queue automatically.