From cfb44b7d529e863387f35e701d8c18850927a694 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sat, 20 Jun 2026 08:14:39 -0400 Subject: [PATCH 1/3] Cap ODEInterface to 0.4.8 to fix Julia 1.12+ solver loading ODEInterface 0.5.0 (the only registered 0.5.x) fails to load its solver libraries on Julia 1.12 and 1.13. `loadODESolvers()` does `@eval ODEInterface begin using ODEInterface_jll end` and then, within the same call frame, accesses the `ODEInterface_jll` global via `getproperty`. Under Julia 1.12's stricter binding-partition / world-age semantics the binding created by the `using` is only visible in a newer world age, so the in-frame access raises `UndefVarError(:ODEInterface_jll)`. All solvers then report a load error and `getAllMethodPtrs` throws `SolverODEnotLoaded`, erroring Core/algorithm_tests.jl on the `julia 1` and `julia pre` CI jobs (lts/1.10 was unaffected and stayed green). The upstream fix (luchr/ODEInterface.jl PR #36, tagged v0.5.1) switches to `import ODEInterface_jll` and `@eval getproperty(...)`, but v0.5.1 is not yet registered in General, so it cannot be selected by compat. ODEInterface 0.4.8 uses the older local gfortran build path, which loads correctly on Julia 1.12/1.13, so cap to it as the last working registered version. Verified locally: GROUP=Core `Pkg.test` passes on both Julia 1.12.6 and 1.10.11 (all Core test files green, exit 0). When ODEInterface 0.5.1 is registered, this cap can be relaxed back to allow 0.5.1+. 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 e3f84be..ce69331 100644 --- a/Project.toml +++ b/Project.toml @@ -22,7 +22,7 @@ ExplicitImports = "1" FunctionWrappers = "1.1.3" ModelingToolkit = "9, 10, 11" NonlinearSolve = "3, 4" -ODEInterface = "0.5" +ODEInterface = "0.4.8" ODEProblemLibrary = "1" Reexport = "1.2.2" SafeTestsets = "0.0.1, 0.1" From b2d88414b7992b04bed792870d6a5fc7d031a225 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sat, 20 Jun 2026 11:41:49 -0400 Subject: [PATCH 2/3] CI: install gfortran so the ODEInterface 0.4.8 source build succeeds Capping ODEInterface to 0.4.8 (to dodge the 0.5.0 Julia-1.12 _jll load bug) reintroduces 0.4.8's gfortran source build in deps/build.jl. On runners without gfortran the build errors with "Currently only gfortran is supported", which broke the QA (julia lts) job. Pass apt-packages: "gfortran" to the grouped-tests workflow so every test job has gfortran before building/testing. Verified locally on Julia 1.10: ODEInterface resolves to 0.4.8, the gfortran-built solvers load, a dopri5() solve returns Success, and the QA suite passes (Aqua 7 pass + pre-existing broken, JET pre-existing broken). Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/Tests.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/Tests.yml b/.github/workflows/Tests.yml index c36b34f..462aef6 100644 --- a/.github/workflows/Tests.yml +++ b/.github/workflows/Tests.yml @@ -15,4 +15,10 @@ concurrency: jobs: tests: uses: "SciML/.github/.github/workflows/grouped-tests.yml@v1" + with: + # ODEInterface 0.4.8 builds the Fortran solvers from source via gfortran + # in its deps/build.jl; without it the build errors with + # "Currently only gfortran is supported." The jll-based 0.5.x path that + # needs no gfortran is unusable until ODEInterface 0.5.1 is registered. + apt-packages: "gfortran" secrets: "inherit" From 503f51a854dda33c4f794e064b41acee4cdf4f37 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sat, 20 Jun 2026 11:43:19 -0400 Subject: [PATCH 3/3] CI: install gfortran in Downgrade too for the ODEInterface 0.4.8 build The Downgrade job also builds ODEInterface 0.4.8 from source (gfortran), which intermittently fails on runners lacking gfortran. Pass apt-packages: "gfortran" to downgrade.yml for the same reason as the main Tests workflow. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/Downgrade.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/Downgrade.yml b/.github/workflows/Downgrade.yml index 96bf0df..8218027 100644 --- a/.github/workflows/Downgrade.yml +++ b/.github/workflows/Downgrade.yml @@ -16,4 +16,8 @@ jobs: uses: "SciML/.github/.github/workflows/downgrade.yml@v1" with: mode: "deps" + # ODEInterface 0.4.8 compiles its Fortran solvers from source via + # gfortran in deps/build.jl; without it the build errors with + # "Currently only gfortran is supported." + apt-packages: "gfortran" secrets: "inherit"