chore(release): cut v0.8.0 - #966
Conversation
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
Important Review skippedToo many files! This PR contains 142 files, which is 42 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 (142)
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 |
Re-render the stale changelog fragment block (243 lines had been merged without regenerating the managed Unreleased section), fold the accumulated Unreleased notes into a new [0.8.0] release section, remove the now-released fragments plus the leftover unrendered "release-0.7.0-cut" fragment from a prior incomplete cut, and bump the version in pyproject.toml, both crate Cargo.toml/.lock files, and uv.lock. Also fixes two tests broken by the fragment removal and version bump: test_changelog_avoids_universal_eap_speedup_claims now reads the relocated note directly from CHANGELOG.md instead of the deleted fragment file, and SECURITY.md/SUPPORT.md now advertise the 0.8.x support line.
4bfcc75 to
b99ff30
Compare
* fix(release): resync CHANGELOG fragments after v0.8.0 cut PRs merged after the v0.8.0 release-cut PR (#966) added new docs/changelog.d fragments without re-running the renderer, and the already-released release-0.8.0-cut.md fragment was left in place, duplicating the 0.8.0 section under Unreleased. Delete the stale fragment and re-render so render_changelog_fragments.py --check passes again, unblocking the v0.8.0 release-tag dispatch. * fix(release): re-render CHANGELOG fragments for v0.8.0 aggregate Ten more PRs merged into main after this fix's original commit, each adding docs/changelog.d fragments without re-running the renderer. Re-run render_changelog_fragments.py --update so --check passes again and the v0.8.0 release-tag dispatch is no longer blocked. * fix(dif): harden logistic and purification controls (#959) * test(dif): expose executable logistic controls * fix(dif): normalize controls before data and Rust * fix(dif): install hardened public DIF adapters * docs(changelog): record logistic DIF control boundary * docs(doctoring): trace logistic DIF control trust boundary * fix(changelog): classify logistic DIF control boundary --------- Co-authored-by: Claude <noreply@anthropic.com> * test(dif): preserve native zero-iteration and NumPy bool domains * fix(dif): preserve native control compatibility * test(dif): align regressions with native control domains * test(dif): prove hardened package aliases on landing lane * fix(dif): reject max_iter=0 before native discovery in logistic DIF wrappers safe_logistic_dif and safe_logistic_dif_purified normalized max_iter with minimum=0, admitting zero at the Python boundary even though the native logistic_sweep (crates/mlsirm-core/src/dif.rs) rejects max_iter == 0 with "max_iter must be >= 1", and the module's own doctoring already documented max_iter as a positive usize control. A zero cap therefore cleared control validation, materialized caller response/group arrays, and dispatched to the compiled core before failing there instead of being rejected up front (Devin AI review finding on PR #998). Raise the minimum to 1 for both wrappers so the rejection happens before data materialization or core discovery, matching the documented and native domains. Updated the compatibility regressions accordingly: the former zero-iteration dispatch proofs now use the true minimum (1), and new regressions prove max_iter=0 is rejected before core discovery for both logistic_dif and logistic_dif_purified. * fix(release): resync changelog after current main * fix(dif): make control installer idempotent * feat(interaction-map): own residual factorization in Rust * test(interaction-map): seal evidence and resource admission * fix(interaction-map): seal evidence before Rust * test(interaction-map): bound native resource requests * fix(interaction-map): bound native workspaces * fix(interaction-map): reject oversized axis controls before data * test(interaction-map): reject maximal axis request before data * docs(interaction-map): record bounded evidence admission * test(interaction-map): require shape-consistent empty map * test(interaction-map): require coherent empty rectangle * fix(interaction-map): normalize empty complete-case rectangle * docs(interaction-map): record empty complete-case contract * feat(interaction-map): expose coverage and cell evidence * test(interaction-map): reject NaN model expectations * test(interaction-map): reject nonfinite expected evidence in Rust * fix(interaction-map): reject NaN model expectations * fix(interaction-map): require finite expected evidence * docs(changelog): record finite interaction-map expectations * test(interaction-map): preserve observed infinity rejection in Rust * fix(interaction-map): reject infinite observed evidence in Rust * docs(changelog): align interaction-map missingness parity * chore: normalize composed public exports --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com>
Scope
Cuts v0.8.0. The prior 0.6→0.7 cut (#516) left the fragment renderer out of sync (243 lines of merged fragment content had never been re-rendered into the managed
Unreleasedblock — the exact class of bug the render-parity regression test exists to catch) and its ownrelease-0.7.0-cut.mdfragment was never removed. This PR:scripts/render_changelog_fragments.py --updateto resynchronizeCHANGELOG.mdwith the 134 fragment files that had accumulated indocs/changelog.d/since the 0.7.0 cut.release-0.7.0-cut.mdfragment (it duplicated content already historically recorded under the existing## [0.7.0]heading).Unreleasedcontent into a new## [0.8.0] - 2026-08-17section, and replaces the fragment directory with a singlerelease-0.8.0-cut.mdnote describing what was folded.0.8.0inpyproject.toml,crates/mlsirm-core/Cargo.toml,crates/fast-mlsirm-py/Cargo.toml, bothCargo.lockfiles (viacargo check), anduv.lock.test_changelog_avoids_universal_eap_speedup_claimswas pinned to the now-deleteddocs/changelog.d/bolt-mmle-theta-optimization.md; it now reads the same note directly from its relocated position inCHANGELOG.md.SECURITY.md/SUPPORT.mdnow advertise the0.8.xsupported line (test_security_and_support_track_current_package_minor).What's in 0.8.0
A large release spanning the accumulated
Unreleasedwork: governed contract additions (multilevel/multiple-membership/longitudinal design, structural model-relation and leakage-safe model-validation units, post-pilot item-bank lifecycle, RAG scoring/perturbation-anchor/facets-calibration adapters, enterprise issue-intelligence contracts, essay facets/score/validation HTML reports, paired rating-range and essay-facets synthetic recovery evidence), a broad Rust-ownership hardening sweep across dozens of public entry points (CAT, ATA, DIF, equating, scaling, reliability, multilevel, response-time, fit-statistics, inference, linking, LLM-judge orchestration, parallel-analysis, plausible values, Rasch-CML, model-comparison, rotation/loader concurrency), and accessibility/documentation polish. Full detail is in the[0.8.0]section ofCHANGELOG.md.Verification
python3 scripts/render_changelog_fragments.py --check CHANGELOG.md— passes.cargo test --workspace— 5 passed (mlsirm-core, incl. proptest harness).cargo test --manifest-path crates/fast-mlsirm-py/Cargo.toml— 9 passed.python -m pytest(Python 3.12, editable install, Rust backend confirmed resolved) — 4387 passed, 1 skipped.resolve_backend(FitConfig().backend) == "rust"confirmed.No estimator, likelihood, gradient, or formula code changed — this is a changelog/version/doc release cut plus the two test fixes it required.
🤖 Generated with Claude Code
Generated by Claude Code