From 1c452d36e2502b2964b8d3b69ba1a42eef9699d7 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Thu, 25 Jun 2026 13:47:29 -0400 Subject: [PATCH 1/4] QA: run_qa v1.6 form + ExplicitImports (root + sublibs) Convert the root QA env and all 7 lib/ sublibrary QA envs to the SciMLTesting 1.6 run_qa form with ExplicitImports enabled. Per QA env: rewrite qa.jl to `using SciMLTesting, , Test` + `run_qa(; explicit_imports = true, ...)`; bump the env's SciMLTesting [compat] to "1.6"; keep Aqua where ambiguities is disabled. ExplicitImports stays a transitive dep of SciMLTesting (not listed). ExplicitImports findings were fixed, not suppressed (0 hard FAIL, no broken markers): - no_implicit_imports: each sublibrary's blanket `using ` is made explicit (e.g. `using DiffEqBase: DiffEqBase, BVProblem, ...`, `using Catalyst: Catalyst, @reaction_network, ...`), exactly the ExplicitImports-recommended replacement; all 6 EI checks then pass. - all_qualified_accesses_are_public: JumpProblemLibrary and SDEProblemLibrary call the non-public `RuntimeGeneratedFunctions.init` (the package's documented init boilerplate), so `:init` is added to that check's ignore list. Genuine Aqua disables preserved: `ambiguities = false` everywhere (and on the root, whose ambiguities come only from the imported dependency tree), `persistent_tasks = false` for JumpProblemLibrary / SDEProblemLibrary. Root package Project.toml: add the missing `Pkg` [compat] entry (Aqua deps_compat extras check) and bump SciMLTesting [compat] to "1.6". Monorepo [sources]/develop wiring is unchanged. Verified on Julia 1.11 against released SciMLTesting 1.6.0: root QA 16/16 pass; each sublibrary's 6 ExplicitImports checks pass. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- Project.toml | 3 ++- lib/BVProblemLibrary/src/BVProblemLibrary.jl | 4 +++- lib/BVProblemLibrary/test/qa/Project.toml | 2 ++ lib/BVProblemLibrary/test/qa/qa.jl | 7 ++----- lib/DAEProblemLibrary/src/DAEProblemLibrary.jl | 3 ++- lib/DAEProblemLibrary/test/qa/Project.toml | 2 ++ lib/DAEProblemLibrary/test/qa/qa.jl | 7 ++----- lib/DDEProblemLibrary/src/DDEProblemLibrary.jl | 2 +- lib/DDEProblemLibrary/test/qa/Project.toml | 2 ++ lib/DDEProblemLibrary/test/qa/qa.jl | 7 ++----- lib/JumpProblemLibrary/src/JumpProblemLibrary.jl | 4 +++- lib/JumpProblemLibrary/test/qa/Project.toml | 2 ++ lib/JumpProblemLibrary/test/qa/qa.jl | 14 +++++++++----- .../src/NonlinearProblemLibrary.jl | 3 ++- lib/NonlinearProblemLibrary/test/qa/Project.toml | 2 ++ lib/NonlinearProblemLibrary/test/qa/qa.jl | 7 ++----- lib/ODEProblemLibrary/src/ODEProblemLibrary.jl | 8 ++++---- lib/ODEProblemLibrary/test/qa/Project.toml | 2 ++ lib/ODEProblemLibrary/test/qa/qa.jl | 7 ++----- lib/SDEProblemLibrary/src/SDEProblemLibrary.jl | 3 ++- lib/SDEProblemLibrary/test/qa/Project.toml | 2 ++ lib/SDEProblemLibrary/test/qa/qa.jl | 14 +++++++++----- test/qa/Project.toml | 4 +--- test/qa/qa.jl | 15 +++++---------- 24 files changed, 67 insertions(+), 59 deletions(-) diff --git a/Project.toml b/Project.toml index d4bd8f3..3bcc69b 100644 --- a/Project.toml +++ b/Project.toml @@ -28,8 +28,9 @@ DDEProblemLibrary = "0.1" JumpProblemLibrary = "1, 2.0" NonlinearProblemLibrary = "0.1" ODEProblemLibrary = "1" +Pkg = "1.10" SafeTestsets = "0.1" -SciMLTesting = "1" +SciMLTesting = "1.6" SDEProblemLibrary = "1" Test = "1.10" julia = "1.10" diff --git a/lib/BVProblemLibrary/src/BVProblemLibrary.jl b/lib/BVProblemLibrary/src/BVProblemLibrary.jl index 09067f5..2070818 100644 --- a/lib/BVProblemLibrary/src/BVProblemLibrary.jl +++ b/lib/BVProblemLibrary/src/BVProblemLibrary.jl @@ -1,6 +1,8 @@ module BVProblemLibrary -using DiffEqBase, Markdown, SpecialFunctions +using DiffEqBase: DiffEqBase, BVPFunction, BVProblem +using Markdown: Markdown +using SpecialFunctions: SpecialFunctions, erf include("linear.jl") include("nonlinear.jl") diff --git a/lib/BVProblemLibrary/test/qa/Project.toml b/lib/BVProblemLibrary/test/qa/Project.toml index 3b6a6c9..0303815 100644 --- a/lib/BVProblemLibrary/test/qa/Project.toml +++ b/lib/BVProblemLibrary/test/qa/Project.toml @@ -1,6 +1,7 @@ [deps] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" BVProblemLibrary = "ded0fc24-dfea-4565-b1d9-79c027d14d84" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -9,5 +10,6 @@ BVProblemLibrary = {path = "../.."} [compat] Aqua = "0.8" BVProblemLibrary = "0.1" +SciMLTesting = "1.6" Test = "1.10" julia = "1.10" diff --git a/lib/BVProblemLibrary/test/qa/qa.jl b/lib/BVProblemLibrary/test/qa/qa.jl index 36a36a3..d0cdafb 100644 --- a/lib/BVProblemLibrary/test/qa/qa.jl +++ b/lib/BVProblemLibrary/test/qa/qa.jl @@ -1,6 +1,3 @@ -using BVProblemLibrary -using Aqua +using SciMLTesting, BVProblemLibrary, Test -@testset "Aqua" begin - Aqua.test_all(BVProblemLibrary; ambiguities = false) -end +run_qa(BVProblemLibrary; explicit_imports = true, aqua_kwargs = (; ambiguities = false)) diff --git a/lib/DAEProblemLibrary/src/DAEProblemLibrary.jl b/lib/DAEProblemLibrary/src/DAEProblemLibrary.jl index 383121f..5d6644b 100644 --- a/lib/DAEProblemLibrary/src/DAEProblemLibrary.jl +++ b/lib/DAEProblemLibrary/src/DAEProblemLibrary.jl @@ -1,6 +1,7 @@ module DAEProblemLibrary -using DiffEqBase, Markdown +using DiffEqBase: DiffEqBase, DAEProblem +using Markdown: Markdown, @doc_str #DAE Example Problems export prob_dae_resrob, prob_dae_transamp diff --git a/lib/DAEProblemLibrary/test/qa/Project.toml b/lib/DAEProblemLibrary/test/qa/Project.toml index 5883ba1..47f8873 100644 --- a/lib/DAEProblemLibrary/test/qa/Project.toml +++ b/lib/DAEProblemLibrary/test/qa/Project.toml @@ -1,6 +1,7 @@ [deps] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" DAEProblemLibrary = "dfb8ca35-80a1-48ba-a605-84916a45b4f8" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -9,5 +10,6 @@ DAEProblemLibrary = {path = "../.."} [compat] Aqua = "0.8" DAEProblemLibrary = "0.1" +SciMLTesting = "1.6" Test = "1.10" julia = "1.10" diff --git a/lib/DAEProblemLibrary/test/qa/qa.jl b/lib/DAEProblemLibrary/test/qa/qa.jl index 0bb41bc..19f7b6c 100644 --- a/lib/DAEProblemLibrary/test/qa/qa.jl +++ b/lib/DAEProblemLibrary/test/qa/qa.jl @@ -1,6 +1,3 @@ -using DAEProblemLibrary -using Aqua +using SciMLTesting, DAEProblemLibrary, Test -@testset "Aqua" begin - Aqua.test_all(DAEProblemLibrary; ambiguities = false) -end +run_qa(DAEProblemLibrary; explicit_imports = true, aqua_kwargs = (; ambiguities = false)) diff --git a/lib/DDEProblemLibrary/src/DDEProblemLibrary.jl b/lib/DDEProblemLibrary/src/DDEProblemLibrary.jl index 3284271..efc1a67 100644 --- a/lib/DDEProblemLibrary/src/DDEProblemLibrary.jl +++ b/lib/DDEProblemLibrary/src/DDEProblemLibrary.jl @@ -1,6 +1,6 @@ module DDEProblemLibrary -using DiffEqBase +using DiffEqBase: DiffEqBase, DDEFunction, DDEProblem, remake # DDE Example Problems # examples with constant delays diff --git a/lib/DDEProblemLibrary/test/qa/Project.toml b/lib/DDEProblemLibrary/test/qa/Project.toml index 233d74a..2806b3c 100644 --- a/lib/DDEProblemLibrary/test/qa/Project.toml +++ b/lib/DDEProblemLibrary/test/qa/Project.toml @@ -1,6 +1,7 @@ [deps] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" DDEProblemLibrary = "f42792ee-6ffc-4e2a-ae83-8ee2f22de800" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -9,5 +10,6 @@ DDEProblemLibrary = {path = "../.."} [compat] Aqua = "0.8" DDEProblemLibrary = "0.1" +SciMLTesting = "1.6" Test = "1.10" julia = "1.10" diff --git a/lib/DDEProblemLibrary/test/qa/qa.jl b/lib/DDEProblemLibrary/test/qa/qa.jl index ce167c0..10c3fbb 100644 --- a/lib/DDEProblemLibrary/test/qa/qa.jl +++ b/lib/DDEProblemLibrary/test/qa/qa.jl @@ -1,6 +1,3 @@ -using DDEProblemLibrary -using Aqua +using SciMLTesting, DDEProblemLibrary, Test -@testset "Aqua" begin - Aqua.test_all(DDEProblemLibrary; ambiguities = false) -end +run_qa(DDEProblemLibrary; explicit_imports = true, aqua_kwargs = (; ambiguities = false)) diff --git a/lib/JumpProblemLibrary/src/JumpProblemLibrary.jl b/lib/JumpProblemLibrary/src/JumpProblemLibrary.jl index f5700b5..9263e67 100644 --- a/lib/JumpProblemLibrary/src/JumpProblemLibrary.jl +++ b/lib/JumpProblemLibrary/src/JumpProblemLibrary.jl @@ -1,6 +1,8 @@ module JumpProblemLibrary -using Catalyst +using Catalyst: Catalyst, @named, @parameters, @reaction_network, @species, Num, + Reaction, ReactionSystem, complete, default_t, hill, make_empty_network, + species, unknowns import RuntimeGeneratedFunctions RuntimeGeneratedFunctions.init(@__MODULE__) diff --git a/lib/JumpProblemLibrary/test/qa/Project.toml b/lib/JumpProblemLibrary/test/qa/Project.toml index 4d15c00..84983a9 100644 --- a/lib/JumpProblemLibrary/test/qa/Project.toml +++ b/lib/JumpProblemLibrary/test/qa/Project.toml @@ -1,6 +1,7 @@ [deps] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JumpProblemLibrary = "faf0f6d7-8cee-47cb-b27c-1eb80cef534e" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -9,5 +10,6 @@ JumpProblemLibrary = {path = "../.."} [compat] Aqua = "0.8" JumpProblemLibrary = "2" +SciMLTesting = "1.6" Test = "1.10" julia = "1.10" diff --git a/lib/JumpProblemLibrary/test/qa/qa.jl b/lib/JumpProblemLibrary/test/qa/qa.jl index 3d703ee..377d194 100644 --- a/lib/JumpProblemLibrary/test/qa/qa.jl +++ b/lib/JumpProblemLibrary/test/qa/qa.jl @@ -1,6 +1,10 @@ -using JumpProblemLibrary -using Aqua +using SciMLTesting, JumpProblemLibrary, Test -@testset "Aqua" begin - Aqua.test_all(JumpProblemLibrary; ambiguities = false, persistent_tasks = false) -end +# `RuntimeGeneratedFunctions.init(@__MODULE__)` qualified-accesses the non-public +# `RuntimeGeneratedFunctions.init` (the package's documented init boilerplate), so it +# is ignored for the public-API qualified-access check. +run_qa( + JumpProblemLibrary; explicit_imports = true, + aqua_kwargs = (; ambiguities = false, persistent_tasks = false), + ei_kwargs = (; all_qualified_accesses_are_public = (; ignore = (:init,))) +) diff --git a/lib/NonlinearProblemLibrary/src/NonlinearProblemLibrary.jl b/lib/NonlinearProblemLibrary/src/NonlinearProblemLibrary.jl index ae5c52f..397aa7d 100644 --- a/lib/NonlinearProblemLibrary/src/NonlinearProblemLibrary.jl +++ b/lib/NonlinearProblemLibrary/src/NonlinearProblemLibrary.jl @@ -1,6 +1,7 @@ module NonlinearProblemLibrary -using SciMLBase, LinearAlgebra +using SciMLBase: SciMLBase, NonlinearProblem +using LinearAlgebra: LinearAlgebra # Implementation of the 23 test problems in # [test_nonlin](https://people.sc.fsu.edu/~jburkardt/m_src/test_nonlin/test_nonlin.html) diff --git a/lib/NonlinearProblemLibrary/test/qa/Project.toml b/lib/NonlinearProblemLibrary/test/qa/Project.toml index 5ee5061..8b49b35 100644 --- a/lib/NonlinearProblemLibrary/test/qa/Project.toml +++ b/lib/NonlinearProblemLibrary/test/qa/Project.toml @@ -2,6 +2,7 @@ AllocCheck = "9b6a8646-10ed-4001-bbdc-1d2f46dfbb1a" Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" NonlinearProblemLibrary = "b7050fa9-e91f-4b37-bcee-a89a063da141" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -11,5 +12,6 @@ NonlinearProblemLibrary = {path = "../.."} AllocCheck = "0.2" Aqua = "0.8" NonlinearProblemLibrary = "0.1" +SciMLTesting = "1.6" Test = "1" julia = "1.10" diff --git a/lib/NonlinearProblemLibrary/test/qa/qa.jl b/lib/NonlinearProblemLibrary/test/qa/qa.jl index 5274826..5c4dc61 100644 --- a/lib/NonlinearProblemLibrary/test/qa/qa.jl +++ b/lib/NonlinearProblemLibrary/test/qa/qa.jl @@ -1,6 +1,3 @@ -using NonlinearProblemLibrary -using Aqua +using SciMLTesting, NonlinearProblemLibrary, Test -@testset "Aqua" begin - Aqua.test_all(NonlinearProblemLibrary; ambiguities = false) -end +run_qa(NonlinearProblemLibrary; explicit_imports = true, aqua_kwargs = (; ambiguities = false)) diff --git a/lib/ODEProblemLibrary/src/ODEProblemLibrary.jl b/lib/ODEProblemLibrary/src/ODEProblemLibrary.jl index 243c4d0..bf022ee 100644 --- a/lib/ODEProblemLibrary/src/ODEProblemLibrary.jl +++ b/lib/ODEProblemLibrary/src/ODEProblemLibrary.jl @@ -1,9 +1,9 @@ module ODEProblemLibrary -using DiffEqBase -using LinearAlgebra -using Markdown -using Random +using DiffEqBase: DiffEqBase, ODEFunction, ODEProblem +using LinearAlgebra: LinearAlgebra, Diagonal, I, SymTridiagonal, diagind, ldiv!, mul!, rmul! +using Markdown: Markdown, @doc_str +using Random: Random Random.seed!(100) diff --git a/lib/ODEProblemLibrary/test/qa/Project.toml b/lib/ODEProblemLibrary/test/qa/Project.toml index d52ff29..ff7b19a 100644 --- a/lib/ODEProblemLibrary/test/qa/Project.toml +++ b/lib/ODEProblemLibrary/test/qa/Project.toml @@ -1,6 +1,7 @@ [deps] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" ODEProblemLibrary = "fdc4e326-1af4-4b90-96e7-779fcce2daa5" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -9,5 +10,6 @@ ODEProblemLibrary = {path = "../.."} [compat] Aqua = "0.8" ODEProblemLibrary = "1" +SciMLTesting = "1.6" Test = "1.10" julia = "1.10" diff --git a/lib/ODEProblemLibrary/test/qa/qa.jl b/lib/ODEProblemLibrary/test/qa/qa.jl index cdfb145..f5b5bb5 100644 --- a/lib/ODEProblemLibrary/test/qa/qa.jl +++ b/lib/ODEProblemLibrary/test/qa/qa.jl @@ -1,6 +1,3 @@ -using ODEProblemLibrary -using Aqua +using SciMLTesting, ODEProblemLibrary, Test -@testset "Aqua" begin - Aqua.test_all(ODEProblemLibrary; ambiguities = false) -end +run_qa(ODEProblemLibrary; explicit_imports = true, aqua_kwargs = (; ambiguities = false)) diff --git a/lib/SDEProblemLibrary/src/SDEProblemLibrary.jl b/lib/SDEProblemLibrary/src/SDEProblemLibrary.jl index 4b577d5..b463129 100644 --- a/lib/SDEProblemLibrary/src/SDEProblemLibrary.jl +++ b/lib/SDEProblemLibrary/src/SDEProblemLibrary.jl @@ -1,6 +1,7 @@ module SDEProblemLibrary -using DiffEqBase, Markdown +using DiffEqBase: DiffEqBase, SDEFunction, SDEProblem +using Markdown: Markdown, @doc_str import RuntimeGeneratedFunctions RuntimeGeneratedFunctions.init(@__MODULE__) diff --git a/lib/SDEProblemLibrary/test/qa/Project.toml b/lib/SDEProblemLibrary/test/qa/Project.toml index 2cdb197..90732b1 100644 --- a/lib/SDEProblemLibrary/test/qa/Project.toml +++ b/lib/SDEProblemLibrary/test/qa/Project.toml @@ -1,6 +1,7 @@ [deps] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" SDEProblemLibrary = "c72e72a9-a271-4b2b-8966-303ed956772e" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -9,5 +10,6 @@ SDEProblemLibrary = {path = "../.."} [compat] Aqua = "0.8" SDEProblemLibrary = "1" +SciMLTesting = "1.6" Test = "1.10" julia = "1.10" diff --git a/lib/SDEProblemLibrary/test/qa/qa.jl b/lib/SDEProblemLibrary/test/qa/qa.jl index faf5dfb..396ed6d 100644 --- a/lib/SDEProblemLibrary/test/qa/qa.jl +++ b/lib/SDEProblemLibrary/test/qa/qa.jl @@ -1,6 +1,10 @@ -using SDEProblemLibrary -using Aqua +using SciMLTesting, SDEProblemLibrary, Test -@testset "Aqua" begin - Aqua.test_all(SDEProblemLibrary; ambiguities = false, persistent_tasks = false) -end +# `RuntimeGeneratedFunctions.init(@__MODULE__)` qualified-accesses the non-public +# `RuntimeGeneratedFunctions.init` (the package's documented init boilerplate), so it +# is ignored for the public-API qualified-access check. +run_qa( + SDEProblemLibrary; explicit_imports = true, + aqua_kwargs = (; ambiguities = false, persistent_tasks = false), + ei_kwargs = (; all_qualified_accesses_are_public = (; ignore = (:init,))) +) diff --git a/test/qa/Project.toml b/test/qa/Project.toml index 7037fbf..78e8c4e 100644 --- a/test/qa/Project.toml +++ b/test/qa/Project.toml @@ -1,6 +1,5 @@ [deps] DiffEqProblemLibrary = "a077e3f3-b75c-5d7f-a0c6-6bc4c8ec64a9" -ExplicitImports = "7d51a73a-1435-4ff3-83d9-f097790105c7" SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" @@ -10,8 +9,7 @@ DiffEqProblemLibrary = {path = "../.."} [compat] DiffEqProblemLibrary = "5" -ExplicitImports = "1" SafeTestsets = "0.0.1, 0.1" -SciMLTesting = "1" +SciMLTesting = "1.6" Test = "1.10" julia = "1.10" diff --git a/test/qa/qa.jl b/test/qa/qa.jl index 8c77d8f..454dc48 100644 --- a/test/qa/qa.jl +++ b/test/qa/qa.jl @@ -1,11 +1,6 @@ -# The root umbrella package's own test: it re-exports each sublibrary, -# so the test is that the whole thing builds with no implicit or stale -# explicit imports. -using DiffEqProblemLibrary -using ExplicitImports -using Test +using SciMLTesting, DiffEqProblemLibrary, Test -@testset "ExplicitImports" begin - @test check_no_implicit_imports(DiffEqProblemLibrary) === nothing - @test check_no_stale_explicit_imports(DiffEqProblemLibrary) === nothing -end +# The root umbrella package re-exports each sublibrary; it owns no methods of its own, +# so the reported method ambiguities all come from the imported dependency tree +# (DiffEqBase / SciMLBase / Catalyst), matching the `ambiguities = false` each sublib uses. +run_qa(DiffEqProblemLibrary; explicit_imports = true, aqua_kwargs = (; ambiguities = false)) From aceb07b233bde5b4ebbd4fc633de9af567e4e9cc Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Fri, 26 Jun 2026 15:29:29 -0400 Subject: [PATCH 2/4] QA: drop now-redundant RuntimeGeneratedFunctions.init public-API ignore SciMLTesting 1.7.0 runs the two public-API ExplicitImports checks (check_all_qualified_accesses_are_public / check_all_explicit_imports_are_public) only on Julia >= 1.11, and RuntimeGeneratedFunctions made `init` public (Base.ispublic(RuntimeGeneratedFunctions, :init) === true as of v0.5.21). The `RuntimeGeneratedFunctions.init(@__MODULE__)` boilerplate in JumpProblemLibrary and SDEProblemLibrary therefore no longer trips the qualified-access public-API check, so the per-repo `:init` ignore on `all_qualified_accesses_are_public` is now inert and is removed. Both qa.jl calls reduce to the plain `run_qa(...; explicit_imports = true, aqua_kwargs = ...)` form with no EI ignore-lists. Verified against the registered releases (no dev): - Julia 1.12 (>= 1.11, public checks run): SDEProblemLibrary EI runs 6/6 with the emptied ignore-list (SciMLTesting 1.7.0). JumpProblemLibrary uses the identical init pattern and already passed EI 6/6 on CI; init being public makes the ignore unnecessary. - Julia 1.10 (lts, public checks skipped by 1.7): SDE/Jump EI 4/4, root QA 14/14. SciMLTesting [compat] "1.6" already admits 1.7 (caret), so no compat bump needed. No `if VERSION < v"1.11"` ignore blocks existed to remove. No names required restoring -- the public-API ignore-lists are now fully empty. Note: the sublibrary QA (Julia 1) lanes still fail on a pre-existing, unrelated Aqua deps_compat issue (`Pkg` listed in [extras] without a [compat] bound in DAE/DDE/Jump/Nonlinear/ODE/SDE, identical on master); that is out of scope for this EI ignore sweep and left for a separate focused fix. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- lib/JumpProblemLibrary/test/qa/qa.jl | 6 +----- lib/SDEProblemLibrary/test/qa/qa.jl | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/lib/JumpProblemLibrary/test/qa/qa.jl b/lib/JumpProblemLibrary/test/qa/qa.jl index 377d194..ed40700 100644 --- a/lib/JumpProblemLibrary/test/qa/qa.jl +++ b/lib/JumpProblemLibrary/test/qa/qa.jl @@ -1,10 +1,6 @@ using SciMLTesting, JumpProblemLibrary, Test -# `RuntimeGeneratedFunctions.init(@__MODULE__)` qualified-accesses the non-public -# `RuntimeGeneratedFunctions.init` (the package's documented init boilerplate), so it -# is ignored for the public-API qualified-access check. run_qa( JumpProblemLibrary; explicit_imports = true, - aqua_kwargs = (; ambiguities = false, persistent_tasks = false), - ei_kwargs = (; all_qualified_accesses_are_public = (; ignore = (:init,))) + aqua_kwargs = (; ambiguities = false, persistent_tasks = false) ) diff --git a/lib/SDEProblemLibrary/test/qa/qa.jl b/lib/SDEProblemLibrary/test/qa/qa.jl index 396ed6d..0a4e0d8 100644 --- a/lib/SDEProblemLibrary/test/qa/qa.jl +++ b/lib/SDEProblemLibrary/test/qa/qa.jl @@ -1,10 +1,6 @@ using SciMLTesting, SDEProblemLibrary, Test -# `RuntimeGeneratedFunctions.init(@__MODULE__)` qualified-accesses the non-public -# `RuntimeGeneratedFunctions.init` (the package's documented init boilerplate), so it -# is ignored for the public-API qualified-access check. run_qa( SDEProblemLibrary; explicit_imports = true, - aqua_kwargs = (; ambiguities = false, persistent_tasks = false), - ei_kwargs = (; all_qualified_accesses_are_public = (; ignore = (:init,))) + aqua_kwargs = (; ambiguities = false, persistent_tasks = false) ) From 2db9cd47ce294f8c312a55e89597c1467dc43f6a Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sat, 27 Jun 2026 00:28:37 -0400 Subject: [PATCH 3/4] QA: SciMLTesting 1.7 floor + missing Pkg extras compat (green public-API EI) Finish the run_qa/ExplicitImports conversion against the now-released public-API surfaces (SciMLBase 3.27.0, DiffEqBase 7.6.0, ArrayInterface 7.26.0) and SciMLTesting 1.7.0 (which gates the two public-API EI checks -- all_qualified_accesses_are_public / all_explicit_imports_are_public -- to Julia >= 1.11). Compat: - Bump SciMLTesting "1.6" -> "1.7" in the root [compat] and every QA sub-env (root test/qa + all 7 lib/*/test/qa). "1.6" already admits 1.7.0 by caret, but the public-API checks are unconditional in 1.6 and only gained the >= 1.11 gate in 1.7; pinning the floor at 1.7 guarantees the gating version so the LTS (1.10) lane skips the backport-incompatible public checks instead of spuriously flagging backported-public names. QA fix (the QA / Julia 1 reds): - Add the missing `Pkg = "1.10"` [compat] entry to the six sublibraries that list `Pkg` in [extras] without a [compat] bound (DAE/DDE/Jump/ Nonlinear/ODE/SDE). Aqua's deps_compat extras check (Aqua 0.8 via SciMLTesting) hard-fails on `Pkg` extras lacking compat; BVProblemLibrary already carries this entry and its QA lane was the only green one. This matches BVProblemLibrary exactly -- a real missing bound, not a silenced check. No EI ignore-lists, `ei_broken`, or `VERSION < v"1.11"` blocks exist to strip (the qa.jl files were already in the bare run_qa form), and no `DiffEqBase.X` qualified accesses of SciMLBase-owned public names exist in src/ to migrate -- the source uses explicit imports (`using DiffEqBase: ODEProblem`, ...) which pass all_explicit_imports_are_public unchanged. Verified against the registered releases (Pkg resolve, no dev of deps): Julia 1.12 (public checks run): root 16/16, ODEProblemLibrary 16/16, SDEProblemLibrary 15/15, NonlinearProblemLibrary 16/16, DAEProblemLibrary 16/16, JumpProblemLibrary 15/15 -- all green, 0 Fail. Julia 1.10 (public checks skipped by the 1.7 gate): ODEProblemLibrary 14/14 (= 16 minus the 2 skipped public checks); root EI runs 4/4. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- Project.toml | 2 +- lib/BVProblemLibrary/test/qa/Project.toml | 2 +- lib/DAEProblemLibrary/Project.toml | 1 + lib/DAEProblemLibrary/test/qa/Project.toml | 2 +- lib/DDEProblemLibrary/Project.toml | 1 + lib/DDEProblemLibrary/test/qa/Project.toml | 2 +- lib/JumpProblemLibrary/Project.toml | 1 + lib/JumpProblemLibrary/test/qa/Project.toml | 2 +- lib/NonlinearProblemLibrary/Project.toml | 1 + lib/NonlinearProblemLibrary/test/qa/Project.toml | 2 +- lib/ODEProblemLibrary/Project.toml | 1 + lib/ODEProblemLibrary/test/qa/Project.toml | 2 +- lib/SDEProblemLibrary/Project.toml | 1 + lib/SDEProblemLibrary/test/qa/Project.toml | 2 +- test/qa/Project.toml | 2 +- 15 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Project.toml b/Project.toml index 3bcc69b..b68846a 100644 --- a/Project.toml +++ b/Project.toml @@ -30,7 +30,7 @@ NonlinearProblemLibrary = "0.1" ODEProblemLibrary = "1" Pkg = "1.10" SafeTestsets = "0.1" -SciMLTesting = "1.6" +SciMLTesting = "1.7" SDEProblemLibrary = "1" Test = "1.10" julia = "1.10" diff --git a/lib/BVProblemLibrary/test/qa/Project.toml b/lib/BVProblemLibrary/test/qa/Project.toml index 0303815..7245dbb 100644 --- a/lib/BVProblemLibrary/test/qa/Project.toml +++ b/lib/BVProblemLibrary/test/qa/Project.toml @@ -10,6 +10,6 @@ BVProblemLibrary = {path = "../.."} [compat] Aqua = "0.8" BVProblemLibrary = "0.1" -SciMLTesting = "1.6" +SciMLTesting = "1.7" Test = "1.10" julia = "1.10" diff --git a/lib/DAEProblemLibrary/Project.toml b/lib/DAEProblemLibrary/Project.toml index 1492602..28555f9 100644 --- a/lib/DAEProblemLibrary/Project.toml +++ b/lib/DAEProblemLibrary/Project.toml @@ -9,6 +9,7 @@ Markdown = "d6f4376e-aef5-505a-96c1-9c027394607a" [compat] DiffEqBase = "6, 7" Markdown = "1.10" +Pkg = "1.10" SafeTestsets = "0.1" Test = "1.10" julia = "1.10" diff --git a/lib/DAEProblemLibrary/test/qa/Project.toml b/lib/DAEProblemLibrary/test/qa/Project.toml index 47f8873..1c0a85d 100644 --- a/lib/DAEProblemLibrary/test/qa/Project.toml +++ b/lib/DAEProblemLibrary/test/qa/Project.toml @@ -10,6 +10,6 @@ DAEProblemLibrary = {path = "../.."} [compat] Aqua = "0.8" DAEProblemLibrary = "0.1" -SciMLTesting = "1.6" +SciMLTesting = "1.7" Test = "1.10" julia = "1.10" diff --git a/lib/DDEProblemLibrary/Project.toml b/lib/DDEProblemLibrary/Project.toml index 6621d19..8751596 100644 --- a/lib/DDEProblemLibrary/Project.toml +++ b/lib/DDEProblemLibrary/Project.toml @@ -7,6 +7,7 @@ DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e" [compat] DiffEqBase = "6, 7" +Pkg = "1.10" SafeTestsets = "0.1" Test = "1.10" julia = "1.10" diff --git a/lib/DDEProblemLibrary/test/qa/Project.toml b/lib/DDEProblemLibrary/test/qa/Project.toml index 2806b3c..feb7f93 100644 --- a/lib/DDEProblemLibrary/test/qa/Project.toml +++ b/lib/DDEProblemLibrary/test/qa/Project.toml @@ -10,6 +10,6 @@ DDEProblemLibrary = {path = "../.."} [compat] Aqua = "0.8" DDEProblemLibrary = "0.1" -SciMLTesting = "1.6" +SciMLTesting = "1.7" Test = "1.10" julia = "1.10" diff --git a/lib/JumpProblemLibrary/Project.toml b/lib/JumpProblemLibrary/Project.toml index f595ccd..ea7e7fb 100644 --- a/lib/JumpProblemLibrary/Project.toml +++ b/lib/JumpProblemLibrary/Project.toml @@ -8,6 +8,7 @@ RuntimeGeneratedFunctions = "7e49a35a-f44a-4d26-94aa-eba1b4ca6b47" [compat] Catalyst = "16" +Pkg = "1.10" RuntimeGeneratedFunctions = "0.5" SafeTestsets = "0.1" Test = "1.10" diff --git a/lib/JumpProblemLibrary/test/qa/Project.toml b/lib/JumpProblemLibrary/test/qa/Project.toml index 84983a9..eca6aca 100644 --- a/lib/JumpProblemLibrary/test/qa/Project.toml +++ b/lib/JumpProblemLibrary/test/qa/Project.toml @@ -10,6 +10,6 @@ JumpProblemLibrary = {path = "../.."} [compat] Aqua = "0.8" JumpProblemLibrary = "2" -SciMLTesting = "1.6" +SciMLTesting = "1.7" Test = "1.10" julia = "1.10" diff --git a/lib/NonlinearProblemLibrary/Project.toml b/lib/NonlinearProblemLibrary/Project.toml index bc377fc..e72686a 100644 --- a/lib/NonlinearProblemLibrary/Project.toml +++ b/lib/NonlinearProblemLibrary/Project.toml @@ -8,6 +8,7 @@ SciMLBase = "0bca4576-84f4-4d90-8ffe-ffa030f20462" [compat] LinearAlgebra = "1.6" +Pkg = "1.10" SafeTestsets = "0.1" SciMLBase = "2, 3" Test = "1" diff --git a/lib/NonlinearProblemLibrary/test/qa/Project.toml b/lib/NonlinearProblemLibrary/test/qa/Project.toml index 8b49b35..053f135 100644 --- a/lib/NonlinearProblemLibrary/test/qa/Project.toml +++ b/lib/NonlinearProblemLibrary/test/qa/Project.toml @@ -12,6 +12,6 @@ NonlinearProblemLibrary = {path = "../.."} AllocCheck = "0.2" Aqua = "0.8" NonlinearProblemLibrary = "0.1" -SciMLTesting = "1.6" +SciMLTesting = "1.7" Test = "1" julia = "1.10" diff --git a/lib/ODEProblemLibrary/Project.toml b/lib/ODEProblemLibrary/Project.toml index 7d70379..717daae 100644 --- a/lib/ODEProblemLibrary/Project.toml +++ b/lib/ODEProblemLibrary/Project.toml @@ -12,6 +12,7 @@ Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" DiffEqBase = "6, 7" LinearAlgebra = "1.10" Markdown = "1.10" +Pkg = "1.10" Random = "1.10" SafeTestsets = "0.1" Test = "1.10" diff --git a/lib/ODEProblemLibrary/test/qa/Project.toml b/lib/ODEProblemLibrary/test/qa/Project.toml index ff7b19a..5b386cd 100644 --- a/lib/ODEProblemLibrary/test/qa/Project.toml +++ b/lib/ODEProblemLibrary/test/qa/Project.toml @@ -10,6 +10,6 @@ ODEProblemLibrary = {path = "../.."} [compat] Aqua = "0.8" ODEProblemLibrary = "1" -SciMLTesting = "1.6" +SciMLTesting = "1.7" Test = "1.10" julia = "1.10" diff --git a/lib/SDEProblemLibrary/Project.toml b/lib/SDEProblemLibrary/Project.toml index 61614d8..8a37076 100644 --- a/lib/SDEProblemLibrary/Project.toml +++ b/lib/SDEProblemLibrary/Project.toml @@ -11,6 +11,7 @@ SciMLBase = "0bca4576-84f4-4d90-8ffe-ffa030f20462" [compat] DiffEqBase = "6, 7" Markdown = "1.10" +Pkg = "1.10" RuntimeGeneratedFunctions = "0.5" SafeTestsets = "0.1" SciMLBase = "2.0.1, 3" diff --git a/lib/SDEProblemLibrary/test/qa/Project.toml b/lib/SDEProblemLibrary/test/qa/Project.toml index 90732b1..c48efef 100644 --- a/lib/SDEProblemLibrary/test/qa/Project.toml +++ b/lib/SDEProblemLibrary/test/qa/Project.toml @@ -10,6 +10,6 @@ SDEProblemLibrary = {path = "../.."} [compat] Aqua = "0.8" SDEProblemLibrary = "1" -SciMLTesting = "1.6" +SciMLTesting = "1.7" Test = "1.10" julia = "1.10" diff --git a/test/qa/Project.toml b/test/qa/Project.toml index 78e8c4e..31a8d0e 100644 --- a/test/qa/Project.toml +++ b/test/qa/Project.toml @@ -10,6 +10,6 @@ DiffEqProblemLibrary = {path = "../.."} [compat] DiffEqProblemLibrary = "5" SafeTestsets = "0.0.1, 0.1" -SciMLTesting = "1.6" +SciMLTesting = "1.7" Test = "1.10" julia = "1.10" From 4c37ef5e4fa8c7b0034556ce625b59004af24953 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sun, 28 Jun 2026 18:21:50 -0400 Subject: [PATCH 4/4] QA: develop qa env [sources] on Julia <1.11 so checks test the working tree MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The root QA env (test/qa) pins `DiffEqProblemLibrary = {path = "../.."}` in [sources], but on Julia <1.11 Pkg ignores [sources]; `activate_qa_env`'s plain `Pkg.activate` + `Pkg.instantiate` therefore resolved DiffEqProblemLibrary to the registered release v5.2.1 instead of the working copy. The run_qa conversion runs `Aqua.test_all` (which the old qa.jl did not), so its deps_compat extras check ran against the registry Project.toml — which lacks the `Pkg` extras [compat] entry this branch adds — failing the Downgrade Core (lts/1.10) lane while the fix on the branch went unexercised. Develop the qa env's local path [sources] on Julia <1.11 before instantiating, mirroring the existing sublibrary branch in this file, so the QA checks run against the working tree (where `Pkg = "1.10"` is already declared). Co-Authored-By: Chris Rackauckas --- test/runtests.jl | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/test/runtests.jl b/test/runtests.jl index afc51fa..5465d62 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -5,13 +5,26 @@ using SciMLTesting const GROUP = current_group() const LIB_DIR = joinpath(dirname(@__DIR__), "lib") -# The root umbrella package's own QA env activation. It is kept as an explicit -# helper (rather than `run_tests`'s `env =` group spec) so the activate/instantiate -# behavior — in particular NOT `Pkg.develop`-ing the root or transitively developing -# the env's `[sources]` on Julia < 1.11 — stays byte-for-byte identical to the -# previous hand-written runtests.jl. +# The root umbrella package's own QA env activation. On Julia < 1.11 the env's +# `[sources]` table is ignored by Pkg, so `DiffEqProblemLibrary = {path = "../.."}` +# would silently resolve to the registered release instead of the working copy — +# meaning the QA checks (Aqua.test_all etc.) run against the registry version, not +# the branch under CI. Develop the env's local path sources first, mirroring the +# sublibrary branch below, so the checks test the working tree. function activate_qa_env() - Pkg.activate(joinpath(@__DIR__, "qa")) + qa_dir = joinpath(@__DIR__, "qa") + Pkg.activate(qa_dir) + if VERSION < v"1.11.0-DEV.0" + toml = Pkg.TOML.parsefile(joinpath(qa_dir, "Project.toml")) + specs = Pkg.PackageSpec[] + for (_, source_spec) in get(toml, "sources", Dict()) + if source_spec isa Dict && haskey(source_spec, "path") + dep_path = normpath(joinpath(qa_dir, source_spec["path"])) + isdir(dep_path) && push!(specs, Pkg.PackageSpec(path = dep_path)) + end + end + isempty(specs) || Pkg.develop(specs) + end return Pkg.instantiate() end