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

@@ -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.