Fix Downgrade-CI stale floors (ODE, SimpleOptimization, QuadDIRECT) + CCMO test detection#1234
Merged
ChrisRackauckas merged 1 commit intoJun 24, 2026
Conversation
… CCMO test detection Four independent fixes for red lanes on the master Downgrade Sublibraries run. Each reproduced locally with the real julia-actions/julia-downgrade-compat@v2 (Resolver.jl --min=@alldeps, julia=lts) merged-test-deps path, then verified with Pkg.test on Julia lts (1.10). - OptimizationODE: the OrdinaryDiffEq* solver subpackages had `1` floors whose registry compat permits a modern OrdinaryDiffEqCore but whose code does not (`get_fsalfirstlast`/`namify`/`alias_f`/`_process_verbose_param` skews). Raise the OrdinaryDiffEq* floors to `2`, SciMLBase to `3`, DiffEqBase to `7` so the downgrade resolves onto the modern, mutually-consistent stack (the same one the max resolution already uses). Verified: Core passes at the downgrade floor (Core 4.3.0 / SciMLBase 3.1.0 / DiffEqBase 7.0.0) and at max. - SimpleOptimization: `SimpleNonlinearSolve = "1, 2"` let the downgrade pick 1.8.0, which references `AbstractNonlinearTerminationMode` removed from the resolved DiffEqBase -> precompile UndefVarError. Raise floor to `2`. Verified. - OptimizationQuadDIRECT: no QuadDIRECT compat entry at all, so the downgrade floored to QuadDIRECT 0.0.1, whose split_insert! throws `AssertionError: xsplit[1] < xsplit[2] < xsplit[3]`. Add `QuadDIRECT = "0.1.2"`. Verified: downgrade resolves to 0.1.2 -> tests pass. - OptimizationMetaheuristics: the CCMO special-case in the multi-objective test used a stringified type-name comparison that no longer matches (Metaheuristics type-printing changed to fully-qualified names), so CCMO wrongly took the `use_initial=true` path and hit `type CCMO has no field N`. Failed at both downgrade and max. Detect CCMO by type (`alg.parameters isa Metaheuristics.CCMO`). Verified at both max and downgrade. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9d010f1 to
3661d66
Compare
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.
Ignore until reviewed by @ChrisRackauckas.
Fixes red lanes on the master Downgrade Sublibraries run. Each reproduced locally with the real
julia-actions/julia-downgrade-compat@v2(Resolver.jl--min=@alldeps, julia=lts) merged-test-deps path, then verified withPkg.teston Julia lts (1.10).1. OptimizationODE — coordinated stale floors
OrdinaryDiffEq*subpackages had1floors whose registry compat permits a modernOrdinaryDiffEqCorebut whose code does not; the downgrade hit, in sequence:no method matching get_fsalfirstlast(::Vern6Cache,...)(Verner 1.0.0),UndefVarError: namify not defined(Rosenbrock 1.5.0), thentype Nothing has no field alias_f, thenno method matching _process_verbose_param(::NonlinearVerbosity{...}). RaiseOrdinaryDiffEq* = "2",SciMLBase = "3",DiffEqBase = "7"-> resolves onto the modern stack (the one max already uses). Verified (lts): downgrade -> Core 4.3.0 / SciMLBase 3.1.0 / DiffEqBase 7.0.0 -> tests pass; max also still passes.2. SimpleOptimization — stale
SimpleNonlinearSolvefloor"1, 2"picked SimpleNonlinearSolve 1.8.0 ->AbstractNonlinearTerminationModeremoved from resolved DiffEqBase -> precompileUndefVarError. Raise floor to"2". Verified: downgrade -> SimpleNonlinearSolve 2.5.0 -> tests pass.3. OptimizationQuadDIRECT — missing compat floor
No
QuadDIRECTcompat entry at all, so the downgrade floored to QuadDIRECT 0.0.1, whosesplit_insert!throwsAssertionError: xsplit[1] < xsplit[2] < xsplit[3]. AddQuadDIRECT = "0.1.2". Verified: downgrade -> QuadDIRECT 0.1.2 -> tests pass.4. OptimizationMetaheuristics — broken CCMO detection (red at downgrade AND max)
The multi-objective test special-cased CCMO (no
Non its own parameters ->use_initialseeding inapplicable) viaalg_name == "Metaheuristics.Algorithm{CCMO{NSGA2}}". Metaheuristics now prints the type fully qualified, so the string never matches; CCMO took theuse_initial=truebranch ->type CCMO has no field N(6 errored every problem), failing at the latest Metaheuristics 3.5.0 too. Replace with a robustalg.parameters isa Metaheuristics.CCMOcheck. Verified at both max and downgrade.Not in this PR (recorded, no change)
Unsatisfiablein--min=@alldeps, driven by Mooncake in merged test deps (removing Mooncake -> resolves). Fleet-wide Resolver.jl wall, not[compat]-fixable.SymbolicAnalysis 0.3(caps Symbolics <=6) cannot coexist withSymbolics 7— unsatisfiable for Pkg too;skip: SymbolicAnalysisonly skips its compat-downgrade, not its graph presence. Blocked on SciML/SymbolicAnalysis.jl gaining Symbolics 7 support (separate upstream PR). OptimizationBase also has a malformed test target (6 regular[deps]intargets.testbut not[extras], rejected byPkg.test) — left out since it can't be verified green while SymbolicAnalysis blocks resolution.smcsd) — infra flake, passes locally.🤖 Generated with Claude Code