Skip to content

v0.11.2

Choose a tag to compare

@github-actions github-actions released this 08 Oct 23:01
· 179 commits to main since this release
v0.11.2
eebd7f7

Bumps every manifest to 0.11.2 (scripts/bump_version.py 0.11.2; --check 0.11.2 reports all 26 manifests in lockstep; Cargo.lock regenerated; CITATION.cff date-released set by the bump). The libexpanse.so.1 soname and the libJudy.so.1 compat link do not depend on the crate version and are unchanged.

0.11.2 is a patch release. The Rust public-API snapshot (.github/public-api/) and the C header (include/expanse.h) are unchanged since v0.11.1.

Highlights

  • Dead code elimination in core trie engine: Removed unused private internal functions and methods with no callers across all configurations (alloc_node_plain, alloc_node_dispatch, insert_pathless, remove_pathless, ins_slot_pathless, ImmedBuf::insert, ImmedBuf::remove, ExpanseSetCore::remove_dispatch, version_try_lock_if_ptr, version_unlock_if_ptr, ensure_branch_pop0, and insert_slot), reducing binary footprint without touching public API or ABI contracts (#1429, Refs #1367).
  • Release and supply chain hardening: Release workflow now runs under pinned runner images and toolchains, commit-pinned GitHub actions, and hardened token permissions. The release pipeline enforces signed release tags, draft-first asset verification with local-versus-remote byte comparison, and pre-release smoke testing across platforms (#1402, #1403, #1405, #1406, #1407, #1408, #1415, #1420, #1422, #1424, #1427, Refs #1372, Refs #1424).
  • Callgrind and benchmark determinism: Added dedicated deterministic instruction benchmarks for atomic read-modify-write (compare_exchange, update) paths, and host contention monitoring based on foreign process counts on pinned CPUs (#1410, #1411, #1413, #1416, Refs #1280, Refs #1395).

Changes by subsystem

Core & Engine

  • Dead code removal (#1429, Refs #1367): Removed internal helper functions in alloc.rs, map.rs, mutate.rs, set.rs, occ.rs, sync.rs, and blobmap.rs that had no live call sites in any configuration.
  • MSRV compatibility in occ-stats (#1419, Refs #1395): Gated fetch_update deprecation attribute to retain compatibility with Rust 1.88 MSRV, which predates try_update.

Release & Supply Chain Infrastructure

  • Workflow pinning and linter integration (#1427, Refs #1424): Runner images, toolchains, and package managers (npm 12.2.0, wasm-pack 0.15.0) pinned to exact versions; python.yml brought under workflow linter; actions pinned by full commit hash with persist-credentials disabled.
  • Canary and release gates (#1420, #1423, #1428, Refs #1371, Refs #1372): Manual release dry-run canary skips publishing environments; asset readback validates download bytes; paginated GitHub API runs helpers deduplicated across scripts.
  • Two-phase publication and signature enforcement (#1402, #1403, #1405, #1406, #1407, #1408, Refs #1372): Draft-first release flow with smoke-tested archives, pre-release tagging policy, Go module tag drift guards (#1404), and committed release key validation.

Benchmarks & Tooling

  • Callgrind deterministic instruction harnesses (#1411, #1416, Refs #1395): Dedicated benchmark binaries for concurrent map and blobmap atomic RMW operations with explicit path assertions and isolated teardown.
  • Measurement host contention controls (#1410, #1413, Refs #1280): Contention detection tracks foreign process execution on pinned CPUs rather than clock skew.
  • Diagnostic records (#1409, #1412, #1414, #1418, Refs #1096, Refs #1280, Refs #1399): Recorded Section 32 soundness gates and Section 34 diagnostic results.

ABI Parity & Documentation

  • Stated deferral issue tracking (#1401, Refs #1397): Parity checker enforces citation of open issues for deferred language bindings and fails when referenced issues are closed.
  • Citation metadata (#1394): Added version DOIs for releases v0.10.1 through v0.11.1 in CITATION.cff.

Upgrade notes

  • 0.11.2 is fully backward-compatible with 0.11.1 and 0.11.0.
  • No public Rust API changes (.github/public-api/ identical).
  • No C ABI changes (include/expanse.h and include/Judy.h identical).
  • Binaries and libraries can be upgraded in place without recompilation of consumer code.

Checksums table

Artifact SHA-256
expanse-0.11.2-x86_64-unknown-linux-gnu.tar.gz (pending release)
expanse-0.11.2-aarch64-unknown-linux-gnu.tar.gz (pending release)
expanse-0.11.2-riscv64gc-unknown-linux-gnu.tar.gz (pending release)
expanse-0.11.2-x86_64-unknown-linux-musl.tar.gz (pending release)
expanse-0.11.2-aarch64-apple-darwin.tar.gz (pending release)
expanse-0.11.2-x86_64-apple-darwin.tar.gz (pending release)
expanse-0.11.2-x86_64-pc-windows-msvc.zip (pending release)

Before tagging

  • This PR is the last merge before the tag. main's full CI must be green at the merge commit.
  • Run the canary: gh workflow run release.yml --ref main -f dry_run=true, while main is still at the merge commit.
  • Tag with python3 scripts/tag_release.py 0.11.2, then push the one ref it prints.

Verified by running

  • python3 scripts/bump_version.py 0.11.2 (RUN: [SUCCESS] 26 manifests updated to version 0.11.2.)
  • python3 scripts/bump_version.py --check 0.11.2 (RUN: [SUCCESS] All manifests match expected version: 0.11.2)
  • git diff v0.11.1..origin/main --stat -- .github/public-api include crates/expanse/src (RUN: 8 files changed, 7 insertions(+), 141 deletions(-))
  • python3 scripts/check_release_workflow.py (RUN: check_release_workflow: 8 publishing jobs wait for promote and skip a pre-release tag; every job is behind the gate; 12 call sites are as written; actions are pinned by commit, checkouts drop the token, the toolchain is exact; global tools use pinned versions, cargo build carries --locked)
  • gh workflow run release.yml --ref chore/release-0.11.2 -f dry_run=true (RUN: ✓ Created workflow_dispatch event for release.yml at chore/release-0.11.2)
  • gh run view 37842798832 --json conclusion (RUN: {"conclusion": "success"})
  • gh run view 37842841434 --json conclusion (RUN: {"conclusion": "success"})

Not verified

  • Live publishing to package registries (publish disabled for dry-run verification).

claims: 7 verified, 0 derived, 0 labelled

What's Changed

Other Changes

  • docs(citation): add the version DOIs of v0.10.1 to v0.11.1 by @orieg in #1394
  • ci(abi): cite an open issue for the binding deferrals and fail when a deferral's issue is closed (Refs #1397) by @orieg in #1401
  • ci(release): refuse a release tag that a committed key did not sign (Refs #1372) by @orieg in #1402
  • ci(release): carry the curated notes in the signed tag and lead the GitHub Release with them (Refs #1372) by @orieg in #1403
  • ci(nightly): fail when a release tag has no Go module tag on its commit (Refs #1372) by @orieg in #1404
  • ci(release): create the release as a draft, read its assets back, then publish (Refs #1372) by @orieg in #1405
  • ci(release): smoke-test the archives on three platforms before anything is promoted (Refs #1372) by @orieg in #1406
  • ci(release): a pre-release tag builds, attests and smoke-tests, and publishes nothing (Refs #1372) by @orieg in #1407
  • ci(release): pin actions by commit and the toolchain by version, drop persisted tokens, audit egress (Refs #1372) by @orieg in #1408
  • bench(patricia): record diagnostic D2, two runs, all three clauses met (Refs #1096) by @orieg in #1409
  • fix(bench): judge host contention on what ran, not on two clocks' difference (Refs #1280) by @orieg in #1410
  • docs(bench): record the §32 soundness gates and the P32.2 table in the concurrency README by @orieg in #1412
  • bench(callgrind): a second binary for the shipped compare_exchange and update entry points by @orieg in #1411
  • fix(bench): count exited foreign processes once and on the pinned CPUs, and refuse an incomplete record (Refs #1280) by @orieg in #1413
  • docs(patricia): record D2 as INTERMEDIATE, with the 4 KiB control and without the attribution (Refs #1096) by @orieg in #1414
  • bench(concurrency): hold the §34 blob-peak runs until the design can decide the question (Refs #1280) by @orieg in #1418
  • bench(callgrind): keep teardown out of the rmw arms, and assert which path each takes (Refs #1395) by @orieg in #1416
  • ci(release): a manual run cannot publish, the signature is bound to the built commit, and the linter compares conditions exactly (Refs #1372) by @orieg in #1415
  • ci(release): skip the release-environment jobs on a manual canary, so a canary can end green (Refs #1372) by @orieg in #1423
  • fix(release): compare downloaded bytes against local in readback (Refs #1372) by @orieg in #1420
  • chore(occ-stats): allow deprecated fetch_update (MSRV 1.88 lacks try_update) (Refs #1395) by @orieg in #1419
  • ci(release): pin npm@12.2.0 and wasm-pack@0.15.0, and lock cargo build, publish and the hwcaps build (Refs #1372) by @orieg in #1422
  • test(release-scripts): make the gate tests reach the paths they name, and fail the Go-tag guard on an empty listing (Refs #1372) by @orieg in #1421
  • ci(release): pin runner images, toolchains, and bring python.yml under linter (Refs #1424) by @orieg in #1427
  • chore(scripts): deduplicate GitHub API paginated runs helper (Refs #1371) by @orieg in #1428
  • chore(core): remove dead code with no callers in any configuration (Refs #1367) by @orieg in #1429
  • chore(release): 0.11.2 by @orieg in #1430

Full Changelog: v0.11.1...v0.11.2