Repository navigation
Description
Mobile source navigation: Header, environment paging, search and creation
Status: design and publication approved on 2026-10-18; planning only — do not implement, deploy or merge. Milestone: v2.0. Project: Open Cloud Groups. One implementation slice = one issue = one PR. First focus: N1 Header/environment paging. Runtime qualification is UAT only.
Delivery update (2026-10-19): N1 #2194 was delivered by merged PR #2199. The Human authorized N2 #2195 in Draft PR #2211, including native bottom controls, vertical menu rows and compact single-line source tabs. This does not authorize starting later slices or merging #2211. The original publication-stage statements below describe the initial planning boundary.
Problem Statement
The mixed Computer/Cloud list delivered by #2179 / #2185 correctly preserves sources, but its Header, search, creation controls and source filters compete for space. Activity still follows the active Computer rather than an explicit browsing scope. Users need one predictable place to choose their environment, find locally retained conversations/messages, and create in the intended destination without confusing a cloud service, Organization or Host identity.
Solution
Chats is the sole environment selector. Its Header follows the existing Activity visual language, followed by reusable horizontally scrollable/paged environment tabs: All, Computers, Organizations. The list's content can swipe between environments. Activity inherits the selection and retains horizontal paging between its existing action/replies/unread categories. Search inherits the selection and has no independent environment selector.
Each environment tab remains one line with a maximum width and a tail-ellipsized name; source icons do not shrink and service URLs do not form extra lines. Complete identity is retained in accessibility labels and the source drawer. Tabs remain in stable source-drawer order, with All first, Computers next and Organizations after them. Message arrival does not move tabs. A channel-only guest gets an Organization tab exposing only granted Channels. Channel rows and message headers retain the trailing source icon. List sorting remains source-owned pins/recent-message behavior; new tab order is not a replacement for that authority.
The bottom has two pieces: a Chats/Activity/Search navigation island and a separate circular +, equal-height at default text size. iOS uses native glass controls; Android preserves the OCAT rounded language. + opens a vertical menu at the island position and becomes close. Every full-width action/target row has a leading icon and left-aligned wrapping text; no grid. Outside/close dismisses without activating the background. At accessibility sizes the navigation may grow while the icon-only circle retains a normal touch size. Search hides +.
| Scope | Creation actions |
|---|---|
| Computer | New Channel; new PersonaBot |
| Organization | New Channel; invite, within existing grants |
| All | New Channel; new PersonaBot; join with link/QR; choose a valid target explicitly when needed |
Computer pairing and Organization creation/management remain in the source drawer/settings. No last-used-source fallback for writes. PersonaBots still execute on their Computer.
Search groups conversation-name matches and message-text matches on one page. It searches only messages downloaded and still retained on this device, with a persistent incomplete-coverage explanation. All results identify their source. Clicking a message opens its exact source/Channel and highlights it. If the local target disappeared, show that explicitly and offer online load/retry; never silently land on another message or merely the newest message. Returning from a result restores query/scope/scroll; re-entering from Chats/Activity starts fresh in the current scope. No saved recent-search history.
Activity retains existing categories and count preferences. Its content and badge correspond to Chats' selected environment. All aggregates supported sources; unavailable/stale/unsupported sources remain explicit rather than contributing a misleading zero or borrowing another Computer's number.
User Stories
- As a mobile user, I want a consistent Chats/Activity Header so that navigation feels like one application.
- As a user, I want to choose All, a Computer or an Organization on Chats so that I know which environment I am browsing.
- As a user, I want to swipe the Chats content between environments so that switching is quick.
- As a user with many sources, I want a scrollable tab strip that keeps selection visible.
- As a user, I want stable tab order so that new messages do not move my targets.
- As a guest, I want my invited Organization shown without revealing its other Channels.
- As a user, I want same-name sources to remain distinguishable and independently authorized.
- As a user, I want Activity to inherit Chats' environment without a second environment picker.
- As a user, I want Activity's existing category swipe and count preferences preserved.
- As a user, I want an honest unavailable/partial count instead of an unrelated or fabricated zero count.
- As a user, I want the bottom navigation and creation action visually separate.
- As a user, I want the creation menu to offer only operations available in the current scope.
- As an All-view user, I want to choose a destination before an operation writes data.
- As a Computer owner, I want new Bots created on the selected Computer.
- As an Organization member, I want invitations and Channel creation to retain existing permission checks.
- As a user, I want dismissing the action panel to leave the background unchanged.
- As a Search user, I want no + competing with the search task.
- As a user, I want Search to inherit the environment selected on Chats, including All.
- As a user, I want conversation names and message matches grouped on one page.
- As a user, I want sender, excerpt, time and source/Channel context for message matches.
- As an offline user, I want to search retained local content without a promise of complete history.
- As a user, I want a result to open and highlight the exact matched message.
- As a user, I want a clear recovery path if that message has been evicted from local cache.
- As a user returning from a result, I want my search and scroll position restored.
- As a user starting another search, I want a fresh query in my current environment.
- As a user switching or signing out of an account, I want old cached content excluded from results.
- As a large-text or assistive-technology user, I want reachable navigation, input and menu actions.
- As a multi-device user, I want source connections to remain device-local rather than silently enroll other clients.
- As a user recovering connectivity, I want drafts retained without automatic resend.
Implementation Decisions
- This is a mobile navigation extension of Spec: Unified Computer and Cloud conversations across mobile, Web and Desktop #2178. It preserves Host-owned messages, Cloud-owned messages, account/grant boundaries and independent client enrollment. The selected environment is a device-local browsing scope, not an authority or permission grant.
- Reuse the existing Activity header/tab vocabulary and extract only the tab behavior needed by a real Chats paging interaction. No disconnected component-foundation issue.
- Scope keys include stable source identity; Cloud keys include service configuration, account and Organization/Channel. Titles, indexes and coincident IDs never identify a source by themselves. Late responses cannot populate a replacement source/account.
- Search uses a scoped catalogue of existing retained cache content. It is a rebuildable derivative, not a new canonical message store. Enumerating arbitrary cache files or showing detached account namespaces is prohibited. Known logout/removal/config replacement/access refusals invalidate results. Offline clients cannot infer as-yet-unsynchronized remote revocations.
- Existing Computer message-focus navigation is reusable; Cloud needs source-bound message location/highlight behavior. Loading a selected original message on explicit recovery is different from searching all remote history.
- Current caches are bounded and evictable; no retention guarantee, complete time range or latest-message-only guarantee is inferred. Search coverage text must remain truthful.
- The installed native bottom-tab APIs have not yet qualified the independent circular action and expansion geometry. Validate feasibility in the assigned native lane during N2, preserving actual navigation, safe areas, keyboard reachability, reduced motion and platform accessibility. This spec does not preselect an unsupported API or authorize an SDK migration.
- Current mobile Host lifecycle primarily serves one selected Computer. N1 uses one Computer/two Organizations to prove the initial path; this does not prove simultaneous multi-Computer operation.
- Current Cloud service lacks equivalent Activity feed/count contracts. N5 must show that boundary explicitly. Full Cloud attention semantics/contracts and simultaneous multi-Computer aggregation remain tracked extension gaps, not a claim of completion through UI placeholders.
- Preserve existing read/pin authority under Conversations: synchronize read progress and pins through their source #2181. Do not invent a second read counter or mark all Cloud events actionable to manufacture parity. Bot Wake Policy remains Cloud conversations: ordinary messages enter Host Inbox and obey owner Wake Policy #2182.
- Use existing public Host/TOB business interfaces and CLI where relevant. Any new Host API/tool requires matching CLI parity in its implementation PR. Service changes require their own repo-owned issue/PR, not hidden changes in a mobile issue.
Testing Decisions
The Human confirmed real mobile interactions through owning Host/TOB public APIs with independent canonical readback, CLI parity where applicable, source isolation and UAT-only qualification. This spec retains those seams; no new test approval is requested.
Test observable behavior, not component structure: native taps/swipes/search/create, source-account refusals, canonical identity and persistence, and restart behavior. Reuse existing authenticated mobile client lifecycle, source-scoped draft/cache, directory invalidation, HumanAttention and message-focus regressions.
First acceptance fixture: one paired Computer, two authorized Organizations (including a channel-only guest case), colliding names/IDs, All and explicit source tabs. Verify actual open/read/send with correct author/source; retain draft and prevent automatic resend after offline/reconnect. Later slices extend this fixture with local search, creation and scoped Activity.
| Scenario | Required result |
|---|---|
| Swipe/pick Chats source | Correct source rows and identity, stable tab order, no unrelated management context switch |
| Activity from selected Organization | Inherited scope; own category swipe; no Computer badge/feed substituted |
| All with an unsupported source | Honest partial/unsupported status rather than apparent complete zero |
| Create under source/All | Correct authorized destination; All explicitly selects target; denied operation does not write |
| Search retained content | Current scope only; same-name sources distinct; no remote-history completeness claim |
| Cache eviction after result | Explicit missing-target recovery, never wrong-message fallback |
| Return from result / new entry | Preserved query/scope/scroll / fresh query inheriting Chats respectively |
| Logout/revoke/account replacement | Old results removed; late work cannot resurrect them |
| Offline/restart | Preserved source-scoped drafts; unavailable writes; no reconnect autosend |
Capture exact-source/head before/after screenshots and recordings on assigned native lanes. Default/intermediate/maximum text, light/dark, real keyboard, safe areas, scroll/dismiss/back and assistive-technology checks have distinct outcomes. Android, physical iOS, Simulator and Human QA do not substitute for each other. Never label unrun gates passed; publishing these issues starts no device work. Credentials and unrelated conversations stay out of evidence.
Out of Scope
- Implementation, resource creation, device reservations, deployment, release or merge through this planning action.
- Remote/global/full-history search, automatic history download for a query, semantic-search infrastructure or cross-service message upload.
- New authentication/encryption, federation, shared credentials, billing or broadened grants.
- Changes to Activity category meaning, Bot execution/wake authority, arbitrary environment sorting, or persistent search-history features.
- Web/DSH Desktop implementation in Web and Desktop: unified conversations across paired Computers and Cloud #2180; source read/pin work in Conversations: synchronize read progress and pins through their source #2181; wake behavior in Cloud conversations: ordinary messages enter Host Inbox and obey owner Wake Policy #2182; remaining native acceptance in Mobile cloud navigation: remaining platform and recovery acceptance #2186 and predictive-back migration in Android: compact navigation island and predictive-back compatibility #2077.
Further Notes
- Five immediate vertical slices implement the confirmed first phase. Full multi-Computer and Cloud Activity capability gaps remain visible here and must be split into runnable owner-specific follow-ups after the first slice's feedback; these five must not be used to declare all of Spec: Unified Computer and Cloud conversations across mobile, Web and Desktop #2178 complete.
- The immediate focus is N1; later slices remain planning-only. One slice, one issue, one PR. Each passes its own regression and real acceptance before expansion.
- All new issues are ready-for-human / Todo to prevent automatic implementation pickup. They are approved plans, not permission to start.
- Existing source facts were inspected at e65bd3e; refresh latest main and active claims before implementation. Preserve unrelated work and coordinate the shared device queue.
- Related existing work: Spec: Unified Computer and Cloud conversations across mobile, Web and Desktop #2178, Web and Desktop: unified conversations across paired Computers and Cloud #2180, Conversations: synchronize read progress and pins through their source #2181, Cloud conversations: ordinary messages enter Host Inbox and obey owner Wake Policy #2182, Mobile cloud navigation: remaining platform and recovery acceptance #2186, Android: compact navigation island and predictive-back compatibility #2077. No existing issue scope or completion state is changed by this publication.
Published delivery map
Canonical spec: #2193. Native child of #2178. All slices are in milestone v2.0, Open Cloud Groups, Todo / ready-for-human. No implementation has started under this spec.
| Order | Slice | Technical blocker |
|---|---|---|
| N1 | N1: Mobile Chats Header and source environment paging | None; awaits implementation authorization |
| N2 | N2: Mobile bottom navigation island and contextual creation | #2194 |
| N3 | N3: Mobile Search retained Computer messages and restore result context | #2195 |
| N4 | N4: Mobile Search retained Cloud messages with exact-message focus | #2196 |
| N5 | N5: Mobile Activity inherits Chats scope with honest count coverage | #2194 |
Start with #2194 only when authorized. N5 is scheduled fifth for feedback sequencing, but its only technical blocker is N1. Each issue gets one implementation PR and its own observable UAT path. Full Cloud Activity and simultaneous multi-Computer aggregation are remaining extension gaps, not implicitly completed by this set.
Activity