Changes in version 1.0.1 (2026-11-03) Addresses the comments from the first CRAN submission. - DESCRIPTION now writes out every acronym on first use: "support vector machine (SVM)", and the L1 penalty is identified as lasso-type. - plot_trace() no longer leaves the caller's graphical parameters modified. It needs par(new = TRUE) to overlay the second axis; the previous value is now captured and restored with an immediate on.exit(), so the caller's state is intact even if the function exits with an error. Only new is saved and restored rather than par(no.readonly = TRUE), since the latter would also restore mfg and break a multi-panel layout set up by the caller. This was the only place in the package that changed par(); nothing in the package changes options() or the working directory. Changes in version 1.0.0 First release. - fsa() fits sparse generalized linear models under an exact cardinality constraint using Feature Selection with Annealing (Barbu et al., 2017). Gaussian, binomial, Poisson, multinomial, multi-response Gaussian and Cox families; dense and sparse designs. - Passing a vector to k returns a whole path of model sizes from one annealed pass, with nested supports. - cv.fsa() chooses k by cross-validation, with deviance, mse, mae, class, auc and C measures and optional parallel folds. - Four classification losses: logistic, Lorenz, smoothed SVM and hinge. The Lorenz loss is the robust choice when training labels are unreliable. - cv.fsa() can cross-validate the ridge coefficient s jointly with k: pass a vector to s and read the result from s.min. This matters when p greatly exceeds n. - Two real datasets from the NIPS 2003 Feature Selection Challenge: dexter ships with the package, and fetch_gisette() downloads and caches Gisette. Both include random probe features, so false discoveries are measurable. - Portability: the package is now pure ASCII in code, documentation and console output. The previous em dash in print() output was the only non-ASCII character a user could see, and non-ASCII example output is a known source of platform-dependent check failures on Windows. - fetch_gisette()'s example is marked \dontrun{} so that package checks never attempt a 21 MB download. - Armadillo bounds checking is left enabled in src/Makevars. It costs nothing measurable (the engine is dominated by BLAS products) and converts any out-of-bounds access into a clean R error instead of silent heap corruption. - plot_trace() draws the coefficient trajectory of the anneal; the step size is capped automatically at the largest value for which the gradient step is guaranteed to descend, which makes the default settings safe on strongly correlated designs.