# Protected functionality ledger This is the current source-backed preservation baseline. **All rows are Preserve** until a later approved migration explicitly records relocation, merger or deprecation. Target-only ideas are separated at the end. A component's existence proves implemented behavior, not live provider availability or usability quality. The [API census](API_CALL_SITES.md) and [component census](COMPONENT_INVENTORY.md) supply the individual call sites/consumers behind these groups. There are **57 protected capability groups**. The [completion summary](PHASE1_SUMMARY.md) classifies existing behavior, UX improvements, new requirements and known defects separately. A preserve-and-improve classification never removes a capability from this contract; known defective behavior is not the intended behavior to preserve. ## Entry, navigation and account | ID | Current user-facing function | Source / important contract | |---|---|---| | E01 | Public product explanation, Free/Pro feature comparison, honest unavailable-billing states and sign-in/register links | `LandingPage`, `planCatalog`; do not invent prices or purchasable capabilities | | E02 | Local sign-in/registration, remember-me, configured Turnstile, resend verification, reset password, verify email | `LoginPage`, reset/verification views, `TurnstileWidget`; server configuration controls availability | | E03 | Google/Microsoft sign-in/link flows, Microsoft legacy relink, provider popup success/error handling | `GoogleAuthCard`, `MicrosoftAuthCard`, `MicrosoftLegacyRelinkPage`; OAuth/state/origin rules remain | | E04 | 2FA challenge, recovery codes, setup/verify/disable/regenerate, trusted devices and revocation | `TwoFactorChallenge`, `TwoFactorSettingsCard`; preserve sensitive confirmation and recovery presentation | | E05 | Active session list, current-device distinction, single/other-session revocation, logout | `SessionsSettingsCard`, `AppShell`, `auth`, `sessionBoundary`; invalidation must clear private UI | | E06 | Avatar upload/remove, name/display name/headline, account email-change request/cancel/confirm, local password change | `ProfilePage`; account identity is distinct from canonical career data | | E07 | Collapsible desktop sidebar, mobile drawer, active subsection matching, keyboard command launcher | `AppShell`, `QuickCommandDialog`; job/company search and fixed navigation/add commands | | E08 | Theme light/dark/system, EN/Bokmål preference with server hydration, toast/confirm/prompt and error routes | `themePrefs`, `I18nProvider`, `toast`, `confirm`, `prompt`, route error/not-found views | | E09 | Cross-tab account switch, stale mutation/read rejection, BFCache/focus revalidation and reauthentication | `api`, `sessionBoundary`, `App`; B02 server precondition and client unmount/abort must survive extraction | ## Discover and manage jobs | ID | Current user-facing function | Source / important contract | |---|---|---| | J01 | Search NAV listings by role/company/municipality, sorting, source/freshness/deadline/work-arrangement details, external listing links | `JobDiscoveryPage`; provider failures and empty results distinguishable | | J02 | Named saved searches, run/delete, automatic alert preference, new/updated results and dismissal | `JobDiscoveryPage`, saved-search APIs; retain owner scope and alert metadata | | J03 | Add job manually or from URL/pasted listing, reviewed preview, company lookup/create, tags and dates, duplicate warning | `AddJobModal`; preview is not a write; keep B01 outbound boundary and existing review step | | J04 | Capture via browser extension, bookmarklet and share/capture query; optional job attachment and tailored CV draft after create | `QuickCaptureCard`, `captureUrl`, `App`, `browser-extension`; preserve payload/URL contracts | | J05 | Job table search/filter/sort/pagination, visible columns/page size, saved named views, row/card actions | `JobTable`, `SavedViewsMenu`; mobile cards and accessible full-workspace entry already exist | | J06 | Selection/bulk status/delete/restore, soft-delete/trash and restore, edit job/company association | `JobTable`, `EditJobDialog`; preserve partial-error handling and confirmation semantics | | J07 | Kanban grouped status views, drag move, keyboard pickup/drop/cancel, direct status selection, job opening | `KanbanBoard`, `pipeline`; same records as table, not a second job model | | J08 | Company directory, recruiter/contact/source/location and pipeline/contact-date editing; company relationship job history | `CompaniesTable`; company creation is integrated with job/import flows, not assumed standalone CRUD | | J09 | Offer comparison including recorded compensation, decision deadline and notes, source-job links | `OfferComparisonPage`; no new compensation calculator implied | | J10 | JSON/CSV job export; JSON import; CSV-to-import-JSON conversion and import counts | `ImportExportJobs`; preserve B05 blob bytes/BOM, spreadsheet safety and typed formats; do not claim full account restore from job import | ## Job workspace and application artifacts | ID | Current user-facing function | Source / important contract | |---|---|---| | W01 | Dedicated job workspace and reusable quick overlay; overview/analysis/CV/cover-letter/interview sections; old deep-link mapping | `ApplicationWorkspacePage`, `ApplicationWorkspace`, `jobWorkspaceRoute`; retain full-page/overlay parity | | W02 | Job detail/status/progression, next actions, dates, description, recruiter/contact and timeline | `JobDetailsSection`, `ApplicationProgress`, `ApplicationTimeline`; do not redefine pipeline enums or history | | W03 | Analysis, profile match/gaps, strategy snapshot, workflow assistance and status suggestions | `ApplicationAnalysis`, `ApplicationMatch`, `ApplicationStatusSuggestion`, `ApplicationStrategySnapshot`; show provenance/loading/failure and confirmation | | W04 | Checklist create/edit/complete/delete/order, progress and recommended next action | `ApplicationChecklist`; keep keyboard reorder and persisted item identity | | W05 | Select/attach a CV, create/tailor document variants, review tailoring guidance and selected-source context | `ApplicationCvSection`, `ApplicationTailoringSection`, `applicationWorkspace`; owner+job association enforced by API | | W06 | Cover-letter editing, AI suggestion review/reject/apply, saved versions and restore, unsaved navigation protection | `ApplicationAssets`, `CoverLetterAiAssistant`; document override must not mutate master profile | | W07 | Application draft fields, submission/package preparation, frozen submitted-package versions and archived attachment download | `ApplicationAssets`, `SubmittedPackagesSection`, `applicationWorkspace`; historical package is distinct from current draft | | W08 | Attachments upload/drag-drop, category/purpose, rename, AI-use flag, preview/download/delete | `Attachments`; owner-scoped binary retrieval, consent selection and size/error handling | | W09 | Interview questions/categories, manual items, answers, ready status, remove, contextual AI review/add-to-prep | `InterviewPrep`, `applicationWorkspace`; generated facts/answers require review | | W10 | Interview debrief template and follow-up content/date, readiness and next-action state | `InterviewPrep`; neutral prompts must not seed invented company/achievement facts | | W11 | Follow-up/reminder workflow, rule-driven dates/stages, notifications, deadline/follow-up ICS and Google/Outlook calendar event actions | `RemindersView`, `RulesSettingsCard`, `ApplicationCalendarActions`; calendar integration already exists, date-only/timestamp semantics must survive | | W12 | Async operation progress, pending/failed/retry/cancel states and associated notifications | `OperationsPage`, profile processing components; preserve operation IDs and server state, avoid duplicate starts on rerender | ## Career Profile and CVs | ID | Current user-facing function | Source / important contract | |---|---|---| | C01 | Canonical structured career profile: personal details, summary, skills, work, education, languages, interests and long-tail/custom sections | `CareerProfilePage`, `views/career/*`; profile save is an account singleton, CV is an identified derived resource | | C02 | Profile overview, completeness/import guidance, manual edit, copy raw CV text, avatar and version history/restore | `CareerWorkspacePage`, `CareerProfilePage`; preserve projection/history behavior without redesigning schema | | C03 | CV/file upload and extraction, rebuild/improve/reprocess, progress/history, diff, explicit low-confidence selection, accept/discard, retry/cancel | `CareerProfilePage`, `/profile-cv/*`; uploaded proposal is not silently canonical truth | | C04 | Evidence bank: sourced statement/title/category/tags, add/list/delete and truthfulness guidance | `CareerEvidenceBank`; evidence belongs to profile owner and is not AI-invented experience | | C05 | CV library create/name/copy/delete, template gallery and real sample thumbnails, publish/unpublish/share and PDF download | `CvBuilderPage`, `cvBuilder`; separate public slug from numeric private ID | | C06 | Studio Template/Content/Customize/AI Tools/History navigation; debounced preview, page boundaries/automatic fit and save state | `CvBuilderEditor`; existing mobile edit/preview and desktop split must retain parity; automatic fit is not a manual zoom control | | C07 | Built-in item visibility/order, custom sections, preset/free-text section catalog, item/content overrides, hide/remove, native section drag and keyboard reorder | `CvBuilderEditor`, `components/cv/*`, `useDragReorder`; selected profile source and overrides remain distinguishable | | C08 | Template-capability-aware typography/colors/header/headings, skills presentation/groups, one/two-column and sidebar settings, photo/icons | `CvCustomizeTab`, theme registry; retain unsupported-setting handling and server render equivalence | | C09 | A4/Letter, density, margins/spacing, date format, document language, per-section rows/grid/compact/bubbles and columns | `cvBuilder`, `CvCustomizeTab`, content controls; do not drop advanced controls merely to simplify layout | | C10 | Undo/redo of editor settings, save queue, unsaved guard, history/version restore and preview lifecycle | `CvBuilderEditor`; current queue serializes one mounted editor only, not concurrent browsers | | C11 | Per-section AI improve/translate/custom instruction and whole-document translate/improve/spelling review | `AiSectionAssistant`, builder AI tab; source/target language, current/suggestion comparison, apply/reject | | C12 | Authenticated PDF export and anonymous published-CV preview/PDF; long searchable multipage documents | `PublicCvPage`, `cvBuilder`, server renderer; B03 shared resource admission and public ownership/publication checks | ## Correspondence and external accounts | ID | Current user-facing function | Source / important contract | |---|---|---| | M01 | Job-scoped manual note/email log, search, delete, paste/import message; current job/company context | `Correspondence`; manual record is different from sending a real email | | M02 | Gmail candidate search/import, linked-thread refresh/sync history, import thread, unlink/relink/move with job selection | `Correspondence`; cross-job relationship changes remain owner-bound | | M03 | Global correspondence inbox with pagination/search/filter/direction/provider/link state, full message and attachment information, source-job links | `CorrespondenceInboxPage`; provider read failure distinct from no messages | | M04 | Compose/reply, choose connected provider and job/recipient, save/resume/delete drafts, review/confirm send, delivery states and explicit new attempt | `CorrespondenceInboxPage`; persisted draft revision and send idempotency/uncertain delivery controls must survive navigation changes | | M05 | Gmail review candidates, proposed jobs, link/reject/keep decisions, notes, manual sync and create suggested job | `GmailReviewPage` embedded in inbox; retain legacy review redirect | | M06 | Gmail/Google and Microsoft Graph connection/status/disconnect, IMAP connection/status/disconnect | `EmailProviderConnections`, `ConnectedAccountsPage`; login identity and mail-provider identity are separate capabilities | ## Dashboard, settings and administration | ID | Current user-facing function | Source / important contract | |---|---|---| | S01 | Personal dashboard counts, activity/funnel/company/skill trends, stage/salary insights and actionable next steps | `DashboardView`, analytics APIs; chart transformations and empty/error states preserved | | S02 | Five per-owner local visibility preferences; onboarding progress and dismiss; notification bell/unread/read/dismiss | `DashboardView`, `OnboardingChecklist`, `NotificationsPopover`; no server widget-order/resize contract exists yet | | S03 | Follow-up/ghosting rule settings, email reminder preference, table preferences, theme/language and connected-account links | `SettingsView`, `RulesSettingsCard`; preferences have different scopes, do not replace with one unsafely shared object | | S04 | AI privacy settings, usage/limits, honest Free/Pro lock states, billing status, conditional checkout and portal | `AiPrivacySettingsCard`, `AiUsageCard`, `AccountPlanProvider`; server entitlement authoritative, not client context defaults | | S05 | Account export, encrypted backup download, lifecycle status and deliberate deletion confirmation | `BackupCard`; recent-auth/password/provider restrictions remain; a downloadable backup is not proven restore readiness | | A01 | Admin user list/create, role promotion/demotion guards, reset link and delete with last-admin/self warnings | `AdminUsersPage`, `/users`; API roles enforce privilege regardless of navigation | | A02 | Admin audit event list/detail, supported undo and job restore | `AdminAuditPage`; preserve event/ownership semantics rather than generic mutation buttons | | A03 | Separate system health/build/database/AI/email status, SMTP settings/test, AI probe, CV corpus benchmark and maintenance run controls | `AdminSystemPage`; sensitive config values/logs must not move into personal dashboard | ## Relationship to the target brief The target grouped navigation would reorganize an existing collapsible sidebar. Jobs/Table and Kanban can become view choices over the existing APIs. Dedicated Analytics/Documents/Notifications destinations would relocate embedded capabilities. They are not permission to delete offers, reminders, correspondence review, operations or legacy URLs. Dashboard drag/order/resize/reset are new work beyond the five local booleans; cross-device persistence is an unresolved scope choice. Optional goals, a new logo and expanded contextual access are separately identified additions; a general chat platform, product rename or additional providers are not implied by existing AI/integrations. Retain implemented Google/Outlook calendar actions even though the product brief describes broader calendar ambitions as future work. The [new-requirements matrix](PHASE1_SUMMARY.md#3-genuinely-new-requirements-and-conditional-additions) distinguishes required versus suggested/future additions: expanded command search/actions, application density, configurable status mappings, per-task scheduling, intent-led onboarding, contextual-assistant access and aggregate admin metrics. Existing raw custom status values, job reminders, onboarding checklist, operational admin dashboard and CV document density must remain intact; none alone establishes the corresponding new contract. The brief asks for contextual assistant access, not necessarily a general chat platform; a new logo is required, while a name change remains undecided. During migration, extend this table with destination, regression test and review evidence per ID. Do not treat a screen screenshot or a count of passing tests as proof that all rows survived.