Fix master QA failures: restore Differentiation public API, add missing docstrings#3940
Conversation
…ng docstrings Fixes two pre-existing test failures on master: 1. OrdinaryDiffEqRosenbrock QA: all_explicit_imports_are_public errored because SciML#3832 (e1db9b0) removed the Expr(:public, ...) block from OrdinaryDiffEqDifferentiation (and its docs section) while eight sublibraries still explicitly import those names and their QA enforces publicness. Restore the public block, the Jacobian/W-matrix section of docs/src/devtools/internals/public_api.md, and the docs/make.jl wiring (all 20 names still had docstrings from SciML#3858). 2. "public API has docstrings" failures, latent undocumented exports surfaced by the SciMLTesting 2.1 QA upgrade (SciML#3867): - HybridExplicitImplicitRK (exported undocumented since 1c68eff) - 8 OrdinaryDiffEqRosenbrockTableaus exports (RodasTableau, Rodas5Tableau, ROS3PRodasTableau, RosShamp4RodasTableau, Velds4RodasTableau, GRK4ARodasTableau, ROS2PRRodasTableau, ROS34PW1bRodasTableau) undocumented since the sublibrary extraction. Add docs/src/devtools/internals/public_api.md to size_threshold_ignore: restoring the Differentiation entries puts the page at 202.6 KiB, just over Documenter's 200 KiB default, matching the existing ignores for the two large Rosenbrock pages. Version bumps: OrdinaryDiffEqDifferentiation 3.3.1 -> 3.4.0 (restores public names), OrdinaryDiffEqRosenbrock 2.4.1 -> 2.4.2 and OrdinaryDiffEqRosenbrockTableaus 2.2.1 -> 2.2.2 (docstrings only). Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NNigabD3sZaUKvDZ1NVQgv
CI triageThis PR's targets are green: Triage of the remaining failures, compared check-by-check against merged PR #3921 (= master 1. Other sublibrary
|
|
Findings from an independent investigation of the master QA failures (checkout of 4e1a434), relevant to this PR's approach: Blast radius confirmation. The de-publicization in #3832 (e1db9b0) breaks QA far beyond Rosenbrock. The full-matrix Sublibrary CI run on master Local reproduction. On master, Gap in this PR. This PR restores the OrdinaryDiffEqDifferentiation public block, which fixes the Differentiation-name half everywhere. It does not restore the OrdinaryDiffEqNonlinearSolve hooks ( 🤖 Generated with Claude Code |
Neither is referenced anywhere in the package; only PolyesterThreads is actually used (algorithms.jl threading dispatch). Fixes the no_stale_explicit_imports QA failure independently of SciML#3940's separate all_explicit_imports_are_public fix for the same package.
Neither is referenced anywhere in the package; only PolyesterThreads is actually used (algorithms.jl threading dispatch). Fixes the no_stale_explicit_imports QA failure independently of #3940's separate all_explicit_imports_are_public fix for the same package.
Please ignore this PR until reviewed by @ChrisRackauckas.
Summary
Fixes two pre-existing test failures on unmodified
master(aa895b5):lib/OrdinaryDiffEqRosenbrockQA group:all_explicit_imports_are_publicerrored on 12 names imported from OrdinaryDiffEqDifferentiation (build_J_W,build_grad_config,build_jac_config,calc_rosenbrock_differentiation[!],calc_tderivative,dolinsolve,issuccess_W,jacobian2W!,resize_grad_config!,resize_jac_config!,wrapprecs), andpublic API has docstringsfailed onHybridExplicitImplicitRK.lib/OrdinaryDiffEqRosenbrockTableausdefault suite:public API has docstringsfailed on 8 undocumented exports.Root causes (git blame, no bisect needed)
Expr(:public, ...)block fromOrdinaryDiffEqDifferentiationand dropped its Jacobian/W-matrix section from the docs page — but eight sublibraries (OrdinaryDiffEqRosenbrock,OrdinaryDiffEqFIRK,OrdinaryDiffEqSDIRK,OrdinaryDiffEqExtrapolation,OrdinaryDiffEqStabilizedIRK,OrdinaryDiffEqExponentialRK,OrdinaryDiffEqNonlinearSolve,StochasticDiffEqImplicit) still explicitly import those names, and their QAall_explicit_imports_are_publicchecks (plus the qa.jl header comments from ExplicitImports: drive sublibrary QA checks to green (ei_broken markers) #3776) rely on them being public. Restoring the public block fixes the confirmed Rosenbrock failure and should fix the same latent failure in the other consumers.HybridExplicitImplicitRKwas exported without a docstring in 1c68eff (2026-02-22) and since the tableau sublibrary extraction (25dc6e8/32a53ca5, April 2026) exported 8 tableau names without docstrings. They only started failing when 12b6996 (Update SciMLTesting QA docs coverage #3867, 2026-07-11) upgraded the QA infrastructure to SciMLTesting 2.1, which introduced thepublic API has docstringscheck. So the trigger was the new SciMLTesting check, not a recent source regression.Changes
Expr(:public, ...)block (20 names) inOrdinaryDiffEqDifferentiation— all 20 still had their docstrings from Document public API: add docstrings + docs entries #3858 — plus the corresponding@docssection indocs/src/devtools/internals/public_api.mdand theusing/moduleswiring indocs/make.jl.devtools/internals/public_api.mdtosize_threshold_ignore: with the restored entries the page renders at 202.6 KiB, just over Documenter's 200 KiB default (same treatment as the two large Rosenbrock pages).HybridExplicitImplicitRK(following the existingTsit5DAdocstring).RodasTableau,Rodas5Tableau,ROS3PRodasTableau,RosShamp4RodasTableau,Velds4RodasTableau,GRK4ARodasTableau,ROS2PRRodasTableau,ROS34PW1bRodasTableau(matching the existing short style, e.g.Rodas4Tableau).If the #3832 de-publicization of the Differentiation solver-author API was intentional, the alternative fix is adding these names to the ExplicitImports ignore lists of all eight consumer sublibs — happy to switch, but restoring publicness matches the qa.jl header comments and the #3776 design.
Verification (all run locally on this branch)
ODEDIFFEQ_TEST_GROUP=QA Pkg.test()inlib/OrdinaryDiffEqRosenbrock: passed — Aqua 19/19 (was 17 pass / 1 fail / 1 error on master).Pkg.test()inlib/OrdinaryDiffEqRosenbrockTableaus: passed — Quality Assurance 19/19 (was 18/1 fail), convergence 335/335.julia --project=docs docs/make.jl): exited 0; renderedpublic_apipage contains the restored Differentiation entries.Base.ispublic(OrdinaryDiffEqDifferentiation, n) == truefor restored names;Docs.undocumented_names(OrdinaryDiffEqRosenbrockTableaus)clean.julia -m Runic --checkpasses on all changed files.Note: #3931 (rodas3d) also touches
lib/OrdinaryDiffEqRosenbrockandlib/OrdinaryDiffEqRosenbrockTableaus; the tableau-file docstring additions here may produce a trivial merge conflict with it.🤖 Generated with Claude Code
https://claude.ai/code/session_01NNigabD3sZaUKvDZ1NVQgv