# 2026-03-28 Q-004 Coverage Remediation Pass 16

## Scope

- Continue strict `Q-004` closure work after Pass 15.
- Fully close the remaining router hotspot in:
  - `frontend/admin/src/app/router.tsx`
- Re-verify closure through targeted router tests and full frontend validation.

## Changes

### Frontend

- Replaced the shallow route-table assertions in:
  - `frontend/admin/src/app/router.test.tsx`
- New coverage now verifies:
  - exact public route registration
  - exact protected route registration
  - `RequireAuth` shell wrapping and nested `AdminLayout`
  - `RequireAdmin` wrapping for admin-only routes
  - default `Navigate` redirect to `/dashboard` with `replace`
  - lazy route resolution for every page entry
  - `lazyPage()` error handling when the requested export is not a React component
- Test isolation hardening:
  - cleaned up dynamic `vi.doMock()` registrations with explicit `vi.doUnmock()` in `afterEach`
  - this removed cross-file mock leakage that briefly caused full-suite hangs

### Backend

- No backend code changes were required in this pass.

## Verified Commands

```powershell
cd D:\project\frontend\admin
npm.cmd run test:run -- src/app/router.test.tsx
npm.cmd run test:run
npm.cmd run lint
npm.cmd run build
npm.cmd run test:coverage
```

## Results

### Frontend coverage

- Overall:
  - statements `90.74%`
  - branches `77.74%`
  - functions `87.40%`
  - lines `90.87%`
- Target area:
  - `src/app/router.tsx`: statements `100%`, branches `100%`, functions `100%`, lines `100%`

### Validation outcomes

- Full frontend test run now completes with:
  - `47` passing test files
  - `215` passing tests
- Full frontend coverage run now completes with:
  - `47` passing test files
  - `215` passing tests
- The required sequential frontend validation path passed:
  - `test:run -- src/app/router.test.tsx`
  - `test:run`
  - `lint`
  - `build`
  - `test:coverage`

## Validation Notes

- During this pass, a real test-hygiene regression was found and fixed:
  - dynamic route test mocks leaked into later test files
  - symptom: full `test:run` and `test:coverage` stalled until the command timeout
  - fix: explicit `vi.doUnmock()` cleanup for every mocked router dependency
- The successful frontend coverage run still emits one post-summary jsdom `AggregateError` network-noise line.
  - It does not fail the command.
  - It remains a real validation-hygiene issue and cannot be hidden.

## Real Conclusion

- `src/app/router.tsx` is no longer an open `Q-004` gap.
- `Q-004` still cannot be honestly declared closed.
- After this pass, the main remaining frontend gaps narrow further to:
  - `src/pages/admin/DashboardPage/DashboardPage.tsx`
  - `src/components/feedback/PageState/PageState.tsx`
  - additional lower-coverage shared/admin surfaces outside this pass
  - the post-summary jsdom `AggregateError` coverage-noise hygiene issue
