The native shell: sign in, read the seam, generate screens

The native shell: sign in, read the seam, generate screens A sequence diagram generated by Archify. loadSession() none → phase anonymous signIn(url, email, password) POST /api/v1/auth/login Set-Cookie: platformkit_session saveSession({baseURL, cookie}) catalog() GET /api/v1/admin/resources (Cookie sent explicitly) Catalog JSON: readable resources · Writable · Immutable · schema parseCatalog → phase ready /[module]/[entity] → ResourceRoute({kind, withID}) custom list/detail/form for module/entity? none listColumns · detailItems · formControls list(e, page, sort) · get · create · update · remove on entry.path GET/POST/PATCH/DELETE the entry's own route rows, or application/problem+json (server keeps authorization and validation) signOut() → POST /api/v1/auth/logout clearSession() Sign in Read the seam Generate screens Sign out Expo app · app/_layout.tsx · Sequence participant Expo app · app/_layout.tsx SecureStore · session.ts · Sequence participant SecureStore · session.ts api.ts · src/effects · Sequence participant api.ts · src/effects PlatformKit server · Sequence participant PlatformKit server route.tsx + derive.ts · Sequence participant route.tsx + derive.ts Generated screens · Sequence participant Generated screens Renderer pack (optional) · Sequence participant Renderer pack (optional) Legend request return security async trace default message

Session

  • • Phases: booting · anonymous · loading · ready · failed (src/core/state.ts).
  • • api.ts keeps the Set-Cookie value and sends it back as Cookie; every request uses credentials: "omit".

Screens from the seam

  • • src/screens renders List/Detail/Form from derive.ts rules: first writable string is the name, hide:list, enum → picker, bool → switch.
  • • A renderer pack (src/renderers.ts) maps module/entity to optional list/detail/form; app/_layout.tsx passes defaultRenderers = {}.

Verification

  • • The device run on iOS/Android against a live instance is recorded as unverified.
  • • Golden file ui/screens/testdata/catalog.json is shared byte-for-byte; npm run check does not launch Expo or a device.