[3.7.3] - 2026-05-06
Community Benchmark (Phase 1) + CI / UX fixes
Added
aeroftp-cli benchmarkCLI command: schema-v1 conforming, sanitization-enforced community benchmark across upload, download, list, stat, and delete operations. Four levels are available (quick,standard,deep,custom). Output is anonymized: no hostnames, paths, credentials, usernames, or bucket names are written to the report. Seedocs/COMMUNITY-BENCHMARK.mdand the new Community Benchmark Report Issue template to participate.- Community Benchmark public guide:
docs/COMMUNITY-BENCHMARK.mdexplains why the dataset exists, how to run each benchmark level, what the JSON report contains, what is never collected, how to submit a report manually, and how the 2-month Phase 2 decision gate works. - Benchmark report Issue template:
.github/ISSUE_TEMPLATE/benchmark-report.ymlaccepts sanitized JSON reports with coarse region and connection-type metadata, keeping Phase 1 human-reviewed and consent-based.
Fixed
- Windows titlebar: modal close buttons (X) within the upper 36 px were blocked by an overly wide drag region. Drag is preserved by the two explicit child elements (logo + spacer), while interactive controls can receive their first click.
- ImageKit listing rejected by API: the provider was sending
type=file-and-folderto ImageKit's/filesendpoint, which is not in the API's accepted set (file | file-version | folder | all). Every list call after a successful authentication failed withInvalid configuration: Your request contains invalid value for type parameter. Switched totype=all, which returns the folder + file mix the rest of the provider already consumes. - ImageKit listing decode error on folder rows: with
type=all, ImageKit emits an explicit JSONnullfor fields that only make sense on file entries (size,tags,mime,fileType, dimensions).#[serde(default)]only fires on missing keys and tripped onnull, so the response refused to deserialize againstVec<IkFile>and the connection failed withParse error: error decoding response body. Added anull_to_defaultdeserializer helper applied to every non-Optionfield that the API can return asnullfor folder rows. - Activity log "Authenticated as htt"*:
maskCredential()was masking provider account identifiers that happen to be public URLs (ImageKit'sURL Endpoint ID, Uploadcare's, self-hosted WebDAV / Immich) as the unhelpful three-char prefix. The endpoint URL is not secret. The helper now detectshttps://...and returnshost + pathnameunmasked, so the log readsAuthenticated as ik.imagekit.io/aeroftpinstead. AKIA / email / generic-username masking unchanged. benchmarkCLI ignored profile initial path: the working directory was anchored at the remote root (/.aeroftp-bench/...) regardless of the profile'sinitialPath. On read-only roots the benchmark failed before any measurement. Now anchored under the resolved profile base, so cleanup, leak grep and report paths share a single, profile-respecting prefix. Warm-up upload errors are also fatal now, instead of being swallowed into asummary.errors=[]"0 runs" report.- IntroHub redundant
+ Newbutton merged into Discover tab (#171): the standalone "+ New" button next to the tab strip and the "Discover Services" tab opened the exact same destination. Reported by @legion1978: two side-by-side controls for one action confused the onboarding instead of clarifying it. The "+ New" button has been removed; the Discover tab is now labeledAdd Service(translated in 47 languages) and uses a circled-plus icon to keep the affordance explicit. The Ctrl+N shortcut and the empty-state quick-connect still route to the same tab.
CI
- Snap build: Tauri release binary is now built inside the
build-snapjob beforesnapcore/action-build. The job pullslibnghttp2-14patched against USN-8233-1 from the Ubuntu archive at build time. build-snapno longer silently green: droppedcontinue-on-errorfrom the actual build step and switched the post-build confirm step to fail-loud (exit 1 on missing or sub-10 MB output). The v3.7.2 deploy of the dedicated job ran withcontinue-on-error: truemasking a real failure as success and skipping the downstream sigstore / GitHub Release / Snap Store steps. With this change a snap regression now blocks the release like deb / rpm / AppImage do.
Downloads:
- Windows:
.msiinstaller,.exe, or.zipportable (no installation required) - macOS:
.dmgdisk image - Linux:
.deb,.rpm,.snap, or.AppImage