Summary
On Julia 1.12 (the QA julia 1 lane), Aqua.test_undefined_exports(HighDimPDE) fails:
Undefined exports detected:
3-element Vector{Symbol}:
Symbol("HighDimPDE.du_cache")
Symbol("HighDimPDE.u_cache")
Symbol("HighDimPDE.user_cache")
This reproduces on unmodified main (scheduled run 28211297790, job 83573031987, where the old hand-rolled qa.jl already called Aqua.test_undefined_exports). It is not introduced by the run_qa v1.6 conversion (#156).
Root cause
src/HighDimPDE.jl does @reexport using DiffEqBase. @reexport re-exports every name in names(DiffEqBase), which includes du_cache/u_cache/user_cache. These three are owned by SciMLBase (parentmodule(DiffEqBase.du_cache) == SciMLBase) and only re-exported by DiffEqBase — so HighDimPDE re-exports them through a double-reexport chain SciMLBase -> DiffEqBase -> HighDimPDE.
On Julia 1.10 / 1.11 the binding resolves and isdefined(HighDimPDE, :du_cache) == true, so Aqua passes (verified locally on 1.10: Undefined exports from HighDimPDE: Symbol[]). On Julia 1.12 the binding-partition / export-visibility change makes isdefined(HighDimPDE, :du_cache) == false even though the export still exists, so Aqua reports it as an undefined export. Verified locally on 1.12.6: all three defined=false.
This is a Julia-1.12-only artifact of the SciMLBase/DiffEqBase @reexport chain, not a real over-export in HighDimPDE's own source (the names appear nowhere in src/). The proper fix is upstream (SciMLBase/DiffEqBase export hygiene under 1.12, or Reexport/Julia binding handling), not in this repo.
Interim handling
Marked aqua_broken = (:undefined_exports,) in test/qa/qa.jl with a comment pointing here. run_qa disables the sub-check in Aqua.test_all and emits a tracked @test_broken, so the lane goes green and auto-flags (Unexpected Pass) once the upstream chain is fixed and the name resolves on 1.12.
Reproduction
# Julia 1.12, QA env
using HighDimPDE
[n for n in names(HighDimPDE) if !isdefined(HighDimPDE, n)]
# => [:du_cache, :u_cache, :user_cache] (empty on 1.10/1.11)
Summary
On Julia 1.12 (the QA
julia 1lane),Aqua.test_undefined_exports(HighDimPDE)fails:This reproduces on unmodified
main(scheduled run 28211297790, job 83573031987, where the old hand-rolledqa.jlalready calledAqua.test_undefined_exports). It is not introduced by the run_qa v1.6 conversion (#156).Root cause
src/HighDimPDE.jldoes@reexport using DiffEqBase.@reexportre-exports every name innames(DiffEqBase), which includesdu_cache/u_cache/user_cache. These three are owned by SciMLBase (parentmodule(DiffEqBase.du_cache) == SciMLBase) and only re-exported by DiffEqBase — so HighDimPDE re-exports them through a double-reexport chain SciMLBase -> DiffEqBase -> HighDimPDE.On Julia 1.10 / 1.11 the binding resolves and
isdefined(HighDimPDE, :du_cache) == true, so Aqua passes (verified locally on 1.10:Undefined exports from HighDimPDE: Symbol[]). On Julia 1.12 the binding-partition / export-visibility change makesisdefined(HighDimPDE, :du_cache) == falseeven though the export still exists, so Aqua reports it as an undefined export. Verified locally on 1.12.6: all threedefined=false.This is a Julia-1.12-only artifact of the SciMLBase/DiffEqBase
@reexportchain, not a real over-export in HighDimPDE's own source (the names appear nowhere insrc/). The proper fix is upstream (SciMLBase/DiffEqBase export hygiene under 1.12, or Reexport/Julia binding handling), not in this repo.Interim handling
Marked
aqua_broken = (:undefined_exports,)intest/qa/qa.jlwith a comment pointing here. run_qa disables the sub-check inAqua.test_alland emits a tracked@test_broken, so the lane goes green and auto-flags (Unexpected Pass) once the upstream chain is fixed and the name resolves on 1.12.Reproduction