Downgrade: raise SciMLBase floor to 3 (LTS precompile method collision with SciMLBase 2.x)#10
Merged
ChrisRackauckas merged 2 commits intoJun 15, 2026
Conversation
… breaks LTS precompile) The Downgrade workflow (Julia 1.10 LTS floor) failed because the SciMLBase compat floor of "2.152" allowed SciMLBase 2.x. SciMLBase 2.x still defines RecursiveArrayTools.tuples(::DEIntegrator) and tuples(::AbstractTimeseriesSolution) in its integrator/solution interface; SciMLIterators imports RecursiveArrayTools.tuples and redefines those exact methods (the utilities were extracted out of SciMLBase into this package). At SciMLBase 2.x this is a method overwrite, which is fatal during module precompilation on Julia 1.10: ERROR: Method overwriting is not permitted during Module precompilation. The half-precompiled module then loses later-defined exports, so the tests fail with "UndefVarError: TimeChoiceIterator not defined". SciMLBase 3.x removed those tuples(::DEIntegrator / ::AbstractTimeseriesSolution) definitions, so there is no collision. SciMLIterators' source therefore requires SciMLBase 3. Raising the floor to "3" forces the co-required OrdinaryDiffEq floor to "7" (OrdinaryDiffEq 7 requires SciMLBase 3) and RecursiveArrayTools to "4" (OrdinaryDiffEq 7 needs RecursiveArrayTools 4.x); SciMLBase 2.x / OrdinaryDiffEq 6 are genuinely uninstallable for a SciMLBase-3-only package, so these are real minimums. Verified on Julia 1.10 (LTS downgrade floor) with the actual julia-actions/julia-downgrade-compat (Resolver.jl --min=@deps): the merged test env resolves to SciMLBase 3.0.0, OrdinaryDiffEq 7.0.0, RecursiveArrayTools 4.0.0, and the full downgrade test suite (Pkg.test) now passes; previously it errored with the precompile method overwrite leading to UndefVarError. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
# Conflicts: # 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.
Problem
The
Downgradeworkflow (Julia 1.10, the LTS floor) failed. The latest failing runreported an Unsatisfiable on
OrdinaryDiffEqin the 06-10 log, but after the recentregistry changes the resolve itself now succeeds — and the downgrade is currently red for
a deeper reason that the old floors were masking.
The compat declared
SciMLBase = "2.152, 3", so the downgrade pins SciMLBase to itsfloor in the
2.xrange. SciMLBase 2.x still definesRecursiveArrayTools.tuples(::DEIntegrator)andtuples(::AbstractTimeseriesSolution)(in its integrator/solution interface). SciMLIterators does
import RecursiveArrayTools: tuplesand redefines those exact methods (the utilities were extracted out of SciMLBase into
this package). At SciMLBase 2.x this is a method overwrite, which is fatal during module
precompilation on Julia 1.10:
The half-precompiled module then drops later-defined exports, so the test suite fails with
UndefVarError: TimeChoiceIterator not defined.SciMLBase 3.xremoved thosetuples(::DEIntegrator / ::AbstractTimeseriesSolution)definitions, so there is no collision — at latest versions SciMLIterators precompiles and
tests pass (including on Julia 1.10). SciMLIterators' source therefore genuinely requires
SciMLBase 3.
Fix
Raise the floors to the SciMLBase-3-only minimums:
SciMLBase = "3"(2.x is incompatible with this package's source)OrdinaryDiffEq = "7"(OrdinaryDiffEq 7 ⟺ SciMLBase 3; OrdinaryDiffEq 6 pairs with SciMLBase 2 and is uninstallable here)RecursiveArrayTools = "4"(OrdinaryDiffEq 7 requires RecursiveArrayTools 4.x; the old"3"floor is unreachable)No upper bound is touched. Each new floor is a real minimum: the lower versions are
genuinely uninstallable for a SciMLBase-3-only package.
Verification
Ran the actual
julia-actions/julia-downgrade-compat(Resolver.jl --min=@deps) onJulia 1.10 (the LTS downgrade floor):
Pkg.teston that downgraded environment passes ("Testing SciMLIterators tests passed").2.152floor allowing SciMLBase 2.152.0) the samePkg.testerroredwith the precompile method overwrite →
UndefVarError: TimeChoiceIterator not defined.Note: SciMLBase still defining these
tuplesmethods in the 2.x series (which SciMLIteratorsre-defines) is the underlying source-level collision; raising the floor to SciMLBase 3 sidesteps
it because 3.x no longer defines them.
This PR should be ignored until reviewed by @ChrisRackauckas.
🤖 Generated with Claude Code