Present Git-over-HTTPS synchronization and conflicts #40

Closed
opened 2026-08-09 19:30:17 +00:00 by hugo · 1 comment
Owner

Goal

Expose Git-over-HTTPS synchronization and conflict information as desktop UI over crates/storage.

Scope

  • Present repository status, history where supplied, pull, push, and combined synchronization actions.
  • Show progress and actionable typed failures without parsing command output; the app must never launch git or a credential helper.
  • Present storage-owned HTTPS credential/identity requests through secure dialogs and secure-storage orchestration.
  • Reject or display storage rejection of non-HTTPS remotes; do not add SSH UI.
  • Present conflicts using storage-provided models and resolution commands, coordinating any operation that could replace a dirty document through the common Save / Discard / Cancel flow.
  • Keep automatic synchronization policy and Git decisions in crates/storage; the GUI only schedules or requests them and renders state.

Acceptance criteria

  • Pull, push, and sync work through Rust storage APIs with progress and cancellation-safe UI.
  • Credentials are not logged, placed in ordinary config, or retained in GUI-owned state.
  • Conflicts and non-HTTPS remotes produce explicit, recoverable presentation states.
  • Git operations cannot overwrite an unsaved editor buffer without confirmation.
## Goal Expose Git-over-HTTPS synchronization and conflict information as desktop UI over `crates/storage`. ## Scope - Present repository status, history where supplied, pull, push, and combined synchronization actions. - Show progress and actionable typed failures without parsing command output; the app must never launch `git` or a credential helper. - Present storage-owned HTTPS credential/identity requests through secure dialogs and secure-storage orchestration. - Reject or display storage rejection of non-HTTPS remotes; do not add SSH UI. - Present conflicts using storage-provided models and resolution commands, coordinating any operation that could replace a dirty document through the common Save / Discard / Cancel flow. - Keep automatic synchronization policy and Git decisions in `crates/storage`; the GUI only schedules or requests them and renders state. ## Acceptance criteria - Pull, push, and sync work through Rust storage APIs with progress and cancellation-safe UI. - Credentials are not logged, placed in ordinary config, or retained in GUI-owned state. - Conflicts and non-HTTPS remotes produce explicit, recoverable presentation states. - Git operations cannot overwrite an unsaved editor buffer without confirmation.
hugo added this to the 03 - Cross-platform Iced desktop app milestone 2026-08-09 19:30:17 +00:00
hugo added the enhancement label 2026-08-09 19:30:17 +00:00
Author
Owner

Implemented and pushed as 95bb10b.

Implementation:

  • added a storage-owned desktop Git service for typed status/history, pull, push, combined sync, and conflict resolution
  • kept HTTPS validation, remote selection, credentials, transport, merge policy, automatic decisions, and tree refresh in crates/storage
  • preserved typed Git failures and conflict models for the Iced presentation without parsing command output
  • added shared menu, native menu, and command-palette actions plus a Git status/synchronization screen
  • shows branch, configured HTTPS remote, ahead/behind state, staged/unstaged changes, and recent history
  • reports operation phases, supports cancellation, and blocks overlapping storage actions while Git is running
  • routes credential access through the existing authentication lease and secure-storage GitCredentialProvider; the GUI owns no credential or password fields
  • renders actionable recovery for missing/invalid remotes, credentials, authentication, network, TLS, cancellation, non-fast-forward, dirty worktrees, and conflicts
  • renders storage-provided conflicts with explicit per-path local/remote choices and storage-owned resolution commits
  • routes pull, sync, and resolution through the common Save / Discard / Cancel guard and closes a clean stale document only after a real integration
  • added injected-transport coverage for controlled combined sync and desktop regressions for status/history, progress, pre-operation cancellation, HTTPS rejection, action availability, and dirty-draft protection

Review:

  • every acceptance criterion in the live issue is covered
  • no subprocess or credential-helper launch path was added
  • credentials are neither logged, written to ordinary config, nor retained in GUI state
  • no SSH UI and no Apple project changes were added

Verification:

  • cargo fmt --all -- --check
  • RUSTFLAGS="-D warnings" cargo check --workspace --all-targets
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace
  • desktop suite: 25 passed
  • embedded Git suite: 11 passed
Implemented and pushed as 95bb10b. Implementation: - added a storage-owned desktop Git service for typed status/history, pull, push, combined sync, and conflict resolution - kept HTTPS validation, remote selection, credentials, transport, merge policy, automatic decisions, and tree refresh in crates/storage - preserved typed Git failures and conflict models for the Iced presentation without parsing command output - added shared menu, native menu, and command-palette actions plus a Git status/synchronization screen - shows branch, configured HTTPS remote, ahead/behind state, staged/unstaged changes, and recent history - reports operation phases, supports cancellation, and blocks overlapping storage actions while Git is running - routes credential access through the existing authentication lease and secure-storage GitCredentialProvider; the GUI owns no credential or password fields - renders actionable recovery for missing/invalid remotes, credentials, authentication, network, TLS, cancellation, non-fast-forward, dirty worktrees, and conflicts - renders storage-provided conflicts with explicit per-path local/remote choices and storage-owned resolution commits - routes pull, sync, and resolution through the common Save / Discard / Cancel guard and closes a clean stale document only after a real integration - added injected-transport coverage for controlled combined sync and desktop regressions for status/history, progress, pre-operation cancellation, HTTPS rejection, action availability, and dirty-draft protection Review: - every acceptance criterion in the live issue is covered - no subprocess or credential-helper launch path was added - credentials are neither logged, written to ordinary config, nor retained in GUI state - no SSH UI and no Apple project changes were added Verification: - cargo fmt --all -- --check - RUSTFLAGS="-D warnings" cargo check --workspace --all-targets - cargo clippy --workspace --all-targets -- -D warnings - cargo test --workspace - desktop suite: 25 passed - embedded Git suite: 11 passed
hugo closed this issue 2026-08-10 17:53:26 +00:00
Sign in to join this conversation.