Changes in version 0.3.0.9000 - plot.mlm_variance_decomp(): the subtitle labelled the random-slope standard deviation as tau11, which is the random-slope variance. It now states both quantities explicitly ("random-slope SD = ..., variance = ..."). The subtitle is also ASCII only: the Unicode tau it used was dropped by the default pdf() graphics device and printed as "..". Plotted intervals and all numerical results are unchanged. - Tests: the shared test fixture no longer writes its data to the global environment. The data are embedded in the model call and read back with lme4::getData(), so the tests run under current testthat, which isolates tests from the global environment. Changes in version 0.3.0 (2026-09-30) Corrections to inference (results change) - Degrees of freedom. All tests and intervals now use Satterthwaite degrees of freedom by default (via 'lmerTest'). Versions up to 0.2.1 used N - p (level-1 rows minus fixed effects), which treats observations as independent and is anti-conservative for cross-level interactions: in a simulation with 10 clusters and no true interaction it rejected at about twice the nominal rate. The new df_method argument offers "satterthwaite" (default), "kenward-roger", "between" (J - q - 1; Snijders and Bosker, 2012), and "residual" (the old rule, kept only for reproducing earlier results). - Johnson-Neyman boundaries are now exact: closed-form roots of the Bauer-Curran quadratic for constant-df methods, and root-finding on the exact criterion for Satterthwaite and Kenward-Roger. Previously they were interpolated from p-values on a grid. mlm_jn() also returns jn_bounds_all (all real roots, including those outside the data) for constant-df methods. - Confidence bands in mlm_plot() now use the full fixed-effects design row. Previously covariates other than the predictor and moderator were omitted from the standard error of the fitted values. - Moderator probe values for a cluster-level moderator are now the mean and SD across clusters, not across observations (new modx.level argument; "observation" restores the old behaviour). mlm_sensitivity() (breaking) - The ICC-shift analysis and robustness_index were removed. The design-effect rescaling it used applies to means under a random-intercept model, not to cross-level interactions, and the adjusted Johnson-Neyman boundary it reported was not correct. icc_range and icc_grid now give a warning and are ignored; loco = FALSE is an error. - Leave-one-cluster-out refits now use update() on the original data, so they keep the original REML/ML setting, weights, and formula. Previously they always used ML (so every "change" included the ML/REML difference) and failed silently for formulas with transformed variables. - The influence measure is now DFBETA, the change in the interaction divided by its full-data SE, flagged at 2/sqrt(J). The previous "Cook's-distance-style" measure divided by the SD of the changes and so flagged clusters by construction. Failed refits are reported with their error messages. mlm_variance_decomp() (breaking) - pct_random was removed: it divided a population variance by a sampling variance and so grew with sample size. The output now reports tau11 (variance), tau11_sd, and df explicitly, and the documentation describes the result as confidence intervals for the average slope versus prediction intervals for a new cluster. - The random slope is taken from the grouping factor that carries pred. Other - Tests now cover every exported function, including checks against 'lmerTest', 'emmeans', and 'pbkrtest'. - New vignette with the public High School and Beyond data ('mlmRev'). - Removed a reference to a non-existent vignette. - URLs point to github.com/subirhait/mlmoderator. Changes in version 0.2.1 (2026-04-03) - Previous CRAN release.