Skip to content

Mobile cloud channel names: trailing cloud mark - #2162

Merged
DoodleBears merged 5 commits into
mainfrom
codex/2161-cloud-navigation
Oct 18, 2026
Merged

DoodleBears merged 5 commits into
mainfrom
codex/2161-cloud-navigation

Conversation

@DoodleBears

@DoodleBears DoodleBears commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Issue #2161 | Agent claim

Why the change

A cloud icon after mobile channel names distinguishes remotely hosted channels while preserving the user's name and accessible text.

Special things to note

  • Reversible, small UI blast radius: no storage, auth, API, dependency or native changes. Review long-name wrapping, Dynamic Type and screen-reader wording.
  • Targets main after Integrate TOB mobile collaboration and two-Host Agent work #2157 integrated the earlier cloud stack. Human authorized merge; runtime remains UAT only, no Prod deployment. This first slice covers existing direct-cloud mobile list/title, including channel guests. Desktop origin projection, organization entries in the existing left sheet, and scoped share URL/QR are explicitly subsequent slices.
  • Mobile typecheck, format, lint, release fragment and 8 existing style/system-text checks passed. All applicable CI checks passed at frozen head 42c900eb790fe2dd5b4c00553a24b4f5607a8ff7 (run39098033103). First CI failed only the design table formatting; corrected and retained. Assigned iOS Simulator batch20 passed the 48-case before/after display matrix, maximum-size open/return interactions, guest revocation and isolated logout. Android, physical-device and Human visual acceptance remain separate. Initial sparse checkout lacked existing package links; those were restored without dependency changes.

Change outline

TOB cloud channel metadata (member or channel-only guest)
  → existing channel list / selected conversation heading
  → shared CloudChannelName
      name text → trailing outline cloud
      accessible name: “name · Cloud channel”
      existing semantic title sizing / inherited font scale

Stored names are unchanged. Local Host groups are not inferred to be cloud channels from message authors or last-message content.

docs/architecture/cloud-navigation.md and Slack/Discord primary-source research record the next coherent path: Create or join → invitation target preview → necessary instance trust/sign-in → target channel; then existing left sheet → computer or cloud organization → authorized channels → shared organization/channel invitation sheet → URL or QR → explicit instance/scope confirmation → acceptance. Channel-only guests see an organization entry without obtaining its membership or sibling visibility. Existing email-bound invitation restrictions are not removed by rendering a URL.

Native visual evidence — assigned iOS Simulator, 402 × 874

Before c183a2df0, after runtime 42c900eb7; evidence-only head 4bb7065f7fefc4f570661f54cef09e9904bd1200. Same synthetic UAT users/data, English, matched themes and sizes.

Member channel list — before / after

before: Member channel list

after: Member channel list

Conversation heading — before / after

before: Conversation heading

after: Conversation heading

Channel-only guest list — before / after

before: Channel-only guest list

after: Channel-only guest list

Channel-only guest heading — before / after

before: Channel-only guest heading

after: Channel-only guest heading

All 48 captures, exact runtime matrix and retained first failures. Maximum-size content scrolls; the development-menu gear partly overlaps one guest-title viewport, documented explicitly. VoiceOver spoken output is unverified.

Guest has no organization membership and sibling reads are denied. Revoking only the test grant removes its native list entry. Mobile logout revoked only its own session and rejected its latest refresh; other sessions and independent CLI A/B remained valid. Original size/theme restored, own driver/Metro stopped.

Agent task: codex/local/01a148ae-ec7f-74b2-8157-961411ce54c9. Refs #2161; does not close the full navigation/sharing issue.

Summary by CodeRabbit

  • New Features
    • Mobile cloud channel names now display a cloud icon in channel lists and conversation headings, with an accessible label identifying the channel as cloud-based.
    • Added cloud navigation and join-flow proposals covering invitations, guest access, and recovery scenarios.
  • Documentation
    • Added mobile screenshots showing cloud channel marks across light and dark themes and multiple text sizes.

Issue: #2161

Agent-Task: codex/local/01a148ae-ec7f-74b2-8157-961411ce54c9
@coderabbitai

coderabbitai Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: e9f5238c-fbe2-4776-916c-a9034fe1f46f
📥 Commits

Reviewing files that changed from the base of the PR and between f9ed710 and 7cf2ceb.

⛔ Files ignored due to path filters: 49
  • .github/pr-screenshots/2162-cloud-channel-marks/after-guest-list-default-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-guest-list-default-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-guest-list-intermediate-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-guest-list-intermediate-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-guest-list-maximum-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-guest-list-maximum-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-guest-title-default-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-guest-title-default-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-guest-title-intermediate-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-guest-title-intermediate-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-guest-title-maximum-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-guest-title-maximum-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-member-list-default-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-member-list-default-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-member-list-intermediate-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-member-list-intermediate-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-member-list-maximum-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-member-list-maximum-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-member-title-default-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-member-title-default-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-member-title-intermediate-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-member-title-intermediate-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-member-title-maximum-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/after-member-title-maximum-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-guest-list-default-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-guest-list-default-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-guest-list-intermediate-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-guest-list-intermediate-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-guest-list-maximum-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-guest-list-maximum-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-guest-title-default-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-guest-title-default-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-guest-title-intermediate-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-guest-title-intermediate-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-guest-title-maximum-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-guest-title-maximum-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-member-list-default-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-member-list-default-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-member-list-intermediate-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-member-list-intermediate-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-member-list-maximum-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-member-list-maximum-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-member-title-default-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-member-title-default-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-member-title-intermediate-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-member-title-intermediate-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-member-title-maximum-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/before-member-title-maximum-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2162-cloud-channel-marks/revoked-guest-list.png is excluded by !**/*.png
📒 Files selected for processing: 16
  • .github/pr-screenshots/2162-cloud-channel-marks/README.md
  • .github/pr-screenshots/2162-cloud-channel-marks/after-guest-list.json
  • .github/pr-screenshots/2162-cloud-channel-marks/after-guest-title.json
  • .github/pr-screenshots/2162-cloud-channel-marks/after-member-list.json
  • .github/pr-screenshots/2162-cloud-channel-marks/after-member-title.json
  • .github/pr-screenshots/2162-cloud-channel-marks/before-guest-list.json
  • .github/pr-screenshots/2162-cloud-channel-marks/before-guest-title.json
  • .github/pr-screenshots/2162-cloud-channel-marks/before-member-list.json
  • .github/pr-screenshots/2162-cloud-channel-marks/before-member-title.json
  • apps/mobile/src/ui/cloud/channel-name.tsx
  • apps/mobile/src/ui/cloud/channels-screen.tsx
  • apps/mobile/src/ui/shell/icons.tsx
  • apps/mobile/src/ui/strings.ts
  • changes/2161-cloud-channel-marks.md
  • docs/architecture/cloud-navigation.md
  • docs/research/2026-10-18-cloud-join-ux.md

Included review availability: This review used your included allowance. Your plan provides up to 2 included reviews per hour; 1 remain after this review.

📝 Walkthrough

The mobile channel list and selected-channel header now show an accessible cloud mark beside cloud channel names. Screenshot fixtures and UAT notes record checks across themes, text sizes, and member and guest views. Architecture and research documents describe cloud navigation and invitation flows.

Changes: Cloud channel navigation

Layer / File(s) Summary
Cloud navigation and invitation design
docs/architecture/cloud-navigation.md, docs/research/2026-10-18-cloud-join-ux.md
The documents describe cloud destination identity, guest access rules, invitation flows, recovery cases, and proposed delivery steps.
Accessible marks in channel names
apps/mobile/src/ui/cloud/channel-name.tsx, apps/mobile/src/ui/cloud/channels-screen.tsx, apps/mobile/src/ui/shell/icons.tsx, apps/mobile/src/ui/strings.ts, changes/2161-cloud-channel-marks.md
A shared component displays a cloud icon beside channel names in the selected-channel header and list. Its accessibility label combines the channel name with a translated cloud-channel label.
Screenshot and UAT evidence
.github/pr-screenshots/2162-cloud-channel-marks/*
Before-and-after fixtures cover member and guest lists and titles across light and dark themes and three text sizes. UAT notes record checks, limitations, and unverified areas.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Feature

Merge Risk: ⚪ Minimal · up to 7cf2c

This change adds an accessible cloud mark to mobile cloud-channel lists and headings. The available evidence identifies no concrete failure; VoiceOver and Android qualification remain pending.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 6 functions across 4 files. (12 skipped: 1… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Title check Passed The title is concise, specific, and accurately describes the primary change: adding a trailing cloud mark to mobile cloud channel names.
Description check Passed The description is mostly complete and covers the problem, issue reference, risk, verification results, CI status, change outline, screenshots, and known gaps. It does not explicitly state the selecte…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Description check

Explanation

The description is mostly complete and covers the problem, issue reference, risk, verification results, CI status, change outline, screenshots, and known gaps. It does not explicitly state the selected CI test-plan mode, but the omission is minor because the verification details and CI results are otherwise clear.

Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 6 functions across 4 files. (12 skipped: 12 unsupported.)

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

  • Fix all pre-merge checks with AI
✨ Finishing Touches: 💡 1
📝 Generate docstrings: 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Issue: #2161

Agent-Task: codex/local/01a148ae-ec7f-74b2-8157-961411ce54c9
Refs #2161

Agent-Task: codex/local/01a148ae-ec7f-74b2-8157-961411ce54c9
Refs #2161

Agent-Task: codex/local/01a148ae-ec7f-74b2-8157-961411ce54c9
Refs #2161

Agent-Task: codex/local/01a148ae-ec7f-74b2-8157-961411ce54c9
@DoodleBears
DoodleBears changed the base branch from codex/2155-cloud-host-binding to main October 18, 2026 05:09
@DoodleBears

Copy link
Copy Markdown
Contributor Author

Assigned iOS Simulator batch20 completed at runtime42c900eb7 (beforec183a2df0), evidence4bb7065f7. All48before/after member/guest list/title size/theme cases captured and inspected; maximum-size guest open/return controls operated. Cloud accessible labels observed; VoiceOver speech and Android/physical/Human visual QA remain unverified. Development overlay overlap is explicitly documented.

Real UAT guest has no org membership, sibling denied; revoking only this run’s invitation removes the native list entry. Independent phone session refreshed/cold-started, then remote logout/latest-refresh rejection passed while other sessions and both CLI identities remained valid. Size/theme restored, own driver/Metro stopped, private fixture removed, shared window released. Eight PR image embeds loaded in the actual GitHub browser at402×874. First CI formatting failure, stale CI-mode Metro and rejected title capture are retained in the evidence notes.

Human has now authorized merging prior work. Earlier cloud stack merged through#2157; this PR’s currenthead7cf2ceb02 adds evidence/research only after the tested runtime and is waiting on its final CI. Issue#2161 remains open for the unified org sheet, destination-first joins and invitation URL/QR. No Prod deployment.

Task: codex/local/01a148ae-ec7f-74b2-8157-961411ce54c9.

@DoodleBears
DoodleBears marked this pull request as ready for review October 18, 2026 05:12
@DoodleBears
DoodleBears merged commit 9a2b651 into main Oct 18, 2026
10 checks passed
@DoodleBears
DoodleBears deleted the codex/2161-cloud-navigation branch October 28, 2026 04:25
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