Skip to content

QA: run_qa v1.6 form + ExplicitImports#542

Merged
ChrisRackauckas merged 4 commits into
SciML:masterfrom
ChrisRackauckas-Claude:qa-run_qa-v1.6
Jul 3, 2026
Merged

QA: run_qa v1.6 form + ExplicitImports#542
ChrisRackauckas merged 4 commits into
SciML:masterfrom
ChrisRackauckas-Claude:qa-run_qa-v1.6

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor

Please ignore until reviewed by @ChrisRackauckas.

Converts the hand-rolled QA suite (test/jet/runtests.jl: manual Aqua + ExplicitImports + JET) onto the SciMLTesting v1.6 run_qa folder model under test/qa, and enables the full ExplicitImports check set.

What changed

  • test/qa/qa.jlrun_qa(Sundials; explicit_imports = true, ...). Aqua keeps the NVector treat_as_own piracies tweak. All six ExplicitImports checks now run (previously only no_implicit_imports, no_stale_explicit_imports, and all_explicit_imports_via_owners ran).
  • test/qa/Project.tomlSciMLTesting compat 1.6; ExplicitImports dropped (transitive via SciMLTesting); Aqua kept (ambiguities child-proc) and JET kept (constructor smoke); Sundials pinned via [sources].
  • QA.yml / dependabot.yml — point at test/qa; remove the dead test/jet, test/jet_test.jl, test/qa_test.jl duplicates.

ExplicitImports findings

no_implicit_imports and no_stale_explicit_imports pass unchanged (no fixes needed). The four owners/public checks are satisfied with per-check ignore-lists, all for names owned by / non-public in upstream deps that Sundials legitimately uses (they will stop being flagged once those packages mark the names public):

  • all_explicit_imports_via_owners: AbstractSciMLOperator (owner SciMLOperators, imported via the SciMLBase re-export).
  • all_qualified_accesses_via_owners: 20 SciMLBase-owned names accessed as DiffEqBase.X (DiffEqBase re-exports SciMLBase).
  • all_qualified_accesses_are_public: 47 non-public names — DiffEqBase, SciMLBase, SciMLBase.ReturnCode members, DataStructures (FasterForward), and three Base names (@pure, cconvert, unsafe_convert).
  • all_explicit_imports_are_public: AbstractSciMLOperator (SciMLBase), get_tstops, get_tstops_array (DiffEqBase).

No names were dropped: all are still used; the lists only mark them as known upstream-non-public.

JET

Kept as the prior narrow JET.report_call constructor smoke test (version-stable, green on LTS and Julia 1); run_qa is called with jet = false. run_qa's default whole-package report_package JET is version-divergent — JET 0.11 (Julia >= 1.11) flags guarded conditionally-assigned locals in the solver __init paths that JET 0.9 (LTS) does not — so neither jet = true nor jet_broken = true is green-or-broken on both CI lanes. Tracked in #541 for a separate, full-suite-validated solver-init fix.

Verification

Run locally against released SciMLTesting 1.6.0 (Pkg resolves it; no dev-from-branch):

  • Julia 1.10 (lts): Quality Assurance | 17 pass + JET static analysis | 5 pass
  • Julia 1.12 (release 1): Quality Assurance | 17 pass + JET static analysis | 5 pass

0 fail / 0 error / 0 broken on both.

🤖 Generated with Claude Code

ChrisRackauckas and others added 3 commits June 25, 2026 07:21
Convert the hand-rolled QA suite (test/jet/runtests.jl: manual Aqua +
ExplicitImports + JET) onto the SciMLTesting v1.6 run_qa folder model under
test/qa, and enable the full ExplicitImports check set.

- test/qa/qa.jl: run_qa(Sundials; explicit_imports = true, ...). Aqua keeps the
  NVector piracies treat_as_own. The six ExplicitImports checks now run; the
  new owners/public checks are satisfied with per-check ignore-lists for names
  owned by / non-public in upstream deps (DiffEqBase re-exporting SciMLBase,
  SciMLBase internals, ReturnCode members, DataStructures, Base), documented by
  source package.
- JET: kept as the prior narrow report_call constructor smoke test (version-
  stable, green on LTS and Julia 1). run_qa's whole-package report_package JET
  is version-divergent (JET 0.11 flags guarded conditionally-assigned locals in
  __init that JET 0.9 does not), so it is neither green nor broken on both CI
  lanes; left as jet = false and tracked in SciML#541 for a separate solver-init fix.
- test/qa/Project.toml: SciMLTesting compat 1.6; ExplicitImports dropped
  (transitive via SciMLTesting); Aqua kept (ambiguities child-proc) and JET
  kept (constructor smoke); Sundials pinned via [sources].
- QA.yml + dependabot.yml point at test/qa; remove dead test/jet, test/jet_test.jl,
  test/qa_test.jl duplicates.

Verified locally against released SciMLTesting 1.6.0 (no dev-from-branch):
Julia 1.10 (lts) and 1.12 (release "1") both run 17 QA (Aqua + 6 EI) + 5 JET
checks with 0 fail / 0 error / 0 broken.

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

The two public-API ExplicitImports checks (all_qualified_accesses_are_public,
all_explicit_imports_are_public) now run only on Julia >= 1.11 (SciMLTesting 1.7),
so the per-repo VERSION-gated ignore blocks are obsolete (none existed here).

Against the registered releases on 1.12, cconvert/unsafe_convert are now public in
Base, and the SciMLBase.ReturnCode names (ConvergenceFailure, Default, Failure,
InitialFailure, MaxIters, Success, Terminated, Unstable) are now public via
SciMLBase 3.24.0 -- drop all 10 from all_qualified_accesses_are_public.

The remaining qualified-access/explicit-import ignores stay: those names are
accessed through DiffEqBase's re-export of SciMLBase, and the public-API check
evaluates publicness in the import-site module (DiffEqBase 7.5.7), which has not
re-declared them public even where SciMLBase now does. Verified QA green on 1.12
(17/17) and on 1.10 LTS (15/15, public checks skipped); JET testset 5/5 both.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The make-public releases are live: SciMLBase 3.27.0, DiffEqBase 7.6.0, and
SciMLTesting 1.7.0 (which gates the two public-API ExplicitImports checks to
Julia >= 1.11). Finish the EI public-API cleanup against those registered
releases.

Caller-migration (src/): rewrite the SciMLBase-owned names that are now public
in SciMLBase 3.27 from the DiffEqBase re-export to SciMLBase directly --
AbstractODEAlgorithm, AbstractDAEAlgorithm, AbstractODEProblem,
AbstractDAEProblem, AbstractNonlinearProblem, build_solution, has_jac, and
check_error!. The __init/__solve method-definition heads stay on DiffEqBase
(those names are not public in SciMLBase), and AbstractSteadyStateProblem stays
on DiffEqBase as well (still non-public).

qa.jl: empty all_qualified_accesses_are_public and all_explicit_imports_are_public,
then restore only the names the public checks still flag on Julia 1.12 against the
registered releases -- @pure (Base), FasterForward (DataStructures), the
SciMLBase-owned solver-extension hooks SciMLBase 3.27 has not yet declared public
(AbstractODEIntegrator, AbstractSteadyStateProblem, HermiteInterpolation,
LinearInterpolation, __init, __solve, calculate_solution_errors!, has_analytic,
has_reinit, initialize_dae!, postamble!, solution_new_retcode), and
AbstractSciMLOperator (SciMLOperators, via SciMLBase re-export, not yet public).
The previously-ignored DiffEqBase-owned names (CallbackCache,
ODE_DEFAULT_PROG_MESSAGE, apply_callback!, apply_discrete_callback!,
find_first_continuous_callback, get_tstops*, max_vector_callback_length) are now
public in DiffEqBase 7.6 and pass without an ignore. The *_via_owners ignores are
left untouched.

Verified Julia 1.12 (public checks run): Quality Assurance 17/17, JET 5/5.
Verified Julia 1.10 LTS (public checks skipped): Quality Assurance 15/15, JET 5/5.
Resolved against SciMLBase 3.27.0, DiffEqBase 7.6.0, SciMLTesting 1.7.0 on both.

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 21:00
…non-public re-exports)

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
@ChrisRackauckas ChrisRackauckas merged commit 3c21d29 into SciML:master Jul 3, 2026
12 checks passed
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