72 lines
4.7 KiB
Markdown
72 lines
4.7 KiB
Markdown
# Android Home and HTTPS synchronization (#97)
|
|
|
|
Home renders the private runtime's typed Rust Git page: tracked branch, freshness
|
|
and refresh time, ahead/behind totals, incoming/outgoing commits, changed objects,
|
|
notices and permitted actions. An unfetched tracking branch retains local status
|
|
and Fetch/Pull/Push controls without presenting unknown remote counts as zero.
|
|
Rust bounds activity and local-change presentation to 50 records; committing still
|
|
includes all eligible repository changes. Compose uses lazy rows for large pages.
|
|
|
|
Commit collects only a message and displays the configured Rust Git name/email.
|
|
Fetch updates tracking data; Pull integrates fetched changes; Push sends committed
|
|
objects. Entry/foreground refresh fetches stale activity. The primary button and
|
|
swipe gesture share Rust's pull-before-push synchronization contract. A local store
|
|
refreshes its status without network or authentication.
|
|
|
|
All bridge calls use the injected I/O dispatcher. Each request publishes typed
|
|
progress, with monotonic Rust phases and a persistent Cancel control above the
|
|
scrolling history. A sequence rejects obsolete results; leaving/backgrounding
|
|
cancels the active operation and clears the unsaved commit dialog. Reload reads
|
|
status and refreshes stale tracking data; it never replays a commit, pull or push.
|
|
Completed mutations report partial progress if cancellation or status rebuilding
|
|
prevents displaying their result. Ambiguous pushes require Fetch and inspection
|
|
before retrying.
|
|
|
|
The private runtime retains one Rust authentication owner across navigation,
|
|
editors and Home. Existing reservations reject Pull with any open editor and Push
|
|
with dirty drafts. Git retains its worktree/conflict checks; Rust revalidates entry revisions
|
|
and TOTP catalog ciphertext hashes against repository changes, without decrypting
|
|
entries for cached discovery. TOTP discovery and cached-list requests reject an
|
|
active repository operation. Successful Pull/sync refreshes the Android tree
|
|
and viewer. Configuration/root replacement locks and replaces the shared owner;
|
|
updating only the cached Home timestamp does not discard drafts or leases.
|
|
|
|
Repository remotes are authoritative. Android accepts configured HTTPS endpoints
|
|
only, obtains that application's credential through the injected Rust secure store,
|
|
and closes credential state after each operation. Kotlin receives no token, stages
|
|
no paths, constructs no commit or remote URL, and interprets no Git text. Offline,
|
|
TLS, authentication, conflict, dirty-editor and cancellation errors remain typed,
|
|
bounded and recoverable. No interactive Git operation uses WorkManager.
|
|
|
|
## Validation
|
|
|
|
Rust regressions exercise real local commits and identity, shared draft guards,
|
|
unfetched tracking references, 200 local changes with bounded presentation, actual
|
|
smart-HTTP pack generation, injected protected credentials, offline/TLS/authentication
|
|
errors, monotonic slow-transfer cancellation/retry and cancellation after a completed
|
|
commit, plus immediate rejection of changed/deleted cached TOTP entries. Protocol fixtures substitute the transport, not repository or Git behavior.
|
|
|
|
Android native instrumentation creates isolated encrypted fixtures through Rust,
|
|
shares editor reservations, commits an encrypted entry, exercises typed errors and
|
|
cancellation, and checks locked authentication state. An opt-in public HTTPS test
|
|
also fetches actual remote activity using the Android certificate verifier. Compose
|
|
instrumentation exercises every action, commit identity/message, reload without
|
|
mutation replay, swipe refresh, and cancellation while scrolling 1,000 changed
|
|
objects. GUI fixtures test presentation; production Home uses the private Rust API.
|
|
|
|
The emulator scope is ARM64 API 26/4 KB, API 37/4 KB and strict API 37/16 KB.
|
|
ARMv7 is compiled and package-audited; an ARMv7 image is unavailable locally.
|
|
Authenticated remote push is covered by Rust protocol tests, rather than sending
|
|
the user's private repository credential from an emulator. Physical devices are
|
|
excluded by the milestone's user-directed validation scope. API 37 installations
|
|
were updated in place. API 26 was reset with explicit user authorization after
|
|
its previous emulator state prevented GUI instrumentation from starting.
|
|
|
|
Final validation passed all four required Rust gates (473 workspace tests), the
|
|
complete Android build/lint/JVM/style/architecture/package/dependency gates, and
|
|
app plus native instrumentation on all three emulator configurations. Each
|
|
configuration also passed five native cold loads and five application cold starts.
|
|
The opt-in public HTTPS native tests passed on API 37. Computer use verified the
|
|
production Home page, refresh behavior and history scrolling in Android Studio's
|
|
embedded emulator. No Apple project changes were required.
|