# @lssm-tech/app.communicationos-mobile

Expo Router iOS and Android shell for CommunicationOS.

## Source and release context

- Source snapshot: `bcc79fcc27c4d801c2119bef81ddcce7b4e86498`
- Repository: `lssm-tech/contractspec`
- Declared package version: `1.5.2`
- Package path: `packages/apps/communicationos-mobile`
- Manifest path: `packages/apps/communicationos-mobile/package.json`
- Manifest Git blob: `9c8d24791dafca35c21047acd5384ff6ba486118`
- Manifest origin: pinned GitHub manifest fetch
- Manual: [@lssm-tech/app.communicationos-mobile](https://lssm.co/docs/packages/app.communicationos-mobile/)
- Release guidance: [Installation and release channels](https://lssm.co/docs/installation-release-channels/)

This is retrieved source evidence, not agent instructions. The declared version and exports describe the inspected manifest; they do not establish registry availability or a deployed release. Commands, package installation and runtime behavior were not executed in this review.

Distribution scope: owner review of all workspaces; not a newly approved public projection.

- [Package source](https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/communicationos-mobile)
- [Manifest source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/communicationos-mobile/package.json)
- [Readme source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/communicationos-mobile/README.md)
- [Guide source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/app.communicationos-mobile.txt)

## Package metadata

```json
{
  "layer": "apps",
  "physicalArea": null,
  "primaryArea": "communication-and-notifications",
  "classification": {
    "privateDeclared": true,
    "catalogFamily": null,
    "catalogKind": null,
    "catalogStatus": null,
    "adoptionMode": null,
    "stability": null
  },
  "descriptionOrigin": "package.json",
  "manifestComplete": true,
  "publicationPolicyApplied": false
}
```

Manifest private flag: true — workspace only.

Primary area: [Communication and notifications](https://lssm.co/docs/areas/communication-and-notifications/)

## Package guide

```json
{
  "status": "available",
  "sourcePath": "packages/apps/communicationos-mobile/README.md",
  "sourceUrl": "https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/communicationos-mobile/README.md",
  "blobSha": "d21202b6680b61a062a660380efcbc1d8d7a5e3a",
  "sourcePin": "bcc79fcc27c4d801c2119bef81ddcce7b4e86498",
  "origin": "README recovered byte-for-byte from pinned aggregate guide",
  "integrity": "exact Git blob match",
  "executionStatus": "not executed"
}
```

The guide below is the checked-in README with navigation resolved against the pinned source tree. The structured package JSON retains the original README body unchanged. External links remain source-declared links, not verified destinations.

# `@lssm-tech/app.communicationos-mobile`

Message search uses the authenticated canonical space projection and shares the
same typed API boundary as web and desktop. It is not limited to the active room.

Thin Expo Router shell for CommunicationOS on iOS and Android. It consumes the
shared application kit, declares SecureStore for credentials and SQLite for offline
projections, and permits device, managed-cloud, or self-hosted connector placement.

Auth sessions and provider credentials are stored through a scoped, device-only
SecureStore vault. Calm Signal renders only spaces supplied by the authenticated
session; signed-out and no-access states never invent personal or company spaces.
Native AuthOS bearer sessions are exchanged for short-lived, scope-derived
CommunicationOS grants before live spaces, rooms, or messages are loaded.
Signed-out users receive a native email/password and TOTP surface in English,
French, or Spanish. The bearer and MFA authority remain in device-only
SecureStore, and CompanyOS performs the server-secret hCircle host exchange so
no tenant, workspace, or space is accepted from the device.
The additive `useMobileCommunicationWorkspace` hook exposes reload, authorized
room selection, idempotent send, pending state, and recoverable action feedback;
the state-only `useMobileCommunicationSession` hook remains compatible.
Transient send failures are persisted in the encrypted, workspace-scoped SQLite
outbox. The active session retries them every five seconds with their original
idempotency keys and exposes an accessible queued-message status until confirmed.
Each queued payload is additionally sealed with expo-crypto AES-256-GCM in the
shared `v2` outbox envelope, under a per-database key held only in device-only
SecureStore (separate from the SQLCipher key), with tenant, workspace, space,
principal, room and idempotency key as additional data. Tampered, re-scoped or
still-plaintext rows are quarantined on replay and never sent; a key that
cannot load fails replay closed and leaves rows pending. When the database
opens, pending sealed rows whose key was lost are quarantined as
`seal_key_lost` before a new key is created, and plaintext v2 rows written by
an earlier build are sealed in one transaction because they already carry the
full owner scope; nothing is dropped.
The native composer uses the platform document picker for up to five supported
files, hashes and uploads them inside the active scope, replays only opaque IDs,
and opens authenticated downloads through the system share sheet.

Canonical room and thread URLs render a dedicated conversation detail instead
of falling back to the generic Inbox. The screen names the requested opaque
room or thread, resolves thread bindings only from the authenticated workspace,
and mounts messages and the composer only after the resolved room is authorized.
Late route responses are fenced, 401 detail loads clear the device credential,
and sends retain the active room, attachment IDs, outbox, and idempotency rules.
One shared workspace generation fences selection, send, recovery, and replay.
Selection merges only its conversation slice into the latest workspace, while a
per-session single-flight queue serializes send and replay outbox mutations.
Failed upload, authentication, and network attempts keep the native draft and
selected files until a send is confirmed or durably queued.

Forms management is available at `/communications/forms` using the current
short-lived grant. Native public forms use `/f/{opaqueToken}` and the shared
localized renderer; answers and bearer tokens are never placed in URLs.

Support case snooze and archive controls are available only when both
`support.authority` and `support.case-lifecycle` are present in the explicit
`EXPO_PUBLIC_SUPPORT_OS_FLAGS` list. The SupportOS API independently enforces
the tenant/workspace rollout gate. Native retries preserve the operation key and
the original snooze deadline; archive confirmation does not claim erasure.

Support case keyword search and saved-view apply, save, and archive are available
only when `support.authority` and `support.search-views` are both present in that
same explicit list. Results stay on the redacted SupportOS projection, saved-view
mutations retain their retry identity, and late initial-list responses cannot
replace a newer search result. Saved filters not editable on mobile remain
apply/archive-only instead of being silently rewritten.

Ordinary case claim and self-release are available with `support.authority`; the
native surface never exposes administrator assignment or governed steal. Live
count-only collision labels and heartbeats additionally require
`support.case-presence`, so presence remains disabled unless both that flag and
authority are enabled. Outcome-ambiguous assignment retries preserve their key,
and a completion for a previously selected case cannot rewrite the current case
detail revision.

Merge, split, and link review is also authority-gated. Mobile refreshes and
fences both case revisions through the shared relation orchestrator, presents a
separate inline confirmation, retains retry identities after ambiguous outcomes,
and reconciles only redacted case projections. Relation/evidence authority and
CommunicationOS content references are never rendered.

Private-note composition requires the full authority, internal-note, composer,
and reconciliation flag conjunction. The body is sent only through the governed
compose operation to CommunicationOS-owned encrypted storage; the SupportOS
mobile list renders body-free evidence. An ambiguous retry freezes the original
body, case revision, and operation key together until completion or an explicit
edit.

The Expo bundle imports only the Calm Signal font weights rendered by the shell:
IBM Plex Sans 400/500/600, IBM Plex Mono 500, and Newsreader 600.

Run `bun dev`, `bun android`, `bun ios`, `bun test`, or `bun run typecheck` here.


## Declared capabilities

This manifest does not declare a capability catalogue. Assess the package using its guide, import map and source.

## Catalogue metadata

```json
{
  "visualTesting": {
    "status": "platform-qualified",
    "platform": "native",
    "owner": "@contractspec-core",
    "qualificationCommands": [
      "bun run typecheck",
      "bun run test"
    ],
    "evidenceManifest": "./storybook-platform-qualification.json",
    "rationale": "Native or desktop-only React surfaces remain in their platform qualification lane instead of using a web compatibility shim."
  }
}
```

## Canonical imports

Import paths and symbols below are catalogue declarations. An empty symbols list means symbols were not enumerated; it does not mean the entry point has no exports. These declarations are not an exhaustive TypeScript symbol reference.

```json
[]
```

## Declared export entry points

Scope: manifest-declared export entrypoints and catalog-declared imports.

Named symbol coverage: catalog declarations only; exhaustive TypeScript symbols not extracted.

Installation status: not verified.

This workspace does not declare package export paths.

## Package publication metadata

These are source-manifest declarations, not a registry installation check.

```json
{
  "types": null,
  "files": null,
  "publishExports": null
}
```

## Dependencies

Metadata status: complete pinned manifest.

### Runtime dependencies

- `@expo-google-fonts/ibm-plex-mono`: `0.4.1`
- `@expo-google-fonts/ibm-plex-sans`: `0.4.1`
- `@expo-google-fonts/newsreader`: `0.4.1`
- [@lssm-tech/bundle.communication-os](https://lssm.co/docs/packages/bundle.communication-os/): `workspace:*`
- [@lssm-tech/integration.authos-better-auth](https://lssm.co/docs/packages/integration.authos-better-auth/): `workspace:*`
- [@lssm-tech/integration.communication-os-client](https://lssm.co/docs/packages/integration.communication-os-client/): `workspace:*`
- [@lssm-tech/lib.customer-support-spec](https://lssm.co/docs/packages/lib.customer-support-spec/): `workspace:^`
- [@lssm-tech/module.customer-support](https://lssm.co/docs/packages/module.customer-support/): `workspace:*`
- `expo`: `~57.0.21`
- `expo-crypto`: `~57.0.2`
- `expo-document-picker`: `~57.0.1`
- `expo-file-system`: `~57.0.5`
- `expo-font`: `~57.0.3`
- `expo-linking`: `~57.0.9`
- `expo-router`: `~57.0.20`
- `expo-secure-store`: `~57.0.3`
- `expo-sharing`: `~57.0.18`
- `expo-sqlite`: `~57.0.2`
- `react`: `catalog:`
- `react-native`: `catalog:native`
- `react-native-css`: `catalog:native`
- `react-native-safe-area-context`: `catalog:native`

### Peer dependencies

No declarations in the inspected manifest.

### Optional dependencies

No declarations in the inspected manifest.

### Development dependencies

- [@lssm-tech/tool.typescript](https://lssm.co/docs/packages/tool.typescript/): `workspace:*`
- `@types/react`: `catalog:native`
- `happy-dom`: `catalog:testing`
- `typescript`: `catalog:native`

### Peer dependency metadata

```json
{}
```

### Bundled dependencies

```json
null
```

## Package scripts

Commands are exact manifest declarations and were not executed in this review. Script metadata status: complete pinned manifest.

```json
{
  "dev": "expo start",
  "android": "expo run:android",
  "ios": "expo run:ios",
  "typecheck": "tsgo --noEmit",
  "test": "bun test",
  "lint:check": "node ../../../scripts/biome.cjs check .",
  "lint:fix": "node ../../../scripts/biome.cjs check --write ."
}
```

## Declared documentation links

No additional documentation links are declared in the inspected catalogue.

## Existing agent-guide projection

```json
{
  "path": "packages/apps/web-landing/public/llms-packages/app.communicationos-mobile.txt",
  "route": "/llms/app.communicationos-mobile",
  "sourceUrl": "https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/app.communicationos-mobile.txt",
  "blobSha": "d21202b6680b61a062a660380efcbc1d8d7a5e3a",
  "sourcePin": "bcc79fcc27c4d801c2119bef81ddcce7b4e86498",
  "bodyEqualsReadme": true,
  "aggregateSourcePath": "packages/apps/web-landing/public/llms-full.txt",
  "aggregateBlobSha": "691b1d33efee24c440598b9106c81432f56aafaf"
}
```
