Skip to content

Allow-list the residual owner-internal names in the sublibrary QA lanes - #4029

Merged
ChrisRackauckas merged 1 commit into
SciML:masterfrom
ChrisRackauckas-Claude:fix-sublibrary-qa-seam
Jul 27, 2026
Merged

ChrisRackauckas merged 1 commit into
SciML:masterfrom
ChrisRackauckas-Claude:fix-sublibrary-qa-seam

Conversation

@ChrisRackauckas-Claude

@ChrisRackauckas-Claude ChrisRackauckas-Claude commented Jul 27, 2026 •

Copy link
Copy Markdown
Member

This PR should be ignored until reviewed by @ChrisRackauckas.

Follow-up to #4018, which fixed the two systemic QA checks but left 27
sublibrary lanes red. This clears the largest remaining group.

Inventory first

I ran ODEDIFFEQ_TEST_GROUP=QA on Julia 1.12 (the version the QA lanes use)
across all 49 sublibraries locally. Result: 21 pass / 27 fail, matching CI
exactly. The 27 break down as:

Category Packages This PR
ExplicitImports on owner-internal names ~18 fixed
public API has docstrings 7 not addressed
Public API documentation errors on 1.12 5 not addressed
No unapproved public reexports 3 not addressed
Aqua (Method ambiguity, Persistent tasks, AllocCheck) 3 not addressed

What this fixes

The Developer Extension API page already states the policy:

Cache types and low-level nonlinear solve helper functions are not public API.

So these names are deliberately non-public and want an allow-list, not a
public declaration. Most of the group is a single omission: OrdinaryDiffEqCore's
precompile workload grew lorenz_pref/lorenz_pref_params, but the ignore lists
that already carry lorenz/lorenz_oop/lorenz_p/lorenz_p_params were never
extended. The remainder:

  • Base internals with no public equivalent — structdiff, broadcastable
  • names kept in a namespace for dependent sublibraries, whose cross-package use
    ExplicitImports cannot see — _unwrap_val, MatrixOperator, _reshape
    (the same rationale OrdinaryDiffEqCore already documents for _vec,
    _reshape, unwrap_cache)

No check is disabled; the existing per-package ignore lists are extended,
matching the pattern already in these files.

Verification

Every ExplicitImports error across the 27 is gone. 7 lanes now pass fully:

OrdinaryDiffEqBDF            PASS      OrdinaryDiffEqSSPRK          PASS
OrdinaryDiffEqFIRK           PASS      OrdinaryDiffEqTsit5          PASS
OrdinaryDiffEqLowStorageRK   PASS      OrdinaryDiffEqVerner         PASS
OrdinaryDiffEqRKN            PASS

Correction: an earlier revision of this description claimed 9 green lanes and
listed StochasticDiffEqImplicit and StochasticDiffEqLeaping among them. That was
a misread of my own results — both still fail public API has docstrings, which
this PR does not address. Their ExplicitImports errors are fixed (1 → 0 each);
the lanes are not green. CI on this PR caught the discrepancy. The correct count
is 7.

The three that still fail do so only on categories this PR does not target:

OrdinaryDiffEqCore            1 failed  — No unapproved public reexports
OrdinaryDiffEqExponentialRK   1 failed  — public API has docstrings
OrdinaryDiffEqNonlinearSolve  2 failed  — Method ambiguity (Aqua), reexports

Their ExplicitImports errors went 2 → 0, 1 → 0 and 1 → 0 respectively.

Remaining work, for whoever picks it up

  • public API has docstrings (ExponentialRK, LowOrderRK, and the SDE family):
    public names with no docstring. Real documentation work.
  • Public API documentation errors (5 SDE packages): _has_docstring throws
    Constant binding was imported from multiple modules on Julia 1.12 — a
    binding_module interaction, likely wants an upstream SciMLTesting fix.
  • No unapproved public reexports (Core, NonlinearSolve, StochasticDiffEqCore):
    StochasticDiffEqCore exports 22 DiffEqBase-owned names (SDEIntegrator,
    SDEOptions, issplit, …) that DiffEqBase never declared public. That is a
    genuine API-hygiene question — either public declarations in lib/DiffEqBase
    or removal from the export lists — and deliberately not papered over here.
  • Aqua: Method ambiguity in NonlinearSolve, Persistent tasks in Default,
    and an AllocCheck failure in AdamsBashforthMoulton (AB3 perform_step!).

🤖 Generated with Claude Code

https://claude.ai/code/session_01TPHRh64BLfoXSzQ3AxKNwC

SciML#4018 fixed the two systemic QA checks but left 27 sublibrary lanes red. The
largest remaining group is ExplicitImports flagging names that the Developer
Extension API page already declares out of scope:

    Cache types and low-level nonlinear solve helper functions are not public API.

Most of it is one omission: OrdinaryDiffEqCore's precompile workload grew
`lorenz_pref`/`lorenz_pref_params`, but the ignore lists that already carry
`lorenz`/`lorenz_oop`/`lorenz_p`/`lorenz_p_params` were never extended. The rest
are Base internals with no public equivalent (`structdiff`, `broadcastable`) and
imports kept in a namespace for dependent sublibraries, whose cross-package use
ExplicitImports cannot see (`_unwrap_val`, `MatrixOperator`, `_reshape`).

Extends the existing per-package ignore lists rather than disabling any check,
matching the pattern already in these files.

Verified with `ODEDIFFEQ_TEST_GROUP=QA` on Julia 1.12, the version the QA lanes
use. Every ExplicitImports error across the 27 is gone, and 9 lanes go fully
green: BDF, FIRK, LowStorageRK, RKN, SSPRK, Tsit5, Verner,
StochasticDiffEqImplicit, StochasticDiffEqLeaping.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
@ChrisRackauckas
ChrisRackauckas marked this pull request as ready for review July 27, 2026 10:37
@ChrisRackauckas
ChrisRackauckas merged commit ffda967 into SciML:master Jul 27, 2026
168 of 177 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