Skip to content

[AI] Correct the #1286 version bumps to the next sequential minor - #1293

Merged
ChrisRackauckas merged 1 commit into
SciML:masterfrom
ChrisRackauckas-Claude:correct-versions-to-minor-20260802
Aug 2, 2026
Merged

[AI] Correct the #1286 version bumps to the next sequential minor#1293
ChrisRackauckas merged 1 commit into
SciML:masterfrom
ChrisRackauckas-Claude:correct-versions-to-minor-20260802

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Member

Please ignore until reviewed by @ChrisRackauckas. Opened as a draft.

Blocks registration of the #1286 releases. Nothing is registered yet.

Why

#1286 bumped all 28 packages as breaking. SciML does not treat a re-exported foreign name as documented public API, so removing @reexports is not breaking and the bumps should be the next minor.

Applying that test to #1286: no package removed a single explicit export. Every name that left a namespace went out through a removed @reexport of a foreign package. Measured with names() against the pre-#1286 tree on Julia 1.11:

package names before → after dropped dropped and owned by itself
Optimization 228 → 39 190 0
OptimizationOptimJL 263 → 36 227 0
OptimizationBBO 244 → 17 227 0
OptimizationNLopt 271 → 44 227 0

The five names the glue packages drop — OptimizationCache, OptimizationVerbosity, IncompatibleOptimizerError, OptimizerMissingError, and the OptimizationBase module binding — are owned by OptimizationBase, so they are foreign from the glue package's side too. Everything else is SciMLBase / ADTypes / SciMLLogging / SciMLOperators. The curated export lists deliberately keep the ADTypes names (AutoForwardDiff, AutoZygote, …).

The backend re-exports survive (@reexport using Optim, NLopt, Optimisers, Evolutionary, Metaheuristics, MultistartOptimization, NLPModels), so solver names are unaffected.

What changed

Versions are the next minor off the registry version for >= 1.0 packages and the next patch below 1.0 — taken from General/*/Versions.toml, not from master:

package registry #1286 corrected
Optimization 5.6.5 6.0.0 5.7.0
OptimizationBase 5.2.4 6.0.0 5.3.0
OptimizationIpopt 1.3.0 2.0.0 1.4.0
OptimizationBBO 0.4.10 0.5.0 0.4.11
OptimizationODE 0.1.9 0.2.0 0.1.10

…and 23 more. OptimizationQuadDIRECT has never been registered but received the same erroneous bump, so it is corrected alongside its siblings (0.4.0 → 0.3.7) purely for consistency.

Lowering the versions makes the [compat] bounds #1286 wrote unsatisfiable — OptimizationBase = "6" cannot resolve against 5.3.0 — so all 130 intra-monorepo bounds across 58 files are lowered in the same PR.

Consequence worth stating explicitly

Under minors, downstream Optimization = "5" bounds keep resolving, so users pick up the ~190-name namespace reduction without opting in. Anyone on the documented using Optimization, OptimizationX pattern is unaffected. Anyone relying on a glue package alone (using OptimizationOptimJL for OptimizationProblem/AutoForwardDiff) breaks without a major to signal it. That tradeoff was chosen deliberately over burning a major on 27 packages.

Verification

  • 60/60 Project.toml files parse
  • 0 unsatisfiable intra-monorepo compat bounds, checked with Pkg.Types.semver_spec rather than hand-rolled matching
  • OptimizationBase Core 54/54 pass on the corrected tree
  • OptimizationOptimJL Core 6969/6969 pass on the corrected tree

After merge

Registration goes bottom-up from OptimizationBase, one first to confirm the bot accepts before firing the remaining 26, then the General PRs get followed to merge and verified against Versions.toml.

🤖 Generated with Claude Code

https://claude.ai/code/session_01A9dFnCQK2GVSNTCJP6ZMG2

SciML#1286 bumped all 28 packages as breaking. By the SciML rule that a
re-exported foreign name is not documented public API, it is not breaking:
no package removed an explicit `export`, and every name that left a
namespace did so through a removed `@reexport` of a foreign package.

Measured with names() against the pre-SciML#1286 tree (Julia 1.11):

  Optimization         228 -> 39 names, 190 dropped, 0 owned by itself
  OptimizationOptimJL  263 -> 36 names, 227 dropped, 0 owned by itself
  OptimizationBBO      244 -> 17 names, 227 dropped, 0 owned by itself
  OptimizationNLopt    271 -> 44 names, 227 dropped, 0 owned by itself

The five the glue packages drop (OptimizationCache, OptimizationVerbosity,
IncompatibleOptimizerError, OptimizerMissingError, the OptimizationBase
binding) are owned by OptimizationBase, so they are foreign there too. The
curated lists deliberately keep the ADTypes names exported.

Versions are the next minor off the *registry* version for >= 1.0 packages
and the next patch below 1.0, e.g. Optimization 6.0.0 -> 5.7.0,
OptimizationBase 6.0.0 -> 5.3.0, OptimizationBBO 0.5.0 -> 0.4.11.
OptimizationQuadDIRECT is not registered but got the same erroneous bump,
so it is corrected alongside its siblings for consistency.

Lowering the versions makes the [compat] bounds SciML#1286 wrote unsatisfiable,
so all 130 intra-monorepo bounds across 58 files are lowered to match.

Verified: 60/60 Project.toml files parse; 0 unsatisfiable intra-monorepo
bounds by Pkg.Types.semver_spec; OptimizationBase Core 54/54 and
OptimizationOptimJL Core 6969/6969 pass on the corrected tree.

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_01A9dFnCQK2GVSNTCJP6ZMG2
@ChrisRackauckas
ChrisRackauckas marked this pull request as ready for review August 2, 2026 11:42
@ChrisRackauckas
ChrisRackauckas merged commit bc8e107 into SciML:master Aug 2, 2026
146 of 157 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