Skip to content

Raise Mooncake compat floor to 0.5.36 (fix Downgrade resolution)#388

Closed
ChrisRackauckas-Claude wants to merge 102 commits into
SciML:masterfrom
ChrisRackauckas-Claude:raise-mooncake-floor-0.5.36
Closed

Raise Mooncake compat floor to 0.5.36 (fix Downgrade resolution)#388
ChrisRackauckas-Claude wants to merge 102 commits into
SciML:masterfrom
ChrisRackauckas-Claude:raise-mooncake-floor-0.5.36

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor

What

Raise the Mooncake [compat] floor to the latest registered release 0.5.36 in every Project.toml that declares Mooncake, collapsing the old single floors to one floor at the latest. This is the "limit to latest Mooncake" fix for the promotion-caused Downgrade Unsatisfiable wall: pinning to the latest keeps the downgrade resolver from selecting an ancient Mooncake that Resolver.jl cannot satisfy at minimum versions.

Raised floors

File old floor new floor
Project.toml (weakdep) 0.5.25 0.5.36
test/Autodiff/Project.toml (dep) 0.5.26 0.5.36

Package patch version bumped 0.15.400.15.41 (a [compat] narrowing on a weakdep floor is a patch-level change; test/Autodiff/Project.toml has no version field).

Verification (resolves_at_min = true)

Ran julia-actions/julia-downgrade-compat's downgrade.jl (Resolver.jl min-resolution) on Julia 1.12 after the bump:

  • root project (alldeps, --min): resolved — no Unsatisfiable.
  • test/Autodiff env (deps, --min, where Mooncake is a hard dep): resolved — Mooncake = 0.5.36 in the resulting manifest (104 packages), no Unsatisfiable.

So the floor-raise alone clears the downgrade min-resolution wall for this repo; #52 is not required here. (Note: CI's Downgrade workflow only runs the Core group with mode: deps, which does not even pull the Mooncake weakdep — but the Autodiff env is the one that carries Mooncake as a hard dep, and it now resolves at min.)


Please ignore until reviewed by @ChrisRackauckas.

avik-pal and others added 30 commits October 27, 2025 11:45
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [actions/cache](https://github.com/actions/cache) from 4 to 5.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](actions/cache@v4...v5)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
This PR adds JET.jl-based static analysis tests to the test suite to help
track type stability and catch potential runtime errors.

Changes:
- Add test/jet_tests.jl with tests for core operations:
  - Type stability tests using @report_opt for getindex, similar, copy,
    getdata, getaxes, broadcast, vcat, hcat
  - Error analysis tests using @report_call for basic operations
- Add JET dependency to test/Project.toml
- Include jet_tests.jl in test/runtests.jl

JET analysis findings:
- The package is already well-typed for core operations
- Some intentional type instabilities exist in construction paths (e.g.,
  ViewAxis can return different types by design for flexibility)
- All critical post-construction operations are type-stable

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ions/cache-5

Bump actions/cache from 4 to 5
…vements-20251229-040208

Add JET.jl static analysis tests
…ions/checkout-6

Bump actions/checkout from 4 to 6
- Update CI workflow to use fredrikekre/runic-action@v1
- Remove .JuliaFormatter.toml configuration
- Format all source files with Runic.jl

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ng example

- Fixed typo in indexing_behavior.md: "origianl" -> "original"
- Removed broken @contents reference to non-existent "examples/example1.md" in index.md
- Added missing coulomb_control.md example to make.jl pages list

All examples in docs/src/examples/ are now properly listed in the documentation build.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…ments-20260107-145540

Documentation improvements: fix typo, broken reference, and add missing example
- Create test/nopre directory with its own Project.toml for JET tests
- Update CI workflow to use GROUP matrix with All and nopre groups
- Exclude nopre group from pre Julia version to avoid JET compatibility issues
- Remove JET from main test dependencies
- Update runtests.jl to use GROUP environment variable

This follows the OrdinaryDiffEq pattern for organizing tests with
separate environments for tests that need specific dependencies.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…nopre

Split tests: move JET tests to nopre group excluded on pre Julia
…ting

Switch from JuliaFormatter to Runic.jl for code formatting
…ependabot

Add Julia ecosystem to Dependabot configuration
On Julia 1.13.0-alpha2, the `[a b; c d]` block matrix syntax for
ComponentArrays does not dispatch to ComponentArrays.hvcat method
but instead falls back to LinearAlgebra's method. This causes the
axes to be lost and the result to be a plain Matrix.

This marks the affected tests as @test_broken on Julia 1.13+ until
the dispatch issue can be investigated further.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Apply Runic formatting to test/runtests.jl
- Skip Reactant tests on Julia 1.13+ since Reactant doesn't support it yet
  See: EnzymeAD/Reactant.jl#1736

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…3-hvcat-tests

Mark hvcat block matrix tests as broken on Julia 1.13+
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
…ions/checkout-6

Bump actions/checkout from 4 to 6
Updates the requirements on [StaticArrays](https://github.com/JuliaArrays/StaticArrays.jl), [ArrayInterface](https://github.com/JuliaArrays/ArrayInterface.jl), [Functors](https://github.com/FluxML/Functors.jl), [Zygote](https://github.com/FluxML/Zygote.jl), [Tracker](https://github.com/FluxML/Tracker.jl), [ReverseDiff](https://github.com/JuliaDiff/ReverseDiff.jl), [Reactant](https://github.com/EnzymeAD/Reactant.jl), [Optimisers](https://github.com/FluxML/Optimisers.jl), [ForwardDiff](https://github.com/JuliaDiff/ForwardDiff.jl), [BenchmarkTools](https://github.com/JuliaCI/BenchmarkTools.jl), [FiniteDiff](https://github.com/JuliaDiff/FiniteDiff.jl), [LabelledArrays](https://github.com/SciML/LabelledArrays.jl), [OffsetArrays](https://github.com/JuliaArrays/OffsetArrays.jl), [InvertedIndices](https://github.com/JuliaData/InvertedIndices.jl), [JLArrays](https://github.com/JuliaGPU/GPUArrays.jl), [Aqua](https://github.com/JuliaTesting/Aqua.jl), [Unitful](https://github.com/JuliaPhysics/Unitful.jl) and [ArrayInterfaceCore](https://github.com/JuliaArrays/ArrayInterface.jl) to permit the latest version.

Updates `StaticArrays` to 1.9.16
- [Release notes](https://github.com/JuliaArrays/StaticArrays.jl/releases)
- [Commits](JuliaArrays/StaticArrays.jl@v0.0.1...v1.9.16)

Updates `ArrayInterface` to 7.22.0
- [Release notes](https://github.com/JuliaArrays/ArrayInterface.jl/releases)
- [Commits](JuliaArrays/ArrayInterface.jl@v0.0.1...v7.22.0)

Updates `Functors` to 0.5.2
- [Release notes](https://github.com/FluxML/Functors.jl/releases)
- [Commits](FluxML/Functors.jl@v0.1.0...v0.5.2)

Updates `Zygote` to 0.7.10
- [Release notes](https://github.com/FluxML/Zygote.jl/releases)
- [Commits](FluxML/Zygote.jl@v0.2.0...v0.7.10)

Updates `Tracker` to 0.2.38
- [Release notes](https://github.com/FluxML/Tracker.jl/releases)
- [Commits](FluxML/Tracker.jl@v0.1.0...v0.2.38)

Updates `ReverseDiff` to 1.16.1
- [Release notes](https://github.com/JuliaDiff/ReverseDiff.jl/releases)
- [Commits](JuliaDiff/ReverseDiff.jl@v0.0.1...v1.16.1)

Updates `Reactant` to 0.2.197
- [Release notes](https://github.com/EnzymeAD/Reactant.jl/releases)
- [Commits](EnzymeAD/Reactant.jl@v0.1.0...v0.2.197)

Updates `Optimisers` to 0.4.7
- [Release notes](https://github.com/FluxML/Optimisers.jl/releases)
- [Commits](FluxML/Optimisers.jl@v0.1.0...v0.4.7)

Updates `StaticArrays` to 1.9.16
- [Release notes](https://github.com/JuliaArrays/StaticArrays.jl/releases)
- [Commits](JuliaArrays/StaticArrays.jl@v0.0.1...v1.9.16)

Updates `ForwardDiff` to 1.3.1
- [Release notes](https://github.com/JuliaDiff/ForwardDiff.jl/releases)
- [Commits](JuliaDiff/ForwardDiff.jl@v0.0.2...v1.3.1)

Updates `BenchmarkTools` to 1.6.3
- [Release notes](https://github.com/JuliaCI/BenchmarkTools.jl/releases)
- [Commits](JuliaCI/BenchmarkTools.jl@v0.0.1...v1.6.3)

Updates `FiniteDiff` to 2.29.0
- [Release notes](https://github.com/JuliaDiff/FiniteDiff.jl/releases)
- [Commits](https://github.com/JuliaDiff/FiniteDiff.jl/commits)

Updates `LabelledArrays` to 1.17.0
- [Release notes](https://github.com/SciML/LabelledArrays.jl/releases)
- [Commits](SciML/LabelledArrays.jl@v0.0.1...v1.17.0)

Updates `OffsetArrays` to 1.17.0
- [Release notes](https://github.com/JuliaArrays/OffsetArrays.jl/releases)
- [Commits](JuliaArrays/OffsetArrays.jl@v0.1.0...v1.17.0)

Updates `InvertedIndices` to 1.3.1
- [Release notes](https://github.com/JuliaData/InvertedIndices.jl/releases)
- [Commits](https://github.com/JuliaData/InvertedIndices.jl/commits)

Updates `JLArrays` to 0.3.0
- [Release notes](https://github.com/JuliaGPU/GPUArrays.jl/releases)
- [Commits](JuliaGPU/GPUArrays.jl@v0.0.1...v0.3.0)

Updates `Aqua` to 0.8.14
- [Release notes](https://github.com/JuliaTesting/Aqua.jl/releases)
- [Changelog](https://github.com/JuliaTesting/Aqua.jl/blob/master/CHANGELOG.md)
- [Commits](JuliaTesting/Aqua.jl@v0.1.0...v0.8.14)

Updates `Unitful` to 1.27.0
- [Release notes](https://github.com/JuliaPhysics/Unitful.jl/releases)
- [Changelog](https://github.com/JuliaPhysics/Unitful.jl/blob/master/NEWS.md)
- [Commits](JuliaPhysics/Unitful.jl@v0.0.1...v1.27.0)

Updates `ArrayInterfaceCore` to 0.1.29
- [Release notes](https://github.com/JuliaArrays/ArrayInterface.jl/releases)
- [Commits](https://github.com/JuliaArrays/ArrayInterface.jl/commits)

---
updated-dependencies:
- dependency-name: StaticArrays
  dependency-version: 1.9.16
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: ArrayInterface
  dependency-version: 7.22.0
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: Functors
  dependency-version: 0.5.2
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: Zygote
  dependency-version: 0.7.10
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: Tracker
  dependency-version: 0.2.38
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: ReverseDiff
  dependency-version: 1.16.1
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: Reactant
  dependency-version: 0.2.197
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: Optimisers
  dependency-version: 0.4.7
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: StaticArrays
  dependency-version: 1.9.16
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: ForwardDiff
  dependency-version: 1.3.1
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: BenchmarkTools
  dependency-version: 1.6.3
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: FiniteDiff
  dependency-version: 2.29.0
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: LabelledArrays
  dependency-version: 1.17.0
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: OffsetArrays
  dependency-version: 1.17.0
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: InvertedIndices
  dependency-version: 1.3.1
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: JLArrays
  dependency-version: 0.3.0
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: Aqua
  dependency-version: 0.8.14
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: Unitful
  dependency-version: 1.27.0
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: ArrayInterfaceCore
  dependency-version: 0.1.29
  dependency-type: direct:production
  dependency-group: all-julia-packages
...

Signed-off-by: dependabot[bot] <support@github.com>
…ia-packages-851a3039cd

Bump the all-julia-packages group across 2 directories with 18 updates
Restructure the test suite from a monolithic runtests.jl into independent
test groups, each with their own Project.toml and dependencies. This follows
the OrdinaryDiffEq.jl pattern of GROUP-based test dispatch.

Test groups:
- Core: Main tests (construction, attributes, indexing, math, etc.)
- Autodiff: AD tests (ForwardDiff, ReverseDiff, Zygote, Tracker, FiniteDiff)
- GPU: GPU array tests (JLArrays)
- Downstream: DiffEq integration tests (DifferentialEquations, Sundials)
- Reactant: Reactant extension tests
- nopre: QA tests (JET, Aqua) - excluded from pre-release Julia

Changes:
- Extract core tests from inline runtests.jl into test/core_tests.jl
- Move autodiff, GPU, Reactant tests into subdirectories with own Project.toml
- Revive downstream DiffEq tests (test/diffeq_test/ -> test/downstream/)
- Move Aqua tests from formalities.jl to nopre group for QA isolation
- Add missing imports to test files that relied on parent scope
- Mark Sundials CVODE_BDF test as @test_broken (upstream incompatibility)
- Fix sol[i] deprecation warnings in downstream tests (-> sol.u[i])
- Update CI matrix with all test groups and appropriate exclusions
- Fix downgrade workflow to use main branch instead of master
- Add ComponentArrays to test/Project.toml (fixes deprecation warning)

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove compat bounds from test/Project.toml for packages that are also
in the main Project.toml (ArrayInterface, Functors, Tracker) to avoid
conflicts when julia-downgrade-compat resolves to lower bounds.

Relax performance test thresholds in downstream tests for CI stability -
these timing benchmarks are unreliable on shared runners.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ChrisRackauckas and others added 28 commits May 11, 2026 12:09
The Issue 36 perf test reported (ctime2 - ltime2) / ltime2 = 10.299
on commit 8604dd8, marginally exceeding the 10.0 threshold. The
previous commit (abc384b) passed with identical test code (only
test/Project.toml compat bounds changed between commits). Self-hosted
runner timing is noisy; this empty commit re-runs CI to confirm
flake vs real regression before any threshold tweak.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
…r variance

Reruns on different self-hosted runners observed 10.3x, 12.4x, and 15.5x
overhead for the same code — up to ~50% spread. A tight 10x threshold was
catching CI noise rather than perf regressions. Bumped to 20x as a guard
against pathological blow-ups; serious perf tracking should live in a
dedicated benchmark suite.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
…olver-imports

Fix master CI: import OrdinaryDiffEq sub-packages explicitly
`Mooncake.tangent_type(ComponentVector{P,Vector{P},Axes}) ===
Mooncake.Tangent{@NamedTuple{data::Vector{P}, axes::NoTangent}}`.
That tangent is not an `AbstractArray`, so the generic
`Base.copyto!(::AbstractArray, ::Any)` fallback tries to iterate it and
throws `MethodError: no method matching iterate(::Mooncake.Tangent{…})`.

Optimization.jl + AutoMooncake + ComponentArrays hits this path because
`DifferentiationInterface.value_and_gradient!(::AutoMooncake, …)` writes
the gradient into a user-supplied `grad` buffer with an unconditional
`copyto!(grad, new_grad)`. The plain-`Vector` case works only because
Mooncake's tangent_type for `Vector{Float64}` is `Vector{Float64}` itself.

Define `Base.copyto!` for the flat-Array-backed `ComponentArray` case so
the tangent's `data` field flows directly into the ComponentArray's
underlying storage. SubArray-backed CVs are unaffected (the same kind of
overload could be added there once a concrete failure surfaces).

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
…atrix test

A `ComponentVector` obtained from `getproperty(::ComponentVector, ::Symbol)` on a
nested parent is `<:SubArray`-backed, so Mooncake's `tangent_type` for it nests
an inner `Tangent` that mirrors the SubArray's `(parent, indices, offset1,
stride1)` fields. The flat-Array `copyto!` overload doesn't dispatch on that
shape, so `DI.value_and_gradient!` would still throw a `MethodError: iterate`.

Add a parallel overload for the SubArray-backed CV tangent shape, symmetric to
the existing `_increment_subarray_fdata!` block. As with that path, the copy is
only well-defined when the view fully covers its parent (the SubArray indices
are not recoverable from Mooncake tangent shape alone); the partial-cover case
throws a clear `ArgumentError` rather than silently producing wrong gradients.

Also add a `ComponentMatrix` copyto! regression test — `Matrix{P} <: Array{P}`
already matches the flat-Array signature, this just locks in the behavior.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
…yto-componentarray

ext/Mooncake: bridge `copyto!(::ComponentArray, ::Mooncake.Tangent)`
Updates the requirements on [ArrayInterface](https://github.com/JuliaArrays/ArrayInterface.jl), [Functors](https://github.com/FluxML/Functors.jl), [Tracker](https://github.com/FluxML/Tracker.jl), [StaticArrays](https://github.com/JuliaArrays/StaticArrays.jl), [ForwardDiff](https://github.com/JuliaDiff/ForwardDiff.jl), [BenchmarkTools](https://github.com/JuliaCI/BenchmarkTools.jl), [ComponentArrays](https://github.com/SciML/ComponentArrays.jl), [LabelledArrays](https://github.com/SciML/LabelledArrays.jl), [OffsetArrays](https://github.com/JuliaArrays/OffsetArrays.jl), [InvertedIndices](https://github.com/JuliaData/InvertedIndices.jl) and [Unitful](https://github.com/JuliaPhysics/Unitful.jl) to permit the latest version.

Updates `ArrayInterface` to 7.25.0
- [Release notes](https://github.com/JuliaArrays/ArrayInterface.jl/releases)
- [Commits](JuliaArrays/ArrayInterface.jl@v0.0.1...v7.25.0)

Updates `Functors` to 0.5.2
- [Release notes](https://github.com/FluxML/Functors.jl/releases)
- [Commits](FluxML/Functors.jl@v0.1.0...v0.5.2)

Updates `Tracker` to 0.2.38
- [Release notes](https://github.com/FluxML/Tracker.jl/releases)
- [Commits](FluxML/Tracker.jl@v0.1.0...v0.2.38)

Updates `StaticArrays` to 1.9.18
- [Release notes](https://github.com/JuliaArrays/StaticArrays.jl/releases)
- [Commits](JuliaArrays/StaticArrays.jl@v0.0.1...v1.9.18)

Updates `ForwardDiff` to 1.3.3
- [Release notes](https://github.com/JuliaDiff/ForwardDiff.jl/releases)
- [Commits](JuliaDiff/ForwardDiff.jl@v0.0.2...v1.3.3)

Updates `BenchmarkTools` to 1.8.0
- [Release notes](https://github.com/JuliaCI/BenchmarkTools.jl/releases)
- [Commits](JuliaCI/BenchmarkTools.jl@v0.0.1...v1.8.0)

Updates `ComponentArrays` to 0.15.39
- [Release notes](https://github.com/SciML/ComponentArrays.jl/releases)
- [Changelog](https://github.com/SciML/ComponentArrays.jl/blob/main/NEWS.md)
- [Commits](SciML/ComponentArrays.jl@v0.1.0...v0.15.39)

Updates `LabelledArrays` to 1.19.0
- [Release notes](https://github.com/SciML/LabelledArrays.jl/releases)
- [Commits](SciML/LabelledArrays.jl@v0.0.1...v1.19.0)

Updates `OffsetArrays` to 1.17.0
- [Release notes](https://github.com/JuliaArrays/OffsetArrays.jl/releases)
- [Commits](JuliaArrays/OffsetArrays.jl@v0.1.0...v1.17.0)

Updates `InvertedIndices` to 1.3.1
- [Release notes](https://github.com/JuliaData/InvertedIndices.jl/releases)
- [Commits](https://github.com/JuliaData/InvertedIndices.jl/commits)

Updates `Unitful` to 1.28.0
- [Release notes](https://github.com/JuliaPhysics/Unitful.jl/releases)
- [Changelog](https://github.com/JuliaPhysics/Unitful.jl/blob/master/NEWS.md)
- [Commits](JuliaPhysics/Unitful.jl@v0.0.1...v1.28.0)

---
updated-dependencies:
- dependency-name: ArrayInterface
  dependency-version: 7.25.0
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: Functors
  dependency-version: 0.5.2
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: Tracker
  dependency-version: 0.2.38
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: StaticArrays
  dependency-version: 1.9.18
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: ForwardDiff
  dependency-version: 1.3.3
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: BenchmarkTools
  dependency-version: 1.8.0
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: ComponentArrays
  dependency-version: 0.15.39
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: LabelledArrays
  dependency-version: 1.19.0
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: OffsetArrays
  dependency-version: 1.17.0
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: InvertedIndices
  dependency-version: 1.3.1
  dependency-type: direct:production
  dependency-group: all-julia-packages
- dependency-name: Unitful
  dependency-version: 1.28.0
  dependency-type: direct:production
  dependency-group: all-julia-packages
...

Signed-off-by: dependabot[bot] <support@github.com>
Brings CI in line with the SciML standard (matching Sundials.jl):

- Add a Spell Check workflow using crate-ci/typos, with a .typos.toml
  configuring the one project-specific exception (`temp_noth` test
  variable).
- Move the `crate-ci/typos` Dependabot ignore from the `julia`
  ecosystem (where it had no effect — typos is a GitHub Action) to the
  `github-actions` ecosystem, so the pinned typos version in the new
  workflow is not bumped by patch/minor PRs.
- Drop `enable-beta-ecosystems: true`; per the current Dependabot
  options reference this flag is "Not currently in use", so the Julia
  ecosystem no longer requires it.

Resolves the cleanup requested in SciML#371.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
…ndard-spellcheck-dependabot

CI: add SpellCheck workflow and clean up Dependabot config (SciML#371)
…ia-packages-bb99d7dfe0

Bump the all-julia-packages group across 1 directory with 11 updates
Re-enables the downgrade workflow and sets allow_reresolve: false so the test
suite runs against the minimal (downgraded) dependency versions, not a
re-resolved set. Raises the [compat] lower bounds that were below what the
package's own tests require, to the minimal mutually-consistent versions
(all already released), so the floor set is self-consistent.

Verified locally on Julia 1.11 in a clean depot: downgrade resolve + build +
Pkg.test(allow_reresolve=false) all pass at the floor (0 re-resolve events).

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-testatfloor

Re-enable downgrade CI (genuine test-at-floor)
Convert Tests (ci.yml), Documentation (docs.yml), Format Check (Runic),
Spell Check (typos), and Downgrade workflows to call the centralized
reusable workflows in SciML/.github pinned at @v1. Update dependabot.yml
to drop the per-dependency crate-ci/typos ignore block.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…entralized-workflows

Migrate CI to centralized SciML reusable workflows
…erge, docs-preview-cleanup) (SciML#379)

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The reusable SciML/.github downgrade workflows now always use
allow_reresolve: false and no longer accept an allow-reresolve input
(see SciML/.github#71). Remove the now-invalid input so this caller keeps
working once @v1 is retagged.

Co-authored-by: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Convert the root CI workflow (ci.yml) to the canonical thin caller of
SciML/.github grouped-tests.yml@v1, with the group x version matrix
declared once in test/test_groups.toml instead of hand-maintained YAML.

The previously inlined matrix (group: Core/Autodiff/GPU/Downstream/
Reactant/nopre x version: lts/1/pre, with pre excluded for nopre/
Downstream/Reactant) is reproduced exactly by test_groups.toml:
15/15 (group, version) cells match the compute_affected_sublibraries.jl
--root-matrix output. runtests.jl already dispatches on the standard
GROUP env var, so no with: overrides and no runtests.jl change needed.

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ciML#381)

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Restructure test/ into the v1.2 folder layout and replace the hand-written
GROUP dispatch ladder with a single run_tests call:

- Core: the monolithic core_tests.jl is split into self-contained per-feature
  files at the top level (each includes shared/test_setup.jl); core_tests.jl
  becomes a @safetestset manifest that includes them, run isolated per file.
- Named groups Autodiff/GPU/Downstream/Reactant get their own test/<Group>/
  folder (renamed to match test_groups.toml casing) carrying the existing
  per-group Project.toml sub-env.
- The nopre group keeps its folder and gains a nopre_tests.jl manifest that
  @safetestset-includes jet_tests.jl and aqua_tests.jl.
- shared/test_setup.jl holds the Core fixtures, included explicitly.

runtests.jl uses explicit-args run_tests with a curated all = ["Core"] so the
local GROUP=All default keeps running Core only (matching the old dispatch);
CI dispatches each declared group by name. SciMLTesting + SafeTestsets added to
the test env and every @safetestset-running sub-env Project.toml; Pkg dropped
from the test env (no test file uses it). test_groups.toml unchanged.

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The nopre group carried only standard QA checks (JET, Aqua), so it is renamed
to the canonical QA group at versions ["lts","1"]. The dep env test/nopre is
renamed to test/qa and the runtests dispatch keys on GROUP == "QA".

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
SciML#385)

* Fix QA test group harness wiring for SciMLTesting v1.2

The v1.2 conversion (SciML#384) placed the QA group inside the `groups` Dict
passed to `run_tests`. SciMLTesting treats "QA" as a reserved group that
must be supplied via the dedicated `qa` keyword argument; with `qa` unset,
requesting `GROUP=QA` threw

    ArgumentError: run_tests: GROUP="QA" was requested but no `qa` body
    was provided

Move the QA spec out of `groups` and into the `qa` keyword.

Also add SafeTestsets and SciMLTesting (with compat) to test/qa/Project.toml.
The QA body runs in the activated qa env and is wrapped in @safetestset,
so that env must provide both packages, matching every other group env
(test/Project.toml, test/Autodiff, test/Downstream all declare them).

Verified locally on Julia 1.10 via the faithful CI path
(GROUP=QA Pkg.test("ComponentArrays")): QA group 22/22 passed.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Restructure Core/QA to SciMLTesting v1.2 folder-discovery

Replace the explicit-args run_tests(core=..., groups=..., qa=..., all=["Core"])
with pure folder-discovery: test/runtests.jl is now just

    using SciMLTesting
    run_tests()

Behavior is preserved exactly:

- Core: delete test/core_tests.jl. The 19 self-contained top-level test/*.jl
  files (each begins with include("shared/test_setup.jl")) are discovered as
  Core, each run in its own isolated @safetestset (Core/<basename>) — identical
  isolation to what core_tests.jl did manually. Local Core run matches the
  pre-change aggregate exactly: 459 Pass, 9 Broken, 468 Total, each file once
  (no double-run).
- QA: delete test/qa/qa.jl so test/qa/{aqua_tests,jet_tests}.jl are discovered
  directly (qa.jl was a bare include-aggregator; both files are already
  self-contained with their own using Aqua/JET/ComponentArrays/Test, so no
  shared usings needed migrating). Each runs once: QA/aqua_tests.jl,
  QA/jet_tests.jl.
- All = Core only: the old all=["Core"] excluded Autodiff/GPU/Downstream/
  Reactant from the All lane. In discovery mode this is in_all = false on each
  of those four groups (QA is auto-excluded from All). Verified GROUP=All runs
  the 19 Core testsets only — no Autodiff/GPU/Downstream/Reactant/QA.

test/shared/ is a helper folder (not in test_groups.toml, a subdir not a
top-level *.jl) so discovery auto-excludes it. Existing per-group versions are
unchanged. GROUP=Autodiff still dispatches its sub-env (sanity-checked).

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Convert the hand-rolled test/qa Aqua + JET files to a single qa.jl on the
SciMLTesting 1.6 `run_qa` form, with ExplicitImports enabled.

ExplicitImports findings, resolved FIX > IGNORE:
- no_stale_explicit_imports: drop stale `SMatrix` import.
- no_implicit_imports: make the 11 implicit LinearAlgebra names explicit
  (`using LinearAlgebra: LinearAlgebra, Adjoint, ...`).
- all_qualified_accesses_via_owners: `Broadcast.unalias` -> `Base.unalias`
  (owner is Base).
- all_qualified_accesses_are_public / all_explicit_imports_are_public: ignore
  Base/Base.Broadcast/Base.Iterators internals plus non-public names from
  Adapt/ChainRulesCore/ArrayInterface/StaticArrayInterface/StaticArraysCore/
  Functors/LinearAlgebra (method-extension imports).

Aqua `ambiguities`/`unbound_args` stay disabled as genuine aqua_kwargs (real,
long-standing vcat/hcat/getindex/Axis findings, not tracked-broken). JET runs
hard (test_package clean on 1.10). test/qa/Project.toml: drop Aqua + transitive
ExplicitImports, bump SciMLTesting compat to "1.6".

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
….6-explicit-imports

QA: run_qa v1.6 form + ExplicitImports
Raise the Mooncake [compat] floor to the latest registered release
(0.5.36) in every Project.toml that declares Mooncake, replacing the
old single floors (root weakdep 0.5.25, test/Autodiff dep 0.5.26). This
is the "limit to latest Mooncake" fix for the promotion-caused Downgrade
Unsatisfiable wall: pinning to the latest keeps the downgrade resolver
from selecting an ancient Mooncake that the Resolver cannot satisfy.

Bump the package patch version (0.15.40 -> 0.15.41); a [compat]
narrowing on a weakdep floor is a patch-level change.

Verified on Julia 1.12 by running julia-downgrade-compat's downgrade.jl
(Resolver.jl min-resolution) after the bump:
- root project (alldeps, --min): resolved, no Unsatisfiable
- test/Autodiff env (deps, --min, Mooncake a hard dep): resolved,
  Mooncake pinned to 0.5.36 in the resulting manifest

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor Author

Closing. Verified locally (ran the action's own downgrade.jl on the identical commit CI failed on) that raising the Mooncake compat floor does NOT fix the Downgrade lane. The failure is julia-downgrade-compat@v2 merged mode promoting all ~13 weakdep AD backends (Mooncake, Zygote, ForwardDiff, DifferentiationInterface, …) to hard deps and running Resolver.jl --min on the joint graph — which is registry-snapshot-dependent (flips UNSAT↔SAT as those packages release) and independent of Mooncake's version. This PR also unnecessarily narrows Mooncake compat. Real fix is julia-actions/julia-downgrade-compat#52 (do not promote weakdeps in merged resolution). Superseded — closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants