Skip to content

QA: run_qa v1.6 form + ExplicitImports (root + sublibs)#206

Merged
ChrisRackauckas merged 4 commits into
SciML:masterfrom
ChrisRackauckas-Claude:qa-runqa-v16-explicitimports
Jul 2, 2026
Merged

QA: run_qa v1.6 form + ExplicitImports (root + sublibs)#206
ChrisRackauckas merged 4 commits into
SciML:masterfrom
ChrisRackauckas-Claude:qa-runqa-v16-explicitimports

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor

This PR should be ignored until reviewed by @ChrisRackauckas.

Converts the root QA env and all 7 lib/<Sub> sublibrary QA envs to the SciMLTesting 1.6 run_qa form with explicit_imports = true, in one branch.

Per QA env

  • qa.jlusing SciMLTesting, <Module>, Test + run_qa(<Module>; explicit_imports = true, ...).
  • test/qa/Project.toml: SciMLTesting [compat] bumped to "1.6"; Aqua kept (ambiguities is disabled in every env); ExplicitImports left as a transitive dep of SciMLTesting (not listed).
  • The monorepo [sources] / develop wiring (sublib + umbrella-root pins, activate_group_env / develop_sources! <1.11 backport) is preserved exactly.

ExplicitImports: fixed, not suppressed (0 hard FAIL, no broken markers)

  • no_implicit_imports — each sublibrary's blanket using <dep> is replaced with the explicit name list ExplicitImports recommends, e.g.
    • BV: using DiffEqBase: DiffEqBase, BVPFunction, BVProblem, using SpecialFunctions: SpecialFunctions, erf
    • ODE: using LinearAlgebra: LinearAlgebra, Diagonal, I, SymTridiagonal, diagind, ldiv!, mul!, rmul!, etc.
    • Jump: using Catalyst: Catalyst, @reaction_network, @species, @parameters, @named, Num, Reaction, ReactionSystem, complete, default_t, hill, make_empty_network, species, unknowns
  • all_qualified_accesses_are_publicJumpProblemLibrary and SDEProblemLibrary call the non-public RuntimeGeneratedFunctions.init (the documented RGF init boilerplate), so :init is added to that check's ignore list.
  • All 6 EI checks pass on every env after the fixes.

Genuine Aqua disables preserved

  • ambiguities = false in every env (including the root — its only ambiguities come from the imported dependency tree, since the umbrella owns no methods).
  • persistent_tasks = false for JumpProblemLibrary and SDEProblemLibrary.

Root package Project.toml

  • Add the missing Pkg [compat] entry (Aqua deps_compat extras check flagged it once Aqua started running on the root).
  • Bump SciMLTesting [compat] to "1.6".

Sublibs converted

BVProblemLibrary, DAEProblemLibrary, DDEProblemLibrary, JumpProblemLibrary, NonlinearProblemLibrary, ODEProblemLibrary, SDEProblemLibrary (7) + root.

Verification (Julia 1.11, released SciMLTesting 1.6.0)

  • Root QA: Quality Assurance | 16 pass / 16 total (Aqua incl. persistent_tasks + deps_compat after the Pkg fix; ExplicitImports 6/6).
  • Each sublibrary: all 6 ExplicitImports checks pass (verified BV/DAE/DDE/NLP/ODE/SDE individually; Jump verified with the explicit-Catalyst fix + init ignore). Aqua per sublib unchanged from the prior hand-rolled call.
  • Runic clean; typos clean.

🤖 Generated with Claude Code

ChrisRackauckas and others added 2 commits June 25, 2026 13:47
Convert the root QA env and all 7 lib/<Sub> sublibrary QA envs to the
SciMLTesting 1.6 run_qa form with ExplicitImports enabled.

Per QA env: rewrite qa.jl to `using SciMLTesting, <Module>, Test` +
`run_qa(<Module>; explicit_imports = true, ...)`; bump the env's
SciMLTesting [compat] to "1.6"; keep Aqua where ambiguities is disabled.
ExplicitImports stays a transitive dep of SciMLTesting (not listed).

ExplicitImports findings were fixed, not suppressed (0 hard FAIL, no
broken markers):
- no_implicit_imports: each sublibrary's blanket `using <dep>` is made
  explicit (e.g. `using DiffEqBase: DiffEqBase, BVProblem, ...`,
  `using Catalyst: Catalyst, @reaction_network, ...`), exactly the
  ExplicitImports-recommended replacement; all 6 EI checks then pass.
- all_qualified_accesses_are_public: JumpProblemLibrary and
  SDEProblemLibrary call the non-public `RuntimeGeneratedFunctions.init`
  (the package's documented init boilerplate), so `:init` is added to that
  check's ignore list.

Genuine Aqua disables preserved: `ambiguities = false` everywhere (and on
the root, whose ambiguities come only from the imported dependency tree),
`persistent_tasks = false` for JumpProblemLibrary / SDEProblemLibrary.

Root package Project.toml: add the missing `Pkg` [compat] entry (Aqua
deps_compat extras check) and bump SciMLTesting [compat] to "1.6".

Monorepo [sources]/develop wiring is unchanged. Verified on Julia 1.11
against released SciMLTesting 1.6.0: root QA 16/16 pass; each sublibrary's
6 ExplicitImports checks pass.

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
(check_all_qualified_accesses_are_public / check_all_explicit_imports_are_public)
only on Julia >= 1.11, and RuntimeGeneratedFunctions made `init` public
(Base.ispublic(RuntimeGeneratedFunctions, :init) === true as of v0.5.21).

The `RuntimeGeneratedFunctions.init(@__MODULE__)` boilerplate in
JumpProblemLibrary and SDEProblemLibrary therefore no longer trips the
qualified-access public-API check, so the per-repo `:init` ignore on
`all_qualified_accesses_are_public` is now inert and is removed. Both qa.jl
calls reduce to the plain `run_qa(...; explicit_imports = true, aqua_kwargs = ...)`
form with no EI ignore-lists.

Verified against the registered releases (no dev):
- Julia 1.12 (>= 1.11, public checks run): SDEProblemLibrary EI runs 6/6 with
  the emptied ignore-list (SciMLTesting 1.7.0). JumpProblemLibrary uses the
  identical init pattern and already passed EI 6/6 on CI; init being public
  makes the ignore unnecessary.
- Julia 1.10 (lts, public checks skipped by 1.7): SDE/Jump EI 4/4, root QA 14/14.

SciMLTesting [compat] "1.6" already admits 1.7 (caret), so no compat bump
needed. No `if VERSION < v"1.11"` ignore blocks existed to remove. No names
required restoring -- the public-API ignore-lists are now fully empty.

Note: the sublibrary QA (Julia 1) lanes still fail on a pre-existing,
unrelated Aqua deps_compat issue (`Pkg` listed in [extras] without a [compat]
bound in DAE/DDE/Jump/Nonlinear/ODE/SDE, identical on master); that is out of
scope for this EI ignore sweep and left for a separate focused fix.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ChrisRackauckas ChrisRackauckas marked this pull request as ready for review June 26, 2026 23:38
ChrisRackauckas and others added 2 commits June 27, 2026 00:28
…API EI)

Finish the run_qa/ExplicitImports conversion against the now-released
public-API surfaces (SciMLBase 3.27.0, DiffEqBase 7.6.0, ArrayInterface
7.26.0) and SciMLTesting 1.7.0 (which gates the two public-API EI checks
-- all_qualified_accesses_are_public / all_explicit_imports_are_public --
to Julia >= 1.11).

Compat:
- Bump SciMLTesting "1.6" -> "1.7" in the root [compat] and every QA
  sub-env (root test/qa + all 7 lib/*/test/qa). "1.6" already admits
  1.7.0 by caret, but the public-API checks are unconditional in 1.6 and
  only gained the >= 1.11 gate in 1.7; pinning the floor at 1.7 guarantees
  the gating version so the LTS (1.10) lane skips the backport-incompatible
  public checks instead of spuriously flagging backported-public names.

QA fix (the QA / Julia 1 reds):
- Add the missing `Pkg = "1.10"` [compat] entry to the six sublibraries
  that list `Pkg` in [extras] without a [compat] bound (DAE/DDE/Jump/
  Nonlinear/ODE/SDE). Aqua's deps_compat extras check (Aqua 0.8 via
  SciMLTesting) hard-fails on `Pkg` extras lacking compat; BVProblemLibrary
  already carries this entry and its QA lane was the only green one. This
  matches BVProblemLibrary exactly -- a real missing bound, not a silenced
  check.

No EI ignore-lists, `ei_broken`, or `VERSION < v"1.11"` blocks exist to
strip (the qa.jl files were already in the bare run_qa form), and no
`DiffEqBase.X` qualified accesses of SciMLBase-owned public names exist in
src/ to migrate -- the source uses explicit imports (`using DiffEqBase:
ODEProblem`, ...) which pass all_explicit_imports_are_public unchanged.

Verified against the registered releases (Pkg resolve, no dev of deps):
  Julia 1.12 (public checks run): root 16/16, ODEProblemLibrary 16/16,
    SDEProblemLibrary 15/15, NonlinearProblemLibrary 16/16,
    DAEProblemLibrary 16/16, JumpProblemLibrary 15/15 -- all green, 0 Fail.
  Julia 1.10 (public checks skipped by the 1.7 gate): ODEProblemLibrary
    14/14 (= 16 minus the 2 skipped public checks); root EI runs 4/4.

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

The root QA env (test/qa) pins `DiffEqProblemLibrary = {path = "../.."}` in
[sources], but on Julia <1.11 Pkg ignores [sources]; `activate_qa_env`'s plain
`Pkg.activate` + `Pkg.instantiate` therefore resolved DiffEqProblemLibrary to the
registered release v5.2.1 instead of the working copy. The run_qa conversion runs
`Aqua.test_all` (which the old qa.jl did not), so its deps_compat extras check ran
against the registry Project.toml — which lacks the `Pkg` extras [compat] entry
this branch adds — failing the Downgrade Core (lts/1.10) lane while the fix on the
branch went unexercised.

Develop the qa env's local path [sources] on Julia <1.11 before instantiating,
mirroring the existing sublibrary branch in this file, so the QA checks run against
the working tree (where `Pkg = "1.10"` is already declared).

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
@ChrisRackauckas-Claude ChrisRackauckas-Claude marked this pull request as draft June 28, 2026 22:22
@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor Author

Fix for the red Downgrade (Core / lts = Julia 1.10) lane

Symptom: Aqua deps_compat failed — DiffEqProblemLibrary does not declare a compat entry for the following extras: Pkg (run 28278593895, job 83789983105, deps_compat.jl:60, Compat bounds → extras).

Root cause (two layers):

  1. The registered/master Project.toml lists Pkg in [extras]/[targets].test but has no Pkg entry in [compat]. master never caught this because its old test/qa/qa.jl only ran check_no_implicit_imports/check_no_stale_explicit_imports — never Aqua.test_all. This branch's run_qa conversion runs Aqua.test_all, which runs test_deps_compat(check_extras = true), newly surfacing the gap. The branch already adds the correct fix: Pkg = "1.10" (and SciMLTesting = "1.7") to [compat].
  2. The fix was not being exercised on the lts lane. test/qa/Project.toml pins DiffEqProblemLibrary = {path = "../.."} in [sources], but on Julia <1.11 Pkg ignores [sources]; activate_qa_env's plain Pkg.activate + Pkg.instantiate resolved DiffEqProblemLibrary to the registered release v5.2.1 (whose Project.toml lacks the Pkg compat) instead of the working copy. So Aqua checked the registry version, not the branch.

Fix (this commit): develop the qa env's local path [sources] on Julia <1.11 before instantiating, mirroring the existing sublibrary branch in runtests.jl, so the QA checks run against the working tree.

Verified locally on Julia 1.10.11 (LTS):

  • Unpatched (CI-faithful, registry-loaded DiffEqProblemLibrary v5.2.1): reproduced the exact failure — ExplicitImports 13 passed, 1 failed, does not declare a compat entry … Pkg, Compat bounds → extras: 1 Fail.
  • Patched (develops working copy): Pkg.test("DiffEqProblemLibrary"; GROUP=QA)ExplicitImports 14/14 Pass, 0 Fail, Testing DiffEqProblemLibrary tests passed. The developed source shows as DiffEqProblemLibrary v5.2.1 /…/dg/DiffEqProblemLibrary.jl (working copy, not a registry copy).

This PR should be ignored until reviewed by @ChrisRackauckas.

@ChrisRackauckas-Claude ChrisRackauckas-Claude marked this pull request as ready for review June 29, 2026 09:52
@ChrisRackauckas ChrisRackauckas merged commit 80eb18a into SciML:master Jul 2, 2026
48 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