QA: run_qa v1.6 form + ExplicitImports#113
Merged
ChrisRackauckas merged 3 commits intoJun 27, 2026
Merged
Conversation
Consolidate the scattered hand-rolled QA into a single SciMLTesting `run_qa` v1.6 QA group, wired via the run_tests folder model. - Add test/qa/qa.jl: `run_qa(CurveFit; explicit_imports = true, ...)` runs Aqua (test_all, all sub-checks pass) and the six ExplicitImports checks. The two public-API checks ignore upstream non-public names (SciMLBase, NonlinearSolveBase[.Utils], SciMLBase.ReturnCode, StatsAPI, CommonSolve, Base), documented inline by source package. No JET (matches the prior QA, which ran Aqua + EI only). No aqua_broken/jet_broken/ei_broken: every check is a real PASS. - Add test/qa/Project.toml: Aqua + SafeTestsets + SciMLTesting + Test + CurveFit (path source). ExplicitImports is transitive via SciMLTesting. SciMLTesting compat "1.6". - Remove test/nopre/ (the hand-rolled Aqua.test_all group) and test/explicit_imports.jl (raw EI checks in Core) — both subsumed by run_qa. - test_groups.toml: replace the `nopre` group with `QA` (in_all = false, versions 1/lts), matching the QA folder. - Root Project.toml: drop ExplicitImports from [extras]/[targets].test (only the removed Core file used it; QA gets it via SciMLTesting), bump SciMLTesting compat to "1.6", and raise the PrecompileTools floor "1" -> "1.1": CurveFit explicit-imports only the PrecompileTools macros (@compile_workload/ @setup_workload), and on 1.0.0 their expansion references the bare `PrecompileTools` module name -> UndefVarError on the Downgrade(lts) lane (verified locally; fixed at 1.1.0). Verified locally on Julia 1.10 vs released SciMLTesting 1.6.0: - QA via run_tests folder model (GROUP=QA): 17/17 pass (Aqua 11, EI 6), 0 fail/ error/broken. - Core via Pkg.test (GROUP=Core): all pass, exit 0 (root env resolves without ExplicitImports). Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
SciMLTesting 1.7.0 runs the two public-API ExplicitImports checks
(all_qualified_accesses_are_public, all_explicit_imports_are_public)
only on Julia >= 1.11 and skips them on the LTS, and SciMLBase 3.24.0 /
CommonSolve 0.2.9 / StatsAPI now declare the names CurveFit accessed as
public. Empty both public-API ignore-lists and restore only the names
still genuinely non-public against the registered releases, verified by
running the QA group on Julia 1.12 (17/17 pass) and 1.10 (15/15 pass,
public checks skipped):
all_explicit_imports_are_public:
AbstractLinearAlgorithm, AbstractNonlinearAlgorithm (SciMLBase)
all_qualified_accesses_are_public:
AutoSpecializeCallable, NonlinearSolvePolyAlgorithmCache, Utils,
get_fu, clean_sprint_struct (NonlinearSolveBase[.Utils]); rtoldefault (Base)
Dropped (now public): CommonSolve init/solve/solve!,
SciMLBase.ReturnCode Success/T/successful_retcode, the StatsAPI
coef..vcov block.
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
SciMLBase 3.27.0 declares the abstract algorithm types `@public`
(AbstractNonlinearAlgorithm, AbstractLinearAlgorithm, ...), so CurveFit's
two explicit imports of those names are now public. Empty the
all_explicit_imports_are_public ignore-list entirely (it held only those
two SciMLBase names) and raise the compat floors that pin the make-public
releases:
- SciMLBase 3.x floor 3.1 -> 3.27 (the version that declares the abstract
algorithm types public; v2 branch 2.90 kept for un-migrated users)
- SciMLTesting 1.6 -> 1.7 (root + test/qa), the release that gates the two
public-API ExplicitImports checks to Julia >= 1.11
CurveFit's source imports the abstract algorithm types directly from
SciMLBase already, so there is no DiffEqBase.X -> SciMLBase.X caller
migration to do here.
all_qualified_accesses_are_public retains only genuinely-still-non-public
upstream names that the source qualifies:
- NonlinearSolveBase: AutoSpecializeCallable, NonlinearSolvePolyAlgorithmCache,
get_fu, and Utils(.clean_sprint_struct) (none @public/exported in 2.31.2)
- Base.rtoldefault
Verified against the registered releases (SciMLBase 3.27.0, SciMLTesting
1.7.0, NonlinearSolveBase 2.31.2, ExplicitImports 1.15.0, CommonSolve 0.2.9):
- Julia 1.12 (public-API checks RUN): QA group 17/17 pass, 0 fail
- Julia 1.10 (public-API checks skipped by SciMLTesting 1.7): 15/15 pass
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.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.
Please ignore until reviewed by @ChrisRackauckas.
Brings CurveFit.jl's QA onto the SciMLTesting
run_qav1.6 form with ExplicitImports enabled, consolidating the previously scattered hand-rolled QA into a singletest/qa/group wired via therun_tests()folder model.What changed
test/qa/qa.jl(new) —run_qa(CurveFit; explicit_imports = true, ei_kwargs = ...). Runs Aqua (test_all, all sub-checks) plus the six ExplicitImports checks. No JET (matches the prior QA, which ran Aqua + EI only). Noaqua_broken/jet_broken/ei_broken: every check is a genuine PASS.test/qa/Project.toml(new, replacestest/nopre/Project.toml) — Aqua + SafeTestsets + SciMLTesting + Test + CurveFit (path source). ExplicitImports is transitive via SciMLTesting (dropped as a direct test dep). SciMLTesting compat"1.6".test/nopre/(hand-rolledAqua.test_allgroup) andtest/explicit_imports.jl(raw EI checks that ran inside Core) — both subsumed byrun_qa.test/test_groups.toml— replace thenopregroup withQA(in_all = false, versions1/lts), matching the QA folder. Same two (group × version) CI cells as before.Project.toml— dropExplicitImportsfrom[extras]/[targets].test(only the removed Core file used it), bump SciMLTesting compat to"1.6", and raise thePrecompileToolsfloor"1"→"1.1"(see below).ExplicitImports findings (6 checks)
no_implicit_importsno_stale_explicit_importsall_explicit_imports_via_ownersall_qualified_accesses_via_ownersall_explicit_imports_are_publicall_qualified_accesses_are_publicThe two public-API checks ignore upstream non-public names that CurveFit qualifies/imports, documented inline by source package — these go public as the base libraries declare their APIs:
AbstractLinearAlgorithm,AbstractNonlinearAlgorithm,successful_retcode; SciMLBase.ReturnCode:Success,TAutoSpecializeCallable,NonlinearSolvePolyAlgorithmCache,Utils,get_fu; NonlinearSolveBase.Utils:clean_sprint_structcoef,confint,dof,dof_residual,fitted,nobs,predict,residuals,rss,stderror,vcovinit,solve,solve!rtoldefaultNo own (CurveFit) non-public names needed ignoring. 0 hard FAILs, 0 known-broken.
PrecompileTools floor bump (Downgrade fix)
CurveFit explicit-imports only the PrecompileTools macros (
using PrecompileTools: @compile_workload, @setup_workload). On PrecompileTools1.0.0, the macro expansion references the barePrecompileToolsmodule name, which is undefined under a macro-only import →UndefVarError: PrecompileTools not definedon the Downgrade(lts) lane. Verified locally: breaks on1.0.0, clean on1.1.0. Floor raised to"1.1".Verification (local, Julia 1.10, released SciMLTesting 1.6.0)
run_tests()folder model (GROUP=QA):Quality Assurance | 17 17— Aqua 11 (Method ambiguity, Unbound type params, Undefined exports, Project.toml compare, Stale deps, Compat bounds ×4, Piracy, Persistent tasks), ExplicitImports 6. 0 fail/error/broken.Pkg.test()(GROUP=Core): all pass,Testing CurveFit tests passed(exit 0) — root env resolves without ExplicitImports.🤖 Generated with Claude Code