Files
MetaCrate/docs/release-candidate.md
Chili Palmer 8c18b2ac8c
Some checks failed
CI / rust-skia (Rust only) (push) Successful in 2m48s
CI / required (push) Failing after 3m25s
feat(imaging): add pure-Rust Skia backend (#112)
2026-08-13 07:49:37 +00:00

4.4 KiB

MetaCrate 0.0.1 release candidate

MetaCrate 0.0.1 is the first native Rust release candidate for the pinned LibreMetaverse compatibility surface. It is releasable only when the native release-candidate-audit reports status: "ok"; a generated blocked report is evidence of remaining work, never permission to waive it.

Supported platform boundary

  • Linux x86-64 is the fully built and executed release platform. All Gitea Actions jobs run on ubuntu-latest as required by repository policy.
  • Portable, default-feature-disabled library surfaces are cross-compiled from Ubuntu for Windows GNU x86-64 and macOS x86-64. Those checks do not claim native runtime, installer, physical-device, CoreAudio, or WASAPI validation.
  • Rust 1.97.1 is the release toolchain. Rust 1.96.0 is exercised separately and only supports the minimum-version compatibility claim.

Features and prerequisites

The default libremetaverse build uses the pure-Rust dds-bc67 image path. Optional boundaries are explicit:

Feature Capability Native/build prerequisite
jpeg2000 J2K/JP2 through the safe OpenJPEG adapter OpenJPEG 2.5.4 or newer
rust-j2k J2K/JP2 through RustJ2kCodec none; exact pure-Rust j2k 0.8.1
rust-skia BMP/GIF/ICO/JPEG/PNG/WBMP/WebP through RustSkiaTextureCodec none; exact pure-Rust skia-rs-codec 0.3.0 and image-webp 0.2.4
skia PNG/JPEG/WebP and other Skia formats Skia 0.99 target cache or documented source tools
vorbis PCM to Ogg Vorbis the locked vorbis_rs native build stack
default WebRTC native ICE/DTLS/SRTP/RTP/SCTP and Opus system libopus 1.3 or newer
real-audio physical microphone/speaker I/O ALSA on Linux, CoreAudio on macOS, WASAPI on Windows

OpenJPEG and Opus are dynamically discovered through the reviewed adapters; Skia and Vorbis can contribute bundled native material and therefore carry the notices documented in release/THIRD-PARTY-NOTICES.md.

Compatibility and intentional differences

The release maps 3,066 public types and 30,789 members from upstream commit 2aa70bb68513b39795da5d13c88f31b86e85a3ba. Rust naming, ownership, async, event, cancellation, error, overload, and feature decisions are fixed in the SemVer baseline. In particular, Rust uses snake-case methods, typed overload names, Result, native futures, subscription guards, project-owned boundary traits, and unknown-bit-retaining flags instead of reproducing C# syntax or CLR runtime types. The 80 delegate/APM replacements are intentional and compiled by the independent downstream fixture. Full recipes are in api/SEMVER-AUDIT.md.

Vivox support is a native protocol adapter and does not bundle the proprietary Vivox service. Physical audio and proprietary service validation remain manual. Live grid validation targets the exact GRID_LOGIN_URL from .env; it uses OpenSim response options and does not substitute a Second Life endpoint.

Evidence and approval

The policy in ci/release-candidate-policy.json verifies, without silent waivers:

  • all 16 release/source packages share version 0.0.1 and all ten shipped native binaries remain in the artifact inventory;
  • all 1,289 compatibility cases remain reviewed: 1,266 deterministic cases, 19 explicit live cases, four benchmark cases, and zero pending/unreviewed/drift;
  • production Rust contains zero not_implemented, unimplemented_api!, todo!, or unimplemented! failure paths;
  • live tests contain no print-and-return success paths, fake and dedicated OpenSim evidence each contain nine unique successful sanitized stages, and the prior API/artifact/concurrency/documentation/provenance evidence remains valid;
  • the release notes, checksums, Rust 1.97 toolchain, and Ubuntu-only workflows match policy.

Run the status gate with:

cargo run --locked -p metacrate-ci-matrix -- \
  release-candidate-audit --evidence /tmp/metacrate-release-candidate.json

The command uses create-new evidence semantics. It writes a complete blocker inventory before returning failure, which makes an incomplete release visible in CI. Fuzz-smoke is the sole check currently marked deferred_by_user; it is not presented as passed and is not silently executed. No signing identity is configured for 0.0.1, so release/SHA256SUMS, Gitea artifact retention, and the provenance/license manifests are the configured authenticity controls.