docs: record verified native preview and unfinished PWA parity
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

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.
This commit is contained in:
Yuvomi Mobile Contributors committed 2026-10-21 09:13:36 +02:00
1 parent 1433e1670a
commit 40a7962307
20 files changed
+813 -277

No files matched your search

+31 -42
View File
@@ -1,47 +1,36 @@
# Security review record
# Native security review record
This is an engineering review, not an independent penetration test or certification.
This is an engineering checklist, not an independent audit or release approval.
The wrapper review is retained separately as
[historical evidence](legacy-wrapper-security-review.md).
Addressed during implementation:
## Implemented controls to exercise
- Canonical, HTTPS-only origin/port comparison; credential, fragment, query,
subpath, scheme, lookalike-host and TLS-downgrade regression cases.
- A main-frame POST can bypass Android's usual navigation callback. The request
interception gate now rejects **all** cross-origin requests, not only subresources.
The emulator regression was observed failing when the main-frame guard was
deliberately removed, then rerun with the fix restored.
- TLS failures cancel by default. Native download redirects are refused before
cookies can be replayed to another origin. Bootstrap requests use neither
cookies nor automatic redirects and have bounded metadata reads/timeouts.
- Files use explicit system selection/content URIs; no filesystem or storage
permission is granted to web content. Blob exports have no native JS bridge.
- Complete Android browsing-data deletion uses WebStorageCompat, with OS app
reset for engines without that capability. WebStorage.deleteAllData alone was
insufficient for service-worker CacheStorage/IndexedDB and is not relied upon.
- iOS server erase replaces the WKWebView, not only its URL, eliminating old
history/back-forward contexts as well as persistent website data.
- iOS metadata uses typed decoding, rejecting numeric values masquerading as booleans.
- Native picker results are bound to the browsing generation/request. Android
rejects stale upload/download selections, revokes camera URI grants, and clears
capture cache on erasure. iOS ignores export-cancellation callbacks from an old
download. Apple-specific callback regressions have not run without Xcode.
- KGP was upgraded after OSV identified CVE-2026-53914 in the original build tool.
The final OSV scan found no listed advisories across 213 locked/direct Maven
coordinates and build plugins. Rescan after resolution/lock updates.
- The inspected release APK is not debuggable, rejects cleartext, disables backup
and trusts system CAs only. AndroidX's exported profile installer receiver is
protected by the system DUMP permission; app providers are not exported.
- Origin-bound HTTPS API transports, no redirects, no production test-CA bypass.
- Server-owned session and CSRF semantics, no persistent password storage.
- Origin-bound AES-GCM/AndroidKeyStore cookies; iOS Keychain protected
WhenUnlockedThisDeviceOnly with a private ephemeral URLSession jar.
- Bounded JSON reads, deadlines and no offline/ambiguous-write retry queue.
- Native permission-aware controls, destructive-action confirmation and server
validation; partial update payloads preserve fields the native editor cannot edit.
- No WebView/WKWebView in either shipping source tree. Legacy tests do not prove
this client's behavior; explicit native tests and source invariants are required.
Release gates still requiring evidence:
## Remaining gates
- Actual Xcode typecheck, simulator, archive, physical-device and accessibility review.
- End-to-end IdP flows, especially providers that prohibit embedded agents; no
browser-to-native session transfer is supported by the current upstream protocol.
- iOS unknown-length download disk-pressure behavior; a post-download size check
is not a streaming quota. Verify file picker/camera cancellation on real devices.
- Android file-picker/camera/rotation while a picker is outstanding; cancellation
on process death intentionally loses the selection, never silently retries it.
- Offline sign-out/account switching, stale-worker updates and server erasure on
current WebView/WKWebView versions. Upstream tests are not native device proof.
- Reverify final signed release manifests, signing, store ownership, private vulnerability contact
and applicable privacy disclosures. No claim that all vulnerabilities are absent.
1. Run Apple SDK typechecking, simulator/XCTest/UI and device checks; portable
Foundation transport compilation is not SwiftUI/Security.framework validation.
2. Review persistent-cookie expiry/removal, TLS failures, redirects, CSRF refresh,
expired sessions, background/recreation and stale-response isolation on devices.
3. Review migrations from the prototype: browser sessions are never imported and
OS website data may remain until app-data reset/reinstall.
4. Complete missing auth/provider protocols and permission/role scenarios before
claiming native authentication parity, particularly SSO-only deployments.
5. Implement/review files, notifications, offline storage and additional modules
as actual native capabilities; do not restore the wrapper as a shortcut.
6. Independently review the new UI/state/transport code, actual signed artifacts,
accessibility, supported OS matrix and runner trust before distribution.
The owner-authorized signing configuration exists privately but its workflow
changes are intentionally parked. A signed incomplete client is not a completed
native product. Refer to [native parity](native-parity.md) before release work.