[AI] Correct the #1286 version bumps to the next sequential minor - #1293
Merged
ChrisRackauckas merged 1 commit intoAug 2, 2026
Conversation
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
marked this pull request as ready for review
August 2, 2026 11:42
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.
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@reexportof a foreign package. Measured withnames()against the pre-#1286 tree on Julia 1.11:OptimizationOptimizationOptimJLOptimizationBBOOptimizationNLoptThe five names the glue packages drop —
OptimizationCache,OptimizationVerbosity,IncompatibleOptimizerError,OptimizerMissingError, and theOptimizationBasemodule binding — are owned byOptimizationBase, 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.0packages and the next patch below 1.0 — taken fromGeneral/*/Versions.toml, not from master:OptimizationOptimizationBaseOptimizationIpoptOptimizationBBOOptimizationODE…and 23 more.
OptimizationQuadDIRECThas 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 documentedusing Optimization, OptimizationXpattern is unaffected. Anyone relying on a glue package alone (using OptimizationOptimJLforOptimizationProblem/AutoForwardDiff) breaks without a major to signal it. That tradeoff was chosen deliberately over burning a major on 27 packages.Verification
Project.tomlfiles parsePkg.Types.semver_specrather than hand-rolled matchingOptimizationBaseCore 54/54 pass on the corrected treeOptimizationOptimJLCore 6969/6969 pass on the corrected treeAfter 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 againstVersions.toml.🤖 Generated with Claude Code
https://claude.ai/code/session_01A9dFnCQK2GVSNTCJP6ZMG2