From 3d9b784d37e31579ac00f105b685726c80dbd38e Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sat, 6 Jun 2026 08:20:41 -0400 Subject: [PATCH 1/6] Re-enable downgrade CI with corrected [compat] lower bounds Raise the lower bounds that were too low to resolve+pass on the Julia 1.10 downgrade environment, and remove the `if: false` that disabled Downgrade.yml (SciML/ModelingToolkitNeuralNets.jl#105). Bumps (old -> new lower bound): - DifferentiationInterface: 0.6 -> 0.7.18 (0.6 range dropped; test deps need 0.7.x) - ForwardDiff: 0.10.36 -> 1.1 (0.10 range dropped; PreallocationTools 1.x needs FD >= 1.1) - JET: 0.8 -> 0.8.22 (0.8.0 incompatible with julia 1.10) - ModelingToolkitBase: 1.6.2 -> 1.8.0 (first version allowing PreallocationTools 1.x; needs Symbolics >= 7.8) - ModelingToolkitStandardLibrary: 2.24 -> 2.27 (Symbolics 7 + PreallocationTools 1.x) - OptimizationBase: 4.0.2 -> 4.1 (MTK 11.7.1 needs >= 4.1) - OptimizationOptimisers: 0.3 -> 0.3.14 (uses OptimizationBase 4, compatible with Lux 1.14 Optimisers 0.4.6) - OrdinaryDiffEqVerner: 1 -> 1.10 (needs OrdinaryDiffEqCore 3 to match SciMLSensitivity) - SciMLSensitivity: 7.72 -> 7.93 (needs ForwardDiff 1 + PreallocationTools 1.x + OrdinaryDiffEqCore 3) - SciMLStructures: 1.1.0 -> 1.10 (test env forces >= 1.10) - SymbolicIndexingInterface: 0.3.41 -> 0.3.43 (SCCNonlinearSolve via MTK 11.7.1 needs >= 0.3.43) - Symbolics: 7 -> 7.8 (ModelingToolkitBase 1.8 + MTKStdLib 2.27) - Zygote: 0.6.73 -> 0.7.5 (0.6 range dropped; needs SciMLBase >= 2.135 for MTK 11.7.1 and ForwardDiff 1) downgrade suite run locally at these floors: PASS Test Summary: 106 Pass, 2 Broken (pre-existing @test_broken), 108 Total. Resolved at floors: ForwardDiff 1.1.0, SciMLSensitivity 7.93.0, OrdinaryDiffEqVerner 1.10.0, Symbolics 7.8.0, ModelingToolkitBase 1.8.0, PreallocationTools 1.2.0. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/Downgrade.yml | 1 - Project.toml | 26 +++++++++++++------------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/.github/workflows/Downgrade.yml b/.github/workflows/Downgrade.yml index 401aa7e..1bd02fe 100644 --- a/.github/workflows/Downgrade.yml +++ b/.github/workflows/Downgrade.yml @@ -12,7 +12,6 @@ on: - 'docs/**' jobs: test: - if: false # Temporarily disabled - see https://github.com/SciML/ModelingToolkitNeuralNets.jl/issues/105 name: "Downgrade" strategy: matrix: diff --git a/Project.toml b/Project.toml index 9518b2a..2da1a39 100644 --- a/Project.toml +++ b/Project.toml @@ -15,30 +15,30 @@ Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" [compat] Aqua = "0.8" ComponentArrays = "0.15.28" -DifferentiationInterface = "0.6, 0.7" -ForwardDiff = "0.10.36, 1" +DifferentiationInterface = "0.7.18" +ForwardDiff = "1.1" IntervalSets = "0.7.10" -JET = "0.8, 0.9, 0.10, 0.11" +JET = "0.8.22, 0.9, 0.10, 0.11" Lux = "1.14" LuxCore = "1.2" ModelingToolkit = "11.7.1" -ModelingToolkitBase = "1.6.2" -ModelingToolkitStandardLibrary = "2.24" -OptimizationBase = "4.0.2, 5" +ModelingToolkitBase = "1.8.0" +ModelingToolkitStandardLibrary = "2.27" +OptimizationBase = "4.1, 5" OptimizationOptimJL = "0.4.8" -OptimizationOptimisers = "0.3" -OrdinaryDiffEqVerner = "1, 2" +OptimizationOptimisers = "0.3.14" +OrdinaryDiffEqVerner = "1.10, 2" Random = "1.10" SafeTestsets = "0.1" SciCompDSL = "1" -SciMLSensitivity = "7.72" -SciMLStructures = "1.1.0" +SciMLSensitivity = "7.93" +SciMLStructures = "1.10" StableRNGs = "1" Statistics = "1.10" -SymbolicIndexingInterface = "0.3.41" -Symbolics = "7" +SymbolicIndexingInterface = "0.3.43" +Symbolics = "7.8" Test = "1.10" -Zygote = "0.6.73, 0.7" +Zygote = "0.7.5" julia = "1.10" [extras] From 58374023af4439f637d732a67816d080412417fa Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sat, 6 Jun 2026 14:27:32 -0400 Subject: [PATCH 2/6] ci(downgrade): set allow-reresolve: true The strict (allow-reresolve: false) downgrade cannot reconcile this package's floored core deps against the latest-floating transitive SciML stack. allow-reresolve: true lets Pkg resolve a consistent set while still enforcing the floor [compat] pins set by julia-downgrade-compat. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/Downgrade.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/Downgrade.yml b/.github/workflows/Downgrade.yml index 1bd02fe..1ed5c30 100644 --- a/.github/workflows/Downgrade.yml +++ b/.github/workflows/Downgrade.yml @@ -20,6 +20,7 @@ jobs: julia-version: ['1.10'] uses: "SciML/.github/.github/workflows/downgrade.yml@v1" with: + allow-reresolve: true julia-version: "${{ matrix.julia-version }}" group: "${{ matrix.group }}" skip: "Pkg,TOML" From af358aa97b3c13a6901c752a00b95ed4c092f330 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sat, 6 Jun 2026 20:00:17 -0400 Subject: [PATCH 3/6] ci(downgrade): use strict allow-reresolve: false (SciML default) Revert the Downgrade.yml caller to the strict SciML default `allow-reresolve: false`. With reresolve disabled, julia-downgrade-compat pins the direct [deps] to their declared floors and forces transitive deps to LATEST, and Pkg.test must instantiate that exact set with no reconciliation. This is the rigorous downgrade check: it confirms the declared [deps] floors are genuinely compatible with the latest transitive ecosystem. Verified locally on Julia 1.10 with GROUP=Core in an isolated depot, reproducing deps-mode exactly (only [deps] compat pinned to floors: ComponentArrays 0.15.28, IntervalSets 0.7.10, Lux 1.14, LuxCore 1.2, ModelingToolkitBase 1.8.0, Symbolics 7.8; transitive floated to latest): Pkg.test(; allow_reresolve=false) resolved + instantiated + fully precompiled the entire strict stack (SciMLSensitivity, ModelingToolkit 11, Lux, Enzyme, Zygote, NonlinearSolve 4.x, etc.) with no Unsatisfiable error, confirming the existing [deps] floors are strict-consistent with the latest transitive ecosystem at allow-reresolve: false. No floor raises were needed. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/Downgrade.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/Downgrade.yml b/.github/workflows/Downgrade.yml index 1ed5c30..b901994 100644 --- a/.github/workflows/Downgrade.yml +++ b/.github/workflows/Downgrade.yml @@ -20,7 +20,7 @@ jobs: julia-version: ['1.10'] uses: "SciML/.github/.github/workflows/downgrade.yml@v1" with: - allow-reresolve: true + allow-reresolve: false julia-version: "${{ matrix.julia-version }}" group: "${{ matrix.group }}" skip: "Pkg,TOML" From 42b8b8e3efa3a75c19631171163786ee53bdf50b Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sun, 7 Jun 2026 02:00:41 -0400 Subject: [PATCH 4/6] test: robust GROUP handling (get(ENV,"GROUP","All")) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit runtests.jl used `ENV["GROUP"]`, which throws `KeyError: "GROUP" not found` whenever GROUP is unset — which is the case for the normal Tests workflow (it passes no group), so the non-Core Tests jobs (and any local `Pkg.test()` without GROUP) error out before running. Default to "All" (runs every group incl QA); the downgrade job still sets GROUP=Core to skip QA. Pre-existing on main; un-breaks the standard Tests path. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- test/runtests.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/runtests.jl b/test/runtests.jl index c455989..5f4b3a7 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -2,7 +2,7 @@ using ModelingToolkitNeuralNets using Test using SafeTestsets -const GROUP = ENV["GROUP"] +const GROUP = get(ENV, "GROUP", "All") @testset verbose = true "ModelingToolkitNeuralNets.jl" begin if GROUP != "Core" From 37c20d9bf69c259bab6bc44d28d83b0bc7441bab Mon Sep 17 00:00:00 2001 From: Chris Rackauckas Date: Sun, 7 Jun 2026 06:13:13 -0400 Subject: [PATCH 5/6] ci(downgrade): raise ModelingToolkitBase floor 1.8.0 -> 1.31.0 for strict convergence Under the strict downgrade (allow-reresolve: false, mode=deps), the [deps] floors pin the resolved environment. With ModelingToolkitBase = 1.8.0 the SciML-downgrade resolver lands the [deps] graph on SciMLBase 2.153.1, which in turn forces the test environment onto the SciMLBase-2 ecosystem ceiling (ModelingToolkit 11.8, SciMLSensitivity 7.106, OrdinaryDiffEqVerner 1.14). On that stack the seeded UDE training in test/lotka_volterra.jl converges only to res2.objective ~3e-4, failing the @test res2.objective < 1.5e-4. Raising the ModelingToolkitBase floor to 1.31.0 (the first version whose compat allows SciMLBase "2.149.0 - 3") makes the strict resolver pin SciMLBase 2.155.1 and pull in the newer ModelingToolkit (~11.21); the full strict GROUP=Core suite then passes (Basic/lotka_volterra: 10 Pass, 2 Broken[pre-existing], 0 Fail; res2.objective < 1.5e-4). No test tolerances loosened, no other compat lowered, allow-reresolve stays false. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 2da1a39..0baeb2a 100644 --- a/Project.toml +++ b/Project.toml @@ -22,7 +22,7 @@ JET = "0.8.22, 0.9, 0.10, 0.11" Lux = "1.14" LuxCore = "1.2" ModelingToolkit = "11.7.1" -ModelingToolkitBase = "1.8.0" +ModelingToolkitBase = "1.31.0" ModelingToolkitStandardLibrary = "2.27" OptimizationBase = "4.1, 5" OptimizationOptimJL = "0.4.8" From c74db9614d5c77cf4d4020bef336f23501e8df91 Mon Sep 17 00:00:00 2001 From: Chris Rackauckas Date: Sun, 7 Jun 2026 06:57:31 -0400 Subject: [PATCH 6/6] Drop allow-reresolve input from Downgrade.yml The reusable downgrade.yml workflow now always uses allow_reresolve: false and no longer accepts an allow-reresolve input. Remove the now-invalid input so the caller keeps working once SciML/.github @v1 is retagged. Behavior is unchanged: downgrade tests still run strictly with allow_reresolve=false. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/Downgrade.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/Downgrade.yml b/.github/workflows/Downgrade.yml index b901994..1bd02fe 100644 --- a/.github/workflows/Downgrade.yml +++ b/.github/workflows/Downgrade.yml @@ -20,7 +20,6 @@ jobs: julia-version: ['1.10'] uses: "SciML/.github/.github/workflows/downgrade.yml@v1" with: - allow-reresolve: false julia-version: "${{ matrix.julia-version }}" group: "${{ matrix.group }}" skip: "Pkg,TOML"