chore(release): cut v0.9.0 - #1349
Conversation
Bump the project version from the never-tagged 0.8.0 to 0.9.0 (minor, since Unreleased contains genuinely new features, not just fixes) in pyproject.toml, crates/mlsirm-core, crates/fast-mlsirm-py, their lockfiles, and uv.lock, and fold the accumulated Unreleased notes into a new [0.9.0] - 2026-08-24 release section following the exact pattern established by 676ed7e (the actual merged 0.8.0 cut): add a release-0.9.0-cut.md fragment, re-render it in isolation as the new small Unreleased managed block, insert the version heading, and move the rest of the prior managed block to become flat historical content under it. Also removes the stale, never-rendered docs/changelog.d/release-0.8.0-cut.md fragment left over from the 0.8.0 release attempt that was never actually tagged or published (its two workflow_dispatch attempts failed on a changelog-fragment-drift check, since fixed). Its content is not folded into 0.9.0's notes since it is already permanently recorded at the existing [0.8.0] - 2026-08-17 section, which is left untouched as history. SECURITY.md and SUPPORT.md now advertise the 0.9.x support line, matching the same precedent commit's treatment of the supported pre-1.0 minor line. Verified: full pytest suite (5862 passed, 1 pre-existing skip), cargo test --workspace, cargo test --manifest-path crates/fast-mlsirm-py/Cargo.toml, the rust-backend-is-default assertion, and scripts/release_acceptance.py --require-rust all pass against the bumped version. Co-authored-by: Claude <noreply@anthropic.com>
|
Important Review skippedToo many files! This PR contains 135 files, which is 35 over the limit of 100. To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch. Upgrade to a paid plan to raise the limit. This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (3)
📒 Files selected for processing (135)
You can disable this status message by setting the Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary
Bumps the project version from the never-tagged
0.8.0straight to0.9.0(minor, sinceUnreleased's### Addedcontains genuinely new features, not just fixes) and cuts a fresh, honest changelog release covering everything that has accumulated inUnreleasedsince the (unpublished) 0.8.0 attempt.Background:
0.8.0was bumped inpyproject.toml/Cargo.tomlby #966 (676ed7e) on 2026-08-17, but the correspondingRelease Tagworkflow_dispatch was never successfully run — both attempts failed on a changelog-fragment-drift check (since fixed) — sov0.8.0was never actually tagged or published to PyPI. Rather than retroactively tag currentmainHEAD as the stale "0.8.0", this PR cuts fresh at 0.9.0 covering the ~714 lines of real merged work.Version bump
pyproject.tomlcrates/mlsirm-core/Cargo.tomlcrates/fast-mlsirm-py/Cargo.tomlCargo.lock(root,mlsirm-coreentry)crates/fast-mlsirm-py/Cargo.lock(fast-mlsirm-py+mlsirm-coreentries)uv.lock(fast-mlsirmentry)SECURITY.md/SUPPORT.mdsupported-lineThird-party
bit-set/bit-veccrate pins (also0.8.0inCargo.lock) andpackage_version="0.8.0"test fixtures intests/test_cross_engine_*.py(arbitrary example strings for an isolated external engine's version in the cross-engine conformance contract, unrelated to this package) are intentionally left untouched.docs/product-technical-gap-baseline.mdis an explicitly non-authoritative, commit-pinned point-in-time snapshot and is also left untouched.Changelog cut
Followed the exact pattern established by the actual merged 0.8.0 cut (676ed7e,
chore(release): cut v0.8.0 (#966)): addeddocs/changelog.d/release-0.9.0-cut.md, rendered it in isolation as the new small## Unreleasedmanaged block, inserted## [0.9.0] - 2026-08-24, and moved the rest of the prior managed block below it as flat historical content.scripts/render_changelog_fragments.py --check CHANGELOG.mdpasses.This PR also removes the stale, never-rendered
docs/changelog.d/release-0.8.0-cut.mdfragment left over from the abandoned 0.8.0 attempt — its content is not folded into 0.9.0's notes since it's already permanently recorded at the existing## [0.8.0] - 2026-08-17section, which is left untouched as history.What's newly released in 0.9.0 (highlights)
Added:
u_h(Fox & Glas, 2001; Browne, Goldstein, & Rasbash, 2001), with CPU-multithreaded and optional GPU kernels.Changed:
FitConfig/CLI backend selection is now restricted to Rust (rustor fail-closedauto); NumPy parity moved behind an explicitfit_referenceAPI.1.97.1across all verification jobs (was a floating stable channel).Fixed / Security:
Full detail is in the
[0.9.0] - 2026-08-24section ofCHANGELOG.md.Verification
All run locally against a fresh Python 3.12 venv (
python3.12 -m venv .venv312 && .venv312/bin/python -m pip install -e ".[dev]", builds the Rust extension via maturin) and cleaned up afterward:pytest— 5862 passed, 1 skipped (pre-existing, unrelated skip)python -c "... resolve_backend(FitConfig().backend) == 'rust'"— rust backend confirmed defaultcargo test --workspace— all suitesok, 0 failedcargo test --manifest-path crates/fast-mlsirm-py/Cargo.toml— 9 passed, 0 failedpython scripts/release_acceptance.py --out acceptance_check --require-rust—"status": "ok"across simulate/fit(auto+rust)/diagnostics/report stepspython scripts/render_changelog_fragments.py --check CHANGELOG.md— passesScope note
This PR only prepares the version bump and changelog cut, ready to merge. It does not trigger the
Release Tagworkflow, PyPI publish, or anyworkflow_dispatch— that is a separate, later step gated on this PR merging tomain.Co-authored-by: Claude noreply@anthropic.com
Generated by Claude Code