[ { "id": "T001", "description": "Baseline trace recorded: list-load LCP, render delay, first-load JS, and per-row prefetch count captured in SCRATCHPAD", "implemented": true, "featureIds": ["F001"] }, { "id": "T002", "description": "Baseline next-build first-load JS for /msp/tickets recorded; 7 dialogs + ClientDetails confirmed present in baseline chunk graph", "implemented": true, "featureIds": ["F002"] }, { "id": "T010", "description": "On list load, network capture shows zero GET /msp/tickets/?_rsc=... prefetch requests", "implemented": true, "featureIds": ["F010", "F011", "F070"] }, { "id": "T011", "description": "Clicking the ticket-number link opens the ticket (onTicketClick fired) and does not full-navigate", "implemented": true, "featureIds": ["F010", "F012"] }, { "id": "T012", "description": "Clicking the title link opens the ticket (onTicketClick fired)", "implemented": true, "featureIds": ["F011", "F012"] }, { "id": "T013", "description": "Cmd/Ctrl+click and middle-click on a row open /msp/tickets/[id] in a new tab (href preserved)", "implemented": true, "featureIds": ["F013"] }, { "id": "T014", "description": "Unit/contract test: ticket-columns renders Links with prefetch={false}", "implemented": true, "featureIds": ["F010", "F011"] }, { "id": "T020", "description": "Lightweight details-tab component renders client details fields identically to the previous quickView tab (snapshot/visual)", "implemented": true, "featureIds": ["F020", "F022"] }, { "id": "T021", "description": "Static-import assertion: ClientQuickView module graph does NOT include BillingConfiguration, InteractionsFeed, ClientContactsList, ClientNotesPanel, or the Hudu tab modules", "implemented": true, "featureIds": ["F020", "F021"] }, { "id": "T022", "description": "ClientQuickView opens in a drawer and shows the same content as before across a sample call site (tickets list)", "implemented": true, "featureIds": ["F021", "F024"] }, { "id": "T023", "description": "Full-page ClientDetails still renders all tabs correctly after the details-tab extraction (no regression)", "implemented": true, "featureIds": ["F023"] }, { "id": "T024", "description": "Tickets-list drawer quick view (MspTicketsPageClient) renders ClientQuickView and matches prior appearance", "implemented": true, "featureIds": ["F024"] }, { "id": "T025", "description": "Ticket-detail client drawer renders ClientQuickView correctly", "implemented": true, "featureIds": ["F025"] }, { "id": "T026", "description": "MspClientDrawerProvider renders ClientQuickView correctly", "implemented": true, "featureIds": ["F026"] }, { "id": "T027", "description": "Billing dashboard client drawer renders ClientQuickView correctly", "implemented": true, "featureIds": ["F027"] }, { "id": "T028", "description": "Projects integration client quick view renders ClientQuickView correctly", "implemented": true, "featureIds": ["F028", "F031"] }, { "id": "T029", "description": "Clients page quick view renders ClientQuickView correctly", "implemented": true, "featureIds": ["F029"] }, { "id": "T030", "description": "Interactions client quick view renders ClientQuickView correctly", "implemented": true, "featureIds": ["F030"] }, { "id": "T031", "description": "Settings user-list client quick view renders ClientQuickView correctly", "implemented": true, "featureIds": ["F032"] }, { "id": "T032", "description": "Contact-context usages reviewed; migrated ones render correctly, intentionally-full ones documented", "implemented": true, "featureIds": ["F033"] }, { "id": "T033", "description": "Build/chunk assertion: full ClientDetails no longer in the tickets-list route first-load graph", "implemented": true, "featureIds": ["F034", "F071"] }, { "id": "T034", "description": "Quick view still supports its existing actions/links (e.g. open full client page) from the lighter component", "implemented": true, "featureIds": ["F021", "F022"] }, { "id": "T040", "description": "tickets/layout.tsx renders children + @modal slot without altering the default list appearance", "implemented": true, "featureIds": ["F040", "F074"] }, { "id": "T041", "description": "@modal/default.tsx renders null so the list shows no modal on normal load", "implemented": true, "featureIds": ["F041"] }, { "id": "T042", "description": "Tickets context provides current filters matching the active list filters", "implemented": true, "featureIds": ["F042"] }, { "id": "T043", "description": "Tickets context provides selectedTicketIds matching the rows checked in the list", "implemented": true, "featureIds": ["F043", "F044"] }, { "id": "T044", "description": "Selecting/deselecting rows updates the shared context (and the action bar) with no behavior change vs baseline", "implemented": true, "featureIds": ["F044", "F066"] }, { "id": "T045", "description": "Import prototype: opening route shows modal overlay with list still mounted underneath", "implemented": true, "featureIds": ["F045", "F050"] }, { "id": "T046", "description": "Import prototype: closing modal (Esc/backdrop/close) returns to list without full reload; back button closes modal", "implemented": true, "featureIds": ["F045"] }, { "id": "T047", "description": "Import prototype: hard refresh on the import URL renders the full-page fallback without crashing", "implemented": true, "featureIds": ["F045", "F050"] }, { "id": "T050", "description": "Import modal performs an import correctly and the list refreshes to reflect imported tickets", "implemented": true, "featureIds": ["F050", "F051"] }, { "id": "T051", "description": "After import extraction, TicketingDashboard no longer imports TicketImportDialog (grep/build assertion)", "implemented": true, "featureIds": ["F052"] }, { "id": "T052", "description": "Export modal opens as overlay and exports respecting the current filters (filtered set only)", "implemented": true, "featureIds": ["F053", "F054"] }, { "id": "T053", "description": "Export respects a non-default filter combination (e.g. board + status + tag) end-to-end", "implemented": true, "featureIds": ["F054"] }, { "id": "T054", "description": "After export extraction, TicketingDashboard no longer imports TicketExportDialog", "implemented": true, "featureIds": ["F055"] }, { "id": "T060", "description": "Bulk Assign modal acts on exactly the selected ticket ids from context", "implemented": true, "featureIds": ["F060"] }, { "id": "T061", "description": "Bulk Assign respects 'select all matching filter' selections (filtered superset), not just visible page", "implemented": true, "featureIds": ["F060", "F054"] }, { "id": "T062", "description": "Bulk Add Tags modal applies tags to the selected set and refreshes the list", "implemented": true, "featureIds": ["F061"] }, { "id": "T063", "description": "Bulk Set Due Date modal updates due dates for the selected set", "implemented": true, "featureIds": ["F062"] }, { "id": "T064", "description": "Bulk Change Status modal updates statuses for the selected set (board-scoped statuses load correctly)", "implemented": true, "featureIds": ["F063"] }, { "id": "T065", "description": "Bulk Change Priority modal updates priorities for the selected set", "implemented": true, "featureIds": ["F064"] }, { "id": "T066", "description": "Each bulk modal surfaces per-ticket errors the same way as the old in-list dialogs", "implemented": true, "featureIds": ["F060", "F061", "F062", "F063", "F064"] }, { "id": "T067", "description": "After bulk extraction, TicketingDashboard imports none of the 5 bulk dialogs", "implemented": true, "featureIds": ["F065"] }, { "id": "T068", "description": "Selection clears appropriately after a successful bulk action (matches prior behavior)", "implemented": true, "featureIds": ["F060", "F061", "F062", "F063", "F064", "F044"] }, { "id": "T070", "description": "DoD-2: next build shows reduced first-load JS for /msp/tickets vs baseline; 7 dialogs absent from list chunk graph", "implemented": true, "featureIds": ["F071", "F052", "F055", "F065"] }, { "id": "T071", "description": "DoD-1: repeat perf trace shows reduced render delay and LCP vs 2774ms/3048ms baseline; numbers recorded", "implemented": true, "featureIds": ["F072"] }, { "id": "T072", "description": "DoD-6: repo grep confirms no next/dynamic, React.lazy, or import() added by this work", "implemented": true, "featureIds": ["F073"] }, { "id": "T073", "description": "DoD-5/C1: manual + visual pass confirms dialogs still appear as modal overlays and client drawer is visually unchanged", "implemented": true, "featureIds": ["F074", "F022"] }, { "id": "T074", "description": "Regression: existing tickets-list e2e/integration suites pass (filters, pagination, sorting, row selection, quick add)", "implemented": true, "featureIds": ["F044", "F066"] }, { "id": "T075", "description": "Multi-tenant: bulk/import/export/client-fetch via new routes remain tenant-scoped (no cross-tenant leakage)", "implemented": true, "featureIds": ["F050", "F053", "F060", "F061", "F062", "F063", "F064", "F024"] } ]