QA: run_qa v1.6 form + ExplicitImports#140
Merged
ChrisRackauckas merged 5 commits intoJul 3, 2026
Merged
Conversation
Convert the hand-rolled Aqua/JET QA into a single SciMLTesting `run_qa` call (v1.6 form) and enable ExplicitImports. - Aqua: `run_qa` runs `Aqua.test_all`; the original non-recursive ambiguities check is preserved via `aqua_kwargs`. - JET: folds the separate `test_jet.jl` into `run_qa` (`test_package`). - ExplicitImports: five checks pass; per-check `ignore` lists cover upstream re-exports / non-public names (ModelingToolkit, Symbolics, PythonCall, ModelingToolkitBase, SymbolicUtils, SymbolicIndexingInterface). `no_implicit_imports` is tracked-broken (issue SciML#139) pending an explicit-imports refactor of the heavy `using` deps. - Bump SciMLTesting compat floor to 1.6 (root + QA env). Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…sitive) The run_qa v1.6 conversion routes QA through `Aqua.test_all`, which runs `test_persistent_tasks` by default — a check the pre-conversion qa.jl never asserted (it only called the non-asserting `find_persistent_tasks_deps`). That probe loads BaseModelica in a freshly generated wrapper environment built from this Project.toml alone. `using BaseModelica` there drives PythonCall's `__init__` -> CondaPkg, which installs a fresh pixi/conda environment in the wrapper dir and the wrapper precompile then fails to produce a usable cache for the package (ModelingToolkit cache-load race during precompile). The wrapper subprocess exits before signalling, so Aqua reports "done.log was not created, but precompilation exited" and fails the QA lane — a false positive, not a real persistent task. The package defines no `__init__`/`@async`/`Timer` of its own. Disable just that sub-check (restoring the pre-conversion scope). Verified locally on Julia 1.12.6 against released SciMLTesting 1.6.0: QA group is green (16 passed, 1 broken = the tracked `no_implicit_imports`, 0 failed). Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…b make-public) SciMLTesting 1.7 runs the two public-API ExplicitImports checks only on Julia >= 1.11 (skipped on lts). After the base-lib make-public releases (ModelingToolkitBase 1.48.0, Symbolics 7.29.0, SymbolicUtils 4.36.0, SciMLBase 3.24.0, ModelingToolkit 11.29.0), most entries in the all_qualified_accesses_are_public ignore-list are now public. Emptied the list and re-ran the QA group against the registered releases on Julia 1.12 (public checks RUN); restored only the 4 names still flagged non-public: - getname (ModelingToolkit re-export of SymbolicIndexingInterface) - None / hasattr / len (PythonCall.pybuiltins, non-SciML dep) Removed 9 now-public names: Constant, ImperativeAffect, isparameter, SymbolicContinuousCallback, SymbolicDiscreteCallback, setdefault, setguess, unwrap, value. Verified: 1.12 QA 16 pass / 1 broken / 0 fail; 1.10 lts 14 pass / 1 broken / 0 fail (public checks skipped on lts). all_qualified_accesses_via_owners and ei_broken=(:no_implicit_imports,) left untouched. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Verified the all_qualified_accesses_are_public ignore list on Julia 1.12 (public-API checks active) against the registered base-lib make-public releases: SciMLBase 3.27.0, DiffEqBase 7.6.0, SciMLTesting 1.7.0, ModelingToolkit 11.29.0, JET 0.11.5. The four ignored names (getname, None, hasattr, len) are all still-non-public names of non-SciML dependencies (ModelingToolkit re-export of SymbolicIndexingInterface; PythonCall.pybuiltins); none is SciMLBase-owned, so none migrates to SciMLBase and each legitimately stays ignored. The source has no qualified DiffEqBase.X accesses of SciMLBase-owned public names to rewrite. Annotate the list with the verification basis. QA group result: Julia 1.12 (checks active) 16 pass / 1 broken / 0 error; Julia 1.10 (checks skipped per SciMLTesting 1.7) 14 pass / 1 broken / 0 error. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The prior run's QA (julia 1) lane failed with "The self-hosted runner lost communication with the server" — the test step was killed mid-run (step stuck in_progress, downstream steps left pending), not a QA assertion failure. All other lanes (Core lts/1/pre, Downgrade Core, runic, typos) passed. The stale run is too old to re-run via the API, so this empty commit re-triggers CI onto a healthy runner. Verified locally on Julia 1.12.6 against the current registered releases (SciMLTesting 1.7.0, JET 0.11.5, SciMLBase 3.31.0, ModelingToolkit 11.30.1, ModelingToolkitBase 1.50.0, Symbolics 7.29.0, SymbolicUtils 4.38.1): QA group is green — 16 passed, 1 broken (tracked no_implicit_imports, SciML#139), 0 failed. 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.
Please ignore until reviewed by @ChrisRackauckas.
Converts the hand-rolled QA (separate Aqua block in
test/qa/qa.jlplus a standalonetest/qa/test_jet.jl) into a single SciMLTestingrun_qa(...)call on the v1.6 form, and enables ExplicitImports.What changed
test/qa/qa.jlnow callsrun_qa(BaseModelica; explicit_imports = true, ...).run_qarunsAqua.test_all. The original non-recursive ambiguities check is preserved viaaqua_kwargs = (; ambiguities = (; recursive = false)).test_jet.jl(which ranreport_package+@test length==0withtarget_modules=(BaseModelica,)) is folded intorun_qa's default JET path (test_package,target_modules=(pkg,)).test_jet.jlis removed and the@safetestset "JET Static Analysis"include is dropped fromruntests.jl."1.6"(rootProject.toml+test/qa/Project.toml).ExplicitImports findings (6 checks, verified locally vs released SciMLTesting 1.6.0)
no_stale_explicit_imports,all_explicit_imports_via_owners,all_explicit_imports_are_public.all_qualified_accesses_via_owners(6 re-exports owned by ModelingToolkitBase / SymbolicIndexingInterface / SymbolicUtils, accessed via ModelingToolkit/Symbolics) andall_qualified_accesses_are_public(13 non-public names of ModelingToolkit / ModelingToolkitBase / Symbolics / PythonCall). Each ignore is annotated with its source package.no_implicit_imports— many names pulled implicitly from heavyusingof ModelingToolkit / ParserCombinator / PythonCall / MLStyle / CondaPkg. Making them explicit is a larger refactor, tracked in QA: make implicit imports explicit (ExplicitImports no_implicit_imports) #139 and held asei_broken = (:no_implicit_imports,)(auto-flags Unexpected Pass once resolved).Local verification (Julia LTS 1.10, released SciMLTesting 1.6.0)
Ran the QA group end-to-end via
GROUP=QA julia --project=test/qa test/runtests.jl:0 Fail / 0 Error. The single Broken is the tracked
no_implicit_imports.🤖 Generated with Claude Code