Skip to content

QA: run_qa v1.6 form + ExplicitImports#191

Open
ChrisRackauckas-Claude wants to merge 4 commits into
SciML:mainfrom
ChrisRackauckas-Claude:qa-run-qa-v1.6
Open

QA: run_qa v1.6 form + ExplicitImports#191
ChrisRackauckas-Claude wants to merge 4 commits into
SciML:mainfrom
ChrisRackauckas-Claude:qa-run-qa-v1.6

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor

Please ignore until reviewed by @ChrisRackauckas.

Converts test/qa/qa.jl from the hand-rolled Aqua + ExplicitImports body onto SciMLTesting 1.6's run_qa, with explicit_imports = true. Verified locally against the released SciMLTesting 1.6.0 (no dev-from-branch).

What changed

  • run_qa(DifferenceEquations; explicit_imports = true, ...) replaces the eight individual Aqua.* calls (now Aqua.test_all with the persistent-tasks [sources] sanitizer) and the two-check ExplicitImports block (now all six EI checks run).
  • JET stays a bespoke report_call testset. The issue QA: Aqua/JET findings marked @test_broken pending fix #187 cases live on specific solve paths (DirectIteration/KalmanFilter) that JET.report_package (run_qa's JET path) does not surface, so run_qa is called with JET = nothing and the two QA: Aqua/JET findings marked @test_broken pending fix #187 @test_broken markers are preserved verbatim.

ExplicitImports findings

no_implicit_imports and no_stale_explicit_imports pass unchanged (they were already the only two checks run).

The four newly-enabled owners/public checks flag only dependency-package names — none owned by DifferenceEquations — so each is allowed via a per-check ei_kwargs ignore-list (documented with its source package). These names go public as the base libs release.

  • all_explicit_imports_via_owners (6 ignored): KeywordArgSilent/get_concrete_p/get_concrete_u0/isconcreteu0/promote_u0 (SciMLBase, re-exported via DiffEqBase), ismutable (Base, via StaticArrays).
  • all_qualified_accesses_via_owners (1): __solve (SciMLBase, accessed via DiffEqBase).
  • all_qualified_accesses_are_public (13): @propagate_inbounds (Base); Default/Success/T (SciMLBase.ReturnCode); build_solution/getindepsym/getindepsym_defaultt (SciMLBase); __solve/check_prob_alg_pairing/get_concrete_problem (DiffEqBase); init/solve/solve! (CommonSolve).
  • all_explicit_imports_are_public (17): @add_kwonly/AbstractDEAlgorithm/AbstractDEProblem/AbstractRODESolution/ConstantInterpolation/NullParameters/build_solution/promote_tspan (SciMLBase); KeywordArgSilent/get_concrete_p/get_concrete_u0/isconcreteu0/promote_u0 (DiffEqBase); init/solve/solve! (CommonSolve); ismutable (StaticArrays).

No aqua_broken/ei_broken needed: Aqua.test_all passes clean (11/11) and all six EI checks pass with the ignore-lists. jet_broken is not used — the #187 markers stay as the bespoke report_call testset rather than being remapped (report_package = 0 reports, which would Unexpected-Pass a jet_broken = true).

Deps (test/qa/Project.toml)

  • SciMLTesting compat bumped "1" -> "1.6".
  • Dropped ExplicitImports (transitive via SciMLTesting), Distributions and SafeTestsets (unused in the QA env).
  • Kept Aqua (ambiguities child-proc needs it a direct dep) and JET (bespoke testset); kept LinearAlgebra (Diagonal in the KalmanFilter JET case).

Verification

Ran the QA group against released SciMLTesting 1.6.0 on:

  • Julia 1.10 (lts): Quality Assurance 17 pass / 17 total; JET static analysis 1 pass + 2 broken / 3 total. 0 fail, 0 error.
  • Julia 1.11 (the "1" lane): identical — Quality Assurance 17/17; JET static analysis 1 pass + 2 broken. 0 fail, 0 error.

🤖 Generated with Claude Code

ChrisRackauckas and others added 4 commits June 25, 2026 05:45
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 SciML#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 SciML#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 <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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 <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…releases

SciMLTesting 1.7.0 runs the two public-API ExplicitImports checks only on
Julia >= 1.11 (skipped on lts), and SciMLBase 3.24.0 / CommonSolve 0.2.9
made several previously-internal names public. The corresponding entries in
the all_qualified_accesses_are_public and all_explicit_imports_are_public
ignore-lists are now redundant.

Removed 14 entries that are now public against the registered releases:
- all_qualified_accesses_are_public: @propagate_inbounds (Base),
  Default/Success/T (SciMLBase.ReturnCode), build_solution (SciMLBase),
  init/solve/solve! (CommonSolve).
- all_explicit_imports_are_public: AbstractDEAlgorithm/NullParameters/
  build_solution (SciMLBase), init/solve/solve! (CommonSolve).

Kept entries that are still genuinely non-public against the resolved
registered releases (DiffEqBase 7.5.7, SciMLBase 3.24.0, StaticArrays
1.9.18): the DiffEqBase internals (__solve, check_prob_alg_pairing,
get_concrete_problem, KeywordArgSilent, get_concrete_p, get_concrete_u0,
isconcreteu0, promote_u0), the SciMLBase internals (@add_kwonly,
AbstractDEProblem, AbstractRODESolution, ConstantInterpolation,
promote_tspan, getindepsym, getindepsym_defaultt), and ismutable
(StaticArrays). The *_via_owners ignore-lists are untouched.

Verified QA group green on Julia 1.12 (public checks run, 17/17) and on
Julia 1.10 (public checks skipped, 15/15) against the registered releases.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… 1.7

SciMLBase 3.27.0 made AbstractDEProblem, AbstractRODESolution, and
promote_tspan public, so they no longer need entries in the
all_explicit_imports_are_public ignore-list. Remove them.

Verified on the registered releases (SciMLBase 3.27.0, DiffEqBase 7.6.0,
SciMLTesting 1.7.0): the QA group is green on both Julia 1.12 (public-API
checks run: Quality Assurance 17/17, JET 1 pass + 2 broken, 0 fail/0 error)
and Julia 1.10 (public-API checks skipped per SciMLTesting 1.7 gating:
Quality Assurance 15/15, JET 1 pass + 2 broken).

The remaining EI ignores are all genuinely-still-private dependency names:
DiffEqBase __solve/check_prob_alg_pairing/get_concrete_problem/KeywordArgSilent/
get_concrete_p/get_concrete_u0/isconcreteu0/promote_u0, SciMLBase getindepsym/
getindepsym_defaultt/@add_kwonly/ConstantInterpolation, and StaticArrays ismutable.
No DiffEqBase.X qualified access maps to a now-public SciMLBase-owned name, so
no src/ caller migration was required.

Bump SciMLTesting compat 1.6 -> 1.7 (the version that gates the public-API
checks to >= 1.11).

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ChrisRackauckas-Claude ChrisRackauckas-Claude marked this pull request as ready for review June 27, 2026 20:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants