Ghost FTP 0.99.19 — FTP/SFTP rename integrity and real-screen QA (Preview)
Previous source edition: 0.99.18. Required prior public release: v0.99.18.
Implemented in this development PR
- FTP/FTPS and SFTP backend rename operations now inventory the destination directory and refuse a known existing destination instead of allowing an unconfirmed overwrite. Keep path traversal validation, hidden-file safety, protocol identity validation and non-fabricated error handling.
- Real local FTP, explicit FTPS and OpenSSH SFTP E2E tests seed an existing destination, attempt the collision, verify both original byte streams unchanged, clean up only the test fixture, and then verify ordinary renaming still works.
- Android saved-sites screen adds a functional full-width Add New Connection action and distinguishes a genuinely empty saved-site store from a no-results search, without creating illustrative example profiles. UI instrumentation follows the action to the real blank site editor.
- Phase 3 reproducible audit of seven actual Android v0.99.18 debug View captures against the supplied v8/v10 concept sources; record pixel-level differences and provenance in
docs/qa/PHASE3_REAL_ANDROID_V0_99_18_2026_10_29.md.\n- Capture and compare two new genuine 0.99.19 Windows/Linux Sync & Backup runtime screens from the successful real native-build job (artifact IDs 12863646039 and 12862768368); seedocs/qa/PHASE3_REAL_WINDOWS_LINUX_SYNC_V0_99_19_2026_10_29.md.\n- Improve live desktop Sync & Backup visual hierarchy with four compact metric cards populated only from actual saved sync pairs, completed sync history and running operations. Do not invent activity to match the illustrative reference.\n- Fix the sole failing v0.99.19 quality CI Clippyredundant_guardsfinding in the remote path parent resolver without disabling lint.
Remaining non-negotiable acceptance gates
- FTP/SFTP rename preflight is not atomic. A concurrent remote writer may create the target after listing but before RENAME. Server-side rename-if-absent semantics cannot be assumed; do not claim absolute data-loss prevention without an appropriate backend-supported atomic operation or serialization contract.
- Native Swift macOS identity-verified FTPS/SFTP remains blocked by issue #223. Never fall back to plaintext.
- Android automatic mirror/synchronization remains disabled because verified conflict-safe transfer semantics are not yet implemented; do not present it as a completed feature.
- 75 design PNGs are verified; 8 Windows (7 v0.99.17 + 1 v0.99.19), 2 Linux (1 v0.99.17 + 1 v0.99.19) and 7 Android (v0.99.18) actual captures have been compared. 17/75 compared; 0/75 have complete accepted runtime/interaction/accessibility evidence and the three source builds are not a unified 75-screen installed acceptance.
- No separate Ghost FTP Server engine exists in this release. Phase 4 is deliberately not started.
- Mark edition Preview; no production signing/notarization or Play-signed AAB is claimed. Publish only after all exact-head CI gates pass and immutable release lineage is valid.