Repository navigation
Reorder workspace section tabs into a consistent order of operations #1255
Description
Summary
Workspace section tabs are ordered inconsistently across surfaces, and the current order doesn't communicate any order of operations. Users and admins tell us they don't understand that Identities feed both Sync and Actions, that Actions belong to Agents, or that Workflows consume Agents.
Current state
| Surface | Order |
|---|---|
Personal tabs (workspace.html) |
Documents, Sync, Identities, Prompts, Agents, Actions, Workflows, Endpoints |
| Personal Section dropdown | Documents, Sync, Identities, Prompts, Agents, Actions, Workflows, Endpoints |
| Personal sidebar submenu | Documents, Prompts, Workflows, Agents, Actions, Endpoints, Sync, Identities |
Group tabs (group_workspaces.html) |
Documents, Sync, Identities, Prompts, Workflows, Agents, Actions, Endpoints |
| Group Section dropdown | Documents, Sync, Identities, Prompts, Workflows, Agents, Actions, Endpoints |
| Group sidebar submenu | Documents, Prompts, Agents, Actions, Endpoints, Sync, Identities (no Workflows link at all) |
Public browse (public_workspaces.html) |
Documents, Prompts |
Proposed canonical order
Adopt one build-up order everywhere a workspace section list is rendered. Sections still only appear when their existing feature gates are enabled — this is a pure reorder.
- Documents — the knowledge you bring in
- Prompts — the instructions you reuse
- Identities — the credentials Sync and Actions both resolve against
- Sync — uses Identities to pull Documents in
- Endpoints — the models Agents and Workflows run on
- Actions — governed tools, using Identities and Endpoints
- Agents — assemble Documents, Prompts, Actions, Endpoints
- Workflows — run Agents on a schedule or trigger
Applies to all three section-listing surfaces: the top nav-tabs bar, the collapsed/mobile Section <select>, and the left-hand sidebar submenus, for personal, group, and public workspaces.
Sidebar gating bugs found while scoping
These are fixed as part of this change, because otherwise the "only enabled sections show up, in this order" rule doesn't actually hold:
| Item | Today | Should be |
|---|---|---|
| Personal "Your Agents" | per_user_semantic_kernel and enable_semantic_kernel |
+ allow_user_agents |
| Personal "Your Actions" | per_user_semantic_kernel and enable_semantic_kernel |
+ allow_user_agents and allow_user_plugins |
| Personal "Identities" | file_sync_enabled or enable_semantic_kernel or enable_multi_model_endpoints |
file_sync_enabled or enable_semantic_kernel (match tab gate) |
| Group "Group Agents" | allow_group_agents and enable_semantic_kernel |
+ per_user_semantic_kernel |
| Group "Group Actions" | allow_group_agents and enable_semantic_kernel |
+ per_user_semantic_kernel and allow_group_plugins |
| Group "Identities" | file_sync_enabled or enable_semantic_kernel or enable_multi_model_endpoints |
file_sync_enabled or enable_semantic_kernel (match tab gate) |
| Group "Workflows" | missing entirely | add link, gated by allow_group_workflows |
Each mismatch means a sidebar link can point at a tab that was never rendered.
Scope decisions
- Tab panes are not reordered. Bootstrap resolves panes by
id/data-bs-targetand inactive panes are hidden, so DOM order has no visual or accessibility effect. Leaving them keeps the diff reviewable (the group template is ~389 KB). - Documents stays first, so
class="nav-link active"and the "first sidebar link is active" logic inworkspace_sidebar_nav.jskeep working unchanged. - Public workspaces already conform — the browse page is Documents then Prompts, and
manage_public_workspace.htmlalready lists Identities before Sync. Audit only. - Guided tutorial is out of scope — it still walks Documents → Prompts → Agents → Actions. Its selectors are id-based, so nothing breaks.
Files affected
application/single_app/templates/workspace.htmlapplication/single_app/templates/group_workspaces.htmlapplication/single_app/templates/_sidebar_nav.htmlapplication/single_app/config.py(version bump)functional_tests/test_endpoints_tab_order_visibility.py(updated)functional_tests/test_workspace_section_order.py(new)docs/explanation/features/v0.250.209/WORKSPACE_SECTION_ORDER.md(new)docs/explanation/release_notes.md
Follow-ups (not in this change)
- Visual grouping of sections. Reordering is the groundwork; a further pass could add dividers or group labels (e.g. Content / Connections / Automation) so the relationships read as cohesive rather than just sequential.
- Orphan tab pane.
group_workspaces.htmlcontains a#group-settings-tabpane with no corresponding nav button anywhere in the codebase — dead markup that should be removed or wired up.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsReleased
Activity
paullizer commentedon Aug 17, 2026
Implemented on
paullizer-workspace-tab-ordering(commit5ecf1c1f).What changed
All six workspace section lists now render the canonical order — Documents, Prompts, Identities, Sync, Endpoints, Actions, Agents, Workflows:
#workspaceTaband#workspace-section-selectinworkspace.html#groupWorkspaceTaband#group-workspace-section-selectingroup_workspaces.html#personal-workspace-submenuand#group-workspace-submenuin_sidebar_nav.htmlSidebar gating fixes landed alongside it: the missing Group Workflows link was added, personal Agents/Actions now respect
allow_user_agents/allow_user_plugins, group Agents/Actions now respectper_user_semantic_kernel/allow_group_plugins, and both Identities links now match their tab's conditions.Public workspaces were audited and needed no changes. Tab panes were intentionally left in place — Bootstrap resolves them by
idand hides inactive ones, so DOM order has no effect.Validation
functional_tests/test_workspace_section_order.pyrenders each section list 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 (512 renders). Confirmed it fails against the pre-change templates, so it isn't vacuous.test_endpoints_tab_order_visibility.pyupdated for the new Endpoints → Actions → Agents order.test_file_sync_capability.py,test_personal_workflows_feature.py,test_profile_workspace_tabs.py, and others).route_tests/passes 12/12; all 50 templates parse cleanly through Jinja.Version bumped to
0.250.209, withdocs/explanation/features/v0.250.209/WORKSPACE_SECTION_ORDER.mdand release notes added.Still open from this issue
Both follow-ups listed above are untouched and remain valid: visual grouping of sections, and the orphan
#group-settings-tabpane ingroup_workspaces.html.Reorder workspace sections into a consistent order of operations
Reorder workspace sections into a consistent order of operations
Reorder workspace sections into a consistent order of operations
paullizer commentedon Aug 18, 2026
Correction on the version:
Developmentclaimed0.250.209(#1259) and then0.250.210(#1260) while this work was in flight, so the branch was rebased twice and this ships as0.250.211. The feature doc moved todocs/explanation/features/v0.250.211/WORKSPACE_SECTION_ORDER.mdand the release notes entry now sits under### **(v0.250.211)**, above both upstream sections.Submitted as #1262. All 12 CI checks pass and the PR is mergeable.
One extra fix in the PR: CodeQL flagged
py/jinja2/autoescape-false(high) on the new test's Jinja environment. It was test-only and not exploitable, but it was a new alert introduced by this branch, so it was fixed withautoescape=Truerather than suppressed. The test still passes 6/6 — autoescaping only affects{{ }}output, while the assertions match literalid=anddata-tab=attributes.paullizer commentedon Aug 19, 2026
Shipped in v0.250.211 via #1262.
Release note entries:
Full notes: https://microsoft.github.io/simplechat/explanation/release_notes/
Closing as completed. This issue stayed open after the fix merged because pull requests target
Developmentwhile the repository default branch ismain, so GitHub never applied theFixes #keyword automatically.