Ghost FTP 0.95.30 — Windows/Linux folder sync reliability and performance (development Preview)
Published predecessor: v0.95.29; keep the published release tag and assets immutable.
Actual changes
- Coalesce OS filesystem watcher events into a bounded single pending wake-up, eliminating unbounded event queue growth during mass file edits.
- Replace recursive, potentially exponentially slow exclude glob matching with a linear-memory state machine and established '*', '', '/' and '?' behavior.
- Sweep abandoned delta-transfer temp files without following symbolic links into other folders, skipping symlinked files and special nodes, with 100,000-entry and 64-level traversal caps.
- Limit sustained watcher debounce to five seconds rather than deferring synchronization forever.
- Fail closed on remote Mirror root dot aliases/parent traversal and local Mirror roots with parent traversal components.
- Add regressions for pathological wildcard cases, Unicode paths, Mirror root traversal, 50,000 notification bursts and Unix symlink escapes.
- Advance shared version metadata for Rust, npm, Tauri, Go and Android to 0.95.30 Preview. Android/macOS features are unchanged.
Acceptance gates
- Exact-source Rust formatting, tests, Clippy and frontend contracts.
- Windows process hardening, Windows NSIS/MSI packages.
- Linux DEB/RPM/AppImage build and smoke.
- FTP/FTPS/SFTP protocol E2E, macOS and Android compatibility.
- Manual Windows/Linux high-volume, local symlink race, UI accessibility and installed app QA.
Limitations: Cleanup uses path-based metadata preflight and is not descriptor-relative; a concurrent symlink/directory swap may still create TOCTOU risks. No production-stable or full FileZilla parity claim.