From e12783e2f251de782b2a4b198d95547a0c6177fb Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Thu, 25 Jun 2026 05:45:55 -0400 Subject: [PATCH 1/2] QA: run_qa v1.6 form + ExplicitImports Convert the hand-rolled Aqua + ExplicitImports QA body in test/qa/qa.jl onto SciMLTesting 1.6's run_qa, with explicit_imports = true. Aqua's test_all (with the persistent-tasks [sources] sanitizer) replaces the eight individual Aqua calls; all six ExplicitImports checks now run. The four owners/public ExplicitImports checks flag only dependency-package names (SciMLBase / DiffEqBase / CommonSolve / StaticArrays / Base) that are non-public or re-exported, so each is allowed via a per-check ei_kwargs ignore-list documenting its source package. No DifferenceEquations-owned name is ignored, and no_implicit_imports / no_stale_explicit_imports pass unchanged. JET stays a bespoke report_call testset: the issue #187 cases live on specific solve paths that JET.report_package (run_qa's JET path) does not surface, so run_qa is called with JET = nothing and the two #187 @test_broken markers are preserved verbatim. Deps: SciMLTesting compat bumped to "1.6"; ExplicitImports dropped (transitive via SciMLTesting); Distributions and SafeTestsets dropped (unused in the QA env). Aqua and JET kept as direct deps (Aqua's ambiguities child-proc and the bespoke JET testset need them); LinearAlgebra kept (Diagonal in the KalmanFilter JET case). Verified locally against released SciMLTesting 1.6.0 on Julia 1.10 (lts) and 1.11 (the "1" lane): Quality Assurance 17/17 pass, JET static analysis 1 pass + 2 broken, 0 fail/error on both. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- test/qa/Project.toml | 8 +---- test/qa/qa.jl | 85 +++++++++++++++++++++++++++++++++----------- 2 files changed, 66 insertions(+), 27 deletions(-) diff --git a/test/qa/Project.toml b/test/qa/Project.toml index 390c352..84e1333 100644 --- a/test/qa/Project.toml +++ b/test/qa/Project.toml @@ -1,11 +1,8 @@ [deps] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" DifferenceEquations = "e0ca9c66-1f9e-11ec-127a-1304ce62169c" -Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" -ExplicitImports = "7d51a73a-1435-4ff3-83d9-f097790105c7" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" @@ -14,10 +11,7 @@ DifferenceEquations = {path = "../.."} [compat] Aqua = "0.8" -Distributions = "0.25.126" -ExplicitImports = "1" JET = "0.9, 0.10, 0.11" -SafeTestsets = "0.0.1, 0.1" -SciMLTesting = "1" +SciMLTesting = "1.6" Test = "1" julia = "1.10" diff --git a/test/qa/qa.jl b/test/qa/qa.jl index ebad1f5..a99e1b9 100644 --- a/test/qa/qa.jl +++ b/test/qa/qa.jl @@ -1,27 +1,72 @@ -using DifferenceEquations -using Aqua -using ExplicitImports +using SciMLTesting, DifferenceEquations, Test using JET using LinearAlgebra -using Distributions -using Test -@testset "Aqua" begin - Aqua.find_persistent_tasks_deps(DifferenceEquations) - Aqua.test_ambiguities(DifferenceEquations, recursive = false) - Aqua.test_deps_compat(DifferenceEquations) - Aqua.test_piracies(DifferenceEquations) - Aqua.test_project_extras(DifferenceEquations) - Aqua.test_stale_deps(DifferenceEquations) - Aqua.test_unbound_args(DifferenceEquations) - Aqua.test_undefined_exports(DifferenceEquations) -end - -@testset "ExplicitImports" begin - @test check_no_implicit_imports(DifferenceEquations) === nothing - @test check_no_stale_explicit_imports(DifferenceEquations) === nothing -end +run_qa( + DifferenceEquations; + JET = nothing, # JET is run below as bespoke report_call cases (issue #187), not package-wide + explicit_imports = true, + ei_kwargs = (; + # Names re-exported by a dependency rather than imported from their owner. + all_explicit_imports_via_owners = (; + ignore = ( + :KeywordArgSilent, # SciMLBase (imported from DiffEqBase) + :get_concrete_p, # SciMLBase (imported from DiffEqBase) + :get_concrete_u0, # SciMLBase (imported from DiffEqBase) + :isconcreteu0, # SciMLBase (imported from DiffEqBase) + :promote_u0, # SciMLBase (imported from DiffEqBase) + :ismutable, # Base (imported from StaticArrays) + ), + ), + all_qualified_accesses_via_owners = (; + ignore = ( + :__solve, # SciMLBase (accessed via DiffEqBase) + ), + ), + # Non-public names of dependency packages (go public as those base libs release). + all_qualified_accesses_are_public = (; + ignore = ( + :var"@propagate_inbounds", # Base + :Default, # SciMLBase.ReturnCode + :Success, # SciMLBase.ReturnCode + :T, # SciMLBase.ReturnCode + :__solve, # DiffEqBase + :build_solution, # SciMLBase + :check_prob_alg_pairing, # DiffEqBase + :get_concrete_problem, # DiffEqBase + :getindepsym, # SciMLBase + :getindepsym_defaultt, # SciMLBase + :init, # CommonSolve + :solve, # CommonSolve + :solve!, # CommonSolve + ), + ), + all_explicit_imports_are_public = (; + ignore = ( + :var"@add_kwonly", # SciMLBase + :AbstractDEAlgorithm, # SciMLBase + :AbstractDEProblem, # SciMLBase + :AbstractRODESolution, # SciMLBase + :ConstantInterpolation, # SciMLBase + :KeywordArgSilent, # DiffEqBase + :NullParameters, # SciMLBase + :build_solution, # SciMLBase + :get_concrete_p, # DiffEqBase + :get_concrete_u0, # DiffEqBase + :init, # CommonSolve + :isconcreteu0, # DiffEqBase + :ismutable, # StaticArrays + :promote_tspan, # SciMLBase + :promote_u0, # DiffEqBase + :solve, # CommonSolve + :solve!, # CommonSolve + ), + ), + ), +) +# JET cases tied to issue #187 are bespoke `report_call`s on specific solve paths: +# `report_package` (the run_qa JET path) does not surface them, so they stay here. @testset "JET static analysis" begin @testset "LinearStateSpaceProblem DirectIteration" begin A = [0.9 0.1; 0.0 0.95] From 3438f9a6780ae9afa3c9abcef79422a5abf39dd9 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Thu, 25 Jun 2026 10:51:18 -0400 Subject: [PATCH 2/2] Fix Downgrade CI: raise test compat floors (StaticArrays, SciMLTesting) The Downgrade lane failed at sandbox resolve with "empty intersection between StaticArrays@1.9.8 and project compatibility 1.9.18-1": the main Project.toml pins StaticArrays to its 1.9.8 floor, but test/Project.toml carried a higher 1.9.18 floor (a dependabot "permit latest" bump), so at downgrade the package-under-test was held at 1.9.8 while the test sandbox demanded >=1.9.18. Lower the test floor to 1.9.8 to match the package floor; no test dependency requires StaticArrays >= 1.9.18 (highest is ForwardDiff 1.0 at 1.5.0). A second downgrade-only break was masked behind that resolve failure: runtests.jl calls run_tests(...; all = ["Core"]), but the `all` kwarg was only added in SciMLTesting 1.1.0. The test floor SciMLTesting = "1" let downgrade pick 1.0.0, which errors with MethodError (no method run_tests(; ..., all)). Raise the floor to 1.1. Both are pre-existing downgrade-floor issues (predate the run_qa v1.6 conversion); they only manifest at downgrade because Core lanes resolve latest versions where both floors are satisfied. Verified locally on Julia 1.10.11 with CI=true and all non-stdlib compat floor-pinned (the exact Downgrade lane): sandbox resolves (StaticArrays v1.9.8, SciMLTesting v1.1.0) and "DifferenceEquations tests passed" across all Core groups. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- test/Project.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Project.toml b/test/Project.toml index 1880de7..89351a1 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -32,5 +32,5 @@ FiniteDifferences = "0.12.34" ForwardDiff = "1.4.0" Plots = "1.41.6" SafeTestsets = "0.0.1, 0.1" -SciMLTesting = "1" -StaticArrays = "1.9.18" +SciMLTesting = "1.1" +StaticArrays = "1.9.8"