diff --git a/docs/release-control/v6/internal/subsystems/frontend-primitives.md b/docs/release-control/v6/internal/subsystems/frontend-primitives.md index 05bc6ff37..9e2f6c630 100644 --- a/docs/release-control/v6/internal/subsystems/frontend-primitives.md +++ b/docs/release-control/v6/internal/subsystems/frontend-primitives.md @@ -412,9 +412,12 @@ work extends shared components instead of creating new local variants. 13. Keep the settings-shell infrastructure landing path aligned with that same first-session story. `frontend-modern/src/components/Settings/settingsNavigationModel.ts` must treat `/settings` and the infrastructure settings tab as the canonical - path to `/settings/infrastructure/install`, not to reporting/control, so - the shell does not send first-time operators to the wrong infrastructure - subview by default. + path to the bare `/settings/infrastructure`, which renders the unified + Connections table, not to a separate install subview or to reporting/ + control. The first-session story is owned by that table's own empty state + and the `Add a system` entry point on it, not by a second landing route, + so first-time operators and returning operators see one consistent + infrastructure surface by default. 14. Keep dashboard onboarding copy on the shared presentation owner in `frontend-modern/src/utils/dashboardEmptyStatePresentation.ts`. Both the infrastructure empty state and the dashboard route's no-resources state diff --git a/frontend-modern/src/components/Settings/__tests__/settingsArchitecture.test.ts b/frontend-modern/src/components/Settings/__tests__/settingsArchitecture.test.ts index c633cc28e..57e51e162 100644 --- a/frontend-modern/src/components/Settings/__tests__/settingsArchitecture.test.ts +++ b/frontend-modern/src/components/Settings/__tests__/settingsArchitecture.test.ts @@ -518,7 +518,7 @@ describe('Settings architecture guardrails', () => { expect(settingsNavigationModelSource).toContain('export function resolveCanonicalSettingsPath'); expect(settingsNavigationModelSource).toContain('export function isProxmoxSettingsPath'); expect(settingsNavigationModelSource).toContain('export function settingsTabPath'); - expect(settingsNavigationModelSource).toContain('return INFRASTRUCTURE_INSTALL_PREFIX;'); + expect(settingsNavigationModelSource).toContain('return LEGACY_INFRASTRUCTURE_PREFIX;'); expect(settingsNavigationModelSource).toContain('SELF_HOSTED_PRO_BILLING_PLAN_ROUTE'); expect(settingsNavigationHookSource).toContain('deriveTabFromPath'); expect(settingsNavigationHookSource).toContain('isProxmoxSettingsPath'); diff --git a/frontend-modern/src/components/Settings/__tests__/settingsNavigation.integration.test.tsx b/frontend-modern/src/components/Settings/__tests__/settingsNavigation.integration.test.tsx index 8d92fc993..bd48bbade 100644 --- a/frontend-modern/src/components/Settings/__tests__/settingsNavigation.integration.test.tsx +++ b/frontend-modern/src/components/Settings/__tests__/settingsNavigation.integration.test.tsx @@ -7,7 +7,7 @@ import { updateDisableLocalUpgradeMetricsSetting } from '@/stores/systemSettings const canonicalTabPaths = { proxmox: '/settings/infrastructure/platforms/proxmox', - 'infrastructure-operations': '/settings/infrastructure/install', + 'infrastructure-operations': '/settings/infrastructure', 'system-general': '/settings/system-general', 'system-network': '/settings/system-network', 'system-updates': '/settings/system-updates', diff --git a/frontend-modern/src/components/Settings/__tests__/settingsRouting.test.ts b/frontend-modern/src/components/Settings/__tests__/settingsRouting.test.ts index 820a317a6..501ff6a6a 100644 --- a/frontend-modern/src/components/Settings/__tests__/settingsRouting.test.ts +++ b/frontend-modern/src/components/Settings/__tests__/settingsRouting.test.ts @@ -18,7 +18,7 @@ import { isFeatureLocked, isTabLocked } from '../settingsFeatureGates'; const canonicalTabPaths = { proxmox: '/settings/infrastructure/platforms/proxmox', - 'infrastructure-operations': '/settings/infrastructure/install', + 'infrastructure-operations': '/settings/infrastructure', 'system-general': '/settings/system-general', 'system-network': '/settings/system-network', 'system-updates': '/settings/system-updates', @@ -65,19 +65,19 @@ describe('settingsNavigationModel', () => { }); it('resolves only canonical settings paths', () => { - expect(resolveCanonicalSettingsPath('/settings')).toBe('/settings/infrastructure/install'); + expect(resolveCanonicalSettingsPath('/settings')).toBe('/settings/infrastructure'); expect(resolveCanonicalSettingsPath('/settings/workloads')).toBe( - '/settings/infrastructure/install', + '/settings/infrastructure', ); expect(resolveCanonicalSettingsPath('/settings/workloads/docker')).toBe( - '/settings/infrastructure/install', + '/settings/infrastructure', ); expect(resolveCanonicalSettingsPath('/settings/support')).toBe('/settings/support/diagnostics'); expect(resolveCanonicalSettingsPath('/settings/system-updates')).toBe( '/settings/system-updates', ); expect(resolveCanonicalSettingsPath('/settings/infrastructure')).toBe( - '/settings/infrastructure/install', + '/settings/infrastructure', ); expect(resolveCanonicalSettingsPath('/settings/infrastructure/pve')).toBe( '/settings/infrastructure/platforms/proxmox/pve', diff --git a/frontend-modern/src/components/Settings/settingsNavigationModel.ts b/frontend-modern/src/components/Settings/settingsNavigationModel.ts index 8b8b175ce..be1601362 100644 --- a/frontend-modern/src/components/Settings/settingsNavigationModel.ts +++ b/frontend-modern/src/components/Settings/settingsNavigationModel.ts @@ -219,6 +219,7 @@ export function deriveTabFromPath(path: string): SettingsTab { if (canonicalPath === '/settings') return DEFAULT_SETTINGS_TAB; if ( + canonicalPath === LEGACY_INFRASTRUCTURE_PREFIX || canonicalPath === INFRASTRUCTURE_INSTALL_PREFIX || canonicalPath === PLATFORM_CONNECTIONS_PREFIX || canonicalPath === INFRASTRUCTURE_OPERATIONS_PREFIX @@ -391,7 +392,7 @@ export function settingsTabPath(tab: SettingsTab): string { case 'proxmox': return PROXMOX_PREFIX; case 'infrastructure-operations': - return INFRASTRUCTURE_INSTALL_PREFIX; + return LEGACY_INFRASTRUCTURE_PREFIX; case 'system-recovery': return '/settings/system-recovery'; case 'organization-overview':