Restored fit/model caches now check native pointer addresses rather than platform-specific display strings, rebuilding safely on macOS and Windows.
Linux fallback linking to nloptr now records a relocatable library name and a sibling-library runpath instead of an absolute build-machine dependency.
The small-N singular FIML H1 witness now has an independent unbounded- likelihood gate; its numerical stopping flag is outside live parity. Converged control moments and starts retain strict comparisons.
Portable package checks now run on Windows, macOS and Linux with current dependencies. Live lavaan comparisons accommodate 0.7-3; the pinned lavaan-0.7.2 preset retains its own oracle.
Windows now generates the complete vendored build configuration and locates NLopt through Rtools or explicit library flags. macOS numeric model conversion uses a locale-independent fallback where floating-point charconv is unavailable.
Frontier PSD fitters accept psd_factor = "square" for full square covariance
factors. Triangular factors remain the default; projected start covariances
and endpoint audit rules are unchanged.
Complete-data endpoint audits now support simple equality-constrained std.lv charts, including loading and latent-mean ties across factors or groups. Released marker ties preserve the constrained model dimension. Automatic constrained starts retain the existing normalized-unit fallback.
Lab fits and prepared datasets retain read-only deletion provenance: rows supplied, used and deleted per group, exclusive reasons, and applied policy. FIML/ML2S record no listwise deletion; summary-only historical counts are marked unknown. Existing missing-data and group-label refusals are preserved.
Complete-data GLS fits now use PORT by default, retaining the layered start and information-refined coordinates. Estimates at the same optimum are unchanged; iteration counts and runaway paths may differ. ML keeps L-BFGS.
Complete-data ML and GLS fits with standardized extent above 10 are no longer reported converged when their supported std.lv endpoint Newton audit fails. Diagnostics record the trigger and unsupported transports; estimates are unchanged.
FIML fit-measure calls share fit-owned saturated ingredients and baseline fits; policy points are reused by lab Wald intervals. Returned estimates and intervals are unchanged, and modified or serialized fits rebuild the cache.
Added lab-only fit_index_intervals_misspec() for continuous ML/FIML RMSEA,
CFI and TLI: discrepancy and square-root Wald variants, joint baseline
influence, observed-coordinate second-order variance and typed refusals.
This is an uncalibrated study candidate; ordinary defaults are unchanged.
Fixed covariance-only complete-data ML policy fit measures in the lab: score rows now use profiled group means, so shifting observations does not change the Takeuchi correction. Ordinary magmaan fits always include mean structure and were unaffected. Fit-measure saturated EM moments now use a tighter tolerance to preserve unit invariance of the FIML trace correction.
Continuous DWLS weight blocks now retain numeric diagonal entries through native preparation, fitting and saved-fit replay. Supplied W accepts numeric diagonals or matrices (and grouped lists); full weights keep their matrices. Weight entries are W, not whitening factors; inference recipes are unchanged.
Nested tests now refuse boundary_nesting only when a required tangent
loses rank, rather than because the fitted factor covariance is improper or
singular. PSD-boundary comparisons compute under the same interior-population
assumption as global tests and retain psd_boundary; anova() also flags
computed table rows. A 500-replicate weak-factor null check at each of
N=100/200 gave score rejection 5.6%/6.0% and LR 6.4%/7.0% at nominal 5%,
including 10.0%/1.8% improper null fits (SB and PEBA4, one restriction).
Imported lavaan tables now reproduce the syntax-built variable inventory. This may change starts and iteration counts for models with regressions and mean structure.
The lavaan-0.7.2 marker component now also covers FIML and ordinal/mixed
DWLS, using each route's saturated H1 covariance. Switched fits replay the
selected fitting attempts and revert when rejected; marker = "default"
keeps the requested markers.
Fully fixed models with latent regressions or higher-order factors and fixed means now return their implied moments without crashing in the stationarity audit.
Explicit quadratic references (including summary/anova SB and PEBA4) now clip roundoff-negative spectrum entries using the projected-score validator; materially negative spectra still raise a numeric error.
Ordinary magmaan(estimator = "ML") on complete all-ordinal data now uses
association ML, exact Stage-1 IJ covariance with observed sensitivity, All
global/nested references, and robust modification indices/equality releases.
DWLS remains the ordinal default. Global tests can be liberal in finite
samples; see the association-ML help caveat and decisions/08 evidence.
Identification reports classify scale, location and rotation freedoms, enforce fixed entries and linear equalities, and expose per-direction suggested fixes. Remaining null dimensions are reported as information deficits.
augment_model_spec(model, categories) augments ordinal specifications from
declared category counts with missing threshold starts. Ordinal and mixed
augmentation now builds rows column by column; prepared models use this helper.
The lavaan-0.7.2 FIML preset now uses lavaan's scale-dependent H1
covariance ridge and retains stalled EM moments. fit$fitting$h1 records
H1 convergence and update/repair counts. Converged H1 moments retain strict
oracle agreement; stalled H1 endpoints are outside the compatibility
contract. Native FIML H1 defaults are unchanged.
Lab optimizer controls now accept opt-in objective and
objective_downward scaling for continuous fixed-weight LS and ML2S Stage-2
LS, using the fitting GN diagonal. Defaults and audit rules are unchanged.
ML/direct FIML and residual backends reject these modes as Unsupported.
Ordinal and mixed routes currently ignore all coordinate scaling modes
pending TASK-33.10.5.6.
structural_identification() checks a specification or reuses a prepared
model's data-free report. Prepared fits reuse construction-time identification
and express cached null directions at the deciding probe point. Lab fits
remain available for unidentified models, with a failed verdict.
The lavaan-0.7.2 preset now adapts weak markers for complete-data ML.
marker = "default" keeps the requested identification. Fits retain the
actual fitted specification and a switch/revert table; nested inference
explicitly refuses switched marker coordinates. FIML and DWLS adaptation
follows separately; their preset currently reports marker = "default".
Fits using convergence = "lavaan-0.7.2" (including the preset) report
lavaan's post-estimation check separately from convergence. The six flags
are available in fitting$post_check on the lab fit; ordinary fits expose
them through as_lab_fit(). This adds no warning or inference restriction.
Continuous ULS, DWLS and WLS/ADF fits now warn when within-group observed
variances differ by more than a factor of 1000, with advice to rescale.
The C++ diagnostic also covers ML2S Stage-2 and continuous mixed-LS moments;
ML, GLS, FIML, NT/DLS weights and ordinal-only fits do not emit this advice.
Lab fits expose observed_variance_ratio and numerical_scaling_message.
A structurally unidentified model is never converged = TRUE, under any
rule: a data-free rank check of the moment Jacobian
(fit$diagnostics$identification) fails the verdict and names the null
directions. A local Newton pass no longer certifies a scale ridge.
score_quadratic() requires an
explicit meat matrix. Observed bread supports pseudo-true covariance and
nested restrictions; complete-data global GOF can use expected geometry.frontier_profile_lrt_parameter_gmm() and
frontier_profile_lrt_ci_parameter_gmm() remove ij_weight and dls_a:
the weight recipe comes from the fit.fit$W; optional weight must match it or a
positive multiple. ML2S RBM and case influence likewise use recorded Stage-2
weights and DLS mixing weights, and validate explicit overrides.policy_inference() and policy_nested() compose ML/FIML empirical-score,
observed-bread inference, with observed score sensitivity and an expected
metric. Nested LR calibration handles restricted, misspecified means.
Components retain separate typed unavailable reasons.robust_ordinal_ij(..., first_stage = "exact") exposes exact empirical
sampling rows and Gamma. Its default remains "opg"; the ordinary policy
selects exact influence, without changing fitting weights.calibrate_quadratic() accepts std/sb/ss/mv/scaled_f/all/pall and ebareference = "peba4" and retain p_sb/sb_scale comparators.policy_modification_indices() composes robust one-df indices and affine
equality releases for ML/FIML and all-ordinal/mixed DWLS, including absent
regressions among variables already in equations. policy_mi_refit() refits
a candidate from its embedded null using the nested policy.reason and detail
for numerical failures.gamma or per-group NACOV blocks support complete ML,
continuous LS and categorical LS indices/releases. Supplied Gamma requires
explicit fixed-weight inference; it cannot provide casewise weight influence.
Continuous-LS covariance and ML/LS profile-LRT adapters also accept Gamma.mi is the naive
Stage-2 statistic (mi_type = "naive_stage2"); mi.scaled uses Stage-1
covariance and, when requested, Stage-2 weight influence.standardized_rows(fit, vcov) provides std.lv/std.all estimates, delta-method
SEs and endogenous R-squared, including fixed markers, groups and ordinal
parameters. Missing covariance preserves estimates with typed missing SEs;
defined standardized scales are unsupported.policy_fit_measures() provides robust point indices and per-index reasons
with discrepancy, trace and df details for ML/FIML, continuous ULS, ML2S-NT
and ordinal/mixed DWLS. It fits a matching independence baseline and corrects
residual points for sampling bias. Policy intervals are not yet provided.estimate()
accepts DWLS fitting options through the same engine as fit_model().convention_inference() and convention_nested() compose named bundles on
retained fits with component-level unavailable reasons. Fitting presets and
reporting bundles remain separate choices. Complete-data MLR uses the
H1-minus-H0 trace; ordinal reporting uses per-group n minus one.moments = "auto" selects this recipe; structured/unstructured comparators
remain explicit. Global GOF primitives retain their named conventions.refit_from_null() returns a new larger-model fit from a verified embedded
restricted estimate, with native convergence diagnostics.parameter_covariance() derives empirical meat from retained
observations; meat = "model" requests inverse information.robust_nested_lrt() composes ML/DWLS policy tests and refuses unsupported
routes. Explicit methods and Satorra aliases retain compatibility conventions.vcov(regime = "sandwich_ij") provides all-ordinal estimated-weight
covariance; the default remains fixed-weight sandwich covariance.infer_continuous_ls_robust() requires explicit
fixed_weight = TRUE for recorded data-estimated weights.mplus_model() imports whole continuous single/grouped inputs, growth models,
MODEL CONSTRAINT with NEW/equalities/DO loops, and MODEL INDIRECT. Specs retain
source notes, numeric group order, labels and rebuildable model metadata.
SQRT, PHI/pnorm and LOG10 extend expressions; inequalities remain unsupported.mplus_data() reads free/fixed individual and summary data, missing flags and
FILE/NGROUPS groups. It reports observation counts and dropped grouping codes;
summary N-1 covariances are rescaled to N for ML. Terminal DOS Ctrl-Z markers
are accepted; embedded markers give a DA01 diagnostic.First versioned dependency for the magmaan 0.1.0 simulation prerelease. The lab retains its methods-development API, including the EQS constructor.
Development is unfinished: remaining bugs and incomplete coverage of the main estimators and inferential procedures remain to be resolved and validated. Version 0.1.0 provides a versioned simulation snapshot, not a finished release.
High-level fit reconstruction retains defined parameter estimates using the shared C++ evaluator, independently of covariance inference.