Repository navigation
Admin Settings IA stage C: group navigation rendered from one definition - #1307
Merged
Paul Lizer (paullizer) merged 2 commits intoAug 19, 2026
Conversation
Admin Settings presented 18 tabs in a single flat list, and that list was written out twice: once as the top tab strip and once as the sidebar. The two copies had already drifted. Tab order differed between them, and Agents, Custom Pages and Search and Extract each carried a different label depending on which navigation you were looking at. Both now render from admin_settings_nav.ADMIN_NAV, which describes the navigation as groups containing tabs containing sections. A change is made once and appears in both. The map was generated from the existing sidebar markup rather than retyped, so it is faithful by construction, and the rendered destinations were compared before and after: the same 18 tabs and the same 86 sections, with per-tab section order preserved. That comparison also surfaced a gap. The Shared Conversation File Approvals card, added upstream while this work was in progress, had no navigation entry at all and could only be found by scrolling. It is now listed like every other setting, which fixes a pre-existing parity failure. The group level is added on top: collapsible headers with persisted state in the sidebar, and a row of group pills that filters the tab strip in the tab layout. Opening a tab reveals its group first in either layout, so a deep link or a cross-reference can never activate a pane whose tab is out of view. Sidebar search now spans groups as well as tabs and sections. No cards move in this change. Field names and card ids are unchanged at 462 and 110, so saving is untouched, and the 75 functional test files covering admin_settings.html go from 33 pre-existing failures to 32. Tests that asserted against hand-written markup now assert against the map, which is the contract both renderings depend on, and a new test rejects a malformed map, a destination with nothing behind it, or a tab hardcoded back into the strip. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Records the navigation map, the new regression baseline of 32 pre-existing failures after stage C fixed a missing navigation entry, and how stage D becomes a two-part edit now that navigation structure lives in one place. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer)
merged commit Aug 19, 2026
d08d842
into
microsoft:feature/admin-settings-ia
11 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stage C of the Admin Settings information architecture rework. Targets the
feature/admin-settings-iastaging branch.The problem underneath
Admin Settings presented 18 tabs in one flat list — and that list was written out twice, once as the top tab strip and once as the sidebar. Two hand-maintained copies of the same structure, which had predictably diverged:
agentscustom-pagessearch-extractAdding a group level to two hand-maintained lists would have doubled that problem. So both now render from
admin_settings_nav.py.What changed
Navigation is one definition.
ADMIN_NAVdescribes groups → tabs → sections. Both navigations render from it, so a change is made once and appears in both.The map was generated from the existing sidebar markup, not retyped — faithful by construction. I then rendered the sidebar before and after and diffed the destinations:
The group level. Sidebar groups are collapsible and remember their state per user. The tab layout gets a row of group pills that filters the strip to one group, which keeps a single row readable as tabs multiply.
Opening a tab reveals its group first in either layout, so a deep link or a
data-admin-linkcross-reference can never activate a pane whose tab is collapsed or filtered out of view.Search now spans three levels — group, tab and setting — and expands whatever it needs to show a result.
A gap the equivalence check found
Diffing rendered destinations surfaced something I'd otherwise have missed:
shared-conversation-file-approvals-sectionhad no navigation entry at all.That card arrived upstream while this work was in flight, and could only be found by scrolling the AI Models tab. It's now listed like every other setting — which also clears a pre-existing parity failure, taking the regression baseline from 33 down to 32.
Tests now assert on the contract, not on one rendering
Several tests scraped literal sidebar markup that is now generated. Rather than teach them to scrape the loop, they read
ADMIN_NAV— the thing both renderings actually depend on. That's strictly more meaningful: a test assertingdata-section="workflow-settings-section"appears in the sidebar only ever proved one of the two navigations was right.New
test_admin_settings_nav_map.pyrejects:Verification
check_xss_sinks.pypasses a full-file scan of every touched filenode --checkon the modified JSNote on the interim grouping
The map currently has 12 groups, not the 14 in the target structure. Workflow and Data Lifecycle have no tabs yet, because their content still lives inside Workspaces and Safety — they appear in stage D when those cards move.
What this sets up
Stage D becomes a two-part edit per card: move the markup between partials, and move its entry between tabs in the map. The parity test fails if the two disagree, so a card can't silently lose its navigation entry — exactly the failure this PR just fixed by accident.
Version
0.260.010. Status doc updated atdocs/explanation/features/ADMIN_SETTINGS_IA_REWORK_STATUS.md.