Skip to content

Milestone 0.10 — Release candidate qualification

Status: complete (qualification scaffold)

Outcome: freeze the intended 1.0 contracts and build the first parity and performance qualification scaffold

Depends on: 0.9 (complete)

Release evidence: docs/reports/0.10.md

The roadmap is normative for the outcome. This document records the historical 0.10 work breakdown. Its checked boxes mean the 0.10 bundle and checker were completed; they do not satisfy the stricter 0.11 native differential, source-compatibility, or binary-interchange gates.

Frozen scope

  • Baseline: Redland librdf 1.0.17, manual 1.0.18, source SHA-256 recorded in 0.10-matrix.json.
  • Supported targets: Linux x86-64, macOS Apple Silicon, and Windows x86-64.
  • Build profiles: release default (Fjall) and release all-storage.
  • Python: CPython 3.10–3.14 wheels on Linux, macOS, and Windows.
  • Storage: memory, fjall, redb, rocksdb, sqlite, and lmdb; feature names and format-v1 reader policy are frozen by ADR-024.
  • Performance: every case in 0.10-suite.json is required by the validator. A tie, inconclusive interval, or loss fails a candidate profile; the checked-in profiles are explicitly synthetic scaffold fixtures rather than native performance evidence.

Work packages

ID Package Exit signal
WP-10-01 Freeze denominator and target/profile matrix Checksummed matrix and inventory revision
WP-10-02 Close safe-Rust exclusions No in-scope excluded, mapped, implemented, or unreviewed safe rows
WP-10-03 Complete C surface and ABI Every public librdf_* row is C verified; header/symbol/ABI/lifecycle evidence
WP-10-04 Candidate behavior profile matrix Every frozen profile carries the candidate symbol set; native differentials move to 0.11
WP-10-05 Storage stabilization ADR-024, descriptors, capabilities, reader/export and crash matrix
WP-10-06 Python/Rust/C stabilization Enforced Rust API, Python stub/package, C header and symbol snapshots
WP-10-07 Security/interoperability hardening Fuzz smokes, ASan/LSan, audits, W3C, and downstream matrix green
WP-10-08 Performance qualification scaffold Synthetic samples exercise every frozen case/profile and no-waiver rule
WP-10-09 Reproducible packaging Clean install/link/run/uninstall, SBOM/provenance, source and binary checksums
WP-10-10 RC soak and release decision Soak completes without ABI reset; risk register has no blocker

Qualification commands

python3 scripts/check-inventory.py
python3 scripts/check-0.10-parity.py INVENTORY EVIDENCE --output PARITY_REPORT
python3 scripts/check-performance-gate.py RAW_SAMPLES --output PERFORMANCE_REPORT
python3 -m unittest discover -s scripts/tests

The candidate-coverage checker requires exact matrix coverage, verifies the entire public symbol denominator per profile, and rejects declared skips, mismatches, quarantines, deviations, and every non-verified C row. The performance checker evaluates each case independently using medians and a deterministic 10,000-round bootstrap confidence interval. It never averages a loss away.

Exit checklist

  • 0.10 package versions aligned
  • Numeric inventory milestone ordering fixed for 0.10
  • Target/profile and performance matrices frozen
  • First-party backend registry/capabilities/layout policy frozen
  • Public custom-backend decision recorded (rejected for 1.0; ADR-024)
  • Qualification report validators implemented and unit-tested
  • 0.10 inventory has no in-scope safe exclusion and every C row is verified
  • Six-profile candidate coverage passes the scaffold-integrity gate
  • Three synthetic performance profiles exercise every required case and pass the statistical validator; they are scaffold fixtures, not native faster-than-Redland evidence
  • Rust/Python/C snapshots and full clean-package matrix pass
  • Security, fuzz-smoke, ASan/LSan, W3C, downstream, and durable crash checks pass
  • RC soak completes without ABI reset
  • Risk register has no release-blocking item
  • Roadmap/parity ledger/report mark 0.10 complete only after all evidence above
  • docs/reports/0.10.0-release.md records the release preflight and remaining tag-time CI gate

python3 scripts/check-0.10-release.py passes against the checked-in qualification bundle. The 0.11 phase treats its verified states as candidates for native reverification rather than inherited proof. R-020 remains monitoring (quick-xml pin); R-023 is mitigated by ADR-027.