Skip to content

chore(release): cut v0.24.1 - #419

Merged
bahdotsh merged 1 commit into
mainfrom
chore/release-0.24.1
Aug 26, 2026
Merged

chore(release): cut v0.24.1#419
bahdotsh merged 1 commit into
mainfrom
chore/release-0.24.1

Conversation

@bahdotsh

Copy link
Copy Markdown
Member

Cuts v0.24.1. Merging this does not publish; pushing the v0.24.1 tag onto main afterwards is what fires release.yml.

Why a patch

Both commits in v0.24.0..main are iOS React Native bridge fixes (#416, #418). Public surface was checked mechanically rather than by intuition: the diffs for offline_protocol.udl, types.ts, config.rs and events.rs against v0.24.0 are empty once comment lines are stripped. ForwardMessageParams.priority stays optional in TypeScript; only the value crossing the bridge changed.

Version files

Every entry in CONTRIBUTING.md's table moved together:

  • Cargo.toml: [workspace.package].version plus the ten internal-dependency versions
  • crates/offline-protocol-sealed/Cargo.toml (1) and crates/offline-protocol-leaf/Cargo.toml (3): the four internal-dependency versions the dual std/no_std crates declare locally
  • Cargo.lock, tools/embedded-footprint/Cargo.lock, tools/mls-interop/Cargo.lock (both tool workspaces pin the SDK by path and CI builds them --locked)
  • bindings/python/pyproject.toml
  • bindings/react-native/package.json + package-lock.json
  • THIRD-PARTY-NOTICES.md x3, regenerated with cargo-about 0.9.1 (they list our own crates by version, so a bump makes all three stale and the CI drift gate fails)

SECURITY.md is deliberately untouched: a patch stays on the 0.24.x line.

Prose

0.24.0 moves to the new docs/changelog/0.24.md series file, with its relative links rewritten for the two-directory move and the move verified byte-for-byte against the text as tagged. Both archive tables gained a row.

docs/UPGRADING.md gains §18 and an intro paragraph, because nothing here breaks a build and three things change behaviour on iOS, so the version number warns nobody on its own:

  • The relay config block was discarded from create() since 0.22.0 while the engine kept RelayConfig::default(), which is allow_relay: true with a 30% floor. The setting being ignored was therefore the opt-out: a device told not to relay has had its forwarding gate open and closes it on this release. A stricter minBatteryForRelay starts being honoured, and the floor could not bite at all before, because setBatteryLevel clamped its garbled argument to 100 on every call.
  • wipePersistedState was uncallable since 0.21.0, so every account signed out of since then left its MLS identity and sealed state on disk.
  • Presence updates meant to say away or offline all went out as online, and every message went out medium, because both default: arms are the innocuous value.

§18 also names the reason to take this promptly rather than batch it: twelve byte conversions aborted the process on any array element outside 0...255, reachable from a peer's frame rather than only from the app's own code.

Verification

Ran locally on this branch, all green:

Gate Result
cargo clippy --workspace --locked -- -D warnings clean
cargo test --workspace --lib 2532 passed, 0 failed
cargo fmt --all -- --check clean
RUSTDOCFLAGS="-D warnings" cargo doc --workspace --no-deps clean
clippy on thumbv8m.main-none-eabihf for core, sealed, leaf clean
scripts/check-license-consistency.sh consistent
npx tsc --noEmit (react-native) clean
npm run test:js passed

Changelog audit for the range: both commits touched CHANGELOG.md, every added line landed inside [Unreleased], and there was exactly one ### Changed-class heading between [Unreleased] and the previous release, so no entry was injected into the shipped 0.24.0 section. Every relative link and intra-document anchor in the four edited markdown files resolves.

After merge

Push v0.24.1 on main. The version-gate job runs ahead of both publish jobs and refuses a tag whose number disagrees with [workspace.package].version or pyproject.toml, so a mistake there fails before anything uploads. Do not force-move the tag once it has published.

One consumer note that is not a blocker: an application whose .npmrc sets min-release-age, as fernweh_v2 does at 7, cannot npm install this version until the cooldown passes and needs --min-release-age=0.

A patch: the two commits in the range are iOS React Native bridge fixes
and no public surface moved. The `.udl`, `types.ts`, `config.rs` and
`events.rs` diffs against v0.24.0 are empty once comments are stripped.

Version files moved together: the workspace version and its ten internal
dependency versions, the four more that the dual std/no_std crates declare
locally, all three lockfiles (the tools' separate workspaces pin the SDK by
path and CI builds both with `--locked`), `pyproject.toml`, the npm package
and its lockfile, and the three `THIRD-PARTY-NOTICES.md`, which list our own
crates by version and so go stale on any bump.

`SECURITY.md` is untouched: a patch stays on the `0.24.x` line.

The release header and `docs/UPGRADING.md` §18 both carry the warning the
version number cannot, because nothing here breaks a build and three things
change behaviour on iOS. The relay config block was discarded from `create()`
since 0.22.0 while the engine kept `allow_relay: true`, so the ignored setting
was the opt-out: a device told not to relay has had its forwarding gate open
and closes it on this release. `wipePersistedState` was uncallable since
0.21.0. Presence updates meant to say `away` or `offline` all went out as
`online`.

0.24.0 moves to docs/changelog/0.24.md, a new series file, with its relative
links rewritten for the two-directory move and the move verified lossless
against the tagged text.
@bahdotsh
bahdotsh merged commit aa5b9aa into main Aug 26, 2026
18 checks passed
@github-actions github-actions Bot locked and limited conversation to collaborators Aug 26, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant