|
3 | 3 | ## Unreleased |
4 | 4 |
|
5 | 5 | <!-- BEGIN AUTHORITATIVE CHANGELOG FRAGMENTS --> |
| 6 | +### Changed |
| 7 | + |
| 8 | +#### Release cut 0.9.0 |
| 9 | + |
| 10 | +- Project version is bumped to 0.9.0 in `pyproject.toml`, `crates/mlsirm-core`, |
| 11 | + and `crates/fast-mlsirm-py`. The accumulated `Unreleased` notes now form the |
| 12 | + `[0.9.0] - 2026-08-24` release section: new governed contracts (cross-engine |
| 13 | + conformance inventory/provenance/manifest-replay evidence, an external |
| 14 | + validation and transportability profile, a governed structural-model |
| 15 | + pair-decision gate, buyer-facing item-bank lifecycle reports), a new |
| 16 | + Rust-owned crossed/weighted multiple-membership person-effects estimator |
| 17 | + (Fox & Glas, 2001; Browne, Goldstein, & Rasbash, 2001) with CPU-threaded and |
| 18 | + optional GPU kernels, reproducible release-tag-bound PyPI sdist/wheel |
| 19 | + publishing, restriction of production backend selection to Rust-owned |
| 20 | + paths (NumPy parity moved behind an explicit `fit_reference` API), a Rust |
| 21 | + 1.97.1 toolchain pin across verification, and a broad continuation of the |
| 22 | + hostile-callback/conversion-protocol hardening sweep across dozens of public |
| 23 | + entry points (CAT, ATA, DIF, equating, scaling, reliability, multilevel, |
| 24 | + response-time, fit-statistics, inference, linking, LLM-judge orchestration, |
| 25 | + parallel-analysis, and rotation/loader concurrency, among others). |
| 26 | +- This cut also removes the stale, never-rendered `release-0.8.0-cut.md` |
| 27 | + fragment left over from the abandoned 0.8.0 release attempt (that version |
| 28 | + was never actually tagged or published); its already-recorded |
| 29 | + `[0.8.0] - 2026-08-17` section in `CHANGELOG.md` is left untouched as |
| 30 | + history, and this release supersedes it directly. |
| 31 | +- Released authoritative fragments are removed from `docs/changelog.d`; the |
| 32 | + directory again holds only genuinely unreleased notes. |
| 33 | +<!-- END AUTHORITATIVE CHANGELOG FRAGMENTS --> |
| 34 | +## [0.9.0] - 2026-08-24 |
| 35 | + |
| 36 | + |
6 | 37 | ### Added |
7 | 38 |
|
8 | 39 | #### Cross-engine conformance inventory contract |
|
110 | 141 | - Withheld checkout credentials from every Statistical Studies job so |
111 | 142 | repository-controlled `cargo test` cannot reuse the Actions token. |
112 | 143 |
|
113 | | -#### Release cut 0.8.0 |
114 | | - |
115 | | -- Project version is bumped to 0.8.0 in `pyproject.toml`, `crates/mlsirm-core`, |
116 | | - and `crates/fast-mlsirm-py`. The accumulated `Unreleased` notes now form the |
117 | | - `[0.8.0] - 2026-08-17` release section: governed contract additions |
118 | | - (multilevel/multiple-membership/longitudinal design, structural |
119 | | - model-relation and leakage-safe model-validation units, post-pilot |
120 | | - item-bank lifecycle, RAG scoring/perturbation-anchor/facets-calibration |
121 | | - adapters, enterprise issue-intelligence observation/calibration/reporting |
122 | | - contracts, essay facets/score/validation HTML reports, paired rating-range |
123 | | - and essay-facets synthetic recovery evidence), a broad Rust-ownership |
124 | | - hardening sweep across dozens of public entry points (CAT, ATA, DIF, |
125 | | - equating, scaling, reliability, multilevel, response-time, fit-statistics, |
126 | | - inference, linking, LLM-judge orchestration, parallel-analysis, plausible |
127 | | - values, Rasch-CML, model-comparison, and rotation/loader concurrency) that |
128 | | - reject hostile Python callback/conversion-protocol inputs before native |
129 | | - dispatch, and accessibility/documentation polish (exact-value tooltips, |
130 | | - tabular numerals, print styles, row headers, architecture baseline, |
131 | | - Python 3.14 CI). |
132 | | -- Released authoritative fragments are removed from `docs/changelog.d`; the |
133 | | - directory again holds only genuinely unreleased notes. |
134 | | - |
135 | 144 | #### Pin Rust 1.97.1 across verification |
136 | 145 |
|
137 | 146 | - Pin local Rust builds, Python/Rust package verification, ordinary Rust tests, GPU smoke, packaging, and scheduled statistical studies to exact Rust 1.97.1 instead of a floating stable channel. |
|
713 | 722 | - Reject caller-defined string and numeric subclasses at `ValidationPolicy` construction before `strip`, numeric conversion, or comparison callbacks can execute. |
714 | 723 | - Normalize only exact built-in and package-trusted NumPy real scalar identities for scoring-policy thresholds while preserving the existing closed `0..1` domains and Rust-owned pass/fail arithmetic. |
715 | 724 | - Require an exact built-in integer for `min_subgroup_n` before range comparison and preserve the existing `rust_kwargs()` payload contract. |
716 | | -<!-- END AUTHORITATIVE CHANGELOG FRAGMENTS --> |
| 725 | + |
717 | 726 | ## [0.8.0] - 2026-08-17 |
718 | 727 |
|
719 | 728 |
|
|
0 commit comments