Present Commit, Fetch, Pull, and Push on iPhone #51

Closed
opened 2026-08-09 20:00:32 +00:00 by hugo · 3 comments
Owner

Goal

Present the intentionally limited mobile Git workflow: status, commit, fetch, pull, and push.

Scope

  • Expose storage-provided Git status and progress from Home and relevant activity/detail rows.
  • Provide Commit, Fetch, Pull, and Push as native swipe/context actions, with pull-to-refresh remaining the primary Pull gesture on Home.
  • Collect a commit message when required and pass it to storage; do not construct commits, stage files, or infer status in Swift.
  • Use only the configured application token for HTTPS credentials through secure-storage orchestration; do not add SSH, credential helpers, or subprocesses.
  • Present ahead/behind state, conflicts, authentication expiry, offline errors, cancellation, and retry using typed Rust state.
  • Coordinate pull/fetch results with the hierarchy, open viewer/editor, and watch-share snapshot.

Acceptance criteria

  • Commit, Fetch, Pull, and Push are reachable through normal native gestures/actions without a CLI-compatible command field.
  • Git progress and failures remain recoverable and never expose token or command output.
  • Pull/push cannot silently replace dirty entry edits or unresolved conflicts.
  • All Git transport and repository behavior execute in crates/storage.
## Goal Present the intentionally limited mobile Git workflow: status, commit, fetch, pull, and push. ## Scope - Expose storage-provided Git status and progress from Home and relevant activity/detail rows. - Provide Commit, Fetch, Pull, and Push as native swipe/context actions, with pull-to-refresh remaining the primary Pull gesture on Home. - Collect a commit message when required and pass it to storage; do not construct commits, stage files, or infer status in Swift. - Use only the configured application token for HTTPS credentials through secure-storage orchestration; do not add SSH, credential helpers, or subprocesses. - Present ahead/behind state, conflicts, authentication expiry, offline errors, cancellation, and retry using typed Rust state. - Coordinate pull/fetch results with the hierarchy, open viewer/editor, and watch-share snapshot. ## Acceptance criteria - Commit, Fetch, Pull, and Push are reachable through normal native gestures/actions without a CLI-compatible command field. - Git progress and failures remain recoverable and never expose token or command output. - Pull/push cannot silently replace dirty entry edits or unresolved conflicts. - All Git transport and repository behavior execute in `crates/storage`.
hugo added this to the 04 - iPhone and Apple Watch apps milestone 2026-08-09 20:00:32 +00:00
hugo added the enhancement label 2026-08-09 20:00:32 +00:00
hugo added the untested label 2026-08-14 15:23:45 +00:00
Author
Owner

Implemented in commit 65eb1da.

  • crates/storage now provides typed Commit, Fetch, Pull, and Push actions, action-specific progress/notices, commit-all staging, HTTPS application-token transport, typed conflict/authentication/offline/cancellation failures, and serialized repository/editor mutation guards.
  • Pull rejects open editors, Push rejects dirty editors, all repository operations serialize against entry mutations, and Pull refreshes hierarchy/viewer/TOTP/watch-derived presentation state.
  • The iPhone Home screen presents storage-provided actions as native swipe, context-menu, and accessibility actions; pull-to-refresh remains Pull; commit messages are passed unchanged to Rust; progress supports Cancel and typed failures support Retry.
  • UniFFI Swift bindings were regenerated.

Verification:

  • cargo fmt --all -- --check
  • RUSTFLAGS="-D warnings" cargo check --workspace --all-targets
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace
  • xcodegen generate
  • IronStorage Debug iphonesimulator build for iPhone 17 iOS 26.5: BUILD SUCCEEDED
  • Final app installed over the existing simulator container and launched successfully.

Computer Use confirmed the final build launches and presents the native onboarding Home screen. The persistent simulator has no configured password store, and the user was unavailable to enter the application token, so the Git gestures could not be exercised against a live store. The required untested label has therefore been applied.

Implemented in commit 65eb1da. - crates/storage now provides typed Commit, Fetch, Pull, and Push actions, action-specific progress/notices, commit-all staging, HTTPS application-token transport, typed conflict/authentication/offline/cancellation failures, and serialized repository/editor mutation guards. - Pull rejects open editors, Push rejects dirty editors, all repository operations serialize against entry mutations, and Pull refreshes hierarchy/viewer/TOTP/watch-derived presentation state. - The iPhone Home screen presents storage-provided actions as native swipe, context-menu, and accessibility actions; pull-to-refresh remains Pull; commit messages are passed unchanged to Rust; progress supports Cancel and typed failures support Retry. - UniFFI Swift bindings were regenerated. Verification: - cargo fmt --all -- --check - RUSTFLAGS="-D warnings" cargo check --workspace --all-targets - cargo clippy --workspace --all-targets -- -D warnings - cargo test --workspace - xcodegen generate - IronStorage Debug iphonesimulator build for iPhone 17 iOS 26.5: BUILD SUCCEEDED - Final app installed over the existing simulator container and launched successfully. Computer Use confirmed the final build launches and presents the native onboarding Home screen. The persistent simulator has no configured password store, and the user was unavailable to enter the application token, so the Git gestures could not be exercised against a live store. The required untested label has therefore been applied.
hugo closed this issue 2026-08-14 15:25:33 +00:00
hugo reopened this issue 2026-08-14 15:53:35 +00:00
Author
Owner

Follow-up correction delivered in cc2c30b. Home no longer requires an entry-authentication object before loading or running Commit, Fetch, Pull, or Push, so these Git operations remain available while entries are locked. Rust still reserves repository operations against open or dirty editors whenever authentication/editor coordination exists. Verification passed: cargo fmt --all -- --check; RUSTFLAGS=-D warnings cargo check --workspace --all-targets; cargo clippy --workspace --all-targets -- -D warnings; cargo test --workspace (including the new no-authentication bridge regression); xcodegen generate; and an affected iPhone-simulator Debug build, install-over-existing-app, launch, and UI inspection. The persistent simulator has no configured password store, so a live pull-to-refresh against a remote could not be exercised; the untested label remains.

Follow-up correction delivered in cc2c30b. Home no longer requires an entry-authentication object before loading or running Commit, Fetch, Pull, or Push, so these Git operations remain available while entries are locked. Rust still reserves repository operations against open or dirty editors whenever authentication/editor coordination exists. Verification passed: cargo fmt --all -- --check; RUSTFLAGS=-D warnings cargo check --workspace --all-targets; cargo clippy --workspace --all-targets -- -D warnings; cargo test --workspace (including the new no-authentication bridge regression); xcodegen generate; and an affected iPhone-simulator Debug build, install-over-existing-app, launch, and UI inspection. The persistent simulator has no configured password store, so a live pull-to-refresh against a remote could not be exercised; the untested label remains.
hugo closed this issue 2026-08-14 15:54:39 +00:00
hugo removed the untested label 2026-08-14 15:59:23 +00:00
Author
Owner

Post-closure device delivery completed. The current cc2c30b source was built as a signed iPhone Release configuration with Swift and Clang warnings treated as errors; Xcode reported BUILD SUCCEEDED. The resulting Release-iphoneos/IronStorage.app was installed over the existing de.rfc1437.ironstorage app on paired iPhone-CM9RWWYRYL without uninstalling or resetting app data, and devicectl launched it successfully.

Post-closure device delivery completed. The current cc2c30b source was built as a signed iPhone Release configuration with Swift and Clang warnings treated as errors; Xcode reported BUILD SUCCEEDED. The resulting Release-iphoneos/IronStorage.app was installed over the existing de.rfc1437.ironstorage app on paired iPhone-CM9RWWYRYL without uninstalling or resetting app data, and devicectl launched it successfully.
Sign in to join this conversation.