Skip to content

Release 0.9.0 - #102

Merged
otsobide merged 1 commit into
devfrom
release/0.9.0
Aug 26, 2026
Merged

Release 0.9.0#102
otsobide merged 1 commit into
devfrom
release/0.9.0

Conversation

@otsobide

Copy link
Copy Markdown
Owner

Version bump, plus one deletion that is called out rather than hidden.

Why minor, not patch

v0.9.0 changes observable behaviour: an archive whose listing cannot be read is refused outright instead of extracting whatever preceded the damage (#89). Anyone relying on a truncated tar handing back partial contents will notice. That capability is not gone, it is just no longer what extract does by default: the backends take no options and still salvage.

It also adds public surface to collapse-remote: Timeouts, compress_path_with, check_health_with and the waiting module.

What is in it

Three PRs since v0.8.0, all in the remote and extraction paths.

#99, closes #48. The poll loop slept a flat 200 ms before asking a second time, so a job the server had already finished still cost the caller that much. It now starts at 10 ms and doubles to the same ceiling. Measured with the real binary against a real server: a five byte file goes from 236 ms to 44 ms, and a 60 MB job taking ~8.3 s is unchanged. Not uniformly faster, and that is pinned: a job finishing just after the ramp is asked again a whole ceiling later, worst case 110 ms, bounded. The loop moved behind two injected traits so the schedule is checked in microseconds instead of against a wall clock.

#100, closes #71. No deadline, no maximum polls, no per-request timeout: a server that accepted the connection and then said nothing kept the client waiting for as long as the process lived. Now bounded by connect 10 s and read/write 30 s. The limit is on the server's answers, never on the job: compression may run for hours, and a test fails if a total deadline is ever added. Two ureq behaviours were verified rather than assumed, one of which would have broken large transfers if guessed wrong.

#101, closes #89. A listing that could not be read used to be waved through, and every entry before the damage was then written under its raw name, unrewritten and unrefused. On Windows that turned notes.txt:hidden into an invisible NTFS stream without the user seeing the question, which is #63's harm without consent, arranged by appending one bad 512 byte header to a tar.

The deletion

bad.zip, 24 bytes, removed. It came from a shell check of mine whose cd failed, so the file landed in the repository root instead of the scratch directory, and git add -A swept it into #101. A release branch should be a bump and nothing else, so it is named here rather than slipped in.

Verification

604 Rust tests and 113 Vitest, on three platforms. cargo build --locked run after the bump, since that is what make cli/release uses and a drifted lockfile fails there first.

Closing keywords go on the dev-into-main PR: the default branch is main, so GitHub ignores them here.

…landed

All eight version strings and the four lockfiles. The release guard checks two
of them (issue #77), so the rest are by hand and by eye.

Minor rather than patch because v0.9.0 changes observable behaviour: an
archive whose listing cannot be read is now refused outright instead of
extracting whatever preceded the damage. It also adds public surface to
collapse-remote (`Timeouts`, `compress_path_with`, `check_health_with`, and
the `waiting` module).

Not a bump: `bad.zip` is removed. It is 24 bytes of junk from a shell check
whose `cd` failed, so the file landed in the repository root instead of the
scratch directory, and `git add -A` swept it into #101. A release branch
should be a bump and nothing else, so this is called out rather than hidden:
it is a deletion of something that was never meant to exist.
@otsobide
otsobide merged commit f922f85 into dev Aug 26, 2026
20 checks passed
@otsobide
otsobide deleted the release/0.9.0 branch August 28, 2026 18:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant