Skip to content

Open groups and public workspaces from V2 User Settings - #1706

Merged
Paul Lizer (paullizer) merged 2 commits into
paullizer-react-v2-uifrom
paullizer-workspace-navigation-from-settings
Oct 8, 2026
Merged

Paul Lizer (paullizer) merged 2 commits into
paullizer-react-v2-uifrom
paullizer-workspace-navigation-from-settings

Conversation

@paullizer

@paullizer Paul Lizer (paullizer) commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Summary

The Groups and Public tabs in V2 User Settings list the workspaces you own or use, but each row only offered Set active. There was no way to go to a workspace from there. The classic Profile page already has a per-row Manage link; V2 didn't.

  • Every row now has Open next to Set active (or the Active badge). It goes straight to the workspace's V2 page by its immutable id: /groups/<id> or /public/<id>.
  • Open never activates anything from the settings tab, matching Open in the group and public directories. The destination decides. A group page activates the group it shows, because group routes work in the active group. A public workspace page loads by id and leaves your active public workspace unchanged.
  • How: a new WorkspaceKind.openPath in lib/workspaces.ts uses the already-reviewed groupWorkspacePath / publicWorkspacePath builders, which are on the XSS checker's same-origin list. Open shares Set active's busy gating, so two activations can't race. An id the builder refuses shows the tab's inline error instead of throwing.
  • Phone layout: with a second button, the name and role badge got squeezed into a column of letters at 390px. Rows now wrap like the directory rows: the buttons drop below the name, and the badges keep their width.
Desktop Phone (390px, dark)
Groups tab on desktop: Open next to the Active badge and next to Set active Groups tab at 390px: Active or Set active and Open wrap below each group name

Linked issue

N/A - no issue was filed for this change.

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

Testing / validation

All of these were run on the merged head (072e2ca16, base cd333de9d merged in) and passed:

  • npm ci, then npm run build in application/v2_ui (tsc -b, then Vite) - passed (only the existing chunk-size warning)
  • node functional_tests/test_v2_group_workspace_context_logic.mjs - passed, 28 checks (new: group openPath, id encoding, refused ids, no server call)
  • node functional_tests/test_v2_public_workspace_context_logic.mjs - passed, 4 checks (new: the same for public)
  • python functional_tests/test_v2_settings_tabs.py - passed, 7/7 (new contract test: reviewed builders, real routes, an Open handler that never activates)
  • python functional_tests/test_v2_user_settings_layout.py - passed, 6/6
  • python functional_tests/test_v2_settings_and_workspace_tags.py - passed, 9/9
  • python functional_tests/test_v2_public_directory_list_route_pin.py - passed, 4 tests
  • python scripts/check_xss_sinks.py application/v2_ui/src/components/settings/WorkspaceListTab.tsx application/v2_ui/src/lib/workspaces.ts - passed for 2 files
  • python functional_tests/test_docs_app_surface_coverage.py - passed, 7/7
  • python functional_tests/test_docs_site_quality.py - passed, 6/6
  • UI tests against the built SPA with a local browser (PYTHONPATH=ui_tests/fixtures, PLAYWRIGHT_SERVICE_URL=''):
    • python -m pytest ui_tests/test_v2_settings_workspace_open.py -q - passed, 11 tests (new). They cover Open on an inactive group (the group page activates it exactly once), on the active group (no setActive), and on a public workspace (no setActive), plus row layout in light and dark at 1440px and 390px.
    • python -m pytest ui_tests/test_v2_group_workspace_shell.py ui_tests/test_v2_public_directory.py ui_tests/test_v2_group_directory.py -q - passed, 109 tests
    • The new phone-layout check fails against the pre-fix bundle (the Owner badge wrapped onto several lines) and passes with the fix.

Failing, but not caused by this PR (rechecked on the merged head):

  • python functional_tests/test_v2_stats_parity.py - 6/7. test_charts_use_the_shared_vendored_runtime fails with "InlineChart must use the shared loader". This PR doesn't touch InlineChart.tsx.
  • python -m pytest functional_tests/test_group_picker_fixture_parity.py - setup errors in my local environment (werkzeug has no __version__ under the installed Flask test client).
  • python functional_tests/test_docs_link_integrity.py - 2/5. None of the broken links are in files this PR changes.
  • python functional_tests/test_docs_release_notes_integrity.py - 0/1. The generated release-notes pages are already behind the source on the base, missing 223 releases including v0.261.295. This PR adds the v0.261.296 source entry but doesn't run scripts/build_release_notes_pages.py, to keep the diff focused.

Documentation

  • Release notes updated, or not needed (v0.261.296, User Interface Enhancements)
  • Feature documentation updated, or not needed (V2_USER_SETTINGS_REDESIGN.md, plus the update-profile-preferences.md guide, which now also names the rail tab Public as the UI does)
  • Fix documentation updated, or not needed (not needed)

Security checklist

  • New Flask routes include @swagger_route(security=get_auth_security()) (N/A: no routes added or changed)
  • Settings sent to non-admin frontends use sanitize_settings_for_user() (N/A: no settings payloads changed)
  • Browser JavaScript is served from local SimpleChat static assets only; no CDN-hosted JS
  • No secrets, keys, connection strings, or local-only artifacts are included (the SPA build output and node_modules stay gitignored)

Paul Lizer (paullizer) and others added 2 commits October 7, 2026 18:43
Each row on the Groups and Public tabs now has Open next to Set active,
so a workspace can be visited from settings instead of only made active.

Open navigates by immutable id through WorkspaceKind.openPath, built with
the reviewed groupWorkspacePath/publicWorkspacePath builders, and never
activates from the tab: the group page activates the group it shows, and a
public page leaves the active public workspace alone, as with the
directories' Open. It shares Set active's busy gating, and an id the path
builder refuses is reported in the tab's error line.

Rows now wrap like the directory rows, so on a phone the actions move
below the name instead of squeezing the name and role badge.

Bump to 0.261.294 with tests, guide, feature doc and release notes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The base reached 0.261.295 with the workflow hand-off card (#1683) and the
orchestration workflows capability (#1648), so this change moves to
0.261.296. config.py and the release notes conflicted on the version;
the base's v0.261.295 section is kept as is, with this change's entry in
a new v0.261.296 section above it, and the change's test headers, version
floor and docs are renumbered to match.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@paullizer
Paul Lizer (paullizer) merged commit f34094a into paullizer-react-v2-ui Oct 8, 2026
11 checks passed
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