133 lines
5.2 KiB
Markdown
133 lines
5.2 KiB
Markdown
---
|
|
id: "01-split-system-pages"
|
|
title: "Split the System pages"
|
|
status: done
|
|
wave: 1
|
|
depends_on: []
|
|
plan: "plan.md"
|
|
requirements:
|
|
- REQ-SYSTEM-PAGE-DATA-STORAGE-PAGES-001
|
|
acceptance_criteria:
|
|
- AC-SYSTEM-PAGE-DATA-STORAGE-PAGES-001.1
|
|
- AC-SYSTEM-PAGE-DATA-STORAGE-PAGES-001.2
|
|
- AC-SYSTEM-PAGE-DATA-STORAGE-PAGES-001.3
|
|
- AC-SYSTEM-PAGE-DATA-STORAGE-PAGES-001.4
|
|
- AC-SYSTEM-PAGE-DATA-STORAGE-PAGES-001.5
|
|
- AC-SYSTEM-PAGE-DATA-STORAGE-PAGES-001.6
|
|
- AC-SYSTEM-PAGE-DATA-STORAGE-PAGES-001.7
|
|
- AC-SYSTEM-PAGE-DATA-STORAGE-PAGES-001.8
|
|
- AC-SYSTEM-PAGE-DATA-STORAGE-PAGES-001.9
|
|
system_design:
|
|
- ../../specs/system-page/system-design/system-data-storage-pages.md
|
|
---
|
|
|
|
# Task 01: Split the System Pages
|
|
|
|
## Summary
|
|
|
|
Create direct `Data & Logs` and `Storage` routes. Update navigation, discovery,
|
|
localization, unit tests, and Playwright coverage as one vertical change.
|
|
|
|
## In scope
|
|
|
|
- Remove storage maintenance from the Data and Logs content component.
|
|
- Render storage maintenance directly on `/settings/system/storage`.
|
|
- Add the Storage route to the System menu, breadcrumbs, and discovery catalog.
|
|
- Update the Data and Logs description in every locale.
|
|
- Move every storage-focused Playwright flow to the Storage route.
|
|
- Make authenticated role tests exercise both owning pages.
|
|
- Preserve legacy redirects and exact discovery targets.
|
|
|
|
## Out of scope
|
|
|
|
- Backend or API changes.
|
|
- Storage policy or cleanup behavior changes.
|
|
- Public operations text and screenshots.
|
|
|
|
## Acceptance
|
|
|
|
- Each route renders only its specified operational sections.
|
|
- Desktop and phone navigation open both routes directly.
|
|
- Storage save, permission, action, and containment tests pass on the Storage
|
|
route.
|
|
|
|
## Verification
|
|
|
|
```bash
|
|
pnpm exec vitest run components/settings/system/system-route-copy.test.ts components/settings/system/system-invisible-copy.test.tsx components/app-sidebar/sections/settings/settings-nav-copy.test.ts components/app-sidebar/sections/settings/settings-tree.test.ts lib/settings-discovery/catalog.test.ts src/settings-routes.test.ts
|
|
pnpm run i18n:check
|
|
pnpm e2e:run --project chromium tests/system/sidebar-navigation.spec.ts tests/system/database-page.spec.ts tests/system/backups-page.spec.ts tests/system/logs-page.spec.ts tests/system/storage-maintenance.spec.ts
|
|
pnpm e2e:run --project auth tests/auth/system-data-storage-member-gating.spec.ts
|
|
pnpm e2e:run --project mobile-chrome tests/system/mobile-database-page.spec.ts tests/system/mobile-logs-bundle.spec.ts tests/system/mobile-storage-maintenance.spec.ts tests/auth/mobile-system-data-storage-member-gating.spec.ts
|
|
pnpm e2e:run --project containers tests/docker/storage-maintenance.spec.ts
|
|
```
|
|
|
|
Run these commands from `apps/web`.
|
|
|
|
## Files likely touched
|
|
|
|
- `apps/web/components/settings/system/data-logs-settings.tsx`
|
|
- `apps/web/components/settings/system/system-route-copy.test.ts`
|
|
- `apps/web/components/settings/system/system-invisible-copy.test.tsx`
|
|
- `apps/web/components/settings/settings-breadcrumb-labels.ts`
|
|
- `apps/web/components/app-sidebar/sections/settings/settings-menu-sections.ts`
|
|
- `apps/web/components/app-sidebar/sections/settings/settings-nav-copy.test.ts`
|
|
- `apps/web/components/app-sidebar/sections/settings/settings-tree.test.ts`
|
|
- `apps/web/lib/settings-discovery/catalog/system.ts`
|
|
- `apps/web/lib/settings-discovery/catalog.test.ts`
|
|
- `apps/web/src/settings-routes.tsx`
|
|
- `apps/web/src/settings-routes.test.ts`
|
|
- `apps/web/src/locales/*/system.json`
|
|
- `apps/web/e2e/tests/system/*.spec.ts`
|
|
- `apps/web/e2e/tests/auth/*data-storage-member-gating*.ts`
|
|
- `apps/web/e2e/tests/docker/storage-maintenance.spec.ts`
|
|
- `apps/web/e2e/tests/task/unarchive-storage-recovery.spec.ts`
|
|
|
|
## Dependencies
|
|
|
|
None.
|
|
|
|
## Risks
|
|
|
|
- A broad route replacement can move database or log tests to Storage by
|
|
mistake. Classify each reference before editing it.
|
|
- The auth tests use manual browser contexts. Both route visits must retain the
|
|
same authenticated context.
|
|
- The Storage route must keep the route-scoped save contributor mounted until
|
|
the navigation guard resolves.
|
|
|
|
## Parallelism
|
|
|
|
`sequential`
|
|
|
|
## Inputs
|
|
|
|
- `REQ-SYSTEM-PAGE-DATA-STORAGE-PAGES-001` and all acceptance criteria.
|
|
- `docs/specs/system-page/system-design/system-data-storage-pages.md`.
|
|
- ADRs 0045, 0046, and 2026-08-04-navigation-manifest-boundaries.
|
|
- Existing System route, discovery, settings menu, and Playwright patterns.
|
|
|
|
## Results
|
|
|
|
The route composition, System navigation,
|
|
breadcrumbs, discovery ownership, localized copy, unit tests, and desktop,
|
|
authenticated, phone, and container-backed Playwright references were updated.
|
|
|
|
Verification passed:
|
|
|
|
- Focused Vitest command: 107 tests passed.
|
|
- `pnpm run typecheck` passed.
|
|
- Full `pnpm run lint` passed.
|
|
- `pnpm run i18n:check` passed.
|
|
- Desktop Playwright command: 18 tests passed.
|
|
- Authenticated role command: 2 tests passed.
|
|
- Phone Playwright command: 10 tests passed.
|
|
- `python3 scripts/lint-spec-files.py --all` and `git diff --check` passed.
|
|
|
|
The exact container Playwright command was attempted, but Docker is unavailable
|
|
in this environment, so that suite could not run.
|
|
|
|
PR review follow-up added an explicit pseudo-locale assertion for
|
|
`system:storageTitle` and clarified the system-design wording for immediate
|
|
commands. The focused remediation test passed with 12 tests.
|