# Release Notes All notable changes to VortexCollisions.jl. This package is pre-1.0, so *every* minor release is potentially breaking in the sense of [SemVer](https://semver.org) for `0.x` versions. The sections below name what actually changed, so that a compat-only bump can be told apart from a rename or a change in results. This file was started on 2026-08-31 and deliberately holds no entries. Nothing has been released yet — there are no tags, and `Project.toml` stands at `0.1.0` — so the development history that predates this file is in `git log` alone, reaching back to 2017. It is named as a gap rather than reconstructed, because a changelog assembled after the fact loses exactly the reasoning that makes it worth keeping. ## [Unreleased] — targeting 0.1.0 ### New Features - **Continuous integration.** The repository had no `.github` directory at all; it now carries the same `CI.yml`, `CompatHelper.yml`, `Documenter.yml` and `TagBot.yml` as every other repository in the tree — the test suite over two Julia versions and three operating systems, a doctest job, and coverage reporting. - **A documentation build.** `docs/` previously held one untracked PDF; it now has `make.jl`, `Project.toml` and a two-page manual, so `Documenter` has something to build and to deploy. That PDF — `effective_collision_operatos.pdf`, a personal note from April 2017 on a pseudospectral algorithm for the collision operators of Morrison, *Physica D* 1986 — **has now moved to `Projects/Metriplectic Relaxation/`**, whose subject it is. Nothing referenced it: neither `make.jl` nor any page under `docs/src` mentions it, so the documentation build is unaffected. It was tracked only by the commit that added this documentation build, and it is in `git log` from there. - **The test suite follows the tree's test convention.** The test dependencies are in `test/Project.toml`, and `Project.toml` has no `[extras]` or `[targets]`. `runtests.jl` lists each test file as a `@safetestset` in the `core` group, so each file runs in its own module. The test files have the names of the `src/` files they test, and the shared functions are in `test/helpers/functions.jl`. `test/quality/aqua.jl` runs Aqua, and `[compat]` gains `Distributed = "1"`, `LinearAlgebra = "1"` and `SharedArrays = "1"` so that its compat-bounds check passes (issue #2). The kernel test defines its own `mfunc_one!` and `hfunc_ϕ!` with the `grid` argument that the operator passes, because it no longer sees the methods of the other test file. `runprofiler.jl` and `runtimings.jl` are timing scripts, not tests, and move from `test/` to `scripts/`. Nothing under `src/` changes. ### Bug Fixes - **The documentation build named a branch that does not exist.** `docs/make.jl` set both `edit_link` and `devbranch` to `"master"`, while the default branch is `main` and the remote carries no `master` at all. So `deploydocs` never deployed the development documentation, and every "Edit on GitHub" link in the built manual pointed at a dead path. Both now say `"main"`. - **Five methods failed on every call.** The two `fourier_quadrature` methods with a matrix of weight matrices called the misspelled `fourier_quarature` and threw an `UndefVarError`. The two `trapezoidal_quadrature` methods with a matrix of weight matrices typed their result with the unbound `CT` and threw an `UndefVarError`. `convolution_kernel_fourier!` built its weight arrays with `Array{Array{RT, 2}}(2, 2)`, a constructor without `undef` that Julia 1.0 removed, and threw a `MethodError`. All five now run. Tests check the quadratures against their scalar method, and the Fourier kernel against the trapezoidal kernel. ### Changed - **Julia 1.12 is the floor** (`[compat] julia = "1.12"`, from 1.10). A breaking change under this package's pre-1.0 convention: a caller on Julia 1.10 or 1.11 can no longer install this version. The repository records no reason for the new floor, and no code or test workaround existed for the old one, so nothing in the package's code changes. - **Coverage and cache in CI.** CI uploads coverage from the `Julia 1 - ubuntu-latest` job instead of `Julia min`, and a test job saves the Julia cache only when it succeeds. - **Code quality and API refinement.** Loops in src/ now iterate `axes`/`eachindex` instead of `1:size`/`1:length` via fatou `index-from-length` checks; 13 findings where the index also reaches an array of another shape, or another axis, are suppressed with `# fatou-ignore index-from-length`. The unused `c` vector in the generator of `timestep!` (src/time_integration.jl) is deleted. A test for `update_field!` is added (test/time_integration.jl). The exported `apply_operator!(::Vector, ::Matrix, ::Vector)` now raises `DimensionMismatch` when `op` and `v` have different lengths; previously, a longer `v` was silently filled only in part, and a shorter `v` raised `BoundsError`. - **The Fokker-Planck kernel test moves to `test/integration/`.** The test convention keeps a test file at the top level of `test/` only where it mirrors `src/.jl`. `test/fokker_planck_operator_kernel.jl` mirrors no source file; it tests `src/fokker_planck_operator.jl` together with `src/grid.jl` and `src/fourier_transform.jl`, and `test/fokker_planck_operator.jl` already mirrors the operator, so it is now `test/integration/fokker_planck_operator_kernel.jl`. Only its include path of `helpers/functions.jl` and its path in `runtests.jl` change. - **Aqua's floor in `test/Project.toml` is 0.8.14** (from `"0.8"`). The `Downgrade` job resolves `Project.toml` and `test/Project.toml` together at their lower bounds on Julia 1.12 and runs the tests there. Aqua 0.8.0 to 0.8.13 read `Core.TypeName.mt`, which Julia 1.12 no longer has, so the piracy check throws a `FieldError`; 0.8.14 is the first release that reads `Core.methodtable` instead. No other floor changes: the merged resolve reaches every lower bound of both files. ### Breaking Changes - **The repository moved from `DDMGNI` to the `JuliaPlasma` organisation.** It is now `github.com/JuliaPlasma/VortexCollisions.jl`, and the documentation deploys to `JuliaPlasma.github.io/VortexCollisions.jl`. GitHub redirects the old path, so an existing clone and an `]add` of the old URL both keep working — but they resolve through a redirect rather than to the real location, so pinned URLs are worth updating. `README.md`, `docs/make.jl` and `docs/src/index.md` name the new path. - **A `[compat]` section, where there was none.** `julia`, whose floor the first entry under Changed above sets to 1.12 and which the CI matrix resolves its lower entry from, plus bounds for the four non-stdlib dependencies: `AbstractFFTs = "1"`, `FFTW = "1.3.1"`, `HDF5 = "0.17"`, `ProgressMeter = "1"`, matching what the manifest resolves today. An unbounded dependency is free to break the package on its next breaking release. `FFTW` settles at 1.3.1 rather than `"1"`: `AbstractFFTs = "1"` and FFTW 1.0.0 to 1.3.0 require `AbstractFFTs` 0.5, so the two lower bounds cannot hold at once, and the `Downgrade` job named FFTW as unreachable at its old value.