// Package sshpush implements the v0.9 SSH-push transport layer (REQ-073, // R-001): the CLI on the operator host SSHes to each peer to render files, // apply configs, and run commands. It replaces the v0.8 // internal/transport mTLS HTTP layer. // // The Transport reuses one *ssh.Client per peer across multiple // operations within a single CLI invocation (I-B-001), retries transient // failures with exponential backoff (100ms ×2, cap 5s, max 5 attempts — // reimplemented from the v0.8 transport/retry.go pattern, since // internal/transport is deprecated and not imported), applies per-call // timeouts (10s exec, 30s SCP per I-B-001), and fans out to many peers // with bounded concurrency (default 8, errgroup + semaphore). // // Idempotency is content-addressed (C-18): WriteFile / WriteFileIdempotent // compare the remote file's SHA-256 to the local content and skip the // write on match — the SSH-push equivalent of the v0.8 X-Orca-Idempotency-Key. // // Host-key verification reuses proxmox.TOFUHostKeyCallback (D-035), which // reads/writes the known_hosts file (certpaths.KnownHostsPath during the // v0.9 dual-write window; the move to paths.KnownHostsPath happens in // v0.10-P14). The known_hosts file is flock-protected inside the TOFU // callback, so the Transport does NOT re-lock. package sshpush