Repository navigation
fix(mobile): give the organization boundary a usable next step - #8063
Conversation
The organization boundary told accounts without an organization to pick one from their profile, but the profile has no such control, so the recovery path dead-ended. The settled boundary states now branch on the membership list: an account with no memberships gets a no-organization state whose primary action opens the web organizations page (create and join live there) with Back to profile as the plain exit, and an account with memberships gets an action that opens the existing context picker sheet. The access-denied state keeps precedence for deep-link overrides absent from a non-empty member list, and the stale-selection copy no longer points at the profile. The pull-request review screen reuses the shared boundary body instead of duplicating the old copy, so its no-organization state gets the same recovery actions. Copy changes are en.json only; the translation slice lands the other catalogs. Verified on the Android emulator: a fresh account sees the web action on the invite-member and low-balance-alert routes, selecting an account from the picker sheet drops the reader straight into the invite form, and a stale selection with no memberships left falls back to the no-organization state.
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Executive SummaryThe follow-up commit resolves both previous findings: the sessions surface now uses a dedicated copy key, and the no-organization state renders the caller's icon, with the new key present in all 87 catalogs. Files Reviewed (89 files)
Previous Review Summary (commit 81f40d3)Current summary above is authoritative. Previous snapshots are kept for context only. Previous review (commit 81f40d3)Status: 2 Issues Found | Recommendation: Address before merge Executive SummaryChanging the shared Overview
Issue Details (click to expand)WARNING
SUGGESTION
Files Reviewed (91 files)
Reviewed by deepseek-v4.1-flash-1017 · Input: 56.8K · Output: 11.4K · Cached: 950.3K Review guidance: REVIEW.md from base branch |
|
bot: Verified the fixed organization boundary end to end on the Android emulator (local dev stack, fake-account test data).
|
Review follow-ups: the no-organization state now honors the caller's icon like every other settled state, and the sessions surface gets its own unavailable description because it has no account picker to point at. Catalogs updated in the same commit.
|
bot: Review replies:
|
…xt-step # Conflicts: # apps/mobile/src/i18n/locales/sv.json






Change
The shared organization boundary (
OrganizationBoundaryinapps/mobile/src/components/organization/organization-boundary.tsx) told anaccount with no organization to pick one from its profile, but the profile has
no organization control, so the recovery path dead-ended. The settled boundary
states now branch on the membership list:
web organizations page (
WEB_BASE_URL/organizations, where create and joinlive), with "Back to profile" as the plain exit. This also covers a stale
persisted selection with no memberships left.
context picker sheet (
ContextPickerSheet, the same account switcher thecomposer uses), so the reader can actually make the selection the heading
asks for. This covers nothing-selected and a stale selection while other
memberships remain.
unchanged precedence.
The pull-request review screen reuses the shared boundary body instead of
duplicating the old copy, so its no-organization state gets the same recovery
actions. The stale-selection copy no longer points at the profile.
Library note: no new UI library was introduced; the boundary reuses the
existing
EmptyState,Button, andContextPickerSheetcomponents, and theweb action goes through the existing
openExternalUrlhelper.Copy
en.jsononly: five new keys underorganization.boundary(
chooseAccount,noOrganization,noOrganizationDescription,openWebOrganizations,selectDescriptionWithOrganizations) plusunavailableSessionsDescriptionfor the sessions surface, the oldselectDescriptionkey removed, andunavailableDescriptionrepointed to theaccount picker. All 87 catalogs were filled in the same commits
(
check-catalogsreports every catalog matching en.json).Verification
apps/mobile:pnpm test(1190 files, 17874 passed),tsgo --noEmitclean,oxlintclean,check:unusedclean,check:i18nandcheck:pluralspass.kiloapp:///organization/invite-memberandkiloapp:///organization/low-balance-alertwith no memberships render"No organization" with the web action and "Back to profile".
"Choose an account"; tapping it opens the context picker sheet with
Personal and the organization, and selecting the organization drops the
reader straight into the invite form / low-balance form.
route, falls back to the "No organization" web state (verified after the
fix; the pre-fix build showed "Organization unavailable" with no next
step).
Proxy answers
Answer: Open web organizations page (Recommended)
Confidence: 0.75 · Precedent: Speed and least work: 'do the least amount of work possible, with no drop in quality' (session 7f3470e0ba6f); reuses the existing openExternalUrl pattern, adds no backend, and puts no support address in public copy
Answer: Open the context picker sheet (Recommended)
Confidence: 0.85 · Precedent: Work item brief: the action opens the existing context picker; consistent with 'Keep similar elements consistent across surfaces' (session a247f3c19b1e)
Answer: Reuse the shared boundary body (Recommended)
Confidence: 0.85 · Precedent: Fix the class on every affected surface: 'fix this for all shared services model pickers on all surfaces' (session 75f8833fe8c1); 'if you saw a gap, fix it' (session 89824a222897)
Answer: Remove/repoint dead-end copy (Recommended)
Confidence: 0.85 · Precedent: Replace old paths instead of keeping them alongside: 'alongside? why not instead?' (session ad6a3f589364); fix the class, not the symptom (session 00eb2a1d3e4b)