Skip to content

Re-enable downgrade CI with corrected [compat] lower bounds#126

Merged
ChrisRackauckas merged 6 commits into
SciML:mainfrom
ChrisRackauckas-Claude:downgrade-reenable
Jun 7, 2026
Merged

Re-enable downgrade CI with corrected [compat] lower bounds#126
ChrisRackauckas merged 6 commits into
SciML:mainfrom
ChrisRackauckas-Claude:downgrade-reenable

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor

Re-enables the downgrade CI workflow (disabled via if: false in #105) and raises the [compat] lower bounds that were too low to resolve and pass on the Julia 1.10 downgrade environment.

Floor bumps (old → new lower bound)

Package Old New Reason
DifferentiationInterface 0.6, 0.7 0.7.18 0.6 range dropped; test deps need 0.7.x
ForwardDiff 0.10.36, 1 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, 5 4.1, 5 MTK 11.7.1 needs ≥ 4.1
OptimizationOptimisers 0.3 0.3.14 uses OptimizationBase 4, compatible with Lux 1.14's Optimisers 0.4.6
OrdinaryDiffEqVerner 1, 2 1.10, 2 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 0.7.5 0.6 range dropped; needs SciMLBase ≥ 2.135 (MTK 11.7.1) and ForwardDiff 1

Local downgrade suite: PASS

Ran Pkg.test() on Julia 1.10.11 with every non-stdlib [compat] dep pinned to its new declared floor. Resolved at the 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) and the suite passed:

Test Summary:                       | Pass  Broken  Total
ModelingToolkitNeuralNets.jl        |  106       2    108

The 2 Broken are the pre-existing @test_broken gradient comparisons in test/lotka_volterra.jl (not introduced here).

Ignore until reviewed by @ChrisRackauckas.

🤖 Generated with Claude Code

ChrisRackauckas and others added 3 commits June 6, 2026 08:20
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#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 <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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 <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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 <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor Author

Updated the Downgrade.yml caller to the strict SciML default allow-reresolve: false (reverting the earlier true). This makes the downgrade job rigorous: 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.

Local verification (Julia 1.10, GROUP=Core, isolated depot, deps-mode reproduced exactly): pinned only the [deps] compat 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) and ran Pkg.test(; allow_reresolve=false). The strict set resolved + instantiated + fully precompiled the entire stack (SciMLSensitivity, ModelingToolkit 11, Lux, Enzyme, Zygote, NonlinearSolve 4.x, RecursiveArrayTools, ADTypes, ForwardDiff 1.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.

Honesty note: the test scripts then ran for 30-50+ min at 100% CPU (the lotka_volterra.jl UDE does Adam 10k + LBFGS 5k iterations, twice), but on this shared machine the run was terminated externally (resource pressure) before the suite printed its final summary on two attempts. I therefore did not observe a printed Testing ... tests passed, so I am not claiming a test-suite PASS — only that the strict resolution/instantiate/precompile (the part allow-reresolve actually governs) succeeded cleanly. CI will provide the authoritative end-to-end strict result.

Ignore until reviewed by @ChrisRackauckas.

🤖 Generated with Claude Code

ChrisRackauckas and others added 3 commits June 7, 2026 02:00
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 <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rict 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 <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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 <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor Author

Pushed a follow-up commit removing the now-invalid allow-reresolve: input from Downgrade.yml. The reusable SciML/.github downgrade.yml workflow is being changed to always use allow_reresolve: false and to drop the allow-reresolve workflow_call input entirely (see SciML/.github PR). Once that .github PR merges and @v1 is retagged, any caller still passing allow-reresolve: would error with an invalid-input failure, so this line must go. Behavior is unchanged (it was already strict/false here).

@ChrisRackauckas ChrisRackauckas marked this pull request as ready for review June 7, 2026 19:16
@ChrisRackauckas ChrisRackauckas merged commit e338acc into SciML:main Jun 7, 2026
10 of 12 checks passed
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.

2 participants