Repository navigation
Replies: 163 comments
SourceForge file area pruned for the v4.1.9 cycle, and one thing it taught usRelease-channel housekeeping, not a code change on The retention rule is unchanged: the newest two release folders keep their full asset set, every older folder keeps only its
Verified by re-reading the server state through the project's RSS listing, not by trusting the tool's exit status, for the reason that follows. The exit code lied, and the listing told the truthOne delete reported failure: The cause is deliberately not attributed. SourceForge may simply be replying badly after doing the work, in which case the client is reporting faithfully what it received, so this is logged as measured behaviour and not as a defect in What matters is the consequence, and it is the mirror image of a trap this same script already guards against. The script refuses to read an empty listing as a clean folder, because a failed read and an empty folder produce the same reassuring number. This is the same failure with the sign flipped: a successful delete and a failed one produce the same alarming exit code. A prune loop under The rule for this channel: the exit status is a hint, the folder listing is the verdict. Recorded as item 10 in "Requested / under consideration" so the fix, confirming each delete by re-listing, is not rediscovered from scratch by whoever prunes next. |
Jottacloud refresh chains: two per station, a refusal that only half-cleared, and an export that shipped the dead one (#712)
Not the class elsewhere: MEGA's session key and the 4shared token are stored with |
postcss-selector-parser 6.1.4 for Dependabot alert 69 (#710)
|
AeroSync template export: the compare fields now follow the verify policy (#707, #514)
|
--immutable honoured by cp and mv, and fail-closed when the destination cannot be checked (#705)
|
kDrive: the token scopes are named where the token is created (#709, #650)
|
SourceForge prune: the listing decides a delete, not the exit code (#706, closes item 10)
|
docs/TESTING.md: the smoke entrypoint exists, say so (#713)
|
The Auto-Routing fallback model now answers, and Ollama can be a routing targetPost-4.1.9 follow-up, on
What review caught, and why each one mattered
The last one is worth keeping: the assertion looked like a regression test and proved nothing. The replacements each carry a marker that would otherwise fail over, so only the guard can produce false. Verified green: |
OneDrive Personal recycle bin: a Graph limit reported as such (#708, #397)
|
Jottacloud: purge a trashed folder and empty the trash (#711, closes item 9 as corrected)
|
--tui parity with -i, and both usable on an empty vault (#714, #347)
|
AeroRsync standalone crate, tranche A1: the module owns its delta engine, and its oracle tests now run (#715)Post-4.1.9 follow-up, done on First tranche of Phase A of the standalone-crate track: the
Verified green: |
AeroRsync standalone crate, tranche A2: progress sink and event notices owned by the module, event bridge removed (#716)Post-4.1.9 follow-up, done on Second tranche of Phase A of the standalone-crate track: two more application couplings leave the
Verified green: |
AeroRsync standalone crate, tranche A3: crate-owned errors and reports, adapter at the boundary (#717)Post-4.1.9 follow-up, done on Third tranche of Phase A: the module stops speaking the application's error and statistics vocabulary, and the translation moves to a new application adapter. Eight commits: three for the tranche, two from the adversarial review, three from the first CI run.
Verified green: |
The AeroRsync test harness generates its SSH key instead of keeping one in the repositoryPost-4.1.9 follow-up, fixed on The fixture key authorised only a user inside the throwaway test container and no real host (checked on the test station, the NAS and the account keys), but a private key with a development machine's name in a public repository has to be explained to everyone who finds it. The three capture scripts and the CI lane generate it at each run through one shared helper, with a neutral comment. Verified green: the Docker capture lanes in GitHub Actions ran with a key generated during the job, and |
S3 drawn as a bucket, and five review findings from the tester lanePost-4.1.9 follow-up, fixed on
Verified green: typecheck, 942 unit tests, Rust fmt and clippy, the new tests (three fail if the size mapping is narrowed to v3, the catalog test fails on the previous code), and the full GitHub Actions run on the pull request. |
Archives stay inside the destination, AeroCloud keeps files a partial listing omits, and Immich URLs are parsedPost-4.1.9 follow-up, fixed on Validated findings of the pre-release security audit, all older than v4.1.9.
Verified green: the new tests seen red on the previous code, clippy with |
The team is published in TEAM.md and in the About windowPost-4.1.9 follow-up, on
Verified green: |
Exported profiles point at the server and the TLS mode the connection usesPost-4.1.9 follow-up, fixed on The exporters rebuilt each address from the profile's host field instead of asking the connection, so a bookmark could name the wrong server or an unusable URL, and the FTP TLS mode was read from a key no connection reads.
Verified: the exported bookmarks read back with Cyberduck's command-line client against R2, FTPS, MinIO, Nextcloud and WebDAV; rclone listing the lab FTP over TLS from the new remote; 20 new tests plus four existing ones that pinned the defect, and the full GitHub Actions run on the pull request. |
Every S3 download ran on one stream, including the ones announced as fourPost-4.1.9 follow-up, fixed on
The desktop is not affected: it plans its own ranges and was already splitting. Verified: one request before and four ranged requests after against a local server, with matching SHA-256; three tests, one of which fails if the pinning header stops going out. |
A large upload keeps about half the memory it used toPost-4.1.9 follow-up, on The engine holds a bounded set of part buffers (four times 16 MiB over a 65 MB baseline), but on a many-core machine the C library kept the freed buffers in per-thread pools, so the process looked like it was holding 300 MB. The allocator is now asked, at startup of both binaries, to take buffers of that size from the kernel and return them on free.
The test pins that the setting is accepted; the memory figures are a measurement and the pull request says so rather than claiming a unit test can see them. |
|
| Area | Description | Status | Ref |
|---|---|---|---|
| The hint | S3 publishes the effective setting, Azure publishes an explicit one; both keep 4 as the default, so an upload that sets nothing behaves exactly as before | 🟢 fixed | 5d3d50a0d |
| Measured | 300 MB over a 100 ms link. Before: the engine took 2.19 s at 1 part and 2.18 s at 8, no difference, while the older path went 5.92 s to 1.84 s. After: 6.03 s at 1, 2.20 s at 4, 1.99 s at 8 | 🟢 measured | 5d3d50a0d |
Azure folds in only an explicit setting, because its own default is 1 and inheriting it would have cut the engine's default fan-out from 4 to 1 for everyone; a test pins that too. Both tests fail on the previous code.
The download stream count carries its own reasonPost-4.1.9 follow-up, fixed on A download request used to say
Verified green: the full GitHub Actions matrix on the head that was merged, 19 checks across Linux, Windows and macOS. |
A multi-stream download can no longer publish a file made of two versionsPost-4.1.9 follow-up, fixed on A download that runs on several streams reads a different window of the object on each one. Nothing checked that all the windows came from the same object, so an object replaced while they were in flight was assembled out of two versions: each window had the length it asked for, the total was exactly right, and the file was published. Row 157 closed this for the S3 provider's own multi-thread download; the shared segmented executor is a different path, and it is the one the transfer queue,
Reproduced live on SFTP, on the build before the fix: a 300 MiB object replaced in place at the same size during the download produced a local file whose checksum matched neither the version before nor the version after, with exit code 0 and no warning. The file that arrived never existed on the server. The verdict was taken three ways rather than two, because delivering the new version whole would be unpleasant but coherent, and only "neither one nor the other" proves two versions were mixed. One scenario deliberately does not reproduce it, measured in the same run: a file that only grows while it is read has an immutable prefix, so parallel windows read coherent bytes with no protection at all. That case was correct before and stays correct, which is why a refusal falls back to a single stream instead of failing. Stated limits: on providers that publish no validator, a replacement with the same size and the same timestamp at second granularity is not detected; and a file being appended to while it downloads now takes one stream instead of several, because a size that moved cannot be told from a rewrite by reading the object alone. Four tests, each seen failing on the code before the fix. The first one did not merely fail: it showed the download succeeding and the mixed file published. Verified green: the full GitHub Actions matrix on the head that was merged, 22 checks across Linux, Windows and macOS, and CodeRabbit closing with no actionable comments after seven passes. |
One copy of the AEAD, because the crate holding it back is oursPost-4.1.9 follow-up, fixed on
The crate side of this was published today as well: Verified green: the full GitHub Actions matrix on the head that was merged, 23 checks, and CodeRabbit with no actionable comments. Tests: |
The seven findings a machine review returned on the segmented download, closedPost-4.1.9 follow-up, fixed on An automated multi-agent review was run over the merged work of row 161 and returned seven findings. None was a wrong result, and two were real gaps: one path refused where it should have fallen back, and one path that assembles a file out of parallel handles had been left without the check the rest of them got.
The finding worth keeping is the one nobody had named: the Backblaze window worker wrapped the error from Declared and not closed, in the pull request rather than in silence: the validator pin in Verified green: the full GitHub Actions matrix on the head that was merged, 22 checks, and CodeRabbit confirming the typed refusal after raising it. |
Three ways a skipped link or a missing header could delete or corrupt, found by the final reviewPost-4.1.9 follow-up, fixed on The pre-release review found three blocking defects. Two are data loss on paths this release touched but did not introduce, and one is an integrity hole in work added during this cycle. All three are the same shape as the ones the cycle spent itself closing, in places the earlier sweeps did not reach.
Both deletion defects predate this release. They are here because the review asked the right question, which was not "which commands delete" but "what compares two trees and acts on the difference": the first question returns six places, all of them already correct, and the second returns nine. Verified green: the full GitHub Actions matrix on the head that was merged, and CodeRabbit with one comment, declined on the pull request with the reason recorded: anchoring every local write to a descriptor is a sound direction and a cross-cutting rewrite, whose failure mode is not the one being fixed here. |
The comparison panel divided by the rows it displaysPost-4.1.9 follow-up, fixed on The honest reading of that pair is one difference out of two entries. The panel answered that everything was out of sync, and it answered the same on every remote backend, including the encrypted overlays. The one case that did not show it was comparing a path with itself, where there are no differences at all, and that exception is what named the cause: the comparison deliberately sends no row for an identical file, because a large tree would ship tens of thousands of rows nobody reads, and the panel derived its percentage from exactly those rows. The identical share was therefore always zero, numerator and denominator were the same number, and 100% was not a measurement but the shape of the arithmetic.
Each new property was seen failing first: the adapter repro with Declared and not covered: no test renders a component in this repository, since the frontend test runner uses the Verified green: |
v4.2.0 is outReleased today: v4.2.0, 165 tracked changes over 169 commits in three weeks, the longest cycle since the project started. Every row in the table above shipped. 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. 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. It 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, named rather than counted because counting them is the part that went wrong twice. Three independent review passes ran over the cycle. The final one returned three blockers, two of them older than this release and both able to delete a remote file after a symbolic link had been skipped by a scan. A fourth arrived on the last day from a user report, and it shipped in the same release: the comparison panel divided by the rows it displays and never displays identical files, so every comparison read as fully out of sync. Looking back at the 165 rows, the shape that recurs is one: an answer that looked complete while part of the work had not been seen. That is why so many entries are about scans, deletes, exit codes and percentages that now state what they did not cover. Thank you to everyone who reported, tested and reviewed during this cycle. The next tracker is #1419. The 22 open rows of "Requested / under consideration" have been carried over to it; nothing was dropped except one row that shipped. |
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.0, Rolling Tracker
Umbrella issue for the next AeroFTP release (v4.2.0): known issues reported against v4.1.9 and the patches/updates landing on
mainafter the v4.1.9 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.1.9
See the v4.1.9 tracker (#628) and the release notes for the full change set, 65 tracked changes over 55 commits. The theme was not a feature: three CI lanes in this repository could report success having executed no tests at all, and one had been doing exactly that since 2026-05-16, when the test it selects by name was renamed and the workflow line was not. A pull request claimed two review findings were closed by two tests, and one of those tests had never run in any run. Six error classifications had never fired on the shape the providers actually produce while firing on byte counters instead, in the function that decides whether a failed transfer is retried or discarded. All 14 points that select tests now assert how many actually ran. Alongside that: FTP stops waiting 1800 seconds for a refusal already sitting in the client's buffer, WebDAV stops panicking on a 425 plus a rotated Digest nonce, a Swift recursive delete stops resolving dot segments inside opaque object keys, AeroSync preserves POSIX.1e access ACLs on Linux, and contribution origin is certified with a DCO. A pre-release audit with three independent auditors ran over the cycle and every confirmed finding was fixed before the tag, none deferred.
Patches & updates queued for 4.2.0
Landed on
mainafter the v4.1.9 tag; shipping in v4.2.0.6bcb11fa35ce37379ed68282b3c3da2epostcss-selector-parser6.1.2 to 6.1.4 for Dependabot alert 69. Details.95cc7b0693df7925--immutablewas ignored bycpandmv, so a copy onto an existing target overwrote it and exited 0. Details.aef82285drivescope alone connects and lists, and only Fetch is refused with a 403 naminguser_info; v4.1.9 made that message readable, and nothing told the user before the token was created. Details.14a00d6d3ddcace2docs/TESTING.mdstill promised the single pre-release smoke entrypoint as future work, whilenpm run smokehas been the pre-tag step ofdocs/RELEASE.mdsince v4.1.4. Details.8e543b2cc5bf3db0f8333a24--tuimenu ofprofiles,groupsandusersoffers every verb the-iprompt has, and both open on an empty vault. Details.961d41c87bf46ef24bbbab84653dcb9850bcd41239ddc99c776291429f5888a418f72d7c51a8sync,dedupeandverifyrely on instead of downloading. Details.3b7265dd3usannounced on 2026-08-17. Details.3b7265dd3e502f5b3ebuild.ymlhad no cancel-in-progress, unlikechecks.yml. Details.e24cace5ff1d9496cf20f841dd5mainLinux/Windows caches and made the Linux packaging leg rebuild from cold. Details.591f2453dAGENTS.mdis the public CLI integration guide (how to drive AeroFTP without credentials), not the development-gate file. Details.236e78d2f501e3ed9ecargo testno longer sit on the packaging critical path, and av*tag cannot publish while they are red. Details.64f4f15b23de4f6456connect(), and three signing paths do not go throughconnect(). Details.f20fb8f31main. Details.3417fcb467b3817c87--partialover a finished file, rclone export host keys and start folders,--skip-restricted. Details.bffa68256cargo auditonmainwent red on two crates yanked upstream after the last lock update (der0.8.0,libssh2-sys0.3.2), unrelated to any push; the lock now resolves 0.8.2 and 0.3.3. Details.38d5c0b96x-amz-meta-mtimein rclone's format,statreads it back, and a server-side copy keeps it: objects written by either tool now read the same mtime from the other. Listings still show the upload time (no metadata there), so the one-way sync rule from #735 keeps applying to the scan. Details.6222c5b0212c7c314cAEROFTP_SFTP_READAHEAD=offrestores the serial read, a bandwidth cap still uses the serial loop. Details.a90f613d6--limit-rateand--bwlimitnow also pace the HTTP cloud providers that stream through their own loops (10 download loops, 12 upload bodies: Cloudinary, Filen, GitHub, ImageKit, Immich, Koofr, MEGA, Uploadcare, Dropbox, FileLu, 4shared, kDrive, OneDrive, pCloud, Yandex, Zoho), progress reported after pacing, Yandex chunked path included. Details.15dda3477cc70af785bf15c887c12747c5867336fa6b5sync,checkandcryptcheckruns on the provider's list pool, up to--checkersdirectories at once (a 5000-file SFTP no-op sync spent 10.8 s in a serial scan against rclone's 4.2 s), and the shared walker no longer follows a symlink to a directory. Details.53ed27ce8cd0f09fd3quick-xml0.42 stayed out as an API break, not a bump. Details.7a313625c--parallelup to 16 connections (the pool ceiling was a literal 4: from p4 to p16 rclone gained 47% and 75% on the lab, AeroFTP 4% and 3%), andput -r/get -rsay when a provider ceiling is lower than the requested--parallel. Details.4b25a288b6f52561bffolder/and the same-named filefolder, which are two distinct objects, so deleting a folder erased an unrelated file that shared its name (reproduced live on Cloudflare R2); the slashless key now goes only when a HEAD confirms a zero-byte directory marker, a denied HEAD no longer blocks deletion inside the prefix, a refused individual DELETE no longer reports success, and exported rclone profiles finally recognize AeroFTP's empty folders. Details.3675acc5esynccommand's remote scan really runs on the list pool now (the #758 entry named it, butsyncwalked with its own loop and the library sync core used the serial branch), and every caller of the shared walker inherits the pool,--checkersand the traversal guard; on 5000 SFTP files the scan goes from 1 session / 14.2 s to 5 sessions / 6.1 s. Details.cd894ae4a0f11fb0babuild.ymlignores docs, Markdown, licence and issue-template paths on push and pull request, applied only when every changed file matches. Details.5dca9847e7f978d7afpassword2in Quick Connect too, the AeroCrypt block leads with default salt and folds the keyfile into a disclosure, the AeroSync template name and description have visible headings, and a canary dry run no longer throws away the Compare scan. The half of one wish that asked to hide the header toggle under default salt is deliberately not implemented, because no code path reopens a default-salt vault from the password alone. Details.f5a8f4a25a63961331a0d19d381google-chrome*alongside the Microsoft ones at all 22 sites, and the comment above each one now spells the three globs the command spells instead of naming Microsoft alone. The remedy was already written down as trap 16 of the recurring-CI-red checklist but had never landed. Details.a63961331,43a37db1ccargo install cargo-auditcost 169 seconds on all 42 runs on main last week, for an audit that takes five. Restore and save are split, because the combined cache action saves only from a successful job and on main a real advisory would otherwise discard the binary just built. Measured: job compute falls from about four minutes to 1.1. Details.dccb7bd7frust-versionstates the real floor, 1.93, instead of a 1.85.0 no toolchain could build. Details.7076d53f97dce288ec84c466e1dcc8effdc2a90f912f3065604b6d11b2f708b64f15bc4fprofiles --json,agent-bootstrap,agent-info,server_list_saved) now shows whether a profile is bound to a crypt overlay and of which kind, so a lost Crypt binding is visible through the interface agents are told to use. Details.6680cb9f6sync --files-fromnow bounds both sides of the run on every scan path, so--direction upload --deleteno longer deletes the remote files outside the list, and download, bisync,--watch,--from-reconcileandsync-doctorrespect the list too. Details.d7483d51df6bc25bb7TYPEcommand before every file, andputno longer waits half a second after each upload on providers other than SFTP. Details.42f95c34a99545d180b7d7327f1sync --watchandreconcilerefuse to delete when part of the local tree could not be read, and a reconcile plan no longer requests the same delete twice. Details.af857a4f3e07e00c53QUITon the server instead of the whole CLI process, so a slow CI runner no longer fails it. Details.fb0a8a297c9895c262bda56dfb9hashsum --downloadis honored instead of being quietly ignored: the flag now skips the server digest and hashes the bytes that were really transferred, streaming them to a temporary file instead of holding the whole file in memory. Details.3318a89abdeleteandrmdirread as a retryable connection error. Details.ecba1fc4aefcc31235APPEand never answers, and a refusal followed by a goodbye no longer makes the next command read that goodbye as its own reply. Details.ba8c7414b1cf3a3026--conflict-mode newerno longer decides in opposite directions when no timestamp can decide: without a usable modification time it picks the larger file on both legs, and the skip says the timestamp was missing instead of implying a preference for one side. Details.4ad9c04a9checkandcryptcheckno longer give a verdict on a tree they did not read: a gap the scan can name makes the resultpartialwith the paths listed, and a gap it cannot name is refused instead of reported. Details.30a2afeabfac9b8144bf1f4097bsync-doctorno longer previews a sync on a tree it could not read: a failed listing counts, and the entry cap is now read where the walk grows instead of only when it opens a directory, so one listing could no longer push past the ceiling and still report a complete scan. Details.5695dfd69app_infoandhash_fileto the command-line agent. Corrected after publication: removing that refusal is necessary and not sufficient, and running the two from the command line is still open. Details.8eda8ff1011570d40bcb84484ddcheckandcryptcheckno longer answerokover a tree they left a path out of: the same report was listing the skipped path while the verdict said nothing was missing, because a link the walk does not follow is a gap without being a failure. Details.36214214bapp.aeroftp.AeroFTP, the reverse DNS of a domain that is actually ours, and nothing of yours moves: the saved vault passphrase keeps its old keyring name on purpose, so no existing installation is orphaned. Details.fecd347a87b264e4588a5fe69251e10616e017dccff851420589fdc8ad1628c6e7ca3369syncandreconcilebound their plans by every path a scan did not reach, refuse the run outright when the gap cannot even be named, and keep the snapshot entries under a path they deliberately left alone. Details.76b68236b259754bfeef66fc560824ed793bfebc964c10c7c21f60b798a4a5bcee3725d5d7eb9cd396308466d926dc99f60c3e41f1ce48ad36aa3d8a903fb93c577d3df522c088e57f179291eimage-kitnow resolves too. Details.6fed23722mkdir, and the staging leafeditwrites. Details.3c2fcc9daaeroftp_reconcilehonorschecksum, so two files of the same size and different content are no longer reported as equal, andaeroftp_hashsumnow asks for the same memory cap instead of the general 500 MB download. Details.2b32a5914421is no longer read as the next command’s answer, and a redial returns to the directory the caller had changed into. Details.71cbdb57emainon a head whose own audit had passed minutes earlier; toml and autoprefixer bumped in the same window. Details.b33b49944,4a3c8f3cf,db858e35cUploadPartCopy, read-only versioning, no object tagging); endpoint classification hardened to a domain boundary in Rust and both frontend classifiers, and rclone import now refinesprovider = Otherremotes via the endpoint host. Details.fb9a4a998sync --deltanow moves only the changed bytes when downloading, and two commands stop contradicting themselves about what happened. A recursive delta download used to transfer whole files,sizeexited 0 on a scan the user had cancelled, and GitHub errors wrote their label twice. Details.032d1cadcfafa08d3aeroftp_list_serversreports the crypt-overlay binding, which was the last surface #785 left out. Details.f5157a58eb1c85cbc4package-lock.jsonstill declaring 4.1.8: the bump touched five version sites and the project carries seven, and the check that verified it listed the same five. Details.0c0657973vite8.2.2 to 8.3.0, a Dependabot minor bump on a development dependency. Details.23630e76fget -rexiting 0 on a path it could not list,--password-stdinserving only the first connection, and exit 8 meaning two things. Details.3188c8c72ec6f48671/. Details.0c94b01f41e239b007pwdthat answers without connecting, and an AeroCloud that could not create a remote folder below a missing parent. Details.71b8a257a860fb1bfc9238da1becargo testin this repository executes on a Linux runner, so "green on three platforms" meant "compiles and packages" on two of them. The lane now builds and runs the library suite under MSVC, and the first execution found seven things. Details.cf1e408246ee916eedit, the AeroCrypt marker publish and the crypt configuration writes all failed, because plain SFTP rename is specified to refuse a destination that already exists. Replacing is now its own verb usingposix-rename@openssh.com, asked before anything is staged, whilerenamekeeps refusing so an ordinarymvcannot destroy a file nobody named. WebDAV had the same hole through a hardcodedOverwrite: F. Details.ed07b6347providers/sftp.rsstill described an ssh2/libssh2 SCP upload backend, and a russh write race, as things the code worked around. That leg existed only between 20 March and 1 April. Details.f182d98951aa291f8224aee889536804ed2put --deltato Filebase declines before any request instead of wasting a multipart upload. Details.080692267ae224340dc7f9d78d3e46503ff19e875694bad3ad7b6e9f0af23d7edef74fc5bb548e314e750d7f88TEAM.mdand in a Team block of the About window, in all 47 locales. Details.43fb9a5e593275a5f9f0f19d0b53c140f5db--s3-upload-concurrencywas accepted and ignored by the current upload engine; it now sets the parts in flight, with the same default as before. Details.5d3d50a0d4378297e492c4dc305aerovault0.6.6 releases the pin, with no change to the vault format, and a nonce of the wrong length now answers instead of panicking. Details.55837065949aaafd2ff1ef58ba83ea371f7eRequested / 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.com.aeroftp.AeroFTPtoapp.aeroftp.AeroFTP. Done in #814, #815 and #866, queued rows 94, 97 and 147: the old identifier stays only where it has to, the keyring entry, the legacy data folders read on upgrade and the metainfo<replaces>.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.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.syncPanel.templateImportPathPairsis ambiguous in English, not in its translations: "AeroFTP applies exactly one, so nothing was imported" compresses an argument (the product can only ever apply one pair, this template offers several, so it imported nothing), and read as a report of what just happened it contradicts itself. CodeRabbit raised it on PR #770 as a Croatian wording error; it was rejected there because changing one locale would make it diverge from the source and from the other 46, which all say "applies". The fix belongs on the English string and then propagates to all 47. 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.aeroftp_list_serversdid not show a profile's crypt-overlay binding, so an MCP client could not tell a Crypt profile from a plain one. Done in #850, queued row 127, details.--keyed,--derive-key). Requested for local, history-free verification and key derivation, for example from the.deband.AppImagebuilds on Tails. Argon2id is already a dependency through AeroCrypt, and the BLAKE3 library exposes keyed hashing and key derivation natively. To decide: which Argon2id parameters the tool exposes and how salt, context and output length are entered; CLI parity forhashsumto be weighed.dragenter,dragoveranddrophandlers on the cards and the top and bottom sentinels callpreventDefault()and setdropEffectunconditionally, so a file or text dragged in from outside is captured as a move (the drop itself is already a safe no-op). A first attempt claimed the drag only while the panel's own reorder was in progress, which also removed the unconditionalpreventDefault(): with the native drag handler disabled, that lets WebView2 navigate away from the app when a file is dropped on the list, so it was withdrawn. The shape that landed keeps cancelling external drags in the capture phase and claims only the internal reorder. Fixed in #851, details.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.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.getignores the stream flags and always uses the measured default.--multi-thread-streams, the cutoff and the SFTP presets are read on a single file and not on the shared batch path, so the command announces one policy and runs another. Identical in v4.1.9, so not a regression of this release: found by the final review and parked with its red tests as the first patch after the tag.Known issues found after release
Reported against v4.1.9. Empty at the time of opening: every entry in the previous tracker's block was marked Resolved before it closed, so nothing carried over as pending.
Status legend: 🔴 confirmed · 🟡 investigating · 🔵 planned / idea · 🟢 done / fixed (pending release) · ✅ released
All reactions