Changes in version 0.1.0 (2026-05-30) Initial CRAN release. Workflow - classify_dynamics(), markov_dynamics(), spatial_markov(), and rank_mobility() accept long sf panels keyed by explicit id, time, and value columns. - transition_matrix(), steady_state(), class_intervals(), and lag_intervals() provide tidy access to results. - plot_transition_matrix(), plot_spatial_markov(), and plot_rank_mobility() return ggplot2 objects. Spatial weights - spatial_markov() accepts a geometry argument: an sf tibble with one row per spatial unit and nb / wt list-columns produced by sfdep. This is the preferred input. listw and nb arguments remain accepted for compatibility with prior workflows and oracle comparisons. Data - Bundled usjoin: 48 contiguous US state per-capita personal income, 1929–2009, mirroring PySAL's reference dataset for spatial Markov examples. Validation - Static fixtures cross-checked against estdaR::sp.mkv() and spdyn::spMarkov(). Optional live cross-checks run when those packages or PySAL giddy are installed.