Correct dependency floors blocking the pending base and solver releases - #4084
Conversation
|
Pushed a second commit: three more floors of the same kind, found while pre-checking the release order.
Exactly four packages on master require SciMLBase 3.40 — DiffEqBase, Core, Differentiation, NonlinearSolve — so only their sibling floors need this. Everything still allowing SciMLBase 3.39 resolves fine against the released siblings and is untouched. I first tried to generalise this into a repo-wide audit and got it wrong: the rule is not "every dependent of a 3.40 package needs a raised floor", it's "a package that itself demands 3.40 needs raised floors on its siblings". The first version flagged ~50 packages, nearly all noise. These three are what survives the corrected rule, and each is confirmed by an actual resolution failure rather than by the audit. Corrected release order, now that DiffEqBase 7.10.0 has merged (JuliaRegistries/General#162879):
Verified: Core 4.12.0 with |
Six floors on master permit dependency versions that lack symbols the code references. AutoMerge has been rejecting the OrdinaryDiffEqBDF 2.4.1 and OrdinaryDiffEqSDIRK 2.8.2 registrations since 2026-07-29 for two of them. DiffEqBase floors (Core, Differentiation, NonlinearSolve) All three require SciMLBase = "3.40", but the first DiffEqBase permitting SciMLBase 3.40 is 7.10.0. With a DiffEqBase floor of "7"/"7.8" the resolver has no solution at all — `Pkg.instantiate()` on any of the three fails with an unsatisfiable DiffEqBase. Raised to "7.10". OrdinaryDiffEqBDF and OrdinaryDiffEqFIRK -> OrdinaryDiffEqCore "4.12" Both read integrator.is_disco_step and integrator.disco_checkpoint. Those ODEIntegrator fields arrived with the DISCO work merged 2026-07-29 (SciML#3720) and are not in any released Core; the first to carry them is 4.12.0. Against Core 4.11.0 BDF fails to load with FieldError: type OrdinaryDiffEqCore.ODEIntegrator has no field `is_disco_step` FIRK's master tree already diverges from the registered 2.5.0 (which predates the field use), so it is bumped to 2.5.1 to make the corrected floor releasable. OrdinaryDiffEqSDIRK -> OrdinaryDiffEqNonlinearSolve "2.6" Imports can_smooth_est, added in SciML#3823. The version carrying it was never registered (ONLS goes 2.5.0 -> master 2.6.0), so against any released ONLS SDIRK fails to load with UndefVarError: `can_smooth_est` not defined in `OrdinaryDiffEqSDIRK` Audit method, since this class keeps recurring (SciML#2600, SciML#4078, SciML#4079) Diffed the ODEIntegrator struct between the registered Core 4.11.0 tree and master for added fields, then grepped every sublibrary for accesses to them; and cross-referenced every qualified access and explicit import name against the registered OrdinaryDiffEqCore 4.11.0 and OrdinaryDiffEqNonlinearSolve 2.5.0 trees. No sublibrary references a Core *name* absent at 4.11.0 — the only Core gaps are the two struct fields — and can_smooth_est is the only NonlinearSolve gap. Verified locally: SDIRK loads against the in-tree ONLS, and BDF loads and solves (FBDF on a scalar decay problem returns 0.36790983175798864). Metadata-only apart from the FIRK version bump. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ZqxphdTA1MydR1WXye9Jc
…tiation 3.6
Same rule as the DiffEqBase floors in the previous commit, applied to the
sibling dependencies rather than DiffEqBase: a package requiring
SciMLBase = "3.40" cannot resolve against any sibling version whose own compat
caps SciMLBase below 3.40.
OrdinaryDiffEqDifferentiation -> OrdinaryDiffEqCore "4.12"
OrdinaryDiffEqNonlinearSolve -> OrdinaryDiffEqCore "4.12"
OrdinaryDiffEqNonlinearSolve -> OrdinaryDiffEqDifferentiation "3.6"
The released Core tops out at 4.11.0, which declares SciMLBase = "3.39", and the
released Differentiation at 3.5.0. With the old "4" / "4.6" / "3" floors both
packages are unresolvable:
Unsatisfiable requirements detected for package OrdinaryDiffEqCore:
restricted to versions 4 by OrdinaryDiffEqDifferentiation, leaving 4.0.0 - 4.11.0
restricted by compatibility requirements with SciMLBase to versions: uninstalled
Exactly four packages on master require SciMLBase 3.40 — DiffEqBase,
OrdinaryDiffEqCore, OrdinaryDiffEqDifferentiation, OrdinaryDiffEqNonlinearSolve
— so only their sibling floors need this treatment. Packages that still allow
SciMLBase 3.39 resolve fine against the older siblings and are left alone.
This fixes the release order: DiffEqBase 7.10.0 (registered), then
OrdinaryDiffEqCore 4.12.0, then OrdinaryDiffEqDifferentiation 3.6.0, then
OrdinaryDiffEqNonlinearSolve 2.6.0, then the blocked BDF and SDIRK.
Verified locally: Core 4.12.0 with [sources] stripped resolves against
registry-only dependencies (picking DiffEqBase 7.10.0) and loads; ONLS and
Differentiation instantiate and load in-tree. Their registry-only check has to
wait until Core 4.12.0 is actually registered.
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
35689f2 to
5a388af
Compare
Please ignore until reviewed by @ChrisRackauckas.
Unblocks the OrdinaryDiffEqBDF 2.4.1 and OrdinaryDiffEqSDIRK 2.8.2 registrations, which AutoMerge has been rejecting since 2026-07-29, and corrects four more floors of the same class found by auditing for it.
The floors
7.87.1077.1077.104.114.12integrator.is_disco_step/disco_checkpoint4.44.1222.6can_smooth_estDiffEqBase
Core, Differentiation and NonlinearSolve all declare
SciMLBase = "3.40", but the first DiffEqBase whose own compat permits SciMLBase 3.40 is 7.10.0. With a"7"/"7.8"floor the resolver has no solution at all — this is whyPkg.instantiate()currently fails in every sublibrary on master:is_disco_step/disco_checkpointBoth fields arrived on
ODEIntegratorwith the DISCO work merged 2026-07-29 (#3720) and are in no released Core — 4.12.0 is the first to carry them. Against Core 4.11.0, BDF fails to load:FIRK reads the same fields, and its master tree already diverges from the registered 2.5.0 (which predates the usage), so it is bumped to 2.5.1 to make the corrected floor releasable. FIRK is not currently broken in the registry — the released 2.5.0 does not touch these fields.
can_smooth_estAdded to OrdinaryDiffEqNonlinearSolve in #3823. The version that first carried it was never registered — ONLS goes
2.5.0→ master2.6.0— so against any released ONLS, SDIRK fails to load:How I looked for the rest
This class has now bitten four times (#2600, #4078, #4079, and these two), and the previous audit in #4080 missed both of these because it only checked qualified
OrdinaryDiffEqCore.<name>accesses and explicit import lists — it could not see struct-field additions or cross-sublibrary imports. So this time:ODEIntegratorstruct between the registered Core 4.11.0 tree and master, then grepped every sublibrary for accesses to the added fields → BDF and FIRK, nothing else.can_smooth_estin SDIRK, nothing else.SciMLBase >= 3.40requirement paired with a DiffEqBase floor below 7.10 → the three above.Verification
Ran locally, not inferred:
OrdinaryDiffEqSDIRKinstantiates and loads against the in-tree OrdinaryDiffEqNonlinearSolve.OrdinaryDiffEqBDFinstantiates, loads, and solves —FBDF()on a scalar decay problem returns0.36790983175798864.lib/DiffEqBasewith[sources]stripped (so registry-only dependencies, which is what AutoMerge does) resolves, loads, and itsGROUP=Coresuite passes.Release order this enables
Metadata-only apart from the FIRK version bump.
🤖 Generated with Claude Code
https://claude.ai/code/session_017ZqxphdTA1MydR1WXye9Jc