Ship the optional SSH transport as normal functionality in the CLI, TUI, and Iced desktop application, while the default iPhone/Apple build remains free of SSH code and setup.
Scope
Enable the storage ssh Cargo feature explicitly in apps/cli, apps/tui, and apps/desktop so their ordinary development and release artifacts support SSH without an extra build flag.
Keep crates/apple and the iPhone Xcode/Rust build on storage without ssh by default. Do not add SSH onboarding, key import, host trust, or agent assumptions to the iPhone UI in this milestone.
Make the Apple feature choice explicit enough that a later opt-in is possible without changing the storage protocol contract. A default Apple build that encounters an SSH remote must return/present a typed unsupported-transport state before connection work; HTTPS remains unchanged.
Route existing CLI/TUI/desktop Fetch, Pull, Push, Sync, branch discovery, clone, progress, cancellation, conflict, and status surfaces through storage transport selection without duplicating SSH rules.
Accept and display both ssh:// and scp-like remote spellings in remote/configuration surfaces. Never parse them in a frontend or derive transport from a label.
Add native terminal/desktop flows for encrypted-key passphrase requests and unknown-host fingerprint confirmation. Changed host keys must be a non-bypassable error.
Keep passphrases out of command arguments/history and prevent secret/key bytes from appearing in TUI scrollback, desktop state/debug output, notifications, or clipboard.
Present transport-neutral wording where an action works for HTTPS and SSH, and transport-specific actionable errors only from typed storage state.
Add frontend tests for SSH remote selection, progress, cancellation, host confirmation, encrypted-key prompt, authentication failure, changed host key, conflict, and success without frontend-owned protocol logic.
Inspect feature graphs/artifacts to prove CLI/TUI/desktop include russh by default and the default iPhone/Apple static library does not.
Build the normal CLI, TUI, desktop, packaging path, and Apple simulator target. Install over the existing simulator app if runtime validation is needed; do not reset simulator state.
Verify HTTPS flows still work in every affected frontend.
Run all repository-required Rust gates plus required Apple generation/simulator gates for Apple build-graph changes.
Acceptance criteria
Standard CLI, TUI, and desktop builds can configure and use either requested SSH URL spelling with every existing Git remote action.
The default iPhone build contains no SSH dependency/code path or SSH setup UI and continues to support HTTPS.
Host trust and key prompts are explicit, cancellable, secret-safe, and driven by typed storage APIs.
No frontend contains URL parsing, key policy, known-hosts policy, pack protocol, or remote-command construction.
Depends on complete SSH upload-pack and receive-pack support in this milestone.
## Goal
Ship the optional SSH transport as normal functionality in the CLI, TUI, and Iced desktop application, while the default iPhone/Apple build remains free of SSH code and setup.
## Scope
- Enable the storage `ssh` Cargo feature explicitly in `apps/cli`, `apps/tui`, and `apps/desktop` so their ordinary development and release artifacts support SSH without an extra build flag.
- Keep `crates/apple` and the iPhone Xcode/Rust build on storage without `ssh` by default. Do not add SSH onboarding, key import, host trust, or agent assumptions to the iPhone UI in this milestone.
- Make the Apple feature choice explicit enough that a later opt-in is possible without changing the storage protocol contract. A default Apple build that encounters an SSH remote must return/present a typed unsupported-transport state before connection work; HTTPS remains unchanged.
- Route existing CLI/TUI/desktop Fetch, Pull, Push, Sync, branch discovery, clone, progress, cancellation, conflict, and status surfaces through storage transport selection without duplicating SSH rules.
- Accept and display both `ssh://` and scp-like remote spellings in remote/configuration surfaces. Never parse them in a frontend or derive transport from a label.
- Add native terminal/desktop flows for encrypted-key passphrase requests and unknown-host fingerprint confirmation. Changed host keys must be a non-bypassable error.
- Keep passphrases out of command arguments/history and prevent secret/key bytes from appearing in TUI scrollback, desktop state/debug output, notifications, or clipboard.
- Present transport-neutral wording where an action works for HTTPS and SSH, and transport-specific actionable errors only from typed storage state.
- Update packaging, help, examples, configuration, synchronization, secure-storage, and frontend testing documentation.
## Tests and verification
- Add frontend tests for SSH remote selection, progress, cancellation, host confirmation, encrypted-key prompt, authentication failure, changed host key, conflict, and success without frontend-owned protocol logic.
- Inspect feature graphs/artifacts to prove CLI/TUI/desktop include `russh` by default and the default iPhone/Apple static library does not.
- Build the normal CLI, TUI, desktop, packaging path, and Apple simulator target. Install over the existing simulator app if runtime validation is needed; do not reset simulator state.
- Verify HTTPS flows still work in every affected frontend.
- Run all repository-required Rust gates plus required Apple generation/simulator gates for Apple build-graph changes.
## Acceptance criteria
- Standard CLI, TUI, and desktop builds can configure and use either requested SSH URL spelling with every existing Git remote action.
- The default iPhone build contains no SSH dependency/code path or SSH setup UI and continues to support HTTPS.
- Host trust and key prompts are explicit, cancellable, secret-safe, and driven by typed storage APIs.
- No frontend contains URL parsing, key policy, known-hosts policy, pack protocol, or remote-command construction.
Depends on complete SSH upload-pack and receive-pack support in this milestone.
hugo
added this to the 07 - Pure-Rust Git-over-SSH remotes milestone 2026-08-24 20:17:07 +00:00
Standard CLI, TUI, and desktop builds now enable the storage ssh feature and route Fetch, Pull, Push, Sync, status, progress, cancellation, and conflicts through typed storage transport selection.
Both ssh:// and scp-like remotes remain storage-parsed and are displayed without frontend URL parsing.
Added native, cancellable unknown-host confirmation and masked encrypted-key passphrase flows. Prompted passphrases are redacted and persisted only after successful SSH authentication. Changed host keys remain non-bypassable.
Host confirmation is storage-owned and now verifies that the observed host and port match the configured endpoint before persisting known-hosts state.
Apple explicitly uses the full storage API without ssh, preserving typed unsupported-transport behavior before connection work and leaving HTTPS unchanged.
Updated packaging, configuration, synchronization, secure-storage, CLI parity, desktop audit, README, and Apple testing documentation.
cargo test --workspace: 58 storage, 17 CLI, 102 TUI, 37 desktop, 5 Apple, and all integration/doc suites passed
Focused no-SSH storage regression passed
Isolated ironstorage-apple check passed; its feature graph contains no russh
CLI, TUI, and desktop feature graphs include russh through the explicit ssh feature
cargo bundle-macos produced the normal release IronStorage.app with CLI, TUI, and desktop binaries
xcodegen generate and the arm64 iPhone simulator build succeeded without resetting or reinstalling simulator state
Actual packaged desktop app was launched with Computer Use; Git Status rendered the transport-neutral safety text and the configured HTTPS remote as typed HTTPS, with a clean repository
Dependency advisory evidence:
cargo audit reports RUSTSEC-2023-0071 for rsa 0.9.10 and 0.10.0-rc.18, both medium severity with no fixed upgrade currently available, plus 15 allowed maintenance/unsoundness warnings. This is recorded for the dedicated compatibility/security audit in #118 rather than concealed or waived here.
No iPhone UI/source behavior changed, so no simulator state mutation or physical-device deployment was needed.
Implemented and pushed in commit a737e74.
Implementation:
- Standard CLI, TUI, and desktop builds now enable the storage ssh feature and route Fetch, Pull, Push, Sync, status, progress, cancellation, and conflicts through typed storage transport selection.
- Both ssh:// and scp-like remotes remain storage-parsed and are displayed without frontend URL parsing.
- Added native, cancellable unknown-host confirmation and masked encrypted-key passphrase flows. Prompted passphrases are redacted and persisted only after successful SSH authentication. Changed host keys remain non-bypassable.
- Host confirmation is storage-owned and now verifies that the observed host and port match the configured endpoint before persisting known-hosts state.
- Apple explicitly uses the full storage API without ssh, preserving typed unsupported-transport behavior before connection work and leaving HTTPS unchanged.
- Updated packaging, configuration, synchronization, secure-storage, CLI parity, desktop audit, README, and Apple testing documentation.
Verification:
- cargo fmt --all -- --check
- RUSTFLAGS="-D warnings" cargo check --workspace --all-targets
- cargo clippy --workspace --all-targets -- -D warnings
- cargo test --workspace: 58 storage, 17 CLI, 102 TUI, 37 desktop, 5 Apple, and all integration/doc suites passed
- Focused no-SSH storage regression passed
- Isolated ironstorage-apple check passed; its feature graph contains no russh
- CLI, TUI, and desktop feature graphs include russh through the explicit ssh feature
- cargo bundle-macos produced the normal release IronStorage.app with CLI, TUI, and desktop binaries
- xcodegen generate and the arm64 iPhone simulator build succeeded without resetting or reinstalling simulator state
- Actual packaged desktop app was launched with Computer Use; Git Status rendered the transport-neutral safety text and the configured HTTPS remote as typed HTTPS, with a clean repository
Dependency advisory evidence:
- cargo audit reports RUSTSEC-2023-0071 for rsa 0.9.10 and 0.10.0-rc.18, both medium severity with no fixed upgrade currently available, plus 15 allowed maintenance/unsoundness warnings. This is recorded for the dedicated compatibility/security audit in #118 rather than concealed or waived here.
No iPhone UI/source behavior changed, so no simulator state mutation or physical-device deployment was needed.
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
Ship the optional SSH transport as normal functionality in the CLI, TUI, and Iced desktop application, while the default iPhone/Apple build remains free of SSH code and setup.
Scope
sshCargo feature explicitly inapps/cli,apps/tui, andapps/desktopso their ordinary development and release artifacts support SSH without an extra build flag.crates/appleand the iPhone Xcode/Rust build on storage withoutsshby default. Do not add SSH onboarding, key import, host trust, or agent assumptions to the iPhone UI in this milestone.ssh://and scp-like remote spellings in remote/configuration surfaces. Never parse them in a frontend or derive transport from a label.Tests and verification
russhby default and the default iPhone/Apple static library does not.Acceptance criteria
Depends on complete SSH upload-pack and receive-pack support in this milestone.
Implemented and pushed in commit
a737e74.Implementation:
Verification:
Dependency advisory evidence:
No iPhone UI/source behavior changed, so no simulator state mutation or physical-device deployment was needed.