# s20x development news

## Purpose


















## s20x 3.3.0

- Prepared s20x 3.3.0 as a CRAN-facing release after optional plotting engine polish and the tslm() calling-environment compatibility fix.
- Removed obsolete deprecated diagnostics methods that triggered roxygen warnings during documentation regeneration.
- Updated diagnostic API tests so modcheck.lm removal is treated as deliberate while modelcheck remains the supported model diagnostic helper.
- Removed stale roxygen argument tags for deleted diagnostics methods so regenerated Rd usage sections pass CRAN checks.
- Replaced non-standard DESCRIPTION contributor roles with CRAN-standard ctb roles.
- Rendered casestudy() files in a fresh environment with globalenv() as the parent instead of passing .GlobalEnv directly.
- Validated with strict tests, local as-CRAN checks, and external CRAN preflight submissions.

## s20x 3.2.325

- Added regression tests comparing tslm() calling-environment fits with explicit data-frame fits.
- Covered both ordinary lm-backed fits and AR gls-backed fits using the existing beer.df and airpass.df teaching datasets.
- Preserved the Stage 21.1 tslm() implementation while locking in the new data-optional behaviour before CRAN submission.
- Kept tests offline, deterministic, and focused on user-visible teaching workflows.
- Validated by the standard s20x stage workflow.

## s20x 3.2.323

- Updated tslm() so formulas can be evaluated from the calling environment when data is omitted, matching the familiar lm() and glm() workflow.
- Preserved explicit data-frame use for tslm() while using model-frame-based data handling for safer internal evaluation.
- Added deterministic tests covering omitted data and explicit data for ordinary tslm() fits.
- Kept the change small and backward compatible for the Stage 21.1 CRAN-preparation workflow.
- Validated by the standard s20x stage workflow.

## s20x 3.2.320

- Added final release-polish wording for optional plotting engines, with base graphics remaining the default.
- Confirmed Stage 20.1 is limited to dependency-safety and release-note polish rather than new plotting functionality.
- Preserved compatibility by treating ggplot2 and GGally as optional engines rather than required plotting dependencies.
- Used the stage workflow's validation-mode detection so only changed files trigger package checks.

## s20x 3.2.319

- Added final release-polish wording for optional plotting engines, with base graphics remaining the default.
- Confirmed Stage 20.1 is limited to dependency-safety and release-note polish rather than new plotting functionality.
- Preserved compatibility by treating ggplot2 and GGally as optional engines rather than required plotting dependencies.
- Used the stage workflow's validation-mode detection so only changed files trigger package checks.

## s20x 3.2.318

- Adjusted pairs20x() ggplot2 diagonal histogram panels so the y-limits reserve base-like headroom for variable labels.
- Moved diagonal labels above the histogram bars rather than inside the plotted counts.
- Added a regression test for the ggplot2 histogram panel y-limit contract.
- Preserved the base graphics engine as the default and kept ggplot2/GGally optional.
- Validated by the standard s20x stage workflow.

## s20x 3.2.317

- Added the missing ggplot2 geom_segment() import used by the base-like modelcheck() Cook's distance panel.
- Set the returned pairs20x() GGally matrix axisLabels field to document the outside-axis contract used by the optional ggplot2 engine.
- Preserved the Stage 19.7 pairs20x() visual-parity changes and the base graphics default.
- Validated by the standard s20x stage workflow.

## s20x 3.2.315

- Added the missing ggplot2 geom_text import used by the modelcheck() Cook's distance labels.
- Kept the Stage 19.6.3 base-like ggplot2 modelcheck layout and Cook's distance display unchanged.
- Preserved the base graphics engine as the default and kept ggplot2 optional.
- Validated by the standard s20x stage workflow.

## s20x 3.2.313

- Changed the optional eovcheck() ggplot2 smoother example to use the peru.fit regression model rather than the oyster one-way ANOVA-style fit.
- Kept the oyster example for the ggplot2 object-return and Levene/two-standard-deviation demonstrations where it remains appropriate.
- Avoided loess singularity warnings in the documented smoother example while preserving package behaviour.
- Validated by the standard s20x stage workflow.

## s20x 3.2.312

- Added an explicit loess formula to the optional modelcheck() ggplot2 smoother so printing the diagnostic plot object is silent.
- Preserved the Stage 19.6 base-like ggplot2 diagnostic styling and Cook's distance vertical-line display.
- Kept the base graphics engine as the default and preserved the optional ggplot2 object-return paths.
- Validated by the standard s20x stage workflow.

## s20x 3.2.310

- Polished the optional ggplot2 eovcheck output so the two-standard-deviation reference lines remain visible.
- Included the plus/minus two-standard-deviation limits in the plotted y-range and matched the base plot line weight more closely.
- Removed the default grey ggplot2 panel styling from the optional eovcheck engine to keep the teaching plot closer to base graphics.
- Kept the base graphics engine as the default and preserved the optional ggplot2 object-return path.
- Validated by the standard s20x stage workflow.

## s20x 3.2.309

- Extended the optional normcheck() ggplot2 histogram density curve across the full displayed x-axis range.
- Kept the histogram as a native ggplot2 geom_histogram() layer while replacing stat_function() with explicit density data.
- Preserved base graphics defaults and existing normcheck() return behaviour.
- Documented the Stage 19.5 normcheck density-curve polish notes.
- Validated by the standard s20x stage workflow.

## s20x 3.2.308

- Polished the optional ggplot2/GGally engine for pairs20x() while preserving base graphics as the default.
- Renamed internal pairs20x ggplot2 helpers to use clearer *_ggplot2 names.
- Kept the existing ggplot2/GGally example and return-class tests for the optional plot matrix path.
- Documented the Stage 19.4 pairs20x plotting-engine review notes.
- Validated by the standard s20x stage workflow.

## s20x 3.2.307

- Polished the optional ggplot2 engine for modelcheck() while preserving base graphics as the default.
- Renamed internal modelcheck ggplot2 helpers and list classes to use clearer *_ggplot2 names.
- Reworked ggplot2 aesthetic mappings to use data-column pronouns and avoid external-vector warnings.
- Added a print method for multiple ggplot2 modelcheck plots and ggplot2-engine examples for individual diagnostics.
- Added offline regression tests for the renamed class and clean plot printing.
- Validated by the standard s20x stage workflow.

## s20x 3.2.306

- Polished the optional ggplot2 engine for eovcheck() while preserving base graphics as the default.
- Renamed internal eovcheck ggplot2 helpers to use clearer *_ggplot2 names.
- Reworked ggplot2 aesthetic mappings to use data-column pronouns and avoid external-vector warnings.
- Added ggplot2-engine examples and an offline regression test for clean plot printing.
- Validated by the standard s20x stage workflow.

## s20x 3.2.305

- Restored the documented s20xNormcheckGgplot2 return class while retaining the clearer internal s20xNormcheck_ggplot2 class alias.
- Preserved the Stage 19.1 ggplot2 normcheck plotting fixes, examples, and naming cleanup.
- Fixed compatibility with existing diagnostic plotting tests after the internal class-name cleanup.
- Preserved base graphics as the default plotting engine and kept ggplot2 optional.
- Validated by the standard s20x stage workflow.

## s20x 3.2.303

- Added regression tests that scan controlled R and test files for namespace operators in executable code.
- Added regression tests that scan controlled R and test files for dynamic namespace lookup helpers.
- Reworked the internal-test helper to avoid getFromNamespace() while preserving access to unexported helpers during tests.
- Preserved the Stage 18.6 import-based plotting cleanup and base graphics defaults.
- Validated by the standard s20x stage workflow.

## s20x 3.2.302

- Replaced dynamic ggplot2 and GGally plotting function lookups with direct calls backed by roxygen import declarations.
- Moved ggplot2 and GGally into Imports so their functions can be declared through NAMESPACE.
- Removed namespace operator usage from controlled package and test code by using imported functions and a shared internal-test helper.
- Preserved base graphics as the default plotting engine.
- Validated by the standard s20x stage workflow.

## s20x 3.2.301

- Refactored normcheck ggplot2 Q-Q and histogram builders to use grouped optional plotting function lookups.
- Refactored the eovcheck ggplot2 diagnostic builder to use grouped optional plotting function lookups.
- Preserved base graphics as the default engine and kept ggplot2 optional.
- Validated by the standard s20x stage workflow.

## s20x 3.2.300

- Added a grouped optional plotting function lookup helper for ggplot2 implementations.
- Refactored modelcheck ggplot2 residual and Cook distance builders to use grouped helper lookups.
- Preserved base graphics as the default engine and kept ggplot2 optional.
- Validated by the standard s20x stage workflow.

## s20x 3.2.299

- Centralised optional plotting function lookup behind the internal getPlottingFunction() helper.
- Replaced repeated direct getExportedValue() calls in the ggplot2 and GGally plotting implementations.
- Preserved base graphics as the default engine and kept ggplot2/GGally optional.
- Validated by the standard s20x stage workflow.

## s20x 3.2.298

- Added matchPlottingEngine() as a shared internal helper for plotting engine argument matching.
- Replaced repeated match.arg(engine) calls in normcheck(), eovcheck(), modelcheck(), and pairs20x().
- Added a Stage 18.2 plotting engine dispatch note for the cleanup and deferred candidates.
- Ignored the local .s20x_validation_mode file so R CMD check tarballs do not include validation state.
- Preserved base graphics defaults, optional ggplot2/GGally behavior, and teaching-oriented plotting output.

This file records user-facing and developer-facing changes for s20x. It is a release-note summary, not a commit-by-commit history.

## s20x 3.2.297

- Added a shared internal helper for optional plotting package availability checks.
- Replaced duplicated ggplot2 and GGally engine checks in normcheck(), eovcheck(), modelcheck(), and pairs20x().
- Added a Stage 18.1 plotting audit note to record remaining cleanup candidates.
- Preserved base graphics defaults, optional ggplot2/GGally behavior, and teaching-oriented plotting output.


# s20x 3.2.295

### Modernisation
- Completed a final consistency pass over README and package-level plotting-engine documentation.
- Clarified optional ggplot2 and GGally requirements for diagnostic plotting helpers.
- Ignored stage-runner validation scratch files in package builds so strict checks do not report them as hidden-file notes.
- No plotting behaviour or public API changed.

# s20x 3.2.294

### Modernisation
- Clarified README guidance for choosing between base and ggplot2 diagnostic plotting engines.
- Added package-level documentation describing stable teaching defaults and optional plotting engines.
- No plotting behaviour or public API changed.

# s20x 3.2.293

### Modernisation
- Added a README-level explanation of the optional diagnostic plotting engines while preserving base graphics as the default teaching workflow.
- Added a Stage 17.4 developer note recording the documentation-only scope and optional-dependency guard pattern.
- No plotting behaviour or public API changed.

# s20x 3.2.288

### Development notes
- Archived the Stage 16 plotting modernisation developer note under Completed.
- Recorded that pairs20x(), normcheck(), eovcheck(), and modelcheck() now have optional ggplot2 engines with base graphics preserved as the default.
- Kept this as a documentation wrap-up stage with no intended plotting behavior changes.

# s20x 3.2.287

### Modernisation
- Refined the optional ggplot2/GGally panels in pairs20x() with a base-like white theme.
- Preserved the original base graphics output as the default teaching path.
- Kept GGally and ggplot2 as optional dependencies for the modern plotting engine.

# s20x 3.2.286

### Modernisation
- Added an optional ggplot2 engine to modelcheck() while preserving the original base graphics output as the default.
- Returned a ggplot object for the optional residual-versus-fitted model checking diagnostic when ggplot2 is installed.

# s20x 3.2.285

### Modernisation
- Added an optional ggplot2 engine to eovcheck() while preserving the original base graphics output as the default.
- Returned a ggplot object for the optional residual-versus-fitted equality-of-variance diagnostic when ggplot2 is installed.

# s20x 3.2.280

### Modernisation
- Added an optional ggplot2 engine to normcheck() while preserving the original base graphics output as the default.
- Returned ggplot objects for optional normal Q-Q and residual histogram diagnostics when ggplot2 is installed.

# s20x 3.2.278

### Modernisation
- Added an optional ggplot2/GGally engine to pairs20x() while preserving the original base graphics output as the default.

# s20x 3.2.276

### Data
- Store `nzarrivals.df$month` as a factor with levels ordered by `month.abb` and update the dataset documentation accordingly.

# s20x 3.2.274

### Data
- Add `nzarrivals.df`, a monthly Stats NZ Infoshare arrivals data set, and fix the Stage 14 `colors()` import so note-level checks remain strict.

# s20x 3.2.273

- Document remaining Stage 14 internal helper functions with roxygen2 comments.

# s20x 3.2.272

- Document internal prediction helper functions with roxygen2 comments.

# s20x 3.2.271

### Modernisation
- Removed qualified namespace calls from R source files by adding roxygen imports, broadened internal helper documentation, and hardened the Stage 14 style-compliance regression test.

# s20x 3.2.270

### Modernisation
- Consolidated residual and fitted-value extraction for targeted diagnostic plotting internals without changing plotting output or public APIs.

# s20x 3.2.269

### Modernisation
- Added a small internal graphics-parameter save/restore helper and used it in targeted diagnostic plotting code paths without changing plotting output.

# s20x 3.2.268

### Modernisation
- Deprecated legacy diagnostic plotting helpers `modelcheck()`, `modcheck()`, `boxqq()`, `stripqq()`, and the `autocor.plot()` alias, and removed them from the exported API while keeping their internal compatibility definitions.

# s20x 3.2.267

### Modernisation
- Added prediction-wrapper regression coverage for multi-row return shapes, binomial-logit `predictGLM()` output, and wrapper-level quasi interval multiplier behaviour without changing prediction internals.

# s20x 3.2.264

### Modernisation
- Standardised `predictGLM()` return shape to a data frame with stable `fit`, `lwr`, and `upr` columns, while preserving link/response scale calculations and legacy fallback to link-scale output for unsupported `type` values.

# s20x 3.2.263

### Modernisation
- Consolidated internal prediction interval output formatting for linear-model and GLM teaching wrappers while preserving legacy return shapes, column names, rounding, and scale handling.

# s20x 3.2.262

### Modernisation
- Consolidated prediction-wrapper `newdata` data-frame validation into a shared internal helper and removed duplicated validation from `predictGLM()` without changing prediction output or error text.

# s20x 3.2.261

### Modernisation
- Added the Stage 13 prediction-wrapper internal audit note, identifying narrow maintenance targets for prediction internals while deferring public API and behaviour changes.

# s20x 3.2.260

### Modernisation
- Finalised the Stage 12 documentation-coherence developer note, summarising completed documentation improvements and deferring deeper API or behavioural refactors to later stages.

# s20x 3.2.259

### Modernisation
- Audited exported help examples for strict-check suitability, confirmed remaining synthetic examples are deterministic or guarded, and tightened `freq1way()` documentation wording without changing behaviour.

# s20x 3.2.258

### Modernisation
- Standardised diagnostic help wording for model checking, residuals versus fitted values, Q-Q plots, and plotting side effects without changing package behaviour.

# s20x 3.2.257

### Modernisation
- Guarded the `displayPairs()` help example so it only runs the optional `emmeans` workflow when `emmeans` is available, keeping examples suitable for strict checks without changing package behaviour.

# s20x 3.2.256

### Modernisation
- Clarified prediction helper and AR-error model documentation so teaching wrappers are distinguished from ordinary `predict()` and independent-error ANOVA behaviour without changing package behaviour.

# s20x 3.2.255

### Modernisation
- Replaced the artificial `summary1way()` help example with `computer.df`, made the `summaryStats()` matrix example dataset-based, and tightened summary-helper documentation wording without changing behaviour.

# s20x 3.2.254

### Modernisation
- Applied a strict NZ English and grammar documentation pass and accepted `"normalised"` as a package-owned alias for `"normalized"` residual diagnostics while preserving compatibility.

# s20x 3.2.253

### Modernisation
- Made diagnostic helper examples deterministic or dataset-based and corrected small documentation spelling and grammar issues without changing diagnostic behaviour.

# s20x 3.2.252

### Modernisation
- Replaced the `interactionPlots()` help examples with the `arousal.df` teaching dataset and clarified the deprecated vector-form example wording without changing plotting behaviour.

# s20x 3.2.251

### Modernisation
- Added a Stage 12 documentation audit covering help examples, teaching datasets, time-series examples, `R CMD check` suitability, and NZ English spelling and grammar notes without changing package behaviour.

# s20x 3.2.250

### Modernisation
- Added a Stage 11 completion plan summarising completed API-consistency work and deferring larger documentation and internal refactor items to later stages.

# s20x 3.2.249

### Modernisation
- Documented diagnostic plotting helper return conventions and added regression tests for current validation behaviour without changing plotting behaviour.

# s20x 3.2.248

### Modernisation
- Documented and tested `crosstabs()` and `rowdistr()` printed-output and invisible-return conventions without changing behaviour.

# s20x 3.2.247

### Modernisation
- Documented and tested `summary2way()` printed-output and invisible-return conventions without changing behaviour.

# s20x 3.2.246

### Modernisation
- Documented and tested `summary1way()` printed-output and invisible-return conventions without changing behaviour.

# s20x 3.2.245

### Modernisation
- Documented and tested `summaryStats()` printed-output and invisible-return conventions without changing behaviour.

# s20x 3.2.244

### Modernisation
- Added a Stage 11 return-convention modernisation plan to guide future low-risk API updates without changing public behaviour.

# s20x 3.2.243

### Modernisation
- Added a Stage 11 audit of printed-output and invisible-return conventions without changing public behaviour.

# s20x 3.2.242

### Modernisation
- Standardised legacy-helper documentation wording without changing public behaviour.

# s20x 3.2.241

### Modernisation
- Added regression tests documenting current prediction interval semantics before further API changes.

# s20x 3.2.240

### Modernisation
- Consolidated shared confidence-interval arithmetic for prediction teaching wrappers without changing public prediction behaviour.

### Modernisation
- Extracted shared internal prediction helpers for linear-model and GLM teaching wrappers without changing public prediction behaviour.

### Modernisation
- Added a deeper Stage 11 legacy API audit focused on outdated teaching wrappers, deprecation candidates, and future modernisation priorities.


### Modernisation
- Added a camelCase `outputDir` alias for rendered case-study helpers while preserving `output_dir` compatibility.
- Clarified prediction helper documentation so their teaching-wrapper roles and return values are explicit.
- Added a Stage 11 API consistency audit for prediction helpers before changing public interfaces.
- Completed the Stage 10 style-normalisation sweep for remaining legacy helpers without changing public interfaces.
- Normalised style in Cook's distance plotting helpers without changing their public interface.
- Normalised style in count prediction helpers without changing their public interface.
- Normalised style in row distribution helpers without changing their public interface.
- Normalised style in residual diagnostic plotting helpers without changing their public interface.
- Normalised style in autocorrelation plotting helpers without changing their public interface.
- Normalised style in trend scatter plotting helpers without changing their public interface.
- Normalised style in two-way ANOVA summary helpers without changing their public interface.
- Normalised style in summary statistics helpers without changing their public interface.
- Normalised style in the deprecated one-way frequency table helper without changing its public interface.
- Normalised style in the one-way ANOVA summary helper without changing its public interface.
- Normalised style in package version and skewness utility helpers without changing their public interface.
- Normalised style in regression confidence interval helpers without changing their public interface.
- Normalised style in generalised linear model prediction helpers without changing their public interface.
- Normalised style in one-way comparison helper functions without changing their public interface.
- Normalised style in case study helper functions without changing their public interface.
- Normalised style in deprecated grouped QQ plotting helpers.
- Normalised style in small utility files as part of the staged modernisation work.
- Added package infrastructure for automated R CMD check runs.
- Updated package build ignores for repository-only infrastructure files.

## s20x 3.2.296

- Clarified README guidance for ggplot2 diagnostic return values.
- Added tests that pin named-list return contracts for multi-plot ggplot2 diagnostics.
- Confirmed single selected diagnostics still return individual ggplot objects where appropriate.
- Preserved base graphics as the default plotting engine.

## s20x 3.2.292

- Removed no-op examplesIf blocks from deprecated, unexported legacy helper documentation.
- Clarified the deprecated boxqq(), stripqq(), and modcheck() descriptions without restoring exported examples.
- Preserved legacy helper behavior while reducing CRAN-facing example clutter in generated Rd files.
- Regenerated documentation should be produced by devtools::document() during the stage runner.

## s20x 3.2.291

- Refreshed legacy helper documentation so deprecated, unexported functions no longer show direct internal-call examples.
- Replaced older case-study dontrun examples with interactive examples for CRAN-facing documentation hygiene.
- Preserved case-study and deprecated-helper behavior while making the examples clearer for current teaching material.
- Regenerated documentation should be produced by devtools::document() during the stage runner.

## s20x 3.2.290

- Clarified that the default base plotting engine preserves direct teaching graphics while optional ggplot2 engines return reusable plot objects.
- Added guarded examples for optional ggplot2 and GGally plotting engines in normcheck(), eovcheck(), modelcheck(), and pairs20x().
- Kept ggplot2 and GGally usage behind requireNamespace() guards so examples remain compatible when optional packages are unavailable.
- Regenerated documentation should be produced by devtools::document() during the stage runner.
