Files
kandev/docs/plans/system-data-storage-page-split/plan.md
T
2026-09-04 00:37:41 +00:00

126 lines
4.8 KiB
Markdown

---
created: 2026-09-03
status: implemented
requirements:
- REQ-SYSTEM-PAGE-DATA-STORAGE-PAGES-001
system_design:
- ../../specs/system-page/system-design/system-data-storage-pages.md
legacy_specs:
- ../../specs/system-page/requirements/system-page.md
- ../../specs/system-page/system-design/system-page-01.md
---
# Implementation Plan: System Data and Storage Page Split
## Overview
This change creates separate `Data & Logs` and `Storage` pages. The first work
order changes routes, navigation, discovery, copy, and browser coverage. The
second work order updates public operations documentation and screenshots.
## Scope
### In scope
- Keep Database, Backups, and Logs on `/settings/system/data-storage`.
- Render storage maintenance on `/settings/system/storage`.
- Add a direct Storage entry to desktop and phone settings navigation.
- Reassign storage discovery targets to the Storage page.
- Preserve legacy redirects and storage save protection.
- Update all affected locales, tests, operations text, and screenshots.
### Out of scope
- Backend, API, database, or storage policy changes.
- New settings navigation levels or responsive primitives.
- Separate Database, Backups, or Logs pages.
- A rename of the existing `Data & Logs` path.
## Technical approach
### Route and component composition
Rename the combined content component to match its remaining Data and Logs
scope. Remove `StorageMaintenanceSettings` and its separator from that
component.
Replace the Storage redirect in `apps/web/src/settings-routes.tsx` with a
`SystemRouteShell` that renders `StorageMaintenanceSettings`. Reuse the existing
Storage title and description keys.
### Navigation and discovery
Add `SYSTEM_STORAGE_SETTINGS_HREF` to the System discovery catalog. Add a
Storage page definition and reparent every storage section to it. Keep existing
storage target IDs stable.
Add the Storage row to `SETTINGS_MENU_SECTIONS`. Add the translated breadcrumb
mapping for the `storage` path segment. Update route and catalog unit tests.
### Localization
Change `dataStoragePageDescription` so that it names database statistics,
backups, and server logs only. Update every locale. Use `pnpm run i18n:zh-hant`
for the Traditional Chinese catalogs.
### Compatibility
Keep the Database, Backups, and Logs redirects unchanged. Keep the current
`Data & Logs` URL and discovery page identity unchanged.
### Public documentation
Update `docs/public/operations.md` to point storage tasks to the Storage page.
Recapture the four affected screenshots with isolated disposable data. The
screenshots must show the Storage route and must not expose developer data.
## Tests
- `AC-SYSTEM-PAGE-DATA-STORAGE-PAGES-001.1` through `.7`: route, menu,
breadcrumb, discovery, and copy unit tests.
- `AC-SYSTEM-PAGE-DATA-STORAGE-PAGES-001.9`: existing storage policy and role
gating tests after route migration.
## E2E tests
- `AC-SYSTEM-PAGE-DATA-STORAGE-PAGES-001.1` through `.5`: desktop System
navigation and the Database, Backups, Logs, and Storage page specifications.
- `AC-SYSTEM-PAGE-DATA-STORAGE-PAGES-001.7` through `.9`: mobile System
navigation, storage maintenance, and member gating specifications.
- `AC-SYSTEM-PAGE-DATA-STORAGE-PAGES-001.9`: authenticated and container-backed
storage maintenance specifications.
## Work orders
- [x] [Task 01: Split the System pages](task-01-split-system-pages.md)
- [x] [Task 02: Update storage operations documentation](task-02-update-storage-operations-docs.md)
## Verification results
Task 01 is done. Focused unit tests passed with 107 tests, typecheck passed,
full web lint passed, the i18n check passed, and the desktop, authenticated, and
phone Playwright suites passed with 18, 2, and 10 tests respectively. The
container-backed storage suite could not start because Docker is unavailable in
the environment.
Task 02 is done. Public documentation tests and validation passed, and the four
Storage screenshots were recaptured from an isolated Playwright fixture with
fictional paths and no developer data. A landing-repository capture target was
not configured, so the documented screenshot fallback used the isolated native
Playwright capture.
The PR review follow-up added an explicit pseudo-locale assertion for the
Storage title and clarified the immediate command wording in the system design.
The focused remediation test passed.
## Risks
- Tests that use `/settings/system/data-storage` for storage can pass against
the wrong route unless every reference is classified by feature.
- Auth tests currently assert backup and storage controls on one page. They
must exercise both routes in the same role context.
- Existing operations screenshots show the `Data & Logs` breadcrumb. They must
be recaptured after the route split.
- Discovery parent changes can break exact-target navigation if hrefs and
parent identities do not change together.