Files
Yuvomi-App/docs/architecture.md
T
Yuvomi Mobile Contributors 40a7962307
Android validation / emulator (35) (push) Failing after 4s
Android validation / emulator (37.0) (push) Failing after 6s
Android validation / build (push) Successful in 5m27s
iOS validation / simulator (push) Canceled after 23m26s
docs: record verified native preview and unfinished PWA parity
Replace current wrapper claims with native architecture/security/build evidence, preserve historical documents, track all thirty pages and explicit release gates, correct brand attribution and provide the twelve-section delivery report without claiming completion. Native signing remains paused and Apple application/device validation outstanding.
2026-10-21 09:13:36 +02:00

53 lines
3.2 KiB
Markdown

# Native client architecture
The requested product is a native reconstruction of Yuvomi's PWA, not a native
window around that website. Both shipping entry points now render native views:
| Responsibility | Android | iOS |
| --- | --- | --- |
| Screens and navigation | Jetpack Compose / Material 3 primitives, Yuvomi tokens | SwiftUI, Yuvomi tokens |
| Application state | AndroidViewModel + Compose state | MainActor ObservableObject |
| JSON API | HttpsURLConnection, serialized worker | URLSession actor, bounded streaming delegate |
| Session ownership | Explicit origin-bound secure-cookie jar | Private ephemeral URLSession cookie storage |
| Persistent cookies | AES-GCM, AndroidKeyStore key, origin as authenticated data | Keychain, WhenUnlockedThisDeviceOnly, origin-scoped account |
| Server logic | Existing unmodified Yuvomi API | Existing unmodified Yuvomi API |
There is no WebView/WKWebView in either shipped source tree and no browser
fallback for missing modules. The old implementation and browser tests are
archived in `legacy/`; their results are historical, not evidence for this client.
The first native slice contains HTTPS onboarding, setup/password/TOTP login,
session restoration, a basic dashboard, task/note/shopping interactions, read-only
permission handling and local sign-out/server removal. Exact feature and visual
parity is tracked in [native parity](native-parity.md), not inferred from a list of
navigation destinations. The other modules remain unfinished.
## Transport and state boundaries
- One configured root HTTPS origin/port; system certificate validation only.
- API calls never follow redirects. No cookie or Authorization state is replayed
to another host. Authentication proxies returning HTML are not treated as APIs.
- JSON reads have byte limits and timeouts. Writes are not queued for offline
replay. Only a server-declared `csrf_invalid` rejection permits one token refresh
and retry; ordinary authorization failures and transport failures do not.
- Server session cookies are persisted, not passwords or TOTP/recovery codes.
Session-only cookies are not converted to long-lived cookies.
- Native UI mutations wait for the server result. Permissions remain enforced
server-side; sparse module/widget permissions also control native affordances.
- Local removal clears the native cookie vault and in-memory records. It is not
remote revocation. Logout attempts server revocation and still erases the local
session if the server cannot be reached.
- A prior WebView prototype installation may retain its old OS website data.
This data is never imported by the native client. Clear app data/reinstall the
prototype before reviewing this native preview if complete legacy erasure is
required; no migration of private household records is performed.
## Explicit gaps
No native OIDC handoff has been implemented. A browser sign-in is not represented
as a successful native API session. Password reset/invitation flows, the remaining
modules, configurable dashboard, uploads/downloads, notification integrations,
offline cache, localization parity and visual baseline comparison remain open.
The signing setup was paused by the maintainer's native-rebuild correction; it
must not be used to label this incomplete client as a finished release.