Release notes
Every release of this package is published as a GitHub release. The most recent are reproduced below, as they were written there.
v0.4.2
Released 2026-08-13. Read it on GitHub.
Updates the compat to support the latest version of EpiAwareADTools
Merged pull requests:
Honour custom numeric integration solver payloads (Convolved, Difference, Product, Ratio) — #92 (#149) (@seabbs-bot)
ci(deps): bump the github-actions group with 9 updates (#151) (@dependabot[bot])
docs: point release-notes header at GitHub Releases (#152) (@seabbs-bot)
feat: add public quantile_initial_guess hook (#150) (#156) (@seabbs-bot)
docs: point developer FAQ at Discourse/epinowcast, not GitHub Discussions (#157) (@seabbs-bot)
fix: closed-form logcdf/ccdf/logccdf for uniform-window pairs (#158) (@seabbs-bot)
Exact lattice quantile for discrete combinations (#159) (@seabbs-bot)
Add an output-position mask to convolve_series (#160) (@seabbs-bot)
feat: shared repeat mechanism, convolved(d, k) and product(d, k) (#165) (@seabbs-bot)
test(uniform_window): cover Weibull partial_expectation guards (#169) (@seabbs-bot)
docs: point remaining discussion mentions at Discourse/epinowcast (#171) (@seabbs-bot)
Migrate Difference onto the solver-dispatch generics (#176) (@seabbs-bot)
fix: forward discretisation keywords through the time-varying convolve_series path (#177) (@seabbs-bot)
test: AD coverage for custom solver payloads (#161) (#179) (@seabbs-bot)
fix: close the truncated testitem breaking main's test suite (#182) (@seabbs-bot)
chore: migrate to Runic and fix main CI (#183) (@seabbs-bot)
feat: migrate Product and Ratio onto the solver-dispatch generics (#184) (@seabbs-bot)
fix: stop benchmark-history aborting on commits that predate a benchmarked verb (#185) (@seabbs-bot)
ci: raise the docs build timeout to 90 minutes (#186) (@seabbs-bot)
feat: make the difference, product and ratio pair hooks public (#187) (@seabbs-bot)
fix: floor EpiAwareADTools at 0.2 and drop its internal _gamma_cdf (#189) (@seabbs-bot)
Closed issues:
Broaden test coverage: cross-method consistency suite and pair breadth (#57)
JuliaFormatter disagrees with the committed state of test/ADFixtures/src/ADFixtures.jl (#81)
Mixed discrete+continuous Convolved silently returns pdf 0.0 everywhere (#115)
Exact lattice quantile for discrete combinations (#116)
Convolved hard-codes {Univariate, Continuous}, blocking discrete closed forms (pmf) (#120)
Release docs are not building? (#125)
Support a masking vector for convolve series of some kind (#127)
Add convolution_power(d, k) for repeated self-convolution (#132)
Migrate Difference/Product/Ratio onto the solver-dispatch generics from #80 (#133)
Developer FAQ points at GitHub Discussions, which is disabled (both links 404) (#135)
Point the release-notes docs page at GitHub Releases (#136)
Mooncake AD failing on main (#145)
Design: make convolved(delay, Uniform) a drop-in for primary-censored delays — add log-space cdf/ccdf/logccdf for uniform-window pairs (#147)
Release v0.4.1: custom integration solver payloads honored (#148)
Add a public extension point for custom quantile initial-guess generation on Convolved (#150)
Remaining GitHub Discussions mentions outside developer/faq.md (#153)
convolve_series(delays::AbstractVector, series) cannot forward discretisation kwargs to delay_masses (#154)
AD coverage gap: custom solver payloads are never traced by any backend (#161)
test/ad environment cannot be instantiated locally: EpiAwareADTools pin conflict (#162)
Unit-test partial_expectation(::Weibull)'s non-positive-input guard (#167)
Quality: formatting testitem requires Runic, but package uses JuliaFormatter (#168)
EpiAwareADTools compat capped at 0.1 blocks the whole stack from adopting 0.2.0 and its logccdf_ad_safe(::Gamma) tail fix (#188)
v0.4.0
Released 2026-08-06. Read it on GitHub.
Breaking changes
- The continuous-delay error gate in
convolve_serieshas been removed. A continuous delay is now a plainMethodErrorwhere it was previously a checkedArgumentError.
New types
Ratiotype andratioverb (Z = X / Y): the ratio of two independent non-negative distributions, using Gauss–Legendre quadrature. Supportspdf,cdf,quantile,rand,minimum/maximum, and all AD backends.
New features
pgf— probability generating function primitive for discrete distributions, with closed forms for standard count families (Poisson,Bernoulli,Binomial,Geometric,NegativeBinomial) and a truncated-series fallback for anyDiscreteUnivariateDistribution.quantile_by_optimization— shared numeric quantile inversion, usable from downstream packages and from theConvolvedDistributionsOptimizationExtextension forConvolved,Difference,Product, andRatio.Time-varying delays —
convolve_seriesnow accepts a vector of per-time-point delays (or delay-mass pairs), dispatching element-by-element. Supports both discrete and caller-supplied mass vectors.
Refactoring
Internal renames:
_causal_convolve→_convolve_series_fixed,_convolve_series→_convolve_series_varyingThe
masseshook is now public API.
Documentation
New product-distributions tutorial page
PGF documentation in the module docstring
FAQ entries for dispatch and solver selection
Maintenance
Dependency updates (JET, GitHub Actions)
Version increment: 0.3.2 → 0.4.0
Merged pull requests:
chore: auto-increment version to 0.3.2 (#123) (@github-actions[bot])
ci(deps): bump the github-actions group with 9 updates (#128) (@dependabot[bot])
chore(deps): update JET requirement from 0.9, 0.10, 0.11 to 0.9, 0.10, 0.11, 0.12 in the julia group (#129) (@dependabot[bot])
Time-varying delays for
convolve_series, and drop the continuous error gate (#126, #95) (#130) (@seabbs-bot)feat: shared numeric quantile inversion, quantile_by_optimization (#112) (#131) (@seabbs-bot)
feat: add pgf primitive (#90) (#134) (@seabbs-bot)
feat!: solver dispatch for analytic pairs and exact discrete support (#137) (@seabbs-bot)
feat: add the Ratio type and ratio verb (Z = X / Y) (#140) (@seabbs-bot)
fix: exact fold for two-component mixed discrete/continuous combinations (#142) (@seabbs-bot)
chore: bump version to 0.4.0 (#143) (@seabbs-bot)
Closed issues:
Apply my readme style changes across our managed ecosystem (#69)
Host the analytic-pair registry + direct CDF-kernel solver (foundation for Censored#891) (#77)
Convolved hardcodes Continuous value support — discrete⊛discrete is mis-typed and blocks direct convolve_series (#85)
Exact discrete branch in the combination algebra (#89)
Probability generating function interface, iteration and fixed points (#90)
Remove the continuous-only error gate on convolve_series (#95)
_quantile_optimization is duplicated with CensoredDistributions — pick a shared home (#112)
docs/src/overall_trend.png is a build artefact but not gitignored (#114)
Add a
ratioverb for Z = X / Y (#118)TagBot: Manual intervention needed for releases (#124)
Support a vector of distributions for convolve_series (#126)
Product and ratio introduced with fluff text as if different from other operators (#141)
v0.3.1
Released 2026-07-31. Read it on GitHub.
Streamlines docs and improves handling of survival distributions
v0.3.0
Released 2026-07-31. Read it on GitHub.
Merged pull requests:
chore: auto-increment version to 0.2.1 (#46) (@github-actions[bot])
docs: add Plots dependency for the benchmark trend plot (#53) (@seabbs-bot)
docs: point at the real org setup guide, fix stale Discussions links (#65) (@seabbs-bot)
docs: motivation-framed Why bullets, add a Related packages section (#66) (@seabbs-bot)
fix!: remove discretise_pmf (#73) (@seabbs-bot)
docs: split the visualising-convolutions tutorial per operator (#74) (@seabbs-bot)
test: reconcile #50 with its actual fix (#49) (#75) (@seabbs-bot)
test: cover Distributions.jl's censored() composing over the family (#76) (@seabbs-bot)
ci: qualify the scaffold_update call ahead of the kit's export-to-public move (#78) (@seabbs-bot)
ci: bump downgrade-compat's Julia pin to unblock Dependabot PRs (#83) (@seabbs-bot)
feat!: retire DelayPMF, accept plain vectors and DiscreteNonParametric (#87) (@seabbs-bot)
test: cross-method consistency suite for Convolved/Difference/Product (#57) (#93) (@seabbs-bot)
feat: queryable evaluation path with no silent numeric fallback (#92) (#96) (@seabbs-bot)
ci: group Dependabot updates and repair template sync (#106) (@seabbs-bot)
Update Project.toml (#107) (@seabbs)
ci(deps): bump the github-actions group across 1 directory with 12 updates (#108) (@dependabot[bot])
chore(deps): bump the julia group with 2 updates (#109) (@dependabot[bot])
Closed issues:
0.2.0 (unregistered) breaks resolution against ComposedDistributions 0.1 — ecosystem is unresolvable (#47)
Batched parameter gradients drift from the scalar path at the batch's left edge (#50)
Add downstream migration guidance for the convolve_series discretise-first change (#51)
Documenter deploy build crashes: inventory entry for an anchored header with an empty anchor id (#52)
TagBot: Manual intervention needed for releases (#61)
discretise_pmf is incorrect and we should not have it in the package (#68)
Visualise convolutions is heavily overloaded as a docs page (#70)
Integrals extension as in CensoredDistributions (#71)
censored support (#72)
Retire DelayPMF from the public surface: accept plain pmf vectors and DiscreteNonParametric (#79)
v0.2.0
Released 2026-07-18. Read it on GitHub.
0.2.0. Breaking: convolve_series no longer discretises continuous delays (discretise explicitly via discretise_pmf or CensoredDistributions.jl double-interval-censored masses); family renames (AbstractCombinedDistribution → AbstractConvolvedDistribution, test_combined_interface → test_convolved_interface); the AD-safe hook family and tape-strip pair moved to EpiAwareADTools.jl under underscore-free names. Additions: product/Product (Mellin convolution), DelayPMF with grid-width semantics, quantile-panelled quadrature (heavy-tail accuracy), batched-path AD on all six backends, far-tail-accurate extension quantile, nested-composite windows. Full notes in NEWS.md.
Merged pull requests:
chore: scaffold package with EpiAwarePackageTools (ad=true) (#17) (@seabbs-bot)
feat: port raw-distribution convolution + shared quadrature (#18) (@seabbs-bot)
chore: auto-increment version to 0.1.1 (#19) (@github-actions[bot])
chore: auto-increment version to 0.1.2 (#22) (@github-actions[bot])
chore: auto-increment version to 0.1.3 (#23) (@github-actions[bot])
feat: add _pdf_ad_safe extension hook for component densities (#27) (@seabbs-bot)
ci(deps): bump EpiAware/.github/.github/workflows/coverage.yml from dc919e0d1674c16d1518df07eda5ee0be09b47e2 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#33) (@dependabot[bot])
ci(deps): bump EpiAware/.github/.github/workflows/format-check.yml from dc919e0d1674c16d1518df07eda5ee0be09b47e2 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#34) (@dependabot[bot])
ci(deps): bump EpiAware/.github/.github/workflows/docs-preview-cleanup.yml from dc919e0d1674c16d1518df07eda5ee0be09b47e2 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#35) (@dependabot[bot])
ci(deps): bump EpiAware/.github/.github/workflows/documentation.yml from dc919e0d1674c16d1518df07eda5ee0be09b47e2 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#36) (@dependabot[bot])
ci(deps): bump EpiAware/.github/.github/workflows/tagbot.yml from dc919e0d1674c16d1518df07eda5ee0be09b47e2 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#37) (@dependabot[bot])
ci(deps): bump EpiAware/.github/.github/workflows/cancel-on-close.yml from 6d4e35e2515f947acbf7d2a683cbf02b341005c7 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#38) (@dependabot[bot])
ci(deps): bump EpiAware/.github/.github/workflows/tests.yml from dc919e0d1674c16d1518df07eda5ee0be09b47e2 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#39) (@dependabot[bot])
ci(deps): bump EpiAware/.github/.github/workflows/ad.yml from dc919e0d1674c16d1518df07eda5ee0be09b47e2 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#40) (@dependabot[bot])
ci(deps): bump EpiAware/.github/.github/workflows/downgrade.yml from dc919e0d1674c16d1518df07eda5ee0be09b47e2 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#41) (@dependabot[bot])
chore: scaffold_update convergence onto kit main + adopt AD-backends tutorial (#54) (@seabbs-bot)
feat: public components(::Convolved) accessor (#58) (@seabbs-bot)
fix: https:// scheme in docs deploy_url (CSS 404 hotfix) (#59) (@seabbs-bot)
Closed issues:
Scaffold with EpiAwarePackageTools (ad=true) (#1)
Port Convolved + public convolve_distributions (#2)
Port Difference (X−Y dual) (#3)
Port shared quadrature + solver abstraction (#4)
AD extensions for Convolved/Difference (#5)
Internal timeseries convolve (convolve_with_vector) — deferred/tracking (#6)
Restore quantile (inverse-CDF) for Convolved/Difference via an Optimization extension (#20)
Add CODECOV_TOKEN repo secret (coverage upload fails on protected main) (#21)
Reintroduce combination abstract supertype (AbstractCombinedDistribution) (#24)
Decide: adopt docs_subdomain like the sibling packages? (#26)
Port the build-once DelayPMF surface (discretise_pmf / pdf / convolve_distributions(pmf, series)) (#28)
Batched logpdf disagrees with scalar logpdf by ~1e-3 (shared quadrature window) (#29)
Registrator (#30)
Discretisation of delays (#31)
Docs should show composing on multiple dists (#32)
Decide: public surface for _primal / _primal_distribution (ModifiedDistributions extends them) (#42)
Batched cdf/pdf/logpdf error under AD with respect to distribution parameters (#43)
Batched composite quadrature path has no AD-tag coverage; ReverseDiff w.r.t. evaluation points throws (#44)
cdf(::Difference, ::Real) throws _primal(::Tuple) MethodError when ForwardDiff is loaded (#45)
Extension quantile is imprecise in far tails (flat squared-residual objective) (#48)
Numeric quadrature loses accuracy when a heavy-tailed component stretches the integration window (#49)
Add a LoweredDistributions bridge: lower(::Convolved) → dynamical-systems spec (#55)
Add a Turing fitting tutorial and MCMC integration test (#56)
Every release, including any older than those above, is listed on the releases page.