Repository navigation
Configure the sublibrary QA lanes for monorepo docs and facade reexports - #4018
Merged
ChrisRackauckas merged 1 commit intoJul 26, 2026
Merged
ChrisRackauckas merged 1 commit into
ChrisRackauckas merged 1 commit into
Conversation
SciMLTesting 2.x defaults `api_docs` and `check_reexports` to `true`. Both assumptions are wrong for the `lib/*` solver packages, so every sublibrary QA lane fails on two checks that cannot pass as configured: * **rendered docs** — `run_api_docs` resolves `docs_src` to `<pkgroot>/docs/src`, which no sublibrary has. A missing directory yields an empty rendered set, so *every* public name reads as unrendered (182 names for OrdinaryDiffEqFeagin). These packages are documented in the umbrella OrdinaryDiffEq manual, where the root QA lane already checks rendering. * **facade reexports** — the solver packages `@reexport using SciMLBase` (or StochasticDiffEqCore / DiffEqBase) by design; several qa.jl files already say so in comments. Without a `reexports_allow`, that deliberate surface is reported wholesale (185 names for Feagin). Set `api_docs_kwargs = (; rendered = false)` and `reexports_allow = union(public_api_names(M), (:M,))` for the module each package reexports, mirroring what SciML#3988 did for the umbrella. The docstring half of the api-docs check stays on, and reexports from any *other* package are still reported, so neither check is disabled outright. `M` is in scope already via the package's own reexport, so no test-environment changes are needed. GlobalDiffEq and ImplicitDiscreteSolve already point `docs_src` at the monorepo manual; their api-docs configuration is left as is. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
ChrisRackauckas-Claude
force-pushed
the
fix-sublibrary-qa-config
branch
from
July 25, 2026 08:33
023fcd6 to
acc868b
Compare
ChrisRackauckas
marked this pull request as ready for review
July 26, 2026 08:33
ChrisRackauckas
added a commit
that referenced
this pull request
Jul 27, 2026
…es (#4029) #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: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
This was referenced Jul 27, 2026
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.
This PR should be ignored until reviewed by @ChrisRackauckas.
The failure
Every
lib/*QA lane is red — ~45sublibrary-ci / lib/… [QA]jobs. This iseasy to miss because the sublibrary matrix is path-filtered: a PR that does not
touch
lib/spawns zero sublibrary QA jobs, so its Sublibrary CI goes greenvacuously. #4014 touched
lib/OrdinaryDiffEqCore/Project.toml, which triggeredthe full matrix and surfaced it.
To be clear about causation: this pre-dates #4014. I checked out
eb3888cf7(before that merge) and ran the Feagin QA lane directly:Why
SciMLTesting 2.x defaults
api_docsandcheck_reexportstotrue. Bothassumptions are wrong for solver sublibraries:
1. Rendered docs.
run_api_docsresolvesdocs_srcto<pkgroot>/docs/src,which no sublibrary has —
lib/OrdinaryDiffEqFeagin/contains onlysrc/ test/ Project.toml README.md LICENSE.md. A missing directory yields anempty rendered set, so every public name is reported unrendered:
These packages are documented in the umbrella manual, where the root QA lane
already checks rendering.
2. Facade reexports. The solver packages
@reexport using SciMLBase(orStochasticDiffEqCore/DiffEqBase) by design — several qa.jl files alreadysay so in a comment. With no
reexports_allow, that deliberate surface isreported wholesale (185 names for Feagin).
The fix
Per package, mirroring what #3988 did for the umbrella:
Neither check is switched off:
no docstring is still caught;
still reported.
Mapping is mechanical, from each package's own
@reexport using:SciMLBase(30),StochasticDiffEqCore(9),DiffEqBase(2), no reexport (7 —rendered = falseonly). The module name is already in scope via the package'sown reexport, so no test-environment or Project.toml changes are needed.
GlobalDiffEq and ImplicitDiscreteSolve already point
docs_srcat the monorepomanual; their api-docs configuration is left alone.
Verification
Ran
ODEDIFFEQ_TEST_GROUP=QAon Julia 1.12 (the version the QA lanes use),covering every shape in the change:
api_docs_kwargsmerged intodocs_srcpreserveddocs_srcpreservedWhat this does not fix
Some sublibraries stay red on a separate, pre-existing seam unrelated to
these two checks. In each case the two checks this PR targets do now pass:
OrdinaryDiffEqTsit5—Public API documentation1 pass,No unapproved public reexports1 pass; still errors on ExplicitImports(
all_qualified_accesses_are_public).StochasticDiffEqMilstein— reexports check passes;Public API documentationstill errors inside the docstring half withConstant binding was imported from multiple modules(a Julia 1.12binding_moduleinteraction, not the rendered check).OrdinaryDiffEqCore— rendered check passes; still has a stale explicitimport (
_unwrap_val) and a non-public qualified access.StochasticDiffEqCore— still reports 22 reexported names (SDEIntegrator,SDEOptions,issplit, …). These are DiffEqBase-owned names the sublibraryexports even though DiffEqBase never declared thempublic. That is a realAPI-hygiene finding, so I deliberately did not allowlist it away — it
wants either
publicdeclarations inlib/DiffEqBaseor removal from thesublibrary export lists, as its own change.
🤖 Generated with Claude Code
https://claude.ai/code/session_01TPHRh64BLfoXSzQ3AxKNwC