From 98adc3bedd9d23ebc7e0ddaeba6af08e53df3297 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Fri, 19 Jun 2026 06:11:38 -0400 Subject: [PATCH 1/3] Run downgrade CI on Julia 1.11 (Mooncake 0.5 needs >= 1.10.8) The Downgrade (Core) job fails on master with `ERROR: LoadError: Unsatisfiable`. The downgrade resolver runs `--min=@deps` and minimizes the Julia version to the floor implied by the workflow's Julia channel. With the default `lts` channel that floor is 1.10.0, but every Mooncake 0.5.x release (used by RecursiveArrayToolsMooncakeExt) declares `julia = "1.10.8 - 1.10, 1.11.6 - 1"`, so no Mooncake version is installable at 1.10.0 and Mooncake gets no candidate version. Reproduced locally with the actual julia-actions/julia-downgrade-compat downgrade.jl driver against a checkout of this repo: julia_version=1.10 -> ERROR: LoadError: Unsatisfiable julia_version=1.11 -> "Successfully resolved minimal versions" Pin the downgrade job to Julia 1.11 (the same approach OrdinaryDiffEq.jl uses), where 1.10.8+ is satisfied and every declared floor is jointly installable. Core support for Julia 1.10 is unchanged and is still exercised by the normal lts test legs; this only affects which Julia the downgrade resolver minimizes against. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/Downgrade.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/Downgrade.yml b/.github/workflows/Downgrade.yml index 3a3753d2..c127a69f 100644 --- a/.github/workflows/Downgrade.yml +++ b/.github/workflows/Downgrade.yml @@ -21,4 +21,11 @@ jobs: uses: "SciML/.github/.github/workflows/downgrade.yml@v1" with: group: "${{ matrix.group }}" + # Mooncake 0.5 (RecursiveArrayToolsMooncakeExt) requires Julia >= 1.10.8, + # so the downgrade resolver cannot place it when it minimizes Julia to the + # 1.10.0 floor that the default "lts" channel implies. Resolve downgrades + # against 1.11 (matching OrdinaryDiffEq.jl) where every dependency floor is + # jointly installable; core support for Julia 1.10 is unchanged and remains + # exercised by the regular lts CI legs. + julia-version: "1.11" secrets: "inherit" From e530592c0decdb34828357bbf1362369a56db3e5 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sat, 20 Jun 2026 06:00:22 -0400 Subject: [PATCH 2/3] Fix typo: tupe -> type in named_array_partition comment Fixes the Spell Check with Typos CI failure flagging `tupe` in src/named_array_partition.jl. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- src/named_array_partition.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/named_array_partition.jl b/src/named_array_partition.jl index 887f658e..d88f1c13 100644 --- a/src/named_array_partition.jl +++ b/src/named_array_partition.jl @@ -146,7 +146,7 @@ function Base.similar( return NamedArrayPartition(similar(ArrayPartition(x)), getfield(x, :names_to_indices)) end -# when broadcasting with ArrayPartition + another array type, the output is the other array tupe +# when broadcasting with ArrayPartition + another array type, the output is the other array type function Base.BroadcastStyle( ::Broadcast.ArrayStyle{NamedArrayPartition}, ::Broadcast.DefaultArrayStyle{1} ) From ce9f09e963bd2bf6b6e634e5e417a0a3e716430d Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sun, 21 Jun 2026 08:27:30 -0400 Subject: [PATCH 3/3] Split AD tests into a dedicated off-downgrade group Move the Mooncake/Zygote/ForwardDiff/ReverseDiff test files out of the root Core group and into a dedicated `AD` group with its own sub-environment (test/AD/Project.toml, [sources] RecursiveArrayTools = path), modeled on the NoPre group. The AD group is marked in_all = false and is not run in the Downgrade lane (which runs only Core), so its deps are never fed to the downgrade resolver. This removes Mooncake (and the other AD backends) from the root [targets].test set. The downgrade workflow builds/tests with project: "@." (the repo root) and minimizes every direct dep plus the Julia version to the 1.10.0 LTS floor; Mooncake 0.5 requires Julia >= 1.10.8, so at the 1.10.0 floor it was Unsatisfiable. With Mooncake out of the root test target the resolver no longer sees it, fixing the wall at the source instead of pinning the downgrade Julia version. This reverts the Downgrade.yml julia-version: "1.11" approach from this branch in favor of the AD split. Mooncake/Zygote/ForwardDiff/ReverseDiff remain as [weakdeps]+[compat] for the AD extensions; the AD tests still run (in their own group on a normal Julia). The tupe->type spellcheck fix is kept. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/Downgrade.yml | 7 ------- Project.toml | 6 +----- test/AD/Project.toml | 18 ++++++++++++++++++ test/{Core => AD}/adjoints.jl | 0 test/{Core => AD}/mooncake.jl | 0 test/runtests.jl | 14 ++++++++++++-- test/test_groups.toml | 10 ++++++++++ 7 files changed, 41 insertions(+), 14 deletions(-) create mode 100644 test/AD/Project.toml rename test/{Core => AD}/adjoints.jl (100%) rename test/{Core => AD}/mooncake.jl (100%) diff --git a/.github/workflows/Downgrade.yml b/.github/workflows/Downgrade.yml index c127a69f..3a3753d2 100644 --- a/.github/workflows/Downgrade.yml +++ b/.github/workflows/Downgrade.yml @@ -21,11 +21,4 @@ jobs: uses: "SciML/.github/.github/workflows/downgrade.yml@v1" with: group: "${{ matrix.group }}" - # Mooncake 0.5 (RecursiveArrayToolsMooncakeExt) requires Julia >= 1.10.8, - # so the downgrade resolver cannot place it when it minimizes Julia to the - # 1.10.0 floor that the default "lts" channel implies. Resolve downgrades - # against 1.11 (matching OrdinaryDiffEq.jl) where every dependency floor is - # jointly installable; core support for Julia 1.10 is unchanged and remains - # exercised by the regular lts CI legs. - julia-version: "1.11" secrets: "inherit" diff --git a/Project.toml b/Project.toml index 787ebe7f..bcb216f5 100644 --- a/Project.toml +++ b/Project.toml @@ -85,10 +85,8 @@ julia = "1.10" [extras] FastBroadcast = "7034ab61-46d4-4ed7-9d0f-46aef9175898" -ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" -Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" Polyester = "f517fe37-dbe3-4b94-8317-1923a5111588" @@ -101,9 +99,7 @@ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" -Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" -Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" [targets] -test = ["FastBroadcast", "ForwardDiff", "KernelAbstractions", "Measurements", "Mooncake", "Pkg", "Polyester", "Random", "RecursiveArrayToolsShorthandConstructors", "ReverseDiff", "SafeTestsets", "SciMLTesting", "SparseArrays", "StaticArrays", "Statistics", "StructArrays", "Tables", "Test", "Unitful", "Zygote"] +test = ["FastBroadcast", "KernelAbstractions", "Measurements", "Pkg", "Polyester", "Random", "RecursiveArrayToolsShorthandConstructors", "SafeTestsets", "SciMLTesting", "SparseArrays", "StaticArrays", "Statistics", "StructArrays", "Tables", "Test", "Unitful"] diff --git a/test/AD/Project.toml b/test/AD/Project.toml new file mode 100644 index 00000000..dbbef75e --- /dev/null +++ b/test/AD/Project.toml @@ -0,0 +1,18 @@ +[deps] +ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" +Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" +RecursiveArrayTools = "731186ca-8d62-57ce-b412-fbd966d074cd" +ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" +Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[sources] +RecursiveArrayTools = {path = "../.."} + +[compat] +ForwardDiff = "0.10.38, 1" +Mooncake = "0.5" +RecursiveArrayTools = "4" +ReverseDiff = "1.15" +Test = "1" +Zygote = "0.7" diff --git a/test/Core/adjoints.jl b/test/AD/adjoints.jl similarity index 100% rename from test/Core/adjoints.jl rename to test/AD/adjoints.jl diff --git a/test/Core/mooncake.jl b/test/AD/mooncake.jl similarity index 100% rename from test/Core/mooncake.jl rename to test/AD/mooncake.jl diff --git a/test/runtests.jl b/test/runtests.jl index 33c07597..a0fe285f 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -22,8 +22,6 @@ run_tests(; @time @safetestset "Table traits" include("Core/tabletraits.jl") @time @safetestset "StaticArrays Tests" include("Core/copy_static_array_test.jl") @time @safetestset "Linear Algebra Tests" include("Core/linalg.jl") - @time @safetestset "Adjoint Tests" include("Core/adjoints.jl") - @time @safetestset "Mooncake Tests" include("Core/mooncake.jl") return @time @safetestset "Measurement Tests" include("Core/measurements.jl") end, groups = Dict( @@ -70,6 +68,18 @@ run_tests(; return @time @safetestset "JET Tests" include("NoPre/jet_tests.jl") end, ), + # AD lives in its own env (test/AD/Project.toml) so its heavy AD-backend + # deps (Mooncake/Zygote/ForwardDiff/ReverseDiff) stay out of the root test + # target. It is deliberately absent from `all` and not run in the Downgrade + # lane: Mooncake 0.5 requires Julia >= 1.10.8, which the downgrade resolver + # cannot satisfy when it minimizes Julia to the 1.10.0 LTS floor. + "AD" => (; + env = joinpath(@__DIR__, "AD"), + body = function () + @time @safetestset "Adjoint Tests" include("AD/adjoints.jl") + return @time @safetestset "Mooncake Tests" include("AD/mooncake.jl") + end, + ), ), qa = (; env = joinpath(@__DIR__, "QA"), diff --git a/test/test_groups.toml b/test/test_groups.toml index 2da0790b..ebea6523 100644 --- a/test/test_groups.toml +++ b/test/test_groups.toml @@ -18,6 +18,16 @@ num_threads = 2 versions = ["lts", "1"] num_threads = 2 +# AD backends (Mooncake/Zygote/ForwardDiff/ReverseDiff) live in their own env +# (test/AD/Project.toml) and run as their own CI group. in_all = false keeps them +# out of the "All" aggregate, and the Downgrade lane only runs "Core", so AD is +# never fed to the downgrade resolver -- Mooncake 0.5 needs Julia >= 1.10.8, which +# the downgrade resolver cannot place when it minimizes Julia to the 1.10.0 floor. +[AD] +versions = ["lts", "1"] +num_threads = 2 +in_all = false + [GPU] versions = ["1"] runner = ["self-hosted", "Linux", "X64", "gpu"]