Changes in version 0.32 (2026-07-21) New features - transitions() now reads inference results, not only fitted models. It accepts the output of bootstrap_lsa(), certainty_lsa(), stability_lsa(), permute_lsa(), compare_lsa(), bayes_compare_lsa() and lsa_lags(), and returns the same tidy one-row-per-transition data frame. significant = TRUE keeps the transitions the method itself flags, and sort = "strength" orders them by that method's signed effect. Previously the per-transition table of an inference result was reachable only through as.data.frame(), because the print methods show a header summary alone. - The transitions() generic is now transitions(fit, ...), so each class declares only the arguments backed by columns it actually has. Existing calls on a fit are unaffected. Documentation - Vignettes restore the user's options() after changing digits, as CRAN requires. - Vignettes read every result with transitions() rather than coercing it with as.data.frame(), and select rows with the significant argument rather than subsetting. - Removed the citations, reference lists, DOIs, documentation URLs and linked author metadata that 0.31 added to the shipped vignettes. Changes in version 0.31 CRAN candidate - Prepared the package for first CRAN submission. - Moved ggplot2 and cograph from Suggests to Imports so the plotting surface works out of the box; plotting examples now run during checks. The analytical core still depends only on base R. - Added a dedicated interoperability vignette covering wide data, long event logs, tna, Nestimate, cograph, and lsa_to_tna(). - Added linked author metadata and Dynalytics framework links to all shipped vignettes. - Restored lsa_to_tna() for handing an lsa fit to tna tooling. - Added ingestion of Nestimate::build_network() netobjects through their prepared sequence data. - Stored the bundled engagement data as a data frame so tna::tna(engagement) works directly. - Removed dead package-site URLs from CRAN-visible metadata. - Added future CRAN installation instructions to the README. - Included NEWS.md in the source package. Changes in version 0.3.0 Interoperability and documentation - Added integration tests for cograph, Nestimate, and the Dynalytics evidence surface. - Added native TNA-style aliases: weights = "tna" and weights = "relative" now map to transition probabilities. - Updated plotting documentation and vignettes to use weights = "tna" for probability-weighted transition networks. - Added and reorganised vignettes: - intro: conceptual overview and package map. - lagdynamics: concise quick start. - workflow: complete applied workflow. - interop: interoperability with sibling packages. - lag-transition-networks: transition-network interpretation. - confirmatory: evidence and uncertainty workflow. - plotting: plot gallery. - Removed public documentation references to unexported internals. - Made long-format input more flexible: action is the only mandatory long-format column, with optional actor, session, time, and order. - Added warnings for single-sequence bootstrap and permutation cases where the requested procedure has limited inferential meaning. Changes in version 0.2.0 Confirmatory workflow and group comparison - Added the Dynalytics-style confirmatory evidence battery: certainty_lsa(), bootstrap_lsa(), reliability_lsa(), stability_lsa(), and permute_lsa(). - Added group comparison with compare_lsa() and Bayesian group comparison with bayes_compare_lsa(). - Added grouped lsa() fits through group = ..., with grouped methods for transitions(), nodes(), tests(), initial(), plotting, reliability, and comparison workflows. - Added tidy as.data.frame() methods for inference and comparison result objects. - Added the unified plotting surface: residual heatmaps, residual networks, TNA probability networks, chord diagrams, sunbursts, uncertainty forests, and group-comparison plots. - Added native transition and initial probabilities: transition_probabilities() and initial(). - Added bundled long-format data for examples and tests. Changes in version 0.1.0 Initial implementation - Created a from-scratch, clean-room implementation of lag sequential analysis for categorical event sequences. - Added the unified lsa() constructor and canonical sequence handling through lsa_data() and lsa_transitions(). - Added five built-in engines: classical, two_cell, bidirectional, parallel_dominance, and nonparallel_dominance. - Added convenience wrappers: lsa_classical(), lsa_two_cell(), lsa_bidirectional(), lsa_parallel_dominance(), and lsa_nonparallel_dominance(). - Added the pluggable engine registry: register_lsa_engine(), get_lsa_engine(), list_lsa_engines(), and unregister_lsa_engine(). - Added tidy reading verbs: transitions(), nodes(), tests(), initial(), and summary(). - Added multi-lag helpers with lsa_lags() and lag_profile(). - Added structural-zero handling through loops = FALSE and arbitrary structural-zero matrices. - Added experimental transfer_entropy() for directed categorical information-flow analysis. - Kept runtime dependencies minimal: only base R packages are imported (grDevices, grid, stats, and utils).