Fix Downgrade CI: raise compat lower bounds to a resolvable, testable minimum set#64
Merged
ChrisRackauckas merged 3 commits intoJun 15, 2026
Conversation
ParametricMCPs (including its latest release, 0.1.17) caps ForwardDiff at 0.10 through a weak dependency, which makes it impossible to resolve a test environment containing NonlinearSolve >= 4.17 (requires ForwardDiff 1), NNlib >= 0.9.32, or CUDA >= 6. This is what made the GPU CI jobs on the dependabot update PR fail at version resolution, and it silently held the CPU test jobs back on DiffEqBase 6 / OrdinaryDiffEq 6 / CUDA 5 / ForwardDiff 0.10. Dropping the ParametricMCPs comparison benchmark lets the test environment resolve the full updated stack (CUDA 6.1, DiffEqBase 7.5, OrdinaryDiffEq 7.0, Optimization 5.6, ForwardDiff 1.4, NonlinearSolve 4.19, SciMLSensitivity 7.112, SciMLBase 3.18). The ComplementaritySolve.jl side of the benchmark testset is kept since it exercises forward solves and Zygote adjoints for both in-place and out-of-place problems. Core, Applications, and QA test groups all pass locally against the updated stack with no source changes required. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…able and testable The Downgrade workflow (added 2026-06-02 with the centralized workflows migration) has never passed: it resolves the manifest to the minimum versions allowed by [compat] and runs Pkg.test(allow_reresolve=false), and the old lower bounds (SciMLBase 1, NonlinearSolve 1, LinearSolve 2, Zygote 0.6, ...) were never mutually resolvable with the test dependencies, nor runtime-correct: - The source uses the SciMLOperators >= 1 FunctionOperator interface (5-arg matvec(w, v, u, p, t)). Any resolution with SciMLOperators 0.3/0.4 (i.e. LinearSolve 2.x or SciMLBase < 2.100) fails at runtime with MethodErrors in every FunctionOperator-based solve. - The minimal manifest pins SparseMatrixColorings 0.4.27, which forces CUDA 6; CUDA 6 needs NNlib >= 0.9.34 and DiffEqBase >= 6.215, which needs SciMLBase >= 2.143. - NNlib >= 0.9.32 requires ForwardDiff 1, and SciMLBase >= 2.102 requires Zygote >= 0.7 (>= 0.7.5 with ForwardDiff 1). - The test environment needs OrdinaryDiffEq >= 6.106 (DataStructures 0.19.5 / PreallocationTools 1.2 pins), which sets the floors for LinearSolve (3.61 via OrdinaryDiffEqDifferentiation 2.5+ with FastBroadcast 1.3), NonlinearSolve (4.12), SimpleNonlinearSolve (2.7), Polyester (0.7.18), FillArrays (1.13), PrecompileTools (1.2.1, since 1.3 is Julia 1.12+), and TruncatedStacktraces (1.4). - SciMLSensitivity needs >= 7.100 to work with FastBroadcast 1.3, which requires SciMLBase >= 2.147. All raised bounds only drop version combinations that could never have passed the test suite. Verified locally on Julia 1.10.11 with the workflow's downgrade resolution followed by Pkg.test(allow_reresolve=false): Core (212 pass), QA (5 pass), and Applications (41 pass) all green at the pinned minimum versions (SciMLBase 2.147.0, NonlinearSolve 4.12.0, LinearSolve 3.61.0, SimpleNonlinearSolve 2.9.0, SciMLOperators 1.22.0, Zygote 0.7.5, ForwardDiff 1.0.1, NNlib 0.9.34, FillArrays 1.13.0, Polyester 0.7.18, PATHSolver 1.4.0, CommonSolve 0.2.6, TruncatedStacktraces 1.4.0, PrecompileTools 1.2.1). test/Project.toml additionally allows CUDA 6, required by the pinned SparseMatrixColorings. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…bounds # Conflicts: # test/Project.toml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR should be ignored until reviewed by @ChrisRackauckas.
Problem
The Downgrade workflow fails on
mainfor all three groups (Core, QA, Applications). It was added on 2026-06-02 by the centralized-workflows migration and has never had a green run: the first completed run onmain(7425dea, 2026-06-02T16:58Z) failed, as has every run since (8bc824b2026-06-07,476fdbf2026-06-09). The boundary is therefore the introduction of the workflow itself, not registry drift or a repo commit: the minimum versions allowed by[compat]were never mutually resolvable with the test set, and the workflow is the first thing that ever checked them.First failing Core job on
main(2026-06-02):Root cause
The downgrade workflow resolves the package manifest to the minimum versions allowed by
[compat](Resolver.jl--min=@deps) and then runsPkg.test(; allow_reresolve=false), so the test sandbox cannot move those pins. The old lower bounds (SciMLBase = "1",NonlinearSolve = "1",LinearSolve = "2",Zygote = "0.6", ...) fail in several independent ways:FunctionOperatorcallbacks in the package use the 5-argumentmatvec(w, v, u, p, t)convention introduced in SciMLOperators 1.x; SciMLOperators 0.3/0.4 call the in-place op asop(v, u, p, t). I verified this empirically: at intermediate minimums (SciMLBase 2.54, LinearSolve 2.36.1 → SciMLOperators 0.3.12) the Core CPU suite throws 8MethodErrors in every FunctionOperator-based solve (IPM and adjoint paths). Reaching SciMLOperators 1.x requires SciMLBase ≥ 2.100 and LinearSolve ≥ 3.13.test/Project.tomlgetsCUDA = "4, 5, 6".SciMLBase.LinearAliasSpecifierwhile its compat still allows SciMLBase 2.54 (upstream under-constraint) — precompile failure at minimum versions; SciMLSensitivity ≥ 7.100 (needed to work with FastBroadcast 1.3) requires SciMLBase ≥ 2.147.0.10.x/0.6.xlower bounds were unreachable.910692a).Changes
Project.toml[compat]lower-bound raises:test/Project.toml:CUDA = "4, 5"→"4, 5, 6", and the ParametricMCPs test dependency removal cherry-picked from #63.These bounds only drop version combinations that could never have passed the test suite (either unresolvable together with the test dependencies, or runtime-broken against the SciMLOperators 0.x interface), so no working configuration is lost.
Verification (local, Julia 1.10.11)
mainwith the workflow's exact procedure (Resolver.jl--min=@depswith the workflow's skip list, thenPkg.test(; allow_reresolve=false)): same minimal pins as CI and the same unsatisfiable-requirements error.Pkg.test(; allow_reresolve=false)against that pinned manifest, run to completion for all three Downgrade CI groups (BACKEND_GROUP=CPU):Relationship to #63: that PR updates the upper bounds (CUDA 6, DiffEqBase 7, OrdinaryDiffEq 7, Optimization 5) for the latest stack; this PR fixes the lower bounds for Downgrade CI on
mainas it currently stands. They share only the ParametricMCPs-removal commit, so whichever lands first, the other rebases cleanly.🤖 Generated with Claude Code