Files
jobtrackingapp/docs/redesign/phase-7/p7-00/INVENTORY.md
T

91 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# P7-00 — Remaining migration inventory
This inventory uses the [approved exact handoff](../../phase-6/p6-05/PHASE7_HANDOFF.md), [original plan](../../IMPLEMENTATION_PLAN.md#phase-7--full-migration), [57 preservation contracts](../PRESERVATION.md) and [current32-route census](../../phase-5/p5-15/ROUTE_ACCEPTANCE.md). Entry is development receipt `b5319981ad3d1bd635daff861453d23c0de5320b`, with application source unchanged from `bd47214bdcd74336788dca0f294b8ddb9403cac1`. P7-00 is documentation/static evidence only; no page migration or new runtime result is claimed.
## Already migrated versus remaining
| Area | Completed owners to retain | Remaining approved migration / dependency |
|---|---|---|
| Shell/navigation | P5-01/02 grouped parent/child, expanded rail/mobile, active route, focus, six commands/search/bell; P6 scoped semantics | P7-11 only verified residual shared states/long-tail acceptance; no IA/sidebar rewrite |
| Jobs/Table/Board/Trash | P5-03/04 query ownership, Table/cards/Board parity, mutations/Back/aliases | P7-05 Discovery/Companies/Offers/Reminders and P7-11 verified legacy dialog controls; Board scaling is separate measured debt |
| Dashboard/Analytics | P5-06/07 Dashboard and eight report families, exact period/cohort/values/source links; Analytics delegates to DashboardView | P7-11 remaining legacy state/control only; no second Analytics page, fabricated metric or Phase8 layout work |
| Application/job details | P5-08a/b seven-section frame; CV/Letter/Answers/Submission and Activity/Correspondence composition | P7-06 inventory-confirmed embedded legacy forms and global mail; no reimplementation of completed sections |
| CV editor | P5-09–12/14 source/override/content/preview/history/responsive/advanced-controls ownership and native pagination | Retain editor and renderer; C11 remains separate withheld qualification, human/output gaps remain |
| CV library/public entry | Gallery reused/touched by P5-12; current CRUD/publication/public slug owners retained | P7-04 library/actions/public-entry states, source language from P7-03; no second gallery/editor/history owner |
| Account/authentication | Current identity/provider/token/security owners; P5 auth-return repair and P6 scoped hierarchy retained | P7-01 public auth/Profile/security presentation; actual provider/mail/authenticator evidence separately scoped |
| Onboarding/Career | Five Dashboard visibility flags/checklist, canonical source and section routes; source navigation/upload fixes retained | P7-02 guidance/overview/evidence, P7-03 structured/import/history; canonical singleton unchanged |
| Global correspondence | Current inbox/Gmail review/draft revision/confirmed-send/provider owners | P7-06 remaining presentation; optional P7-06F requires explicit mode→draft/review/fallback decision |
| Documents | Job Documents/attachments, CV/library, letter/draft/package/export owners already exist | P7-07 metadata-only bounded owner projection, then index presentation; no generic Document record/browser crawl |
| Notifications/Operations | Existing bell/store/operation result links | P7-08 read/dismiss/unread/retry/cancel presentation; full route only after actual content/need is proved |
| Settings/Connections/Admin | P4 layout/density primitives, Settings tabs/panels and P6 feedback; distinct server-guarded admin routes | P7-09 remaining Settings/data/Connections, P7-10 Users/Audit/System; retain save/sensitive-action scopes |
| Error/empty/loading/dialog states | Existing route/error boundaries, shared view-state/notification/confirm/prompt infrastructure | P7-11 only owned residual findings; shared changes require all affected consumer regressions |
Legacy presentation explicitly scheduled in Phase7 is migration work, not automatically a defect. Reproducible accessibility/usability/data faults still receive bounded owner/reproducer/proof. The original handoff defines P7-00…12 plus optional06F and its commit boundaries; this inventory adds no alternative phases.
## Current route coverage
Source inspection extracts exactly32 distinct concrete [App routes](../../../../job-tracker-ui/src/App.tsx), matching the32 retained contract patterns. Wildcard matching/private root redirect do not add a second capability. Every whole-route group remains **PARTIAL** until its full applicable acceptance is supplied.
| Route pattern | Existing source owner | Phase7 disposition | Contract / existing limitation |
|---|---|---|---|
| `/` | [LandingPage.tsx](../../../../job-tracker-ui/src/views/LandingPage.tsx) | Retain current product/plan presentation; P7-01 inventory and P7-11 verified residual states only | Public product remains distinct from private dashboard; no invented billing prices. |
| `/login` | [LoginPage.tsx](../../../../job-tracker-ui/src/views/LoginPage.tsx) | P7-01 authentication presentation | Safe return, remember-me, Turnstile, 2FA and login errors retain existing owners. |
| `/register` | [LoginPage.tsx](../../../../job-tracker-ui/src/views/LoginPage.tsx) | P7-01 authentication presentation | Same component initialMode=register; preserve actual registration gates. |
| `/forgot-password` | [ForgotPasswordPage.tsx](../../../../job-tracker-ui/src/views/ForgotPasswordPage.tsx) | P7-01 authentication presentation | No actual mail delivery acceptance from local mocks. |
| `/reset-password` | [ResetPasswordPage.tsx](../../../../job-tracker-ui/src/views/ResetPasswordPage.tsx) | P7-01 authentication presentation | Token/expired/used-token and password-validation behavior. |
| `/verify-email` | [VerifyEmailPage.tsx](../../../../job-tracker-ui/src/views/VerifyEmailPage.tsx) | P7-01 authentication presentation | Preserve verification token and safe auth return. |
| `/confirm-email-change` | [VerifyEmailPage.tsx](../../../../job-tracker-ui/src/views/VerifyEmailPage.tsx) | P7-01 account-security presentation | emailChange owner/validation; no new identity model. |
| `/microsoft-legacy-relink` | [MicrosoftLegacyRelinkPage.tsx](../../../../job-tracker-ui/src/views/MicrosoftLegacyRelinkPage.tsx) | P7-01 authentication presentation | Existing origin/state/relink protocol; real provider evidence separate. |
| `/cv/:slug` | [PublicCvPage.tsx](../../../../job-tracker-ui/src/views/PublicCvPage.tsx) | P7-04 public entry | Public slug differs from numeric private CV ID; revoke/private PDF guards remain. |
| `/dashboard` | [DashboardView.tsx](../../../../job-tracker-ui/src/components/DashboardView.tsx) | Already migrated; retain P5-06 | Residual evidence/loaded states only; five flags retained, Phase8 layout customization separate. |
| `/analytics` | [AnalyticsPage.tsx](../../../../job-tracker-ui/src/views/AnalyticsPage.tsx) | Already migrated; P7-11 residual controls/states only | Delegates to DashboardView mode=analytics; all eight report families retain values/cohorts/source links. |
| `/discover` | [JobDiscoveryPage.tsx](../../../../job-tracker-ui/src/views/JobDiscoveryPage.tsx) | P7-05 Discovery | Real NAV states and saved-search semantics; no fixture presented as live results. |
| `/jobs` | [JobTable.tsx](../../../../job-tracker-ui/src/components/JobTable.tsx) | Already migrated; retain P5-03/04b | Single query owner/view parity; preserve legacy open/capture/query helpers and no-write entry. |
| `/jobs/:id` | [ApplicationWorkspacePage.tsx](../../../../job-tracker-ui/src/views/ApplicationWorkspacePage.tsx) | Already migrated frame; P7-06 remaining child forms | Seven sections and nested source/save/send owners; preserve section/sub precedence and stale/foreign guards. |
| `/reminders` | [RemindersView.tsx](../../../../job-tracker-ui/src/components/RemindersView.tsx) | P7-05 Reminders | Real reason/count/actions; calendar offset/DST contract separately gated. |
| `/operations` | [OperationsPage.tsx](../../../../job-tracker-ui/src/views/OperationsPage.tsx) | P7-08 Operations | Stable operation/result/cancel/retry ownership; no duplicate start. |
| `/kanban` | [App.tsx](../../../../job-tracker-ui/src/App.tsx) | Retain legacy redirect | Replaces view with board while preserving other search, hash and location.state. |
| `/companies` | [CompaniesTable.tsx](../../../../job-tracker-ui/src/components/CompaniesTable.tsx) | P7-05 Companies | edit=id command entry; preserve P6 dialog-local failure/draft/retry and UI-locale dates. |
| `/offers` | [OfferComparisonPage.tsx](../../../../job-tracker-ui/src/views/OfferComparisonPage.tsx) | P7-05 Offers | Recorded compensation/deadline/notes/source only; no unsupported normalization. |
| `/correspondence` | [CorrespondenceInboxPage.tsx](../../../../job-tracker-ui/src/views/CorrespondenceInboxPage.tsx) | P7-06 inbox/review/compose presentation | view=review embeds GmailReviewPage; compose/drafts remain existing in-page owners. |
| `/correspondence/review` | [App.tsx](../../../../job-tracker-ui/src/App.tsx) | Retain legacy redirect; audit metadata before parity claims | Fixed replace to /correspondence?view=review; current adapter does not forward other search/hash/state. |
| `/profile` | [ProfilePage.tsx](../../../../job-tracker-ui/src/views/ProfilePage.tsx) | P7-01 account-security presentation | Account identity/avatar/password/email/2FA/sessions, distinct from canonical Career Profile. |
| `/applications/:id` | [App.tsx](../../../../job-tracker-ui/src/App.tsx) | Retain legacy redirect | Preserves query/location.state to /jobs/:id; current adapter does not preserve hash. |
| `/career` | [CareerWorkspacePage.tsx](../../../../job-tracker-ui/src/views/CareerWorkspacePage.tsx) | P7-02 overview/evidence; P7-03 structured/import/history | Delegates to CareerProfilePage; section=profile/evidence/import, default overview; no /career/profile route. |
| `/career/builder` | [CvBuilderPage.tsx](../../../../job-tracker-ui/src/views/CvBuilderPage.tsx) | P7-04 library | Create/copy/delete/templates/manage/publish/share/export; reuse gallery/current editor. |
| `/career/builder/:id` | [CvBuilderEditor.tsx](../../../../job-tracker-ui/src/views/CvBuilderEditor.tsx) | Already migrated; retain P5-09–12/14 | One revision/save/history/preview owner; C11 withheld; unchanged physical renderer. |
| `/admin/audit` | [AdminAuditPage.tsx](../../../../job-tracker-ui/src/views/AdminAuditPage.tsx) | P7-10 Audit | Supported persisted undo/restore only; role/API authority remains. |
| `/admin/users` | [AdminUsersPage.tsx](../../../../job-tracker-ui/src/views/AdminUsersPage.tsx) | P7-10 Users | Role/reset/delete/last-admin/self/recent-auth guards; no client-only authorization. |
| `/admin/system` | [AdminSystemPage.tsx](../../../../job-tracker-ui/src/views/AdminSystemPage.tsx) | P7-10 System | Diagnostics/SMTP/model/maintenance do not acquire production execution authority. |
| `/trash` | [JobTable.tsx](../../../../job-tracker-ui/src/components/JobTable.tsx) | Already migrated; retain P5-03 | mode=trash, soft-delete/restore/edit; no Board or hard-delete substitution. |
| `/settings` | [SettingsView.tsx](../../../../job-tracker-ui/src/components/SettingsView.tsx) | P7-09 remaining presentation | Existing tabs/mobile selector/panel semantics, Rules draft and independent subcard save scopes remain. |
| `/settings/connected-accounts` | [ConnectedAccountsPage.tsx](../../../../job-tracker-ui/src/views/ConnectedAccountsPage.tsx) | P7-09 Connections | EmailProviderConnections owns Gmail/Graph/IMAP; mailbox grants differ from sign-in identity. |
No existing `/documents`, `/notifications`, aggregate `/admin` or `/career/profile` route is inferred. Proposed new destinations require meaningful content and explicit owner/data/route tests. Preserve route/search/hash/history/state contracts and record existing alias limitations instead of claiming universal parity.
## Current code contracts and representative fixtures
| Contract / owner boundary | Existing executable fixture | Required preservation when affected |
|---|---|---|
| Private account/session disposal and A/B resources | [Account isolation browser](../../../../job-tracker-ui/e2e/account-isolation.spec.ts), [session boundary](../../../../job-tracker-ui/src/session-boundary.test.ts), [account-scoped state](../../../../job-tracker-ui/src/account-scoped-state.test.tsx) | Guest/non-admin/foreign/missing resources, switched identity/stale responses; hiding UI never replaces server denial |
| Auth return/token/refresh | [Native auth repair](../../../../job-tracker-ui/e2e/analytics-auth-repair.spec.ts), [login](../../../../job-tracker-ui/src/login-page.test.tsx), [verify](../../../../job-tracker-ui/src/verify-email-page.test.tsx) | Existing safe internal from/query, expiry/logout/refresh, deliberate token error; real mail/provider remains separate |
| Shell/commands and Jobs query | [Shell](../../../../job-tracker-ui/e2e/shell-readiness.spec.ts), [Board](../../../../job-tracker-ui/e2e/board-presentation.spec.ts), [route helper](../../../../job-tracker-ui/src/jobWorkspaceRoute.ts), [Jobs integration](../../../../job-tracker-ui/src/jobs-view-integration.test.tsx) | Table/Board membership/filter/sort/search/page parity, Back/forward/capture; no query semantics or hidden-result caps |
| Job source/context/frozen package | [Ordinary preservation](../../../../job-tracker-ui/e2e/redesign-preservation.spec.ts), [section composition](../../../../job-tracker-ui/e2e/job-sections-presentation.spec.ts) | P2-D01 normal passing capture/readback/archive bytes; canonical/sibling/current/frozen separation |
| Canonical Career vs CV override | [Career workspace](../../../../job-tracker-ui/src/career-workspace-page.test.tsx), [Career evidence](../../../../job-tracker-ui/src/career-evidence.test.tsx), [CV section scope](../../../../job-tracker-ui/e2e/cv-section-scope.spec.ts) | Complete/custom/low-confidence fields, explicit import accept/discard; CV override must not mutate canonical or sibling data |
| CV revision/save/history/preview | [CV readiness](../../../../job-tracker-ui/e2e/cv-readiness.spec.ts), [responsive ownership](../../../../job-tracker-ui/e2e/cv-responsive-workflow.spec.ts), [pagination](../../../../job-tracker-ui/e2e/cv-pagination.spec.ts) | Expected version/conflict/recoverable draft, one save/preview owner, original16/36+8/24 physical oracle when output touched |
| Existing AI grounding/proposal protection | [AI readiness](../../phase-5/p5-13-readiness/README.md), [Phase6 backend evidence](../../phase-6/p6-05/evidence/backend-validation.json) | Purpose/source scope, progress/retry, explicit accept/reject, stale/invalid/foreign no-write guards; C11 remains withheld |
| Mail draft/review/confirmed send | [Inbox](../../../../job-tracker-ui/src/correspondence-inbox-page.test.tsx), [Gmail review](../../../../job-tracker-ui/src/gmail-review-page.test.tsx), [draft persistence](../../../../JobTrackerApi.Tests/EmailDraftPersistenceTests.cs) | Draft revision, explicit confirmed delivery, idempotency and uncertain-attempt handling; no auto-resend |
| Company/language/shared API feedback | [Native feedback/geometry](../../../../job-tracker-ui/e2e/responsive-accessibility-audit.spec.ts), [named modal controls](../../../../job-tracker-ui/e2e/named-controls-modal-state.spec.ts), [i18n](../../../../job-tracker-ui/src/i18n-provider.test.tsx) | Durable in-modal alert/draft/retry, latest-choice language races, translated fallback while preserving structured server messages |
| Settings/density/export/data | [Settings layout](../../../../job-tracker-ui/e2e/settings-page-layout.spec.ts), [Rules draft](../../../../job-tracker-ui/e2e/rules-draft-repair.spec.ts), [CSV](../../../../job-tracker-ui/e2e/csv-export.spec.ts), [account export](../../../../job-tracker-ui/src/account-data-export.test.tsx) | Named panels/control errors, independent dirty/save scopes, bytes/counts/import distinctions, no restore/deletion activation |
| Dashboard/Analytics provenance | [Dashboard](../../../../job-tracker-ui/e2e/dashboard-presentation.spec.ts), [Analytics](../../../../job-tracker-ui/e2e/analytics-presentation.spec.ts) | Exact periods/cohorts/denominators/source links, no fabricated statistics or Phase8 order/resize |
| Shared accessibility/responsive state | [Semantic foundations](../../../../job-tracker-ui/e2e/semantic-foundations.spec.ts), [real zoom](../../../../job-tracker-ui/e2e/browser-zoom-audit.spec.ts), [responsive audit](../../../../job-tracker-ui/e2e/responsive-accessibility-audit.spec.ts) | Names/headings/panels/focus/dialog return, EN/NB/theme/density/breakpoints, root reflow and context-triaged axe; actual AT/device results remain separate |
| Admin roles and supported operations | [Users](../../../../job-tracker-ui/src/admin-users-page.test.tsx), [Audit](../../../../job-tracker-ui/src/admin-audit-page.test.tsx), [System](../../../../job-tracker-ui/src/admin-system-page.test.tsx), [API posture](../../../../JobTrackerApi.Tests/ApiAuthorizationPostureTests.cs) | Crafted non-admin and mounted revocation, supported persisted undo, safe errors/no sensitive disclosure; no production task authority |
Existing fixtures prove their actual executed scope only. They are starting anchors, not complete coverage of every pending migration. Add native owned-flow/negative/no-write/readback cases where a slice changes behavior; avoid tests that merely mirror style implementation.
## Independent work and mandatory dependencies
The main conflict is resolved by owner instruction: development execution proceeds and main remains unchanged. P7-00 must push before page changes. P7-06F remains deferred without its product decision, while ordinary P7-06 presentation can proceed. P7-07 index implementation requires its backend metadata projection; honest owner links may remain meanwhile. New notification event producers require F20 recovery, and any full notification route requires meaningful existing-store content. Save/history-owner changes require explicitly bounded source concurrency; provider protocol, billing/deletion/restore/cutover and production operations remain separately gated.
Applicable human M01–M12, production font/photo/print, provider semantics and retained accessibility/incident contexts prevent blanket acceptance but do not halt unrelated safe presentation. M13 is deferred AI return/do-not-execute. See [DEBT.md](../DEBT.md) for current counts and exact gates. P7-12 retains separate migration/production/Phase8 readiness decisions.