                        Changes in version 0.3.6                        

  - tests/testthat/test-screening.R: the helper that plants outliers
    drew responses from rBEZI() without clamping them strictly below
    one, so gamlss rejected the response with "response variable out of
    range" and two screening tests failed. The clamp applied to the
    simulation scripts in 0.2.3 is now applied here too.
  - New data-raw/ directory with the scripts that regenerate every table
    and figure of the accompanying paper, and a runbook in
    data-raw/README.md.

                        Changes in version 0.3.5                        

  - bic_penalty() now stops with an explanatory message when the fit
    contains a gamlss::pb()-style smooth. Such terms keep their basis
    coefficients outside the model coefficient vector, so no penalty
    block can be recovered and model.matrix() returns only the linear
    part of the term. The previous behaviour was to return a zero
    penalty, which silently turned penalised screening into unpenalised
    screening on a design that omitted the basis. Penalised screening is
    supported when the basis is supplied explicitly as design columns
    and the penalty matrix is passed to bic_info().

                        Changes in version 0.3.4                        

  - Bug fix: the observed information for the inflation block omitted
    the term in the second derivative of the inverse link. That term
    vanishes in expectation, which justifies dropping it from the Fisher
    weight but not from the observed one. bic_info(use_fisher = FALSE)
    now agrees with a numerical Hessian of the log-likelihood;
    use_fisher = TRUE, the default, was already correct.
  - Bug fix: the three covariate perturbation schemes omitted the direct
    term by which the perturbed design column enters the score for its
    own coefficient. delta_disccovar(), delta_meancovar() and
    delta_preccovar() now agree with numerical mixed partial
    derivatives.
  - Bug fix: the delta block of delta_preccovar() had the wrong sign.
  - The covariate schemes now stop with an informative message when the
    selected column is constant, which happens with the default p = 1
    for a design whose first column is the intercept and previously
    returned a matrix of zeros without warning.

                        Changes in version 0.3.3                        

  - Bug fix: the benchmark for the aggregate contribution m[r] returned
    by cnc_scores() was computed as the square root of twice the mean of
    the selected eigenvalues, which is on a different scale from m[r]
    itself. The threshold was therefore far too large and the rule never
    flagged an observation. It is now sqrt(2) times the mean of m[r]
    across observations, as intended.

                        Changes in version 0.3.2                        

  - Documentation: regenerated man/ from the roxygen sources. All 20
    exported functions now have help pages; clis_screen() documentation
    includes the calib_idx and penalised arguments, which had been
    missing.
  - Packaging: removed the empty data/ directory and the unused LazyData
    field; the bundled vaccination data is loaded from inst/extdata via
    load_vaccination(). The README example was corrected accordingly.
  - Removed the unused zoib dependency from Suggests and updated the
    vignette to refer to the reading-accuracy and lung-function
    applications.

                        Changes in version 0.3.1                        

  - Fix: added bic_quantile_residuals(), a correct randomized quantile
    residual for BEZI/BEOI. The generic residuals() mishandled the
    inflation atom for one-inflated (BEOI) fits, making every residual
    share the same sign; plot_residuals() and envelope_bic() now use the
    corrected version.

                        Changes in version 0.3.0                        

  - Scalability: clis_screen() with the default B_Et score now uses a
    linear-time algorithm that never forms the n x n curvature matrix.
    On a 67,000-observation fit the influence scores compute in under a
    second, where the dense n x n construction needs ~33 GB and fails.
    New exported cnc_scores_linear() exposes this path directly, and
    cnc_block_decomp() was rewritten to be linear-time as well.
  - The m_r aggregate score still uses the dense eigendecomposition and
    is now guarded by options(clis.max_dense_n=) (default 5000) to avoid
    an accidental out-of-memory build on large samples.

                        Changes in version 0.2.3                        

  - Fix: print.clis and summary.clis are now registered as S3 methods,
    so print(res) and summary(res) dispatch correctly.
  - clis_screen() gains a calib_idx argument to supply an explicit,
    trusted calibration set. The conformal guarantee requires the
    calibration set to be (nearly) free of influential points; a random
    split can let outliers leak into calibration and suppress power, so
    when a clean subset is known it should be supplied via calib_idx.
  - Simulation scripts revised: the response is clamped strictly below
    one (the zero-inflated beta admits [0, 1) only, and draws at exactly
    one made gamlss reject the response), influential points are planted
    so that the response contradicts the covariate (genuine influence
    rather than accommodated leverage), and screening uses a large clean
    calibration set.
  - All of the above validated by running the package under R 4.3.3 with
    gamlss on the real AlcoholUse data and on simulated data.

                        Changes in version 0.2.2                        

  - Fix: influence computations no longer require the model to be fitted
    with x = TRUE. The design matrices are now recovered via the gamlss
    model.matrix method (with a manual fallback), so bic_info(),
    clis_screen(), and the plots work on a standard gamlss fit. This was
    the cause of silent per-replication failures in the simulation
    scripts.
  - The simulation scripts now surface the first real error when an
    entire cell fails, instead of returning a non-numeric result
    downstream.

                        Changes in version 0.2.1                        

  - New data-raw/sim-fdr-power.R reproduces the linear-model false
    discovery rate table and the detection-power curves.
  - New data-raw/sim-classical.R reproduces the classical sensitivity
    analysis and its figure.
  - New data-raw/README.md gives a runbook for reproducing every table
    and figure in the paper.
  - Worked examples now use the real AlcoholUse data from the zoib
    package, matching the paper's application.

                        Changes in version 0.2.0                        

  - Semiparametric extension: penalised additive submodels.
  - bic_info() gains a penalty argument for the penalised information J
    + S, and reports effective degrees of freedom and their block split.
  - New bic_penalty() assembles the block-diagonal penalty matrix from
    the smooth terms of a fitted additive gamlss model.
  - clis_screen() gains a penalised argument; the false discovery rate
    guarantee carries over to penalised fits.
  - New reproducibility script data-raw/sim-semiparametric.R for the
    semiparametric simulation (FDR control, curve recovery, and
    effective degrees of freedom under REML and GCV smoothing).
  - New plot_influence() reproduces the classical local-influence index
    plot (curvature vs. observation index with cutoff and labels), in
    the style of the beta-regression diagnostics literature.
  - New data-raw/application.R reproduces the paper's application on the
    real AlcoholUse data (from the zoib package): fit, classical index
    plot, conformal screening, and the semiparametric refit.

                        Changes in version 0.1.0                        

  - Initial release.
  - clis_screen(): conformal local influence screening with
    finite-sample false discovery rate control for zero-or-one inflated
    beta regression.
  - Conformal normal curvature scores via cnc_matrix() and cnc_scores().
  - Block decomposition of influence into inflation vs. mean/precision
    components via cnc_block_decomp().
  - Four perturbation schemes: case-weights, discrete-covariate,
    mean-covariate, and precision-covariate.
  - Diagnostic plots: plot_clis(), plot_cnc_panels(), plot_residuals(),
    envelope_bic().
  - Bundled vaccination dataset (national DTP3 coverage, 2022).
