Skip to content

Commit 7e16889

Browse files
committed
merge: sync with main
2 parents 033e10d + 7006815 commit 7e16889

165 files changed

Lines changed: 1384 additions & 891 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,37 @@
33
## Unreleased
44

55
<!-- 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+
637
### Added
738

839
#### Cross-engine conformance inventory contract
@@ -110,28 +141,6 @@
110141
- Withheld checkout credentials from every Statistical Studies job so
111142
repository-controlled `cargo test` cannot reuse the Actions token.
112143

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-
135144
#### Pin Rust 1.97.1 across verification
136145

137146
- 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,7 +722,7 @@
713722
- Reject caller-defined string and numeric subclasses at `ValidationPolicy` construction before `strip`, numeric conversion, or comparison callbacks can execute.
714723
- 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.
715724
- 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+
717726
## [0.8.0] - 2026-08-17
718727

719728

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,17 @@
77
Latent Space Item Response Models, focused on MLS2PLM simulation, regularized
88
point estimation, and true-parameter recovery checks.
99

10+
The implemented simple-structure MLSIRM/MLS2PLM path follows Jeon, Jin,
11+
Schweinberger, and Baugh (2021), Kang and Jeon (2025), and Molenaar and Jeon
12+
(2026). Adjacent shipped screens include Angoff delta-plot DIF
13+
([`docs/delta_plot_dif.md`](docs/delta_plot_dif.md)) and Bradley–Terry MM
14+
ranking ([`docs/bradley_terry_mm.md`](docs/bradley_terry_mm.md)). Primary
15+
citations and decision records live in
16+
[`docs/traceability/research-basis.md`](docs/traceability/research-basis.md)
17+
and [`docs/adr/README.md`](docs/adr/README.md). Score interpretation and
18+
fairness remain governed by AERA, APA, and NCME (2014); those methods are not
19+
CWE/OWASP/NIST controls.
20+
1021
The first implementation keeps the public API small:
1122

1223
```python

SECURITY.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ notice explicitly says otherwise.
88

99
| Version | Supported |
1010
| --- | --- |
11-
| 0.8.x | Yes |
12-
| < 0.8 | No |
11+
| 0.9.x | Yes |
12+
| < 0.9 | No |
1313

1414
## Reporting a Vulnerability
1515

SUPPORT.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## Current Pre-1.0 Support Scope
44

5-
`fast-mlsirm` 0.8.x is the current supported pre-1.0 minor line. Support applies
5+
`fast-mlsirm` 0.9.x is the current supported pre-1.0 minor line. Support applies
66
to behavior that is part of a released artifact and documented public API or CLI
77
contract. An active pull request, research plan, experimental internal helper,
88
or roadmap item is not supported merely because it exists in the repository.

crates/fast-mlsirm-py/Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/fast-mlsirm-py/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fast-mlsirm-py"
3-
version = "0.8.0"
3+
version = "0.9.0"
44
edition = "2021"
55
license = "MIT"
66
description = "PyO3 bindings for the fast-mlsirm Rust core."

crates/mlsirm-core/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mlsirm-core"
3-
version = "0.8.0"
3+
version = "0.9.0"
44
edition = "2021"
55
license = "MIT"
66
description = "Core likelihood and gradient routines for fast-mlsirm."

docs/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ This index distinguishes governing product/architecture documents from implement
1717
| [`erd/domain-model.puml`](erd/domain-model.puml) | Logical reusable-domain artifact relationships; **not** a hosted ORM schema |
1818
| [`traceability/requirements-matrix.md`](traceability/requirements-matrix.md) | PRD/TRD/ADR -> protected-main implementation/evidence maturity |
1919
| [`traceability/research-basis.md`](traceability/research-basis.md) | Scientific/standards evidence and APA 7 reference mapping |
20+
| [`papers/implemented-literature-map.md`](papers/implemented-literature-map.md) | Paper-to-kernel map for implemented methods |
21+
| [`delta_plot_dif.md`](delta_plot_dif.md) | Angoff TID / delta-plot observed-score DIF screen (not a security control) |
22+
| [`bradley_terry_mm.md`](bradley_terry_mm.md) | Bradley–Terry / Hunter MM pairwise ranking and additive-ties BRATT |
2023
| [`documentation_coverage.md`](documentation_coverage.md) | Documentation completeness states, remaining P0/P1/P2 gaps and maintenance gate |
2124
| [`security/threat-model.md`](security/threat-model.md) | Reusable-core trust/threat model; hosted product threats remain downstream |
2225
| [`doctoring/`](doctoring/) | Method/security/interoperability evidence and conservative implementation boundaries |

docs/adr/0001-domain-neutral-measurement-boundary.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ Date: 2026-08-09
99

1010
Without an explicit boundary, the library can accidentally absorb participant/session state, identity, hosted persistence, UI and deployment logic. That would make the numerical core harder to install independently, create circular repository dependencies, and duplicate ownership already assigned to other CWL services.
1111

12+
The reusable core's scientific identity remains the simple-structure MLSIRM/MLS2PLM family and adjacent measurement contracts. Jeon, Jin, Schweinberger, and Baugh (2021) define the latent-space item-response interaction map; Kang and Jeon (2025) give the multidimensional extension and the relativity of conditional dependence; Molenaar and Jeon (2026) give the regularized joint-maximum-likelihood estimation strategy used by the point-estimate path. Score interpretation, fairness, and intended use remain governed by AERA, APA, and NCME (2014). ISO/IEC/IEEE 42010:2022 governs how this boundary is recorded as an architecture decision, not the psychometric likelihood.
13+
1214
## Decision
1315

1416
`fast-mlsirm` owns reusable domain-neutral measurement contracts and scientific/numerical capabilities:
@@ -67,6 +69,16 @@ Costs:
6769

6870
Supersede this ADR only if the organization intentionally redefines repository bounded contexts and provides a migration plan preserving independent scientific/numerical reuse.
6971

70-
## References
72+
## Research and standards basis
73+
74+
The architecture-description concern (stakeholders, viewpoints, correspondence, and decision records) follows ISO/IEC/IEEE 42010:2022. The measurement methods this boundary exists to keep independently reusable are the simple-structure MLSIRM/MLS2PLM specialization documented in `docs/papers/mls2plm-canonical-equations.md`, not a silent claim of the full discrimination-vector MLS2PLM model.
75+
76+
Jeon, M., Jin, I. H., Schweinberger, M., & Baugh, S. (2021). Mapping unobserved item-respondent interactions: A latent space item response model with interaction map. *Psychometrika, 86*(2), 378–403. https://doi.org/10.1007/s11336-021-09762-5
77+
78+
Kang, I., & Jeon, M. (2025). Multidimensional latent space item response models: A note on the relativity of conditional dependence. *Psychometrika, 90*(2), 799–826. https://doi.org/10.1017/psy.2025.5
79+
80+
Molenaar, D., & Jeon, M. (2026). Regularized joint maximum likelihood estimation of latent space item response models. *Psychometrika, 91*, 335–359. https://doi.org/10.1017/psy.2025.10068
81+
82+
American Educational Research Association, American Psychological Association, & National Council on Measurement in Education. (2014). *Standards for educational and psychological testing*. American Educational Research Association.
7183

7284
International Organization for Standardization, International Electrotechnical Commission, & Institute of Electrical and Electronics Engineers. (2022). *ISO/IEC/IEEE 42010:2022 Software, systems and enterprise—Architecture description*.

0 commit comments

Comments
 (0)