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
librdf1.0.17, manual 1.0.18, source SHA-256 recorded in0.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, andlmdb; feature names and format-v1 reader policy are frozen by ADR-024. - Performance: every case in
0.10-suite.jsonis 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.mdrecords 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.