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
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 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.
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.
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
Implement the Home tab as a clear view of remote-branch activity and work not yet pulled locally.
Scope
Acceptance criteria
crates/storage.Implemented in commit
8e883f5.Verification:
cargo fmt --all -- --checkRUSTFLAGS="-D warnings" cargo check --workspace --all-targetscargo clippy --workspace --all-targets -- -D warningscargo test --workspacexcodegen generateorigin/mainThe 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.