Repository navigation
Replies: 74 comments
Dependency updates: clap, clap_complete, vitest, autoprefixer, codecov-actionPost-4.2.0 follow-up, done on Six Dependabot pull requests arrived after the release, all patch or minor versions. Changes that touch the same lockfile were grouped, so each group ran the full build matrix once instead of once per update.
The lock changes are Dependabot's own, applied unchanged: regenerating with a local cargo also rewrote unrelated entries. Verified green: full GitHub Actions on each merged head; for the frontend group also locally |
FlatPark gets new releases right away, and is listed as a Linux install methodPost-4.2.0 follow-up, fixed on FlatPark is an independent community Flatpak repository that installs our official
The job runs only on a tag, so its first real run is v4.2.1. The same notification, sent by hand for v4.2.0, was accepted by FlatPark. Verified green: full GitHub Actions on the merged head, including the Linux, Windows and macOS builds. |
Moving a local file to the trash no longer turns into a silent copy, or a silent permanent deletePost-4.2.0 follow-up, fixed on
The prediction mirrors the crate's own choice of trash folder at 5.2.9: same mount table, Verified green: full GitHub Actions on the merged head (Linux, Windows, macOS x64 and arm64 builds, |
Recursive downloads now honour the stream flagsPost-4.2.0 follow-up, fixed on
Coverage: three entry points ( Verified green: full GitHub Actions on the merged head, including the CLI smoke tests on Linux, Windows and macOS. |
A failed extraction no longer empties a file you already hadPost-4.2.0 follow-up, fixed on Every extractor created the destination file before decoding the entry, and a wrong 7z password is only detected while decoding. So extracting with the wrong password left an empty file behind. When a file with the same name was already in the destination folder, it was truncated to zero bytes. Found while checking a failed AeroAgent 7z test: the archive and the tool were correct, but the extraction had been given a different password than the one used to create it.
Verified green: full GitHub Actions on the merged head. The new tests failed on the previous code first: the user's file came back empty, and the replaced script came back with mode 664. |
AeroAgent now sees every saved serverPost-4.2.0 follow-up, fixed on On a vault of 96 profiles, AeroAgent could not find a profile that was plainly there, and answered that it did not exist. The server list, about 34 KB, went through a generic 8 KB cap, so the model only ever saw the first fifth of it. The tool also did not tell the model that it could search by name.
Verified green: full GitHub Actions on the merged head; the new tests failed on the previous code first. |
AeroAgent approvals open in a dedicated AeroFTP windowPost-4.2.0 follow-up, done on AeroAgent used to ask for approval of write actions through the system's message box. It was opened outside the chat on purpose, but it looked foreign to the app and showed plain text only. In expert mode it was also the only confirmation you saw for each write.
What it does not claim: the main window's own capabilities still include file and shell access. The approval window stops the chat from approving the agent's own actions; it does not protect against code that has already taken over the main window. The new strings are translated in 47 languages. Verified green: full GitHub Actions on the merged head. The isolation tests failed first against a stub that accepted any window. Live check on the desktop pending. |
Proton Drive, through the official Proton Drive CLIPost-4.2.0 follow-up, done on Proton Drive has no API open to third-party apps yet. Its official command-line client does exist: you install it, sign in to it in the browser, and it keeps its own session. AeroFTP now drives that CLI, the way it already drives MEGAcmd. You sign in to Proton in the browser and AeroFTP never sees your Proton password. Proton has been informed of the integration. AeroFTP is a third-party application, not supported by Proton, and the connection screen says so.
Known limits of the CLI today: one Proton account per OS user, no storage quota, no transfer progress, no ranged reads, and each operation starts the CLI anew. Verified green: full GitHub Actions on the merged head (Linux, Windows and macOS builds, CLI smoke, |
OpenRouter: "Test connection" now tells a valid key from an invalid onePost-4.2.0 follow-up, fixed on The AeroAgent settings tested an OpenRouter key by asking for the model list. OpenRouter serves that list to anyone, so a wrong or revoked key passed the test and failed only at the first chat message, with a 401 that seemed to contradict the green test.
Verified green: full GitHub Actions on the merged head (Linux, Windows and macOS builds, |
Secondary windows no longer carry the main menu barPost-4.2.0 follow-up, fixed on On Linux the application menu (File, Edit, View, Help) is set for every window, so the new AeroAgent approval window and the extraction progress window showed the full menu bar of the main window, with commands that make no sense there.
Verified green: full GitHub Actions on the merged head (Linux, Windows and macOS builds, |
Linux in-app updates no longer leave a copy of the package in /var/tmpPost-4.2.0 follow-up, fixed on The Linux update helper copies the verified package to
Helper run as an unprivileged user with stub
Not run: a real root install through the updater on a packaged build. The stubs replace only the installer, so the gap leans on Verified green: full GitHub Actions on the merged head (Linux, Windows and macOS builds, |
AeroAgent: allow a tool for the rest of the chat, from the approval windowPost-4.2.0 follow-up, fixed on Asking AeroAgent to create three folders meant approving three times, and the "remember" choice only covered a repeat of the exact same call, so the next folder asked again.
Verified green: full GitHub Actions on the merged head (Linux, Windows and macOS builds, |
Copy buttons: always the native clipboard, and "copied" only when it happenedPost-4.2.0 follow-up, fixed on Some copy buttons wrote through the web clipboard API, which can fail silently in the desktop webview, and several showed "copied" whether or not the copy worked.
Verified green: full GitHub Actions on the merged head (Linux, Windows and macOS builds, |
Proton Drive form: two columns and a live check of the CLIPost-4.2.0 follow-up, done on The Proton Drive connection form now follows the MEGA and Filen layout, and tells you whether the Proton Drive CLI is ready before you press Connect.
Verified green: full GitHub Actions on the merged head (Linux, Windows and macOS builds, CLI smoke, |
AeroAgent opens alone, on a new chatPost-4.2.0 follow-up, fixed on
Verified green: full GitHub Actions on the merged head, |
Archive extraction no longer reports success with empty or truncated filesPost-4.2.0 follow-up, on Found through a random CI red: with a wrong 7z password, about one extraction in 256 succeeded and replaced the file already at the destination with 0 bytes, because an entry that ended before its declared size was accepted and the 7z library checks the CRC only at the full size. The review of that fix found the same kind of silent short or wrong extraction in several other readers.
No live test against a remote: these are local extraction paths, pinned by deterministic fixtures (a 7z whose wrong password decrypts to an early end, checked independently with 7-Zip, and RAR test data from the unrar crate), each fix seen red on the code before it. Verified green: GitHub Actions on Linux, macOS and Windows; clippy |
One modification-time rule for sync, and CLI one-way sync at parity with the GUIPost-4.2.0 follow-up, on Sync compared file times differently on every surface and backend: some compared raw date strings, FTP
Declared in the PR: under PreferNewer or PreferRemote a file left unsettled stays in conflict until the user settles it (one cycle under PreferLocal or KeepBoth), and the sentinel baseline and a short window between the re-read and the stamp are stated limits. Verified green: GitHub Actions on Linux, macOS and Windows; clippy |
Storage reads can be cancelled, the Dropbox trash survives throttling, and OneDrive mkdir refreshes its parentPost-4.2.0 follow-up, on Three provider problems from EhudKirsh's reports, plus a review round and a OneDrive cache fix found on the way.
Not reproduced live: the Filen WebDAV stall and the exact Windows plus crypt-overlay OneDrive case need EhudKirsh's retest, so #958 and #957 stay open until he confirms. Verified green: GitHub Actions on Linux, macOS and Windows; clippy |
Eight dependency updates in one review, and 7z compression with a very large dictionary keeps workingPost-4.2.0 follow-up, on
sevenz-rust2 0.23 now refuses to encode with an LZMA2 dictionary above 1073741823 bytes; AeroFTP clamped a requested size only to 4 GiB, so
Verified green: GitHub Actions on Linux, macOS and Windows; clippy |
Ctrl-C stops a single-file transfer, and download temporaries are no longer taken over by another writerPost-4.2.0 follow-up, on Ctrl-C during a single-file
Declared and carried to v4.2.2: the segmented engine releases its claim before its caller's last check and rename, so two segmented downloads of the same destination started in that window can still collide. No live test against a remote service: the paths are pinned by tests on scripted FTP servers and local doubles, each red on the code before it (18 mutations, all killed). Verified green: GitHub Actions on Linux, macOS and Windows; clippy |
AeroAgent 1.5: modern provider contracts, native tool continuations and a Stop buttonPost-4.2.0 follow-up, on AeroAgent now talks to modern reasoning models the way each provider expects, keeps their native state across tool calls, and gains a Stop button. It carries its own version, 1.5, shown in the welcome screen and in settings.
Not in this release: the background workers of the AeroAgent lane stay off and ship complete in v4.2.2.
Not verified live: the OpenAI Responses continuation with encrypted reasoning (tested on recorded shapes only) and the Anthropic transports (no paid calls). Verified green: GitHub Actions on Linux, macOS and Windows; clippy |
Cloud providers no longer act on an item whose name differs only in casePost-4.2.0 follow-up, on A review finding on #960 (OneDrive forgot cached folder ids by an exact, case-sensitive match) turned out to be a class. On several providers a folder cached under one capitalization kept a stale id after a rename, move or delete, and some lookups matched a name while ignoring its case, so an upload, a delete or a replace could land on a different, live item.
Declared: on Google Drive, where two names differing only in case are distinct items, a read with a differently cased path is now NotFound and Not verified live: each provider's case behaviour and the trash parent fields come from the providers' documentation and rclone, modelled in local doubles; every fix is pinned by a test seen red on the code before it. Verified green: GitHub Actions on Linux, macOS and Windows; clippy |
A skip-existing keystore import keeps the profiles added after the backupFound by the 4.2.1 pre-release review, fixed on Importing a keystore backup with the default "Skip existing" and without opening "Review changes" replaced My Servers with the backup's list whenever the backup carried the account partition: a server added after the backup disappeared. The import now applies the same profile plan the review dialog uses, with its defaults, so nothing local is removed unless you choose it.
Each fix has a test seen red on the previous code. No live test: the import runs on local files only, and the tests cover it end to end on real temporary vaults. Verified green: CI on the final head (Format, audit and unit tests, build on Linux, Windows and macOS x64/aarch64, CLI smoke on three OSes, portal checks), CodeRabbit clean on the final tree after three rounds, zero open threads. |
Provider fixes from the pre-release review: FTPS refusals, OneDrive stale ids, trash purgesFound by the 4.2.1 pre-release review, fixed on Nine provider findings closed before the tag. Each behaviour fix has a test seen red on the previous code.
Live checks not yet run: FTPS 552 refusal, OneDrive stale id, Box and kDrive trash purge, Twake progress, Proton share password. They need live accounts on the release station; this post will be updated with the results. Verified green: CI on the final head (Format, audit and unit tests, build on Linux, Windows and macOS x64/aarch64, CLI smoke on three OSes, Windows native unit tests), CodeRabbit clean on the final head, zero open threads. |
A Mirror keeps what it did not complete, and removing a folder never takes its content alongFound by the 4.2.1 pre-release review, fixed on Two blockers of the review sat in AeroSync: a Mirror could delete a destination folder together with files it had not completed or had been told to leave alone, and an exported sync script ran without the Plan's exclusions. Fixing the first led to a deeper rule: a folder removal that is not explicitly recursive now refuses a folder that holds anything, on every backend.
Live tests, debug CLI built from the branch, each in a throwaway folder removed afterwards:
Not run live: the Mirror from the GUI itself (its runner is covered by unit tests; the provider and CLI paths it calls ran live above). Where an API offers no delete that refuses a non-empty folder, one round trip remains between the check and the delete; the delete goes to the provider's trash there. Verified green: CI on the final head (Format, audit and unit tests, build on Linux, Windows and macOS x64/aarch64, Windows native unit tests, CLI smoke on three OSes), CodeRabbit clean on the final head after five rounds, zero open threads. |
Archive extraction near the name limit, Flatpak import, trash and platform fixesFound by the 4.2.1 pre-release review, fixed on Ten findings closed before the tag, one of them a blocker: extracting an archive stopped on any entry whose file name was longer than about 232 bytes. Each behaviour fix has a test seen red on the previous code.
No live test beyond the unit and integration tests: the extraction cases run on real temporary archives and folders. Verified green: CI on the final head after realigning on current |
AeroAgent approvals fail closed, and Stop reaches the running toolsFound by the 4.2.1 pre-release review, fixed on Six AeroAgent findings closed before the tag. Each behaviour fix has a test seen red on the previous code.
Declared in the PR: a blocking step already running (a hash, a local scan) ends there and its result is discarded; the CLI and MCP contexts keep their own cancellation path. No live test with a model provider. Verified green: CI on the final head after realigning on current |
The CLI reports Ctrl-C as interrupted, never drops an immutable transfer, and rounds delete caps downFound by the 4.2.1 pre-release review, fixed on Ten CLI findings closed before the tag. Each behaviour fix has a test seen red on the previous code.
Verified green: CI on the final head, realigned on current |
✅ Released as v4.2.1AeroFTP v4.2.1 is out: Four New Ways to Connect, and a Round of Repairs. Every one of the 74 queued rows above shipped. Highlights:
Thanks to @EhudKirsh and @Markoise for the reports and discussion that shaped this release. The still-open Requested rows and the 4.2.1 follow-ups carry over to the new tracker: [Tracker] AeroFTP 4.2.2 (#998). This tracker now closes. |
|
completed |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
AeroFTP 4.2.1, Rolling Tracker
Umbrella issue for the next AeroFTP release (v4.2.1): known issues reported against v4.2.0 and the patches/updates landing on
mainafter the v4.2.0 tag.Before opening a new issue, please check the lists below. If your problem is already tracked here, just add a thumbs-up reaction or a comment with your environment (OS, version, provider) instead of filing a duplicate. We update this issue as bugs are found and fixed.
Found something that is not listed? Open a new issue and we will link it here.
What shipped in 4.2.0
See the v4.2.0 tracker (#701) and the release notes for the full change set, 165 tracked changes over 169 commits in three weeks, the longest cycle since the project started. The theme was measurement rather than features. The transfer engine went through a live review battery against rclone on the same links, payloads and servers, and every gap it found was closed and measured again: a speed limit most providers ignored, one-way sync re-uploading unchanged trees, a new SSH handshake for every SFTP file, serial scans and serial reads. The last work of the cycle went into the download path, where a file assembled from several streams could be handed back built out of two versions of the same object, with the right length and nothing to signal it; that was reproduced on a live server before it was fixed, and the check now covers every path that assembles a file out of parallel windows. Three independent review passes ran over the cycle, and the final one returned three blockers, two of them older than this release, both able to delete a remote file after a symbolic link had been skipped by a scan. The shape that recurred across the whole cycle was an answer that looked complete while part of the work had not been seen, which is why so many entries are about scans, deletes, exit codes and percentages that now state what they did not cover.
Patches & updates queued for 4.2.1
Done on
main, shipping in the next release.clap4.6.7 andclap_complete4.6.11 (zsh completion escaping),vitest5.0.1 andautoprefixer10.6.1 (development only),codecov-action7.1.1, grouped so each lockfile ran the build matrix once. Details.8bdfefaa3,111203c15,fef2538c0ccf5d33492a0b0fadaget, globgetandsyncdownloads now honour--multi-thread-streams,--multi-thread-cutoffand the SFTP presets instead of always using the measured default, and print the effective policy. Details.70096c647c2dcf151d853879b84b9e4c2ebe05e4fe8b00d60af4f9/key) instead of the public model list, so an invalid key no longer passes the test and fails at the first message; pasted keys are trimmed. Details.17098e217a88bef9cf/var/tmp. Details.61040d42273df627d275498232a50b86947c50cfa29dbde7908839/var/tmpby earlier versions are removed on the next .deb or .rpm install. Details.bb4c32a1b52d55cf19rand0.10.3,tauri-plugin-log2.9.2 andtauri-plugin-single-instance2.4.5, with no manifest or pin change. Details.dfa1394ecdb43369ce241bd0336508ce1e84c34482f3local_to_remote), with headers and translated preset names. Details.13dac0029f2b7590af325a4d6d588f15f8456cbcef94a7c8aa17af4ab49265d76e1f0da00abaeec713857ee45118bb3fd5c1a8, docs41cb6eb&in site names, users, folders and plain-text passwords, which used to come through mangled. Details.67b21b7eb4c7dc01ec8a2474aeroftp-cli syncline, and Plan and Compare are translated; the template-import message that read as a contradiction ("applies exactly one, so nothing was imported") is reworded at the English source and in all 47 languages. Details.750cda33.aeroftp-scriptruns what it says: the batch reads and checks the whole script first, runsSYNCasaeroftp-cli syncandCONNECT --profileas a saved profile, and a percentage delete cap can no longer let a fully replaced source empty the destination. Details.2ccd56ccOPTS HASH, the digest is read correctly from the reply, and the legacyX*verbs no longer show a wrong value as a correct one. Details.ef4f9923b29678104eefba62aeroftp-cli export rclonenow exports Internxt profiles, and the rclone import refuses values it cannot read, names why it skips a remote and keeps secrets out of its output. Details.bc32ec0b0dc283a1edit, a WebDAV client saving a document) overwrites in one step or refuses before it writes. Details.5a428146144fa28a55f83e9d7f2dc00399169d4c6f82030461ba5fcae6ea8f55291--multi-thread-cutoffmeans the same on single-file, batch andpgetdownloads: WebDAV and Koofr honour a value under 1 MiB, an invalid value is a usage error (exit 5) instead of a silent 250M, and one planner decides how many streams a file gets. Details.f502d2606568d10bf46bebba9664c3b8c405rmwithout-rnever erases a non-empty folder, served DELE and REMOVE delete files only, edits keep the file mode and refuse links, plus Azure, Swift, Jottacloud, Drime and rclone bridge fixes. Details.f0dd7f87081ac0b4d4--immutablerefuses the partial a cut left instead of skipping it. Details.052043f9a69f94a0d4--update,--conflict-mode,--modify-window,--checksum). Details.a44b3de410beacbad91847e16a0ba6ea3df0agent --provider anthropicworking again. Details.3c38094f9aec5c2a66cef120d6969059502acd9ac63d764fc765fdefaca42832dd73e111Requested / under consideration
Community requests and internal follow-ups being evaluated for this or a later release.
-iselectors (prioritised by the reporter ahead ofEdit(E)and the 2-letter semantics; exact behaviour to be pinned).jpgto.jxltranscode in AeroFile: JXL re-encodes an existing JPEG losslessly and reversibly (the original JPEG bytes reconstruct exactly), for a real size win with no quality loss. Candidate framing: AeroFile as a GUI for libjxl.icnsmulti-size (the v4.1.0 ones are single-resolution drafts). Needs a Mac to build and live-testparticipants/addcontactUUID format (currently a best-effort workaround), investigate the Filen free-plan 10-note limit ghost-note cleanup, and add a rich text editor for the rich note typemalloc(): unaligned fastbin chunk detected, the classic GLib heap-corruption signature, and it is the victim rather than the corruptor. Two marshalling fixes shipped in v4.0.5 and the SIGABRT still recurs with an identical signature, so the marshalling is incomplete and the remaining suspects are the event and plugin callbacks whose thread context is unconfirmed. Details.HKCUand re-read by the NSIS post-install hook so an in-app update cannot silently restore the association, plus a/NOASSOCsetup switch. Parked rather than half built, because a visible components-page checkbox needs forking the Tauri NSIS template. Details.pathandpath/.... The trap is the one #764 just closed, moved by one character: a sibling likereportsXalso matches the shorter prefix. Whoever takes this must write both doors before the change, not after:reportsXsurvives a delete ofreports, andreportssurvives when it is a real non-empty file. Worth doing when someone measures a slow recursive delete on a tree with many folders, not before. 4.2.1 context: #979 changed folder-removal semantics (a folder is removed only once empty,sync --deleteremoves the directories it emptied on every backend) but did not touch this listing or its probe; still open.defaultSaltTogglesays "no kit or keystore needed after create" anddefaultSaltTierMeaningsays "nothing else has to be carried", and neither holds, because the wrapped master key lives in the config rather than in the password, so a headerless vault needs the keystore whatever its salt mode. Two ways out, and the choice is a product call: implement the reconstruction and make the promise true, or correct the wording across 47 locales. Found while working #347; the copy was left untouched there on purpose. Details.transfer_dag_batch.rskeeps a copy of the handle and aborts on theErrarm, which is how a cancelled token arrives. But if the task is dropped outright rather than cancelled through the token, the await insidemultipart_abortdies with it and nothing on the runner path resends it, so the parts wait for the bucket lifecycle rule. Predates #766, which introduced the guard on the two provider paths only.If-Matchcannot be told from an object that really changed. A gateway answering 412 to every pinned range would send every download back to a single stream while the output announces four, and nothing distinguishes that from a replacement today. Raised during the review of #885 and deferred with the reason written down.syncdownloads print the effective multi-thread policy and one planner decide the stream count, but the server refusal itself is still log-only; still open.TransferCapabilities.atomic_renameisUnsupportedfor every provider and nothing reads it, while SFTP servers that announceposix-renamedo support it: the capability should carry the measured answer so a plan can show where it came from..aerotmpis not tied to the version it was started from. Resuming a partial download against an object replaced in the meantime joins two versions by a route #885 did not close..zsyncnext to the AppImage, so AppImageUpdate, AppImageLauncher, AM and AppManager can update AeroFTP by downloading only the changed blocks. The release workflow already repacks the AppImage withappimagetool, which is where-u "gh-releases-zsync|axpdev-lab|aeroftp|latest|AeroFTP_*_amd64.AppImage.zsync"goes; the.zsyncmust then reach the release assets.Known issues found after release
Reported against v4.2.0. Empty at the time of opening: every entry in the previous tracker's block was resolved before it closed, so nothing carried over as pending.
mainin5a428146, shipping in v4.2.1 (row 47): every provider refuses an occupied destination, see #944 for v4.2.1.Legend: 🔴 confirmed · 🟡 investigating · 🔵 planned / idea · 🟢 done / fixed (pending release) · ✅ released
All reactions