Ghost FTP 0.99.7 — Android local Files stability and cross-platform audit
Development Preview; not certified pixel-identical to the sixteen Android reference screens. Previous released version: v0.99.6.
Changes
- Avoid Android ANR/crashes from app-private local file enumeration on the UI thread, inaccessible directories, directory symlinks and stale folder callbacks. Use a worker, bounded DirectoryStream traversal, no arbitrary storage permissions and honest partial-list/error UI.
- Add JVM regression tests for sorting, boundaries, symlinks, disappearing storage and bounded scans.
- Expand the repository dead-code analyzer across production Kotlin, Swift, Rust, TypeScript and Go at the nonpublic function level, complementing existing Android resources, operational scripts and module/entrypoint analysis. All function findings are advisory; OS callbacks, JS imports, Rust macros, reflection, Swift selectors, CI entrypoints and migrations require manual proof before removal.
Required release gates
Pass exact-commit Android lint, JVM tests and emulator/viewport instrumentation, TypeScript strict build/dead-code tests, Rust workspace checks, Swift builds, Go tests, FTP/FTPS/SFTP E2E, release inventory and SHA-256. Preserve installed data, signing keys, Keychain and historical releases.
Unfinished
Real-device crash reproduction and physical acceptance; exact 16/16 design parity, durable multi-transfer queue, cloud-provider OAuth and full macOS FTPS/SFTP functionality are not certified. Do not label unsigned Preview packages as stable.
Verified dead-code cleanup
Removed the unused unexported decodeURLPath helper and its now-unneeded net/url import from tools/ghostftp-runtime/main.go. Source + test reference inventory showed no call site; the function was not a Go entrypoint, route callback or reflection target. Retain Go unit/vet/Linux/Windows builds as the final proof before merging. Rust #[cfg(test)] functions are now excluded from the production-candidate queue, avoiding hundreds of false positives; no platform runtime Rust APIs were deleted.