Skip to content

Add collapsible category rail to V2 Admin Settings - #1671

Merged
Paul Lizer (paullizer) merged 3 commits into
paullizer-react-v2-uifrom
paullizer-admin-settings-sidebar-collapse
Oct 6, 2026
Merged

Paul Lizer (paullizer) merged 3 commits into
paullizer-react-v2-uifrom
paullizer-admin-settings-sidebar-collapse

Conversation

@paullizer

Copy link
Copy Markdown
Contributor

Summary

  • The V2 workspace pages let you collapse their section rail to icons, but V2 Admin Settings had a fixed 224px category rail with no way to reclaim that width. The category rail now has the same Collapse control and shrinks to a 64px icon strip, giving the width to the settings cards (most noticeable at larger text sizes, where the rail grows with the text).
  • Collapsed icons still switch categories, show their name as a tooltip, and keep their label as screen-reader text. The toggle exposes aria-expanded / aria-controls, stays usable while unsaved Call agent changes lock the categories, and the width transition honors reduced motion. Below lg the existing category drop-down is unchanged.
  • The choice persists per admin in a new v2AdminRailCollapsed user preference, deliberately separate from the workspace rail (v2WorkspaceRailCollapsed) and the shell rail (v2RailCollapsed) so collapsing one never collapses another. The key is added to the /api/user/settings allowlist (unlisted keys are dropped silently) and to WRITABLE_USER_SETTING_KEYS.

Notes for reviewers

  • I merged paullizer-react-v2-ui at c968d58 to pick up Consolidate V2 File Sync admin settings into one card #1669, which also took 0.261.266. This change is renumbered to 0.261.267 (version, release notes, docs, test headers). The merge itself was clean, and File Sync's own 0.261.266 references are untouched.
  • AdminSettingsFixture.open() in ui_tests/fixtures/v2_admin_settings.py gains an optional preferences= argument to seed saved user preferences. Existing callers are unaffected.
  • The new key gets no server-side type validation, matching the sibling rail keys; the client treats anything other than true as expanded.

Screenshots

Expanded (default):

Admin Settings with the category rail expanded

Collapsed:

Admin Settings with the category rail collapsed to icons

Captured by ui_tests/test_v2_admin_settings_rail_collapse.py against the built SPA with intercepted APIs and synthetic settings, so the version banner shows fixture data.

Linked issue

N/A - no associated issue.

Release Notes & Latest Features

  • New Feature
  • Bug Fix
  • UI Enhancement
  • Breaking Change
  • Internal only

Is this visible to end users?

  • Yes
  • No

Is this admin-facing (Admin Settings, governance, deployment, config)?

  • Yes
  • No

Should this become a Latest Feature card?

  • Yes
  • No
  • Already added

Screenshot needed for the card?

  • Yes
  • No
  • Attached

Version bump

  • application/single_app/config.py VERSION third segment bumped, or not needed because this is docs-only (0.261.266 -> 0.261.267)
  • deployers/version.txt bumped, or not needed because deployers/ was not changed

Testing / validation

Run on the merged tree unless noted:

  • npm run build in application/v2_ui (runs tsc -b, then vite build) - passed
  • python functional_tests/test_v2_admin_settings_rail_collapse.py - passed (4/4)
  • python functional_tests/test_v2_settings_and_workspace_tags.py - passed (9/9), including the client-key allowlist check
  • python functional_tests/test_v2_admin_settings_layout.py - passed (5/5)
  • python functional_tests/test_v2_admin_knowledge_file_sync.py - passed (11/11)
  • python functional_tests/test_v2_admin_schema_vocabulary.py - passed (13/13)
  • python functional_tests/test_v2_admin_section_shell.py - passed (5/5, 48 TypeScript logic checks)
  • python functional_tests/test_v2_documents_explorer.py - passed (20/20); the workspace rail is unchanged
  • python functional_tests/test_docs_app_surface_coverage.py - passed (7/7)
  • python functional_tests/test_docs_site_quality.py - passed (6/6)
  • python -m pytest ui_tests/test_v2_admin_settings_rail_collapse.py ui_tests/test_v2_admin_file_sync_single_card.py ui_tests/test_v2_admin_settings_wide_layout.py -q - 34 passed. The new tests cover collapse/expand widths, the save carrying only the admin rail key, persistence across reload, category switching while collapsed, keyboard toggling with focus kept, 200% text, the narrow-screen drop-down, and light/dark.
  • Before the merge, every other UI suite that uses AdminSettingsFixture (13 files) - 108 passed. ui_tests/test_v2_prompt_composer_experience.py errors at setup ("Playwright Sync API inside the asyncio loop") only when it runs in one pytest session with other files. It does the same with the original fixture, and passes on its own (56 passed).

Docs tests that already fail, unrelated to this change:

  • python functional_tests/test_docs_release_notes_integrity.py - fails: the generated release-notes pages are stale for about 199 releases. The fix is a full scripts/build_release_notes_pages.py regeneration, which is out of scope here.
  • python functional_tests/test_docs_link_integrity.py - fails 3/5 on 26 broken links in other pages. None are in files this PR touches.

Documentation

  • Release notes updated, or not needed (v0.261.267 section)
  • Feature documentation updated, or not needed (new docs/explanation/features/V2_ADMIN_SETTINGS_RAIL_COLLAPSE.md, a "Collapsing the category list" section in docs/admin/index.md, and a cross-reference in V2_ADMIN_SETTINGS_LAYOUT_AND_HIERARCHY.md)
  • Fix documentation updated, or not needed (not a fix)

Security checklist

  • New Flask routes include @swagger_route(security=get_auth_security()) (N/A: no new routes)
  • Settings sent to non-admin frontends use sanitize_settings_for_user() (N/A: no settings payload changes; the only backend change adds one per-user preference key to the allowlist)
  • Browser JavaScript is served from local SimpleChat static assets only; no CDN-hosted JS (icons come from the bundled lucide-react)
  • No secrets, keys, connection strings, or local-only artifacts are included

Paul Lizer (paullizer) and others added 3 commits October 6, 2026 16:38
The Admin Settings categories rail can now collapse to icons, like the
workspace section rail, giving its width to the settings cards. Collapsed
entries keep their labels as tooltips and screen-reader text. The choice is
remembered per admin in a new v2AdminRailCollapsed user preference, kept
separate from the workspace and shell rails and allowlisted in
/api/user/settings.

Bumps the version to 0.261.266 and adds functional and Playwright UI
coverage plus feature and admin guide documentation.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…e to 0.261.267

The File Sync single card took 0.261.266, so the collapsible category list
moves to 0.261.267: the version, its release notes section, the feature and
admin guide docs, and its test headers and version floor. The merge itself
was clean; File Sync's own 0.261.266 references are unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@paullizer
Paul Lizer (paullizer) merged commit 10fbad9 into paullizer-react-v2-ui Oct 6, 2026
11 checks passed
Paul Lizer (paullizer) added a commit that referenced this pull request Oct 6, 2026
, #1671, #1674) and renumber the Operations settings parity to 0.261.269

Conflict resolutions:
- admin_settings_fields.py: keep the full Operations block. The Application
  Insights and Health Check declarations #1670 added beside Appearance are
  superseded by it, and its mixed-source telemetry switch moves into the
  Operations Application Insights section, after the global logging readouts.
  Keep #1668's on_enable documentation and both sides' V2_ONLY_FIELDS entries.
- route_backend_v2.py: fold content_understanding_supported into
  _build_runtime_flags.
- SettingsSection.tsx, AdminSettingsPage.tsx, adminFields.ts: keep both the
  section guide and runtimeFlags props, and on_enable beside the Operations
  field properties.
- operations.md, release_notes.md and tests: keep both sides. Both
  enable_dai_debug and enable_mixed_source_development_telemetry are documented
  rather than exempted, and Workspaces and Operations are both fully described.
- Renumber this branch's 0.261.260 references to 0.261.269; the base's own
  0.261.260 Web Search fix references are unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer) added a commit that referenced this pull request Oct 7, 2026
… and actions editors to 0.261.268

The base already uses 0.261.260 through 0.261.267, so this change moves to
0.261.268: config.py, the release notes section, and every version this
branch added to its docs and test headers. The generated docs inventory is
rebuilt from the merged source, and the category rail keeps both the
base's collapsed-rail tooltip and this branch's scroll reset.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant