launchApp() now starts a new, modernised Shiny app with a guided five-step workflow (Data, Setup, Pre-tests, Sampling, Report), example data, an HTML report and Excel/CSV exports. The app's extra packages are listed under Suggests; launchApp() reports any missing ones, and passes ... on to shiny::runApp().
VCG_sampler(): the size sanity warnings now count the POOL as the first level of the group variable, so they are also correct for combine_data() output ("POOL"/"TG") instead of reporting a POOL size of 0.
VCG_sampler() now stops with a clear message when n is larger than the POOL with complete data, or when one of the groups is empty, instead of silently selecting the whole POOL.
VCG_sampler() with stratum now returns the rows in the input order and keeps rows with a missing stratum value (with VCG = NA), as is already done for rows with missing covariates.
BestVCGsize() no longer fails for small POOLs or when no plateau is found (it returns a single NA), only scans sizes up to the POOL size with complete data, and no longer repeats the VCG_sampler() size warnings for every tried size.
robust_scale() ignores NA when detecting binary/categorical variables and no longer returns Inf/NaN when the reference group is constant.
plot_var() now works with a single stratum level and with character stratum variables.
VCG_sampler() now shortens long covariate names in the target plot to a maximum of 11 characters, built from the first 8 characters + _ + the last 2 characters to keep them unique. A warning is printed when names are cut.
VCG_sampler() now issues sanity warnings when running: too many covariates (> 21), a small POOL size relative to the number of covariates (ratio < 5, reported), and a requested VCG size that is >= 75% of the POOL. When stratification is used, these checks are reported per stratum, plus a warning is added when stratum sizes are strongly imbalanced.
Covariate scaling now uses a robust median/MAD approach (falling back to the standard deviation when the MAD is 0). robust_scale() gained an optional group argument (defaulting to NULL, using all observations) and now backs the scaling in VCG_sampler(), energy_distance(), combine_variables() and find_outliers(), replacing base scale().
Unit test added via testthat framework