feat(web): rationalize settings IA into personal-preferences shell with admin rehoming [SPRINT-026]

Settings shell now owns only personal user preferences (appearance,
language, layout, AI assistant). All 14 admin/tenant/ops leaves
converted to controlled redirects pointing at their canonical owners
(Administration, Setup, Ops). Language merged into user-preferences.
Identity-providers rehomed from settings to administration as
canonical owner. Navigation config updated. 22 new route tests added.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
master
2026-03-08 22:58:03 +02:00
parent ce59f66e97
commit 2bf4d69bba
10 changed files with 482 additions and 225 deletions

View File

@@ -0,0 +1,57 @@
# Settings IA Rationalization
## Summary
The Settings shell has been rationalized from a mixed bucket of user preferences, admin consoles, setup pages, and redirect shims into a truthful personal-preferences surface. The `/settings` default now lands on User Preferences (appearance, language, layout, AI assistant) instead of Integrations.
## What changed
### Settings default
- `/settings` now defaults to User Preferences instead of Integrations.
### Personal preferences (canonical owner: Settings)
- `user-preferences` -- the single personal-settings page with Appearance, Language, Layout, and AI Assistant sections.
### Merged preference leaves (redirects to user-preferences)
- `language` -- was a standalone duplicate of the language section already present in user-preferences.
- `ai-preferences` -- already redirected to user-preferences (preserved).
### Admin/tenant leaves rehomed via redirects
| Legacy URL | Redirect Target |
|---|---|
| `/settings/admin` | `/administration/admin` |
| `/settings/admin/:page` | `/administration/admin/:page` |
| `/settings/branding` | `/console/admin/branding` |
| `/settings/identity-providers` | `/administration/identity-providers` |
| `/settings/system` | `/administration/system` |
| `/settings/security-data` | `/administration/security-data` |
| `/settings/offline` | `/administration/offline` |
### Operations/setup leaves rehomed via redirects
| Legacy URL | Redirect Target |
|---|---|
| `/settings/integrations` | `/setup/integrations` |
| `/settings/integrations/:id` | `/setup/integrations/:id` |
| `/settings/usage` | `/setup/usage` |
| `/settings/notifications` | `/setup/notifications` |
| `/settings/policy` | `/ops/policy/governance` |
| `/settings/release-control` | `/setup/topology/environments` |
| `/settings/configuration-pane` | `/ops/platform-setup` |
### Trust redirects preserved
All `trust/*` and `trust-signing/*` redirects to `/setup/trust-signing/*` remain unchanged.
### Navigation config
- `identity-providers` admin nav item now points to `/administration/identity-providers` instead of `/settings/identity-providers`.
### Administration routes
- `/administration/identity-providers` now loads the IdentityProvidersSettingsPageComponent directly instead of redirecting to `/settings/identity-providers` (breaks the redirect loop created by the settings rehoming).
## Test evidence
- 22 new tests in `settings-ia-rationalization.spec.ts` covering personal preference defaults, merged redirects, admin redirects, ops redirects, trust preservation, and route count validation.
- 3 existing tests in `unified-settings-page.behavior.spec.ts` updated and passing.
- 5 existing tests in `setup-topology-trust-cutover.spec.ts` verified passing (no regression).
- All 30 settings tests pass, all 5 trust cutover tests pass.
- Build clean (no TypeScript errors).
## Sprint
`SPRINT_20260308_026_FE_settings_information_architecture_rationalization`

View File

@@ -24,7 +24,7 @@
## Delivery Tracker
### FE-SETIA-001 - Audit and classify every settings route
Status: TODO
Status: DONE
Dependency: none
Owners: Product Manager, Developer (FE)
Task description:
@@ -32,12 +32,12 @@ Task description:
- Capture whether each leaf is already visible somewhere else in the product, whether it overlaps an existing page, and whether its current label truthfully matches what the page actually does.
Completion criteria:
- [ ] Every mounted `/settings/*` route is classified into a single ownership bucket.
- [ ] Existing visible entry points outside Settings are identified for admin/setup leaves.
- [ ] Duplicate or misleading leaves are called out explicitly before implementation begins.
- [x] Every mounted `/settings/*` route is classified into a single ownership bucket.
- [x] Existing visible entry points outside Settings are identified for admin/setup leaves.
- [x] Duplicate or misleading leaves are called out explicitly before implementation begins.
### FE-SETIA-002 - Freeze the target IA and backward-compatibility contract
Status: TODO
Status: DONE
Dependency: FE-SETIA-001
Owners: Product Manager, UX
Task description:
@@ -45,25 +45,25 @@ Task description:
- Decide which current URLs remain as redirects, which URLs are removed entirely, and which labels need to change for operator clarity.
Completion criteria:
- [ ] A final ownership decision exists for each current settings leaf.
- [ ] Redirect-vs-removal behavior is defined for every legacy or misleading route.
- [ ] The target IA is concise enough to explain in one operator-facing diagram or note.
- [x] A final ownership decision exists for each current settings leaf.
- [x] Redirect-vs-removal behavior is defined for every legacy or misleading route.
- [x] The target IA is concise enough to explain in one operator-facing diagram or note.
### FE-SETIA-003 - Build the personal-settings shell and navigation model
Status: TODO
Status: DONE
Dependency: FE-SETIA-002
Owners: UX, Developer (FE)
Task description:
- Redesign the Settings shell around personal preferences only, with explicit sections such as Appearance, Language, Assistant, and Navigation/Layout.
- Replace the current global sidebar owns navigation fiction with either an in-page settings nav or a sectioned preferences page that is visibly self-contained and understandable.
- Replace the current "global sidebar owns navigation" fiction with either an in-page settings nav or a sectioned preferences page that is visibly self-contained and understandable.
Completion criteria:
- [ ] The Settings shell has a truthful navigation model for personal preferences.
- [ ] The shell works on desktop and mobile without relying on hidden URL-only leaves.
- [ ] User-menu entry points land in a settings experience that is obviously personal, not administrative.
- [x] The Settings shell has a truthful navigation model for personal preferences.
- [x] The shell works on desktop and mobile without relying on hidden URL-only leaves.
- [x] User-menu entry points land in a settings experience that is obviously personal, not administrative.
### FE-SETIA-004 - Merge overlapping personal preference leaves
Status: TODO
Status: DONE
Dependency: FE-SETIA-003
Owners: Developer (FE), UX
Task description:
@@ -71,12 +71,12 @@ Task description:
- Preserve deep-link compatibility with redirects or anchored sections where helpful, but remove duplicate editing surfaces.
Completion criteria:
- [ ] Language preferences are owned by the personal settings experience instead of a duplicate page.
- [ ] Duplicate personal-preference pages are removed or converted into thin redirects.
- [ ] Preference-saving behavior remains intact after the merge.
- [x] Language preferences are owned by the personal settings experience instead of a duplicate page.
- [x] Duplicate personal-preference pages are removed or converted into thin redirects.
- [x] Preference-saving behavior remains intact after the merge.
### FE-SETIA-005 - Rehome admin, tenant, and operations configuration leaves
Status: TODO
Status: DONE
Dependency: FE-SETIA-002
Owners: Developer (FE), Product Manager
Task description:
@@ -84,12 +84,12 @@ Task description:
- Ensure these pages are discoverable from the correct Setup/Ops/Admin entry points instead of surviving only as hidden Settings URLs.
Completion criteria:
- [ ] Admin/setup leaves no longer present themselves as user settings.
- [ ] Canonical owner routes expose visible entry points for the rehomed capabilities.
- [ ] Legacy `/settings/*` bookmarks still resolve through controlled redirects where required.
- [x] Admin/setup leaves no longer present themselves as user settings.
- [x] Canonical owner routes expose visible entry points for the rehomed capabilities.
- [x] Legacy `/settings/*` bookmarks still resolve through controlled redirects where required.
### FE-SETIA-006 - Remove or collapse wrapper and alias-only settings pages
Status: TODO
Status: DONE
Dependency: FE-SETIA-005
Owners: Developer (FE)
Task description:
@@ -97,12 +97,12 @@ Task description:
- Keep the compatibility surface focused on redirects, not on maintaining duplicate shells with duplicated copy.
Completion criteria:
- [ ] Alias-only settings pages are reduced to redirects or removed.
- [ ] No standalone wrapper remains if its only action is to link elsewhere.
- [ ] Route ownership becomes obvious from the code tree.
- [x] Alias-only settings pages are reduced to redirects or removed.
- [x] No standalone wrapper remains if its only action is to link elsewhere.
- [x] Route ownership becomes obvious from the code tree.
### FE-SETIA-007 - Add focused route, nav, and UX regression coverage
Status: TODO
Status: DONE
Dependency: FE-SETIA-004
Owners: Test Automation, Developer (FE)
Task description:
@@ -110,12 +110,12 @@ Task description:
- Include tests that prove hidden pages are now either visible from the right place or intentionally redirected.
Completion criteria:
- [ ] Angular route/nav tests cover the new personal settings shell and key redirects.
- [ ] Regression coverage exists for at least the current user-menu entry plus representative admin/setup redirects.
- [ ] Known IA edge cases are documented in the sprint log or feature note.
- [x] Angular route/nav tests cover the new personal settings shell and key redirects.
- [x] Regression coverage exists for at least the current user-menu entry plus representative admin/setup redirects.
- [x] Known IA edge cases are documented in the sprint log or feature note.
### FE-SETIA-008 - Sync docs and ship the IA decision
Status: TODO
Status: DONE
Dependency: FE-SETIA-007
Owners: Documentation author, Project Manager
Task description:
@@ -123,21 +123,23 @@ Task description:
- Ensure future dead-code or preservation reviews have a truthful owner map for Settings.
Completion criteria:
- [ ] UI docs reflect the final Settings ownership model.
- [ ] UI task/plan docs reference the shipped IA.
- [ ] A checked-feature note exists for the implemented settings rationalization.
- [x] UI docs reflect the final Settings ownership model.
- [x] UI task/plan docs reference the shipped IA.
- [x] A checked-feature note exists for the implemented settings rationalization.
## Execution Log
| Date (UTC) | Update | Owner |
| --- | --- | --- |
| 2026-03-08 | Sprint created to rationalize Settings into a truthful personal-preferences surface and rehome admin/setup leaves to their canonical owners. | Codex |
| 2026-03-08 | All tasks DONE. Audited 20 settings child routes and classified into 3 personal-preference, 11 admin/tenant-config, and 6 ops/wrapper buckets. Settings default changed from Integrations to User Preferences. 14 admin/ops leaves converted to redirects pointing at their canonical owners (administration, setup, ops). Language merged into user-preferences via redirect. Identity-providers rehomed from settings to administration as canonical owner. Navigation config updated. 22 new route tests added. All 35 settings+trust tests pass. Build clean. | Developer (FE) |
## Decisions & Risks
- Current risk: the existing Settings shell mixes user preferences with admin/setup pages, making most leaves either URL-only or misleadingly named.
- UX principle: Settings must answer what can I personalize for myself? while Setup/Admin answer what do I configure for the installation or tenant?
- UX principle: Settings must answer "what can I personalize for myself?" while Setup/Admin answer "what do I configure for the installation or tenant?"
- Compatibility risk: old bookmarks may point to `/settings/*` admin leaves; mitigate with explicit redirects and route tests instead of duplicate shells.
- Decision: `/administration/identity-providers` now loads the component directly instead of redirecting back to `/settings/identity-providers`, breaking the redirect loop.
- Decision: Settings default route changed from Integrations to User Preferences, which is the correct personal-settings landing page.
- Decision: `release-control` and `configuration-pane` wrapper pages converted to redirects to their canonical setup/ops owners since they only linked elsewhere.
## Next Checkpoints
- Complete the route classification matrix.
- Freeze the target IA and redirect contract.
- Implement personal-settings shell changes only after the ownership map is agreed.
- Archived. All tasks shipped.

View File

@@ -5,6 +5,7 @@
- [DONE] `docs/implplan/SPRINT_20260308_015_FE_orphan_filter_bar_unification.md` - Initial FilterBarComponent adoption batch; audit-log-table and trust-audit-log were later rolled back in sprint `024` to restore lost semantics.
- [DONE] `docs-archived/implplan/SPRINT_20260308_024_FE_orphan_revival_regression_remediation.md` - Fixed reviewed orphan-revival regressions: build blockers cleared, canonical evidence-thread navigation restored, audit/trust filter capabilities restored, and fabricated finding evidence removed from mounted hosts.
- [DOING] `docs/implplan/SPRINT_20260308_025_FE_safe_cleanup_and_generated_artifacts_prune.md` - Approved UI cleanup to prune committed generated/debug artifacts plus confirmed orphan route and legacy release-control leaves.
- [DONE] `docs/implplan/SPRINT_20260308_026_FE_settings_information_architecture_rationalization.md` - Settings IA rationalized: personal-preferences shell with admin/ops rehoming via controlled redirects.
## Queued Sprint Links
- `docs/modules/ui/orphan-revival-batch/README.md` - review index for the orphan shared-component and disconnected-route revival batch.
@@ -175,3 +176,11 @@
- [DONE] FE-SPL-002 Derive the canonical list-detail shell
- [DONE] FE-SPL-003 Adopt the consolidated shell on bounded mounted surfaces
- [DONE] FE-SPL-004 Verify and document the consolidation
- [DONE] FE-SETIA-001 Audit and classify every settings route
- [DONE] FE-SETIA-002 Freeze the target IA and backward-compatibility contract
- [DONE] FE-SETIA-003 Build the personal-settings shell and navigation model
- [DONE] FE-SETIA-004 Merge overlapping personal preference leaves
- [DONE] FE-SETIA-005 Rehome admin, tenant, and operations configuration leaves
- [DONE] FE-SETIA-006 Remove or collapse wrapper and alias-only settings pages
- [DONE] FE-SETIA-007 Add focused route, nav, and UX regression coverage
- [DONE] FE-SETIA-008 Sync docs and ship the IA decision

View File

@@ -7,6 +7,7 @@ Provide a living plan for UI deliverables, dependencies, and evidence.
- Track current sprints under `docs/implplan/SPRINT_*.md` for this module.
- Update this file when new scoped work is approved.
- Sprint `025` is active for safe cleanup of approved dead leaves and committed generated/debug artifacts in the Web workspace.
- Sprint `026` shipped Settings IA rationalization: the Settings shell now owns only personal preferences (appearance, language, layout, AI assistant). All admin, tenant, and operations configuration leaves redirect to their canonical owners (Administration, Setup, Ops). See `docs/features/checked/web/settings-ia-rationalization-ui.md`.
## Near-term deliverables
- No active UI deliverables are currently staged in `docs/implplan`.