Extract operations route surface owners

This commit is contained in:
rcourtman
2026-03-20 21:47:23 +00:00
parent e2275133a5
commit 68bae84bcf
10 changed files with 208 additions and 105 deletions
@@ -226,6 +226,7 @@ work must extend that split rather than pulling org bootstrap and app chrome
back into one monolithic route component.
That same route/provider shell must stay page-oriented as well: `App.tsx`
should lazy-load route shells like `frontend-modern/src/pages/Storage.tsx`
and `frontend-modern/src/pages/Operations.tsx`
instead of wiring product-surface components such as
`frontend-modern/src/components/Storage/Storage.tsx` directly into the router,
so hosted bootstrap ownership stays at the app boundary rather than leaking
@@ -61,6 +61,12 @@ work extends shared components instead of creating new local variants.
39. `frontend-modern/src/components/SetupWizard/__tests__/SetupWizard.test.tsx`
40. `frontend-modern/src/components/SetupWizard/__tests__/SetupCompletionPreview.test.tsx`
41. `frontend-modern/src/components/shared/MonitoredSystemLimitWarningBanner.tsx`
42. `frontend-modern/src/components/Settings/ReportingPanel.tsx`
43. `frontend-modern/src/components/Settings/SystemLogsPanel.tsx`
44. `frontend-modern/src/features/operations/OperationsPageSurface.tsx`
45. `frontend-modern/src/features/operations/operationsPageModel.ts`
46. `frontend-modern/src/pages/Operations.tsx`
47. `frontend-modern/src/pages/__tests__/Operations.helpers.test.ts`
## Shared Boundaries
@@ -140,6 +146,15 @@ diagnostics run/export lifecycle, results rendering, and sanitization/model
helpers. The shell must not re-accumulate inline API calls, export-download
plumbing, or diagnostics-card composition.
The operations route now follows the same thin-route pattern as infrastructure,
storage, and Patrol. `frontend-modern/src/pages/Operations.tsx` stays the route
shell, `frontend-modern/src/features/operations/OperationsPageSurface.tsx` owns
the tabbed operations surface, and
`frontend-modern/src/features/operations/operationsPageModel.ts` owns the tab
and path contract. The operations route must keep its navigation routed through
the shared `frontend-modern/src/components/shared/Subtabs.tsx` primitive rather
than rebuilding a bespoke page-local tab bar.
The updates settings surface now follows the same presentation-owner rule.
`frontend-modern/src/components/Settings/UpdatesSettingsPanel.tsx` stays the
top-level settings shell, while
@@ -1654,6 +1654,7 @@
"frontend-modern/src/components/Settings/GeneralSettingsPanel.tsx",
"frontend-modern/src/components/Settings/NetworkSettingsPanel.tsx",
"frontend-modern/src/components/Settings/RecoverySettingsPanel.tsx",
"frontend-modern/src/components/Settings/ReportingPanel.tsx",
"frontend-modern/src/components/Settings/SecurityAuthPanel.tsx",
"frontend-modern/src/components/Settings/SecurityOverviewPanel.tsx",
"frontend-modern/src/components/Settings/Settings.tsx",
@@ -1662,6 +1663,7 @@
"frontend-modern/src/components/Settings/settingsPanelRegistry.ts",
"frontend-modern/src/components/Settings/ssoProvidersModel.ts",
"frontend-modern/src/components/Settings/SSOProvidersPanel.tsx",
"frontend-modern/src/components/Settings/SystemLogsPanel.tsx",
"frontend-modern/src/components/Settings/UpdateInstallGuide.tsx",
"frontend-modern/src/components/Settings/updatesSettingsModel.ts",
"frontend-modern/src/components/Settings/UpdatesSettingsPanel.tsx",
@@ -1669,7 +1671,10 @@
"frontend-modern/src/components/Settings/useDiagnosticsPanelState.ts",
"frontend-modern/src/components/Settings/useSSOProvidersState.ts",
"frontend-modern/src/components/SetupWizard/SetupCompletionPreview.tsx",
"frontend-modern/src/components/SetupWizard/SetupWizard.tsx"
"frontend-modern/src/components/SetupWizard/SetupWizard.tsx",
"frontend-modern/src/features/operations/operationsPageModel.ts",
"frontend-modern/src/features/operations/OperationsPageSurface.tsx",
"frontend-modern/src/pages/Operations.tsx"
],
"verification": {
"allow_same_subsystem_tests": false,
@@ -1740,6 +1745,25 @@
"frontend-modern/src/components/Settings/__tests__/settingsArchitecture.test.ts"
]
},
{
"id": "route-shell-and-operations",
"label": "route shell and operations proof",
"match_prefixes": [],
"match_files": [
"frontend-modern/src/components/Settings/ReportingPanel.tsx",
"frontend-modern/src/components/Settings/SystemLogsPanel.tsx",
"frontend-modern/src/features/operations/operationsPageModel.ts",
"frontend-modern/src/features/operations/OperationsPageSurface.tsx",
"frontend-modern/src/pages/Operations.tsx"
],
"allow_same_subsystem_tests": false,
"test_prefixes": [],
"exact_files": [
"frontend-modern/src/__tests__/App.architecture.test.ts",
"frontend-modern/src/pages/__tests__/Operations.helpers.test.ts",
"frontend-modern/src/utils/__tests__/frontendResourceTypeBoundaries.test.ts"
]
},
{
"id": "first-session-runtime-and-preview",
"label": "first-session runtime and preview proof",