# @oshun/admin-mobile

Canonical Oshun Admin mobile shell — the urgent operations companion for
escalations, on-call approvals, and high-priority incident acknowledgement on
iOS and Android.

This app implements `V1-AMOB-001` (canonical admin mobile shell) and provides
the foundation on which later admin mobile tasks layer queue workflows, secure
login, push-driven escalation, and offline-safe reading.

## Charter

- **Shell mode:** `admin` (operator cockpit). See
  `@oshun/navigation::OSHUN_PLATFORM_SHELL_MODEL`.
- **Mobile role:** "The urgent operations companion for escalations, on-call,
  and high-priority approvals."
- **Boundary rule:** Admin routes render dedicated operator wayfinding and never
  inherit customer shell chrome.

The shell surfaces the canonical admin information architecture
(`OSHUN_ADMIN_WORKSPACE_MODEL`, fourteen workspaces across four groups) through
four thumb-reachable tabs:

| Tab       | Operator job                                                        |
| --------- | ------------------------------------------------------------------- |
| Urgent    | Centered arrival view of queue health, SLA breaches, and incidents. |
| Inbox     | Unified cross-workspace triage.                                     |
| Incidents | Acknowledge, coordinate, mitigate, close.                           |
| More      | Registries, policy, editorial, research integrity, analytics.       |

## Access gating

- Shell entry uses `canEnterAdminShell` from `@oshun/navigation`. Missing admin
  claims redirect to `/unauthorized?reason=missing-admin-scope`.
- Workspace entry uses `canEnterAdminWorkspace`. Hidden workspaces never vanish
  from the More directory; they render with a muted chip so operators understand
  what is absent rather than being confused by empty state.
- Session expiry is evaluated on every shell mount against the principal's
  `sessionExpiresAtMs`.

Secure login, step-up auth, and session refresh are implemented by `V1-AMOB-002`
on top of the providers defined here.

## Running

```bash
cd apps/oshun/admin-mobile
pnpm install --filter @oshun/admin-mobile
pnpm expo start
```

Unit tests (Vitest):

```bash
pnpm --filter @oshun/admin-mobile test
```

Type-check:

```bash
pnpm --filter @oshun/admin-mobile typecheck
```

## Environment

`EXPO_PUBLIC_*` variables consumed at bundle time:

| Variable                                  | Purpose                                               |
| ----------------------------------------- | ----------------------------------------------------- |
| `APP_ENV`                                 | `development`, `internal`, `preview`, or `production` |
| `EXPO_PUBLIC_OSHUN_ADMIN_BFF_URL`         | Admin BFF origin (falls back to OSHUN_BFF_URL)        |
| `EXPO_PUBLIC_OSHUN_ADMIN_WEB_URL`         | Web admin origin (for customer-preview handoff)       |
| `EXPO_PUBLIC_OSHUN_ADMIN_PUSH_PROJECT_ID` | Push vendor project id                                |
| `EXPO_PUBLIC_OSHUN_ADMIN_FEATURE_FLAGS`   | JSON flag overrides                                   |
| `EXPO_PUBLIC_OSHUN_BUILD_CHANNEL`         | Deployment channel shown in the header chip           |
| `EXPO_PUBLIC_SENTRY_DSN`                  | Crash reporting DSN                                   |
| `EXPO_PUBLIC_ANALYTICS_WRITE_KEY`         | Analytics vendor key                                  |
