Show remote activity and pull-to-refresh on Home #45

Closed
opened 2026-08-09 20:00:28 +00:00 by hugo · 1 comment
Owner

Goal

Implement the Home tab as a clear view of remote-branch activity and work not yet pulled locally.

Scope

  • Render a storage-provided activity/divergence page showing the tracked remote branch, last refresh time, ahead/behind state, and remote commits or password-store changes not present locally.
  • Use Gotcha-style native activity rows, summaries, system symbols, disclosure navigation, loading, empty, and error states.
  • Refresh remote-tracking information through a storage fetch when Home becomes stale or the user explicitly requests status; clearly distinguish cached from current data.
  • Make pull-to-refresh perform a storage-owned pull, then reload the activity/divergence model and local tree.
  • Present authentication, conflicts, dirty local changes, offline state, and partial progress using typed storage results rather than parsed Git output.
  • Never derive changed password entries from raw diff text in Swift.

Acceptance criteria

  • Users can see which remote commits/entries have not been pulled and whether local commits remain unpushed.
  • Pull-to-refresh updates the local clone and the displayed divergence, or reports a recoverable typed failure without corrupting the clone.
  • Cached state is labelled with its refresh time and is not presented as live.
  • Home performs no direct Git or repository operations outside crates/storage.
## Goal Implement the Home tab as a clear view of remote-branch activity and work not yet pulled locally. ## Scope - Render a storage-provided activity/divergence page showing the tracked remote branch, last refresh time, ahead/behind state, and remote commits or password-store changes not present locally. - Use Gotcha-style native activity rows, summaries, system symbols, disclosure navigation, loading, empty, and error states. - Refresh remote-tracking information through a storage fetch when Home becomes stale or the user explicitly requests status; clearly distinguish cached from current data. - Make pull-to-refresh perform a storage-owned pull, then reload the activity/divergence model and local tree. - Present authentication, conflicts, dirty local changes, offline state, and partial progress using typed storage results rather than parsed Git output. - Never derive changed password entries from raw diff text in Swift. ## Acceptance criteria - Users can see which remote commits/entries have not been pulled and whether local commits remain unpushed. - Pull-to-refresh updates the local clone and the displayed divergence, or reports a recoverable typed failure without corrupting the clone. - Cached state is labelled with its refresh time and is not presented as live. - Home performs no direct Git or repository operations outside `crates/storage`.
hugo added this to the 04 - iPhone and Apple Watch apps milestone 2026-08-09 20:00:28 +00:00
hugo added the enhancement label 2026-08-09 20:00:28 +00:00
Author
Owner

Implemented in commit 8e883f5.

  • Added storage-owned branch divergence with exact ahead/behind totals, typed incoming/outgoing commit activity, and storage-classified password-store path changes. Swift never parses Git diff text.
  • Added persisted refresh provenance plus storage-owned cached, stale-fetch, explicit-fetch, and pull operations using embedded HTTPS Git and protected native credentials.
  • Added typed authentication, conflict, dirty-tree, offline, cancellation, secure-storage, repository, and partial-progress results.
  • Added native UIKit Home summaries, cached/current timestamps, incoming/outgoing activity rows, disclosure screens, loading/empty/error states, explicit status refresh, and pull-to-refresh with local-tree reload notification.
  • Added isolated temporary-repository regressions for fast-forward, divergence, typed path activity, conflict preservation, exact totals with zero returned rows, freshness, classification, secret-safe failures, and configuration persistence.

Verification:

  • cargo fmt --all -- --check
  • RUSTFLAGS="-D warnings" cargo check --workspace --all-targets
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace
  • regenerated UniFFI Swift bindings and reproduced them byte-for-byte after normalization
  • xcodegen generate
  • signed iPhone 17 Pro simulator build/install/launch on iOS 26.5
  • visual review of the native Home screen; verified cached state is explicitly non-live, then live refresh with the configured Gotcha CLI token changed it to Current on origin/main
  • signed device build installed successfully on the paired iPhone 17

The automated Git regression uses temporary repositories and injected transports; it does not contact live servers. The separate simulator integration check used the configured live Gitea server.

Implemented in commit `8e883f5`. - Added storage-owned branch divergence with exact ahead/behind totals, typed incoming/outgoing commit activity, and storage-classified password-store path changes. Swift never parses Git diff text. - Added persisted refresh provenance plus storage-owned cached, stale-fetch, explicit-fetch, and pull operations using embedded HTTPS Git and protected native credentials. - Added typed authentication, conflict, dirty-tree, offline, cancellation, secure-storage, repository, and partial-progress results. - Added native UIKit Home summaries, cached/current timestamps, incoming/outgoing activity rows, disclosure screens, loading/empty/error states, explicit status refresh, and pull-to-refresh with local-tree reload notification. - Added isolated temporary-repository regressions for fast-forward, divergence, typed path activity, conflict preservation, exact totals with zero returned rows, freshness, classification, secret-safe failures, and configuration persistence. Verification: - `cargo fmt --all -- --check` - `RUSTFLAGS="-D warnings" cargo check --workspace --all-targets` - `cargo clippy --workspace --all-targets -- -D warnings` - `cargo test --workspace` - regenerated UniFFI Swift bindings and reproduced them byte-for-byte after normalization - `xcodegen generate` - signed iPhone 17 Pro simulator build/install/launch on iOS 26.5 - visual review of the native Home screen; verified cached state is explicitly non-live, then live refresh with the configured Gotcha CLI token changed it to Current on `origin/main` - signed device build installed successfully on the paired iPhone 17 The automated Git regression uses temporary repositories and injected transports; it does not contact live servers. The separate simulator integration check used the configured live Gitea server.
hugo closed this issue 2026-08-11 15:13:23 +00:00
Sign in to join this conversation.