QA: add ExplicitImports.jl checks to the QA group via SciMLTesting run_qa#13
Merged
ChrisRackauckas merged 2 commits intoJul 3, 2026
Merged
Conversation
Wire ExplicitImports.jl's six checks (no_implicit_imports,
no_stale_explicit_imports, all_explicit_imports_via_owners,
all_qualified_accesses_via_owners, all_qualified_accesses_are_public,
all_explicit_imports_are_public) into the QA group through
SciMLTesting.run_qa's `explicit_imports` option, and migrate qa.jl to the
SciMLTesting 1.5 minimal form.
SciMLTesting 1.5 makes Aqua and ExplicitImports its own direct deps and
auto-detects JET via its weakdep extension on `using JET`, so qa.jl no longer
threads those modules in: it `using`s only SciMLIterators, JET, SciMLTesting,
Test, and run_qa collapses to `explicit_imports = true` plus the genuinely
per-repo kwargs (`aqua_kwargs = (; piracies = false)` and the ExplicitImports
per-check ignore-lists). The auto-detected boilerplate (`Aqua = Aqua`,
`JET = JET`, `jet = true`, `ExplicitImports = ExplicitImports`) is dropped.
ExplicitImports' two public-API checks are satisfied with a minimal, documented
ignore-list of unavoidable non-public dependency names that have no public
equivalent:
* all_explicit_imports_are_public ignores SciMLBase's integrator/solution
interface (AbstractTimeseriesSolution, DEIntegrator, done) — the entire
surface this package iterates over, none of which SciMLBase exports or
declares public.
* all_qualified_accesses_are_public ignores Base.IteratorSize (the iterator
trait this package overloads) and its documented return value
Base.SizeUnknown — both non-public Base internals with no public spelling.
The Aqua call moves to run_qa as well (full suite minus piracies); deps_compat
now passes (the main Project.toml carries full [compat]), so its stale
@test_broken is dropped and the check re-enabled. piracies remains disabled with
a single @test_broken marker tracking issue SciML#9. JET keeps running (canonical
target_modules/typo via run_qa's default jet_kwargs).
QA sub-environment: ExplicitImports is dropped from test/qa/Project.toml (now
transitive via SciMLTesting). Aqua is kept as a direct dep because Aqua's
ambiguity check spawns a clean subprocess that `using Aqua` from the active
project's LOAD_PATH (Base.load_path_setup_code); a transitive-only Aqua is not
loadable by name there, so dropping it breaks the Method-ambiguity check. JET
stays (the QA group runs JET). SciMLTesting [compat] is bumped to 1.5 in both
the root and QA Project.toml.
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ab76095 to
1b6dab8
Compare
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
Please ignore this PR until it has been reviewed by @ChrisRackauckas.
What
Adds ExplicitImports.jl's six checks to the QA group, wired through
SciMLTesting.run_qa'sexplicit_importsoption, and makes them pass.The six checks:
no_implicit_importsno_stale_explicit_importsall_explicit_imports_via_ownersall_qualified_accesses_via_ownersall_qualified_accesses_are_publicall_explicit_imports_are_publicHow
SciMLIteratorsrelies on no implicit imports, and all explicit imports / qualified accesses resolve via their owners, so four of the six checks pass with zero changes (FIX/DECLARE were unnecessary for those).The two public-API checks fail only on dependency names that are genuinely non-public and have no public equivalent, so they are satisfied with a minimal, documented per-check ignore-list (
ei_kwargs):all_explicit_imports_are_publicAbstractTimeseriesSolution,DEIntegrator,doneAbstract*Integrator/AbstractTimeseriesSolution/doneis non-public in SciMLBase). Per the campaign, the public-API checks here are not gated on a base-lib release declaring these public.all_qualified_accesses_are_publicSizeUnknownBase.IteratorSize(::Type) = Base.SizeUnknown().SizeUnknownis the documented return value of the publicBase.IteratorSize, but is itself a non-public Base internal with no public spelling.No public-API declaration was needed for this package's own names: the failures are all about dependency names being imported, not
SciMLIterators' own surface (it alreadyexportstuples, intervals, TimeChoiceIterator).Other changes in this commit
run_qatoo.deps_compatnow passes (the rootProject.tomlcarries full[compat]), so its stale@test_brokenis dropped and the check is re-enabled.piraciesstays disabled with a single@test_brokenmarker tracking QA: Aqua/JET findings marked @test_broken pending fix #9 (the twotuplesmethods extend the RecursiveArrayTools function on SciMLBase-owned argument types — out of scope here).run_qa's canonicaljet = true(target_modules = (SciMLIterators,),mode = :typo), replacing the deprecatedtarget_defined_modules = true. Verified clean.SciMLTestingcompat to1.4(the release whoserun_qasupports ExplicitImports) in both the root and QA[compat], and addsExplicitImports = "1.15"to the QA sub-environment.Verification (local, Julia 1 = 1.12.6)
All six ExplicitImports checks pass with the curated ignore-lists:
Full QA group via
GROUP=QA Pkg.test()(as CI runs it):(The 1 Broken is the pre-existing Aqua
piraciesmarker for #9; the 17 passes cover Aqua minus piracies, JET, and all six ExplicitImports checks.)🤖 Generated with Claude Code