Present the storage-owned Git status and intentionally limited HTTPS synchronization workflow on Android.
Scope
Render tracked remote, refresh time/freshness, ahead/behind state, incoming/outgoing commits, changed password-store objects, and typed notices/actions supplied by Rust.
Refresh stale status on entry and explicit swipe-to-refresh; make the primary refresh gesture perform the storage-owned pull where the shared contract specifies it.
Expose Commit, Fetch, Pull, and Push through Material buttons/menus with a commit-message dialog and configured Git name/email.
Run bridge operations on an injected I/O dispatcher, display monotonic typed progress, support cancellation/retry, and prevent stale operation results replacing current state.
Use only the configured HTTPS application credential from secure storage. No SSH, helper, subprocess, raw Git output parsing, or Kotlin diff interpretation.
Coordinate results with open editors, tree/viewer state, TOTP cache, conflicts, dirty changes, authentication expiry, offline state, and process/background lifecycle.
Do not put interactive Git operations into WorkManager; if future non-interactive refresh is added, it needs a separate audited policy.
Acceptance criteria
Users can distinguish cached/current and incoming/outgoing activity and invoke all four Git actions.
Pull/push cannot silently overwrite dirty edits or unresolved conflicts.
Offline, authentication, TLS, conflict, cancellation, and retry paths are recoverable and non-secret.
Kotlin never constructs commits, stages paths, supplies arbitrary remote URLs, or infers domain state from Git text.
Large-history and slow-network tests keep the UI responsive.
Depends on onboarding, Keystore, lifecycle security, and the Compose shell. Part of #87.
Android support update (2026-10-08)
User-directed scope: Android release and CI targets are arm64-v8a and armeabi-v7a. x86_64 Android is excluded for now. Validation for every Android milestone issue uses emulator devices only; physical-device testing and physical-device checklists are excluded. Record the limits of available ARM emulator/API images without claiming physical-device coverage.
## Goal
Present the storage-owned Git status and intentionally limited HTTPS synchronization workflow on Android.
## Scope
- Render tracked remote, refresh time/freshness, ahead/behind state, incoming/outgoing commits, changed password-store objects, and typed notices/actions supplied by Rust.
- Refresh stale status on entry and explicit swipe-to-refresh; make the primary refresh gesture perform the storage-owned pull where the shared contract specifies it.
- Expose Commit, Fetch, Pull, and Push through Material buttons/menus with a commit-message dialog and configured Git name/email.
- Run bridge operations on an injected I/O dispatcher, display monotonic typed progress, support cancellation/retry, and prevent stale operation results replacing current state.
- Use only the configured HTTPS application credential from secure storage. No SSH, helper, subprocess, raw Git output parsing, or Kotlin diff interpretation.
- Coordinate results with open editors, tree/viewer state, TOTP cache, conflicts, dirty changes, authentication expiry, offline state, and process/background lifecycle.
- Do not put interactive Git operations into WorkManager; if future non-interactive refresh is added, it needs a separate audited policy.
## Acceptance criteria
- Users can distinguish cached/current and incoming/outgoing activity and invoke all four Git actions.
- Pull/push cannot silently overwrite dirty edits or unresolved conflicts.
- Offline, authentication, TLS, conflict, cancellation, and retry paths are recoverable and non-secret.
- Kotlin never constructs commits, stages paths, supplies arbitrary remote URLs, or infers domain state from Git text.
- Large-history and slow-network tests keep the UI responsive.
Depends on onboarding, Keystore, lifecycle security, and the Compose shell. Part of #87.
## Android support update (2026-10-08)
User-directed scope: Android release and CI targets are **arm64-v8a** and **armeabi-v7a**. x86_64 Android is excluded for now. Validation for every Android milestone issue uses emulator devices only; physical-device testing and physical-device checklists are excluded. Record the limits of available ARM emulator/API images without claiming physical-device coverage.
hugo
added this to the 06 - Implement an Android version of the software milestone 2026-08-17 19:12:20 +00:00
Implemented in commit 5c933a99a3 (pushed to main).
Android Home now renders Rust-owned tracked-branch status, freshness/time, incoming/outgoing activity, bounded changed objects and typed notices/actions. Commit uses the configured identity; Fetch, Pull, Push and swipe/button refresh invoke real Rust Git behavior with configured protected HTTPS credentials. Refresh uses the shared pull-before-push contract. Kotlin only collects input and renders typed state.
Operations use injected I/O, monotonic progress and cancellation, reject stale results, clear unsaved commit dialogs on backgrounding, and reload without replaying mutations. A shared Rust authentication owner coordinates editor reservations, repository locks, viewer/tree refresh, revision checks and immediate TOTP cache invalidation. Offline/TLS/authentication/conflict/dirty-draft/cancellation and ambiguous-push recovery remain typed and non-secret. No helpers, arbitrary Kotlin remotes or WorkManager are involved.
Reviewed the implementation against the scope and acceptance criteria. Validation passed:
All four required Rust gates, including 473 workspace tests.
Full Android lint/JVM/style/boundary/native/debug/release/AAB/16 KB/package/backup/dependency/license/SBOM gates for ARM64 and ARMv7.
App and native instrumentation on ARM64 API 26/4 KB, API 37/4 KB and strict API 37/16 KB; five native cold loads and five application cold starts per configuration.
Opt-in real public HTTPS fetch with the Android certificate verifier; Rust protocol tests exercise actual authenticated fetch/pull/push pack behavior, slow transfer, cancellation/retry, shared drafts and large change sets.
Computer-use validation of production Home, refresh and history scrolling in Android Studio's embedded emulator; Compose tests exercise all actions, commit identity/message, swipe, no mutation replay and cancellation while scrolling 1,000 objects.
API 37 installations were updated in place. API 26 was reset with explicit user authorization to recover its obsolete emulator state, then passed all checks. ARMv7 is compiled/package-audited because no ARMv7 emulator image is available locally. Authenticated push uses protocol fixtures rather than the user's private remote credential; physical devices are excluded by the milestone's scope. No Apple project changes were needed. Details: docs/android/home-sync.md.
Implemented in commit 5c933a99a3888b3e8dde96314c55804157a1f421 (pushed to main).
Android Home now renders Rust-owned tracked-branch status, freshness/time, incoming/outgoing activity, bounded changed objects and typed notices/actions. Commit uses the configured identity; Fetch, Pull, Push and swipe/button refresh invoke real Rust Git behavior with configured protected HTTPS credentials. Refresh uses the shared pull-before-push contract. Kotlin only collects input and renders typed state.
Operations use injected I/O, monotonic progress and cancellation, reject stale results, clear unsaved commit dialogs on backgrounding, and reload without replaying mutations. A shared Rust authentication owner coordinates editor reservations, repository locks, viewer/tree refresh, revision checks and immediate TOTP cache invalidation. Offline/TLS/authentication/conflict/dirty-draft/cancellation and ambiguous-push recovery remain typed and non-secret. No helpers, arbitrary Kotlin remotes or WorkManager are involved.
Reviewed the implementation against the scope and acceptance criteria. Validation passed:
- All four required Rust gates, including 473 workspace tests.
- Full Android lint/JVM/style/boundary/native/debug/release/AAB/16 KB/package/backup/dependency/license/SBOM gates for ARM64 and ARMv7.
- App and native instrumentation on ARM64 API 26/4 KB, API 37/4 KB and strict API 37/16 KB; five native cold loads and five application cold starts per configuration.
- Opt-in real public HTTPS fetch with the Android certificate verifier; Rust protocol tests exercise actual authenticated fetch/pull/push pack behavior, slow transfer, cancellation/retry, shared drafts and large change sets.
- Computer-use validation of production Home, refresh and history scrolling in Android Studio's embedded emulator; Compose tests exercise all actions, commit identity/message, swipe, no mutation replay and cancellation while scrolling 1,000 objects.
API 37 installations were updated in place. API 26 was reset with explicit user authorization to recover its obsolete emulator state, then passed all checks. ARMv7 is compiled/package-audited because no ARMv7 emulator image is available locally. Authenticated push uses protocol fixtures rather than the user's private remote credential; physical devices are excluded by the milestone's scope. No Apple project changes were needed. Details: docs/android/home-sync.md.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Goal
Present the storage-owned Git status and intentionally limited HTTPS synchronization workflow on Android.
Scope
Acceptance criteria
Depends on onboarding, Keystore, lifecycle security, and the Compose shell. Part of #87.
Android support update (2026-10-08)
User-directed scope: Android release and CI targets are arm64-v8a and armeabi-v7a. x86_64 Android is excluded for now. Validation for every Android milestone issue uses emulator devices only; physical-device testing and physical-device checklists are excluded. Record the limits of available ARM emulator/API images without claiming physical-device coverage.
Implemented in commit
5c933a99a3(pushed to main).Android Home now renders Rust-owned tracked-branch status, freshness/time, incoming/outgoing activity, bounded changed objects and typed notices/actions. Commit uses the configured identity; Fetch, Pull, Push and swipe/button refresh invoke real Rust Git behavior with configured protected HTTPS credentials. Refresh uses the shared pull-before-push contract. Kotlin only collects input and renders typed state.
Operations use injected I/O, monotonic progress and cancellation, reject stale results, clear unsaved commit dialogs on backgrounding, and reload without replaying mutations. A shared Rust authentication owner coordinates editor reservations, repository locks, viewer/tree refresh, revision checks and immediate TOTP cache invalidation. Offline/TLS/authentication/conflict/dirty-draft/cancellation and ambiguous-push recovery remain typed and non-secret. No helpers, arbitrary Kotlin remotes or WorkManager are involved.
Reviewed the implementation against the scope and acceptance criteria. Validation passed:
API 37 installations were updated in place. API 26 was reset with explicit user authorization to recover its obsolete emulator state, then passed all checks. ARMv7 is compiled/package-audited because no ARMv7 emulator image is available locally. Authenticated push uses protocol fixtures rather than the user's private remote credential; physical devices are excluded by the milestone's scope. No Apple project changes were needed. Details: docs/android/home-sync.md.