Skip to content

chore(release): cut v0.8.0 - #966

Merged
seonghobae merged 1 commit into
mainfrom
release/v0.8.0-cut
Aug 17, 2026
Merged

chore(release): cut v0.8.0#966
seonghobae merged 1 commit into
mainfrom
release/v0.8.0-cut

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

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 Unreleased block — the exact class of bug the render-parity regression test exists to catch) and its own release-0.7.0-cut.md fragment was never removed. This PR:

  1. Runs scripts/render_changelog_fragments.py --update to resynchronize CHANGELOG.md with the 134 fragment files that had accumulated in docs/changelog.d/ since the 0.7.0 cut.
  2. Removes the stale release-0.7.0-cut.md fragment (it duplicated content already historically recorded under the existing ## [0.7.0] heading).
  3. Performs the actual cut: moves all accumulated Unreleased content into a new ## [0.8.0] - 2026-08-17 section, and replaces the fragment directory with a single release-0.8.0-cut.md note describing what was folded.
  4. Bumps the version to 0.8.0 in pyproject.toml, crates/mlsirm-core/Cargo.toml, crates/fast-mlsirm-py/Cargo.toml, both Cargo.lock files (via cargo check), and uv.lock.
  5. Fixes two tests that broke as a direct consequence of the fragment removal / version bump:
    • test_changelog_avoids_universal_eap_speedup_claims was pinned to the now-deleted docs/changelog.d/bolt-mmle-theta-optimization.md; it now reads the same note directly from its relocated position in CHANGELOG.md.
    • SECURITY.md / SUPPORT.md now advertise the 0.8.x supported line (test_security_and_support_track_current_package_minor).

What's in 0.8.0

A large release spanning the accumulated Unreleased work: 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 of CHANGELOG.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

@cursor

cursor Bot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

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.

@coderabbitai

coderabbitai Bot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too 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 configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: c0a1f9fa-a2d8-4605-972d-664489657239

📥 Commits

Reviewing files that changed from the base of the PR and between 11e0fab and b99ff30.

⛔ Files ignored due to path filters (3)
  • Cargo.lock is excluded by !**/*.lock
  • crates/fast-mlsirm-py/Cargo.lock is excluded by !**/*.lock
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (142)
  • CHANGELOG.md
  • SECURITY.md
  • SUPPORT.md
  • crates/fast-mlsirm-py/Cargo.toml
  • crates/mlsirm-core/Cargo.toml
  • docs/changelog.d/397-paired-rating-range-evidence.md
  • docs/changelog.d/555-operation-specific-subprocess-deadlines.md
  • docs/changelog.d/556-explicit-row-headers.md
  • docs/changelog.d/563-marginal-distance-workspace-bounds.md
  • docs/changelog.d/565-multilevel-longitudinal-contracts.md
  • docs/changelog.d/565-multilevel-weighted-contextual-effect.md
  • docs/changelog.d/570-fitstats-fallback-buffer-reuse.md
  • docs/changelog.d/573-essay-validation-empty-state-status.md
  • docs/changelog.d/574-html-report-tooltips.md
  • docs/changelog.d/586-report-tabular-numerals-motion.md
  • docs/changelog.d/608-factor-retention-evidence-contract.md
  • docs/changelog.d/608-model-relation-contract.md
  • docs/changelog.d/608-model-validation-unit.md
  • docs/changelog.d/609-governed-item-bank-lifecycle.md
  • docs/changelog.d/609-item-bank-lifecycle-contract.md
  • docs/changelog.d/622-python-314-ci.md
  • docs/changelog.d/625-second-order-tolerance.md
  • docs/changelog.d/627-fitstats-sx2-person-rust-required.md
  • docs/changelog.d/627-parallel-analysis-control-bounds.md
  • docs/changelog.d/628-cat-rust-ability-estimation.md
  • docs/changelog.d/635-subgroup-evidence-fail-closed.md
  • docs/changelog.d/638-serving-bundle-rust-fail-closed.md
  • docs/changelog.d/639-reject-unimplemented-estimators.md
  • docs/changelog.d/641-acquisition-readiness-gate.md
  • docs/changelog.d/644-auto-backend-rust-fail-closed.md
  • docs/changelog.d/646-fitstats-rust-tail.md
  • docs/changelog.d/647-inference-rust-vcov.md
  • docs/changelog.d/648-support-policy-current-line.md
  • docs/changelog.d/650-personfit-error-redaction.md
  • docs/changelog.d/653-strict-json-artifacts.md
  • docs/changelog.d/659-node-rule-fail-closed.md
  • docs/changelog.d/664-mixed-item-model-input-validation.md
  • docs/changelog.d/673-bifactor-shape-inspection-bounds.md
  • docs/changelog.d/678-model-comparison-control-validation.md
  • docs/changelog.d/680-rotation-mode-control-validation.md
  • docs/changelog.d/682-ata-content-label-validation.md
  • docs/changelog.d/683-ata-semantic-range-preflight.md
  • docs/changelog.d/684-gtheory-public-control-validation.md
  • docs/changelog.d/691-rag-governed-request.md
  • docs/changelog.d/692-lsr-ranking-input-bounds.md
  • docs/changelog.d/698-release-changelog-serialization.md
  • docs/changelog.d/707-pr-queue-git-metadata-timeout.md
  • docs/changelog.d/708-release-evidence-git-metadata-timeout.md
  • docs/changelog.d/714-rt-max-iter-ceiling.md
  • docs/changelog.d/716-validation-threshold-policy.md
  • docs/changelog.d/718-ata-constraint-map-validation.md
  • docs/changelog.d/719-scaling-ranking-csr-allocation-budget.md
  • docs/changelog.d/720-fitstats-rust-required.md
  • docs/changelog.d/721-cat-selection-rust-ownership.md
  • docs/changelog.d/722-inference-nonfinite-uncertainty.md
  • docs/changelog.d/731-top1-csr-input-bounds.md
  • docs/changelog.d/734-observed-information-rust-ownership.md
  • docs/changelog.d/737-linking-fixed-anchor-rust-ownership.md
  • docs/changelog.d/747-test-form-rust-ownership.md
  • docs/changelog.d/751-jmle-rust-optimizer.md
  • docs/changelog.d/764-llm-judge-json-depth.md
  • docs/changelog.d/776-fitstats-infit-m2-failclosed.md
  • docs/changelog.d/777-docs-coverage-vocabulary-sync.md
  • docs/changelog.d/777-rag-perturbation-anchors.md
  • docs/changelog.d/779-retire-competing-hourly-review-repair.md
  • docs/changelog.d/781-observed-information-work-budget.md
  • docs/changelog.d/782-essay-facets-synthetic-recovery.md
  • docs/changelog.d/783-rubric-iterable-error-boundary.md
  • docs/changelog.d/784-model-comparison-input-error-boundary.md
  • docs/changelog.d/785-multilevel-hostile-numeric-callbacks.md
  • docs/changelog.d/786-scoring-schema-version-callback-redaction.md
  • docs/changelog.d/787-item-bank-dif-applicability.md
  • docs/changelog.d/799-serving-redundant-parameter-integrity.md
  • docs/changelog.d/805-ata-target-gain-rust.md
  • docs/changelog.d/807-cmle-m2-rust-ownership.md
  • docs/changelog.d/808-factor-retention-iterable-redaction.md
  • docs/changelog.d/818-multigroup-m2-rust-projection.md
  • docs/changelog.d/822-pointer-focus-report.md
  • docs/changelog.d/846-irt-link-control-callback-safety.md
  • docs/changelog.d/849-exploratory-model-callback-safety.md
  • docs/changelog.d/851-gtheory-numpy-scalar-trust.md
  • docs/changelog.d/854-mixture-control-callback-safety.md
  • docs/changelog.d/856-crm-control-callback-safety.md
  • docs/changelog.d/858-rating-range-category-control.md
  • docs/changelog.d/877-model-comparison-control-callbacks.md
  • docs/changelog.d/881-rubric-gtheory-pilot-control-callbacks.md
  • docs/changelog.d/883-rubric-testlet-pilot-control-callbacks.md
  • docs/changelog.d/887-scoring-execution-integer-callback-safety.md
  • docs/changelog.d/889-hourly-pr-query-bounds.md
  • docs/changelog.d/891-rubric-integer-controls.md
  • docs/changelog.d/893-essay-integer-callback-safety.md
  • docs/changelog.d/895-enterprise-integer-callback-safety.md
  • docs/changelog.d/897-equating-control-callback-safety.md
  • docs/changelog.d/899-icc-control-callback-safety.md
  • docs/changelog.d/902-cdm-native-control-boundary.md
  • docs/changelog.d/903-detect-native-discovery-order.md
  • docs/changelog.d/905-rasch-cml-control-boundary.md
  • docs/changelog.d/907-subscore-validation-order.md
  • docs/changelog.d/909-security-integer-callback-boundary.md
  • docs/changelog.d/912-judge-category-control-red-completeness.md
  • docs/changelog.d/912-judge-category-control-safety.md
  • docs/changelog.d/914-plausible-values-control-safety.md
  • docs/changelog.d/919-hofstee-scalar-control-safety.md
  • docs/changelog.d/921-facets-control-safety.md
  • docs/changelog.d/930-rotation-loader-concurrency.md
  • docs/changelog.d/940-scaling-bradley-control-boundary.md
  • docs/changelog.d/942-deltaplot-control-boundary.md
  • docs/changelog.d/949-mh-control-boundary.md
  • docs/changelog.d/953-adaptive-judge-default.md
  • docs/changelog.d/architecture-baseline.md
  • docs/changelog.d/bolt-mmle-theta-optimization.md
  • docs/changelog.d/bounded-json-input-hardening.md
  • docs/changelog.d/bounded-json-loads.md
  • docs/changelog.d/canonical-architecture-baseline.md
  • docs/changelog.d/diagnostics-report-focus-contrast.md
  • docs/changelog.d/enterprise-criterion-observation-adapter.md
  • docs/changelog.d/enterprise-explicit-value-parser.md
  • docs/changelog.d/enterprise-issue-calibration-bundle.md
  • docs/changelog.d/enterprise-issue-evidence-contracts.md
  • docs/changelog.d/enterprise-issue-facets-calibration-reports.md
  • docs/changelog.d/enterprise-issue-facets-handoff.md
  • docs/changelog.d/enterprise-issue-scoring-request.md
  • docs/changelog.d/enterprise-semantic-issue-boundary.md
  • docs/changelog.d/essay-facets-calibration-report-html.md
  • docs/changelog.d/essay-facets-calibration-report.md
  • docs/changelog.d/essay-score-report-html.md
  • docs/changelog.d/essay-score-report-review-routing.md
  • docs/changelog.d/essay-validation-evidence-report-html.md
  • docs/changelog.d/essay-validation-evidence-report.md
  • docs/changelog.d/finn-guttman-feldt-integer-callback-boundary.md
  • docs/changelog.d/git-metadata-timeouts.md
  • docs/changelog.d/governance-index.md
  • docs/changelog.d/hourly-review-repair-caller.md
  • docs/changelog.d/python-312-floor.md
  • docs/changelog.d/rag-facets-calibration.md
  • docs/changelog.d/release-0.7.0-cut.md
  • docs/changelog.d/release-0.8.0-cut.md
  • docs/changelog.d/report-exact-value-tooltips.md
  • docs/changelog.d/shared-scoring-facets-calibration-report.md
  • docs/changelog.d/task-revision-calibration-identity.md
  • pyproject.toml
  • tests/test_mmle_eap_projection_contract.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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.
@seonghobae
seonghobae enabled auto-merge (squash) August 17, 2026 07:54
@seonghobae
seonghobae merged commit 676ed7e into main Aug 17, 2026
36 checks passed
@seonghobae
seonghobae deleted the release/v0.8.0-cut branch August 17, 2026 09:26
@seonghobae seonghobae mentioned this pull request Aug 24, 2026
6 tasks
seonghobae added a commit that referenced this pull request Aug 25, 2026
* 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants