Changes in version 0.1.0 - Established calc_ltr() and calc_ltr_df() as the unified vector and data-frame interfaces for the initial public release. Pre-release experimental ltr, cumrisk, cumrate, and estimate interfaces were removed before publication and therefore do not require a deprecation layer. - Unified zero-count variance handling between analytic and finite-difference confidence intervals. Delta intervals consistently use the documented 0.5 correction, while Gamma intervals retain exact zero variance. - Added finite final-age interval support to AMP and cumulative-risk models, including PMAJ grids and analytic variances. - Fixed cumulative-risk extraction at the terminal boundary of a finite final age interval. - Improved numerical handling of zero rates in open intervals and added explicit checks for invalid variance results. - Added age_combine = "pairwise" to calculate positional age intervals while retaining the existing cross-combination behavior by default. - Added early validation for strictly increasing age groups, age endpoints, digits, multiplier, and logical output options. - Improved diagnostics for unavailable age boundaries under constant-rate models. - Public risk models now apply consistent validation to registry counts, person-years, age groups, model type, and rate inputs. - calc_ltr() now validates core registry inputs, handles zero-risk gamma intervals, and calculates numerical-delta variances with matrix operations. - calc_ltr() reuses batched age-range calculations and deduplicates local maxima when constructing gamma upper confidence limits, substantially improving confidence-interval speed while preserving existing estimates. - pmaj() now retains exact age boundaries when the requested sub-interval width does not evenly divide an age interval. - calc_ltr(ci_method = "none") now provides a fast point-estimate-only path. - Added variance_method with analytic gradients for constant-rate cumulative risk and DevCan models; unsupported models safely fall back to finite differences when variance_method = "auto". - PMAJ grids now retain their interpolation design matrix internally, allowing cumulative-risk and DevCan gradients to be mapped back to the original registry age groups without finite-difference model refits. - PMAJ grid geometry is cached by age structure and sub-interval width, avoiding repeated interpolation setup during gamma confidence-limit searches. - DevCan gamma candidate risks now use an equivalent vectorized evaluator while retaining exact enumeration of all local perturbations. - AMP now uses analytic gradients for both constant and PMAJ rates, including developing and dying risks and conditional age ranges. - AMP gamma candidate risks now use a vectorized evaluator with exact local candidate enumeration and cached PMAJ geometry. - Cumulative-risk gamma candidate searches now use a direct vectorized evaluator instead of rebuilding the public model for every local count perturbation, substantially reducing PMAJ Gamma runtime. - calc_ltr_df() can now calculate independent cancer, sex, year, or other groups in parallel with the cross-platform parallel and workers options. Group tasks transfer only required vectors, use load-balanced scheduling, and can reuse a caller-managed PSOCK cluster across consecutive calculations. - Added clear_ltr_cache() and ltr_cache_info() for explicit memory-cache management. Grouped calculations can use cache = "clear" to bound cache growth in long-running batch jobs, including on reused PSOCK workers. - Added cache = "none" to calc_ltr_df() to discard memoised entries after every group, limiting peak cache growth in large serial and parallel jobs. - Risk results now retain their calculation precision, so format_risk_ci(digits = NULL) automatically inherits the digits value used by calc_ltr() or calc_ltr_df() while still allowing an explicit override. - get_risk() now extracts AMP risks for multiple age ranges with cumulative contributions instead of nested age-band loops. - trend_test() and ztest() now reject duplicate, singular, non-finite, and zero-standard-error inputs with explicit diagnostics; the obsolete ltr method has been removed. - wun() now handles zero-rate and single-interval data safely, validates surgery corrections, and diagnoses unidentified open-ended intervals. - wun() now supports PMAJ age-specific rates, including finer age endpoints, analytic variances, finite final intervals, and optional surgery correction; the historical constant-rate model remains the default. - Wun finite-difference and gamma candidate calculations now use a direct pairwise risk evaluator, reducing repeated dispatch and range-construction overhead while preserving the public model estimates. - Wun developing and dying risks now use analytic gradients by default when surgery correction is disabled. Surgery-corrected calculations continue to fall back to finite differences because uncertainty in surgery counts is not specified by the current API. - Added inst/benchmarks/benchmark-ci.R for reproducible cold-cache timing of analytic and finite-difference confidence-interval paths. - Added an external regression fixture that reproduces the DevCan risks and gamma and delta confidence intervals in Fay et al. (2003), Table II, at the published precision. - Added a 190-interval external regression fixture reproducing the NCI DevCan 6.7.5 SEER 21 all-sites developing-risk table and Gamma confidence limits. - Gamma upper-limit searches now preserve the non-negative other-death count constraint and exclude non-finite boundary perturbations. - Documented the independent-Poisson count model, fixed-denominator assumption, limitations of independent-group comparisons, and identifying assumptions. Added a seeded parametric coverage diagnostic under inst/validation with 32 model, outcome, rate-shape, and information-density scenarios, plus structured coverage and Gamma-versus-Delta timing summaries. - calc_ltr_df() now initializes PSOCK workers from the active development namespace when the package is loaded with devtools::load_all(), so parallel grouped calculations and cache management behave consistently in development and installed-package sessions. - GCO_Today_2022 now restores the identifiable all-cancers-excluding-NMSC count from the all-cancers and NMSC series and accurately documents the bundled world-total data structure and remaining source missingness. - pmaj() now supports a single finite age interval and ensures that finite PMAJ grids end at the requested final-age boundary instead of extending the final interval beyond it.