Skip to content

QA: run_qa v1.6 form + ExplicitImports#140

Merged
ChrisRackauckas merged 5 commits into
SciML:mainfrom
ChrisRackauckas-Claude:qa-run-qa-v1.6
Jul 3, 2026
Merged

QA: run_qa v1.6 form + ExplicitImports#140
ChrisRackauckas merged 5 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 the hand-rolled QA (separate Aqua block in test/qa/qa.jl plus a standalone test/qa/test_jet.jl) into a single SciMLTesting run_qa(...) call on the v1.6 form, and enables ExplicitImports.

What changed

  • test/qa/qa.jl now calls run_qa(BaseModelica; explicit_imports = true, ...).
    • Aqua: run_qa runs Aqua.test_all. The original non-recursive ambiguities check is preserved via aqua_kwargs = (; ambiguities = (; recursive = false)).
    • JET: the separate test_jet.jl (which ran report_package + @test length==0 with target_modules=(BaseModelica,)) is folded into run_qa's default JET path (test_package, target_modules=(pkg,)). test_jet.jl is removed and the @safetestset "JET Static Analysis" include is dropped from runtests.jl.
  • SciMLTesting compat floor bumped to "1.6" (root Project.toml + test/qa/Project.toml).
  • ExplicitImports stays transitive via SciMLTesting (not a direct QA dep). Aqua and JET remain direct QA deps (Aqua needed for the ambiguities child-process; JET for the JET check).

ExplicitImports findings (6 checks, verified locally vs released SciMLTesting 1.6.0)

  • PASS: no_stale_explicit_imports, all_explicit_imports_via_owners, all_explicit_imports_are_public.
  • IGNORE (per-check, all upstream-dep names): all_qualified_accesses_via_owners (6 re-exports owned by ModelingToolkitBase / SymbolicIndexingInterface / SymbolicUtils, accessed via ModelingToolkit/Symbolics) and all_qualified_accesses_are_public (13 non-public names of ModelingToolkit / ModelingToolkitBase / Symbolics / PythonCall). Each ignore is annotated with its source package.
  • BROKEN: no_implicit_imports — many names pulled implicitly from heavy using of 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 as ei_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:

Test Summary:     | Pass  Broken  Total     Time
Quality Assurance |   17       1     18  2m48.5s

0 Fail / 0 Error. The single Broken is the tracked no_implicit_imports.

🤖 Generated with Claude Code

ChrisRackauckas and others added 5 commits June 25, 2026 06:00
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>
@ChrisRackauckas-Claude ChrisRackauckas-Claude marked this pull request as ready for review July 3, 2026 01:40
@ChrisRackauckas ChrisRackauckas merged commit 9f4f8c9 into SciML:main Jul 3, 2026
9 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