Summary
OptimizationManopt QA fails on current master because its generated backend reexport allow-list misses Manopt deprecated binding AbstractManifoldGradientObjective.
This reproduces at bc8e107.
Reproduction
git checkout bc8e107fb5bc755b45e7cfe6f1a5cf73b544e45c
OPTIMIZATION_TEST_GROUP=QA julia +1.12 --project=lib/OptimizationManopt -e "using Pkg; Pkg.test(; allow_reresolve=true)"
The current General registry resolved SciMLTesting 2.7.0 and Manopt 0.6.3. The result was:
No unapproved public reexports: Test Failed
Evaluated: isempty([:AbstractManifoldGradientObjective])
Test Summary: | Pass Fail Broken Total Time
Quality Assurance | 19 1 1 21 2m15.7s
ERROR: Some tests did not pass: 19 passed, 1 failed, 0 errored, 1 broken.
SciMLTesting 2.8.0 has the same relevant behavior. A direct probe produced:
SciMLTesting=2.8.0 Manopt=0.6.3
binding: Manopt names=false, Wrapper names=true
repo-style allow result=[:AbstractManifoldGradientObjective]
explicit allow result=Symbol[]
Cause
Manopt defines this compatibility alias with:
Base.@deprecate_binding AbstractManifoldGradientObjective AbstractManifoldFirstOrderObjective
Julia reports that binding as exported and public, but omits it from names(Manopt; all = false, imported = false). @reexport using Manopt nevertheless exposes it from OptimizationManopt. optimization_reexports_allow(OptimizationManopt.Manopt) is built from SciMLTesting.public_api_names(Manopt), which delegates to that names call, so the deprecated binding is the one backend export not allowed.
This behavior is present across Manopt 0.5.38 through 0.6.3 and Julia 1.10 through 1.12, so it is not a recent Manopt regression. The dependency transition is SciMLTesting 2.4.0: 2.3.0 has no public-reexport audit, while 2.4.0 introduced it and returns this finding. The repository attempted to satisfy that new audit in 7f25ce1, but the dynamic allow-list cannot see this deprecated binding.
Narrow fix verified locally
Adding the deprecated binding explicitly to the OptimizationManopt QA allow-list fixes the failure:
reexports_allow = (
optimization_reexports_allow(OptimizationManopt.Manopt)...,
:AbstractManifoldGradientObjective,
),
Verification on Julia 1.12.6:
Test Summary: | Pass Broken Total Time
Quality Assurance | 20 1 21 2m21.9s
Testing OptimizationManopt tests passed
Formatting and whitespace checks also passed:
julia +1.12 --startup-file=no -m Runic --check lib/OptimizationManopt/test/qa/qa.jl
git diff --check
Version information
Julia Version 1.12.6
Commit 15346901f00 (2026-04-09 19:20 UTC)
OS: Linux (x86_64-linux-gnu)
CPU: AMD EPYC 7502 32-Core Processor
WORD_SIZE: 64
LLVM: libLLVM-18.1.7 (ORCJIT, znver2)
Threads: 1 default, 1 interactive, 1 GC
Summary
OptimizationManopt QA fails on current
masterbecause its generated backend reexport allow-list misses Manopt deprecated bindingAbstractManifoldGradientObjective.This reproduces at bc8e107.
Reproduction
git checkout bc8e107fb5bc755b45e7cfe6f1a5cf73b544e45c OPTIMIZATION_TEST_GROUP=QA julia +1.12 --project=lib/OptimizationManopt -e "using Pkg; Pkg.test(; allow_reresolve=true)"The current General registry resolved SciMLTesting 2.7.0 and Manopt 0.6.3. The result was:
SciMLTesting 2.8.0 has the same relevant behavior. A direct probe produced:
Cause
Manopt defines this compatibility alias with:
Julia reports that binding as exported and public, but omits it from
names(Manopt; all = false, imported = false).@reexport using Manoptnevertheless exposes it from OptimizationManopt.optimization_reexports_allow(OptimizationManopt.Manopt)is built fromSciMLTesting.public_api_names(Manopt), which delegates to thatnamescall, so the deprecated binding is the one backend export not allowed.This behavior is present across Manopt 0.5.38 through 0.6.3 and Julia 1.10 through 1.12, so it is not a recent Manopt regression. The dependency transition is SciMLTesting 2.4.0: 2.3.0 has no public-reexport audit, while 2.4.0 introduced it and returns this finding. The repository attempted to satisfy that new audit in 7f25ce1, but the dynamic allow-list cannot see this deprecated binding.
Narrow fix verified locally
Adding the deprecated binding explicitly to the OptimizationManopt QA allow-list fixes the failure:
Verification on Julia 1.12.6:
Formatting and whitespace checks also passed:
Version information