Reorder workspace section tabs into a consistent order of operations - #1262
Merged
Paul Lizer (paullizer) merged 1 commit intoAug 18, 2026
Merged
Conversation
Paul Lizer (paullizer)
force-pushed
the
paullizer-workspace-tab-ordering
branch
2 times, most recently
from
August 18, 2026 01:17
cae543b to
d0dce31
Compare
Paul Lizer (paullizer)
force-pushed
the
paullizer-workspace-tab-ordering
branch
from
August 18, 2026 01:25
d0dce31 to
2f6f391
Compare
Workspace sections were ordered differently on every surface that listed them, and none of those orders communicated how the pieces relate. Adopt a single canonical order across the tab strip, the collapsed Section dropdown, and the left-hand sidebar submenus: Documents, Prompts, Identities, Sync, Endpoints, Actions, Agents, Workflows Each section depends on the ones before it, so the list now reads as how a workspace is actually built up: Identities feed both Sync and Actions, Endpoints feed Actions and Agents, Agents assemble everything, and Workflows run Agents. Sections still appear only when their existing feature gates are enabled. Moving Actions ahead of Agents and Endpoints ahead of both required unwinding nested Jinja conditionals while preserving identical effective conditions. Tab panes are deliberately not reordered: Bootstrap resolves panes by id and hides inactive ones, so pane DOM order has no visual or accessibility effect, and leaving them keeps the diff reviewable. Public workspaces already satisfied the canonical relative order and are unchanged. Also fixes sidebar navigation gating that could surface links to tabs that were never rendered: - Add the missing Group Workflows sidebar link, which left group workflows unreachable from the left-hand navigation. - Personal Agents and Actions links now respect allow_user_agents and allow_user_plugins. - Group Agents and Actions links now respect per_user_semantic_kernel and allow_group_plugins. - Both Identities links now match their tab's File Sync and Semantic Kernel conditions. Validation: - New test_workspace_section_order.py renders all six section lists with Jinja and asserts the canonical order, that disabled features only remove sections, and that all three surfaces stay in gating lockstep across every combination of the eight relevant feature flags per scope. Verified to fail against the pre-change templates. - test_endpoints_tab_order_visibility.py updated for Endpoints then Actions then Agents; pane assertions reduced to presence-only. - All 74 functional tests referencing the edited templates produce an identical failure set to the merge-base baseline, so no regressions. - All 50 templates parse cleanly through Jinja. Refs #1255 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
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.
Fixes #1255
What this does
Workspace sections were ordered differently on every surface that listed them, and none of those orders communicated how the pieces relate. This adopts a single canonical order everywhere:
Documents → Prompts → Identities → Sync → Endpoints → Actions → Agents → Workflows
Each section depends on the ones before it, so the list now reads as how a workspace is actually built up: Identities feed both Sync and Actions, Endpoints feed Actions and Agents, Agents assemble everything, and Workflows run Agents. This came out of user and admin confusion about those relationships.
Sections still appear only when their existing feature gates are enabled — disabled ones simply close up while the rest keep their relative positions.
Before / after
Public workspaces already satisfied the canonical relative order (Documents → Prompts on the browse page, Identities before Sync on the manage page) and are unchanged.
Sidebar gating bugs fixed
The sidebar used visibility rules that didn't match the tabs they linked to, so a link could appear for a section that was never rendered:
per_user_semantic_kernel and enable_semantic_kernelallow_user_agentsper_user_semantic_kernel and enable_semantic_kernelallow_user_agents and allow_user_plugins... or enable_multi_model_endpointsallow_group_agents and enable_semantic_kernelper_user_semantic_kernelallow_group_agents and enable_semantic_kernelper_user_semantic_kernel and allow_group_plugins... or enable_multi_model_endpointsallow_group_workflowsThe group sidebar had no Workflows entry at all, so group workflows were unreachable from the left-hand navigation despite the tab having shipped.
Implementation notes
Tab panes are deliberately not reordered. Bootstrap resolves panes by
id/data-bs-targetand hides inactive ones, so pane DOM order has no visual or accessibility effect. Leaving them in place keeps the diff reviewable —group_workspaces.htmlalone is ~389 KB.Gate restructuring preserves effective conditions. Moving Actions ahead of Agents and Endpoints ahead of both required unwinding nested Jinja conditionals. For example, personal Actions was nested inside the Agents gate; it still requires
per_user_semantic_kernel,enable_semantic_kernel,allow_user_agents, andallow_user_plugins— only its render position changed.The dropdown and tab strip must move together.
workspace_section_switcher.jsmaps option values onto tab button ids rather than deriving one from the other, so both were updated in lockstep.Validation
functional_tests/test_workspace_section_order.pyrenders each of the six section lists through Jinja and asserts: the canonical order when everything is enabled; that disabled features only remove sections (never reorder or duplicate); and that the tab strip, Section dropdown, and sidebar submenu expose an identical set of sections across every combination of the eight relevant feature flags per scope (512 renders). It also checks the permission-aware group Identities markers survived the move, and that public workspaces still conform.Developmentbaseline (re-verified after rebasing). The 50 failures in that set are pre-existing and unrelated (stale assertions aboutapp.pyroute registration,admin_settings.jshelpers, hardcoded old version numbers, etc.).functional_tests/route_tests/passes 12/12.test_endpoints_tab_order_visibility.pyupdated for the new Endpoints → Actions → Agents order; its pane assertions reduced to presence-only.Also included
0.250.211— rebased twice pastDevelopment, which claimed0.250.209(Cosmos backup fixes, Fix Cosmos backup continuation token failure dropping large containers #1259) and0.250.210(chat document search, Match chat document search on file names and clear dropdown divider artifacts #1260) while this was in flightdocs/explanation/features/v0.250.211/WORKSPACE_SECTION_ORDER.mdFollow-ups (tracked in #1255, not in this PR)
#group-settings-tabpane ingroup_workspaces.htmlwith no corresponding nav button anywhere in the codebase