Uh oh!
There was an error while loading. Please reload this page.
fix(app-shell): restore the avatar menu "My Workspaces" entry - #4638
Merged
Conversation
Users in exactly one organization had no UI path to the workspace management pages (Members / Invitations / Organization settings). Three individually reasonable behaviours closed every door at once: 1. `/organizations` auto-skips the picker at one org (UX P0-1); 2. `WorkspaceSwitcher` returns null below two orgs, so the header-left switcher and its "Manage members" item never render; 3. the avatar menu kept only the `?create=1` entry, having dropped the `?manage=1` one on the assumption that (2) covered it. Restore (3), which both AppHeader's and OrganizationsPage's own comments already documented as the intended design. The entry is deliberately not gated on `multiOrgEnabled`: that flag governs CREATING organizations, and where self-service creation is off this entry is the only way in. Reuses the existing `organizations.mine` key, which is already shipped in all ten locale packs and had been left dormant when the entry was removed. Also reconciles the now-inaccurate comments. OrganizationsPage's said `?manage=1` "shows the picker"; for the single-org majority it does not — it re-targets the auto-skip at that org's members page. That is what makes the restored entry a real door rather than a dead end. Fixesobjectstack-ai/objectstack#8096
The latest updates on your projects. Learn more about Vercel for GitHub. |
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
yinlianghui
commented
Aug 14, 2026
CollaboratorAuthor
CI note: the Test (shard 3/4) failure on head Generated by Claude Code |
yinlianghui
marked this pull request as ready for review
August 14, 2026 15:19
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.
Fixesobjectstack-ai/objectstack#8096
The defect
A user belonging to exactly one organization had no UI path to the workspace
management pages (Members / Invitations / Organization settings). Three
individually reasonable behaviours closed every door at once:
/organizationsauto-skips the picker at one org (UX P0-1, deliberate).WorkspaceSwitcherreturns null at one org or fewer, so the header-leftswitcher — and its "Manage members" item — never renders for them.
?create=1entry, having dropped the?manage=1"My Organizations" one on the assumption that (2) covered it.Reaching member management required hand-typing
/_console/organizations?manage=1.The fix
Restore (3) — the narrowest change, and the one both
AppHeader's andOrganizationsPage's own comments already documented as the intended design.The switcher's single-org early return is deliberately left alone, and no
Setup-side links were added.
The destination is load-bearing rather than cosmetic.
?manage=1is whatOrganizationsPagereads as "the user came here to manage": with two or moreorgs it shows the picker, and with exactly one it re-targets the auto-skip at
/organizations/:slug/membersinstead of bouncing the user home. So therestored entry lands a single-org user directly on member management — it does
not dead-end in the very auto-skip this card is about.
The entry is deliberately not gated on
multiOrgEnabled. That flag governscreating organizations (it is why "Create workspace" is gated); where
self-service creation is disabled this entry is the only way in, so gating it the
same way would re-close the door.
Label
Reuses the existing
organizations.minekey rather than minting one. It isalready shipped in all ten locale packs and had been left dormant when the entry
was removed — no locale files are touched, and
check:i18n-keysconfirms theinline
defaultValuematches the en pack value exactly.Comment reconciliation
OrganizationsPage's comment claimed?manage=1"shows the picker". For thesingle-org majority it does not — it re-targets the auto-skip at that org's
members page, which is what makes the restored entry a real door. Corrected to
describe both branches;
AppHeader's comment (which claimed the entry had movedto the switcher) is rewritten to record why the avatar menu has to carry it.
Verification
All at
bc89db3(the tip of this branch; no commits followed the run).packages/app-shell/src/layout/__tests__/AppHeader.myOrganizations.test.tsx— 5 cases. Asserts the entry exists for a single-org user, navigates to
/organizations?manage=1verbatim, is present while the real switcher rendersnothing (the precondition that made this bite), survives
multiOrgEnabled: false, and is still offered to multi-org users.cases assert on the
header-my-organizationstestid, revertingAppHeadertoorigin/mainmust fail all five. Observed exactlyTests 5 failed (5);restore confirmed byte-identical to HEAD via
git diff --quiet HEAD.vitest run packages/app-shell/src/layout/ packages/app-shell/src/console/organizations/:Test Files 36 passed (36),Tests 255 passed (255).@object-ui/app-shell type-check(tsc --noEmitplustsconfig.test.json): exit 0.any/unused-destructure in the test's mock factories, matching the sibling
AppHeader.inboxVariant.test.tsxhouse style).check:control-bytes,check:i18n-keys,check:i18n-drift,check-changeset-presence: all green.A
.changesetis included: this is a user-visible behaviour change in apublished package.
Generated by Claude Code