Skip to content

OptimizationManopt QA misses deprecated Manopt reexport in generated allow-list #1295

Description

@ChrisRackauckas-Claude

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions