# Prelaunch Navigation And Batch Delete Implementation Plan > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** Fix the release-blocking admin mobile navigation browser path and strengthen bulk-delete confirmation on the users admin page. **Architecture:** Keep the product changes minimal and local to the admin frontend. Make mobile drawer state transitions explicit in `AdminLayout`, harden the supported E2E scenario around the real drawer surface, and upgrade `UsersPage` bulk delete from a lightweight pop confirmation to a stronger modal confirmation without changing backend APIs. **Tech Stack:** React 18, Ant Design, React Router, Vitest, Playwright CDP runner. --- ### Task 1: Capture the failing browser evidence **Files:** - Modify: none - [ ] Run `cd frontend/admin && $env:E2E_SCENARIOS='desktop-mobile-navigation'; npm.cmd run e2e:full:win`. - [ ] Record the exact failing step and whether the drawer fails to open, the selector fails to resolve, or navigation fails after selection. - [ ] Do not change product code until the failure mode is confirmed. ### Task 2: Add the AdminLayout regression first **Files:** - Modify: `frontend/admin/src/layouts/AdminLayout/AdminLayout.test.tsx` - Modify: `frontend/admin/src/layouts/AdminLayout/AdminLayout.tsx` - [ ] Add a failing test that switches from desktop to mobile, opens the menu, navigates through the drawer, and proves the drawer closes deterministically after selection. - [ ] Run `cd frontend/admin && npm.cmd run test:run -- src/layouts/AdminLayout/AdminLayout.test.tsx`. - [ ] Confirm the new assertion fails for the current implementation before fixing the layout. ### Task 3: Fix mobile drawer state and harden the browser scenario **Files:** - Modify: `frontend/admin/src/layouts/AdminLayout/AdminLayout.tsx` - Modify: `frontend/admin/scripts/run-playwright-cdp-e2e.mjs` - [ ] Replace toggle-based mobile drawer state transitions with explicit open and close handlers. - [ ] Keep desktop collapse behavior unchanged. - [ ] Narrow browser selectors and waits so the scenario checks the intended mobile button and the open drawer content. - [ ] Re-run `cd frontend/admin && $env:E2E_SCENARIOS='desktop-mobile-navigation'; npm.cmd run e2e:full:win`. ### Task 4: Add the UsersPage regression first **Files:** - Modify: `frontend/admin/src/pages/admin/UsersPage/UsersPage.test.tsx` - Modify: `frontend/admin/src/pages/admin/UsersPage/UsersPage.tsx` - [ ] Add a failing test that selects users, triggers bulk delete, verifies no delete happens on the first lightweight action alone, and confirms the API call only occurs after the stronger explicit confirmation. - [ ] Run `cd frontend/admin && npm.cmd run test:run -- src/pages/admin/UsersPage/UsersPage.test.tsx`. - [ ] Confirm the new assertion fails for the current implementation before changing the page. ### Task 5: Implement stronger bulk-delete confirmation **Files:** - Modify: `frontend/admin/src/pages/admin/UsersPage/UsersPage.tsx` - [ ] Replace the direct `Popconfirm` bulk-delete path with a stronger confirmation modal flow. - [ ] Keep the existing self-delete guard and empty-selection guard. - [ ] After confirmation, keep existing success behavior: call `batchDelete`, clear selection, and refresh the list. - [ ] Re-run `cd frontend/admin && npm.cmd run test:run -- src/pages/admin/UsersPage/UsersPage.test.tsx`. ### Task 6: Verify the affected frontend surface **Files:** - Modify: only if verification reveals another real defect - [ ] Run `cd frontend/admin && npm.cmd run test:run -- src/layouts/AdminLayout/AdminLayout.test.tsx src/pages/admin/UsersPage/UsersPage.test.tsx`. - [ ] Run `cd frontend/admin && npm.cmd run lint`. - [ ] Run `cd frontend/admin && npm.cmd run build`. - [ ] Re-run `cd frontend/admin && $env:E2E_SCENARIOS='desktop-mobile-navigation'; npm.cmd run e2e:full:win`. - [ ] Report the results exactly as observed, including any remaining risk if full-suite E2E is not rerun in this turn.