Skip to content

Sublibrary QA fails Aqua stale_deps/deps_compat on Julia lts when [sources] reaches the umbrella root #971

Description

@ChrisRackauckas-Claude

On Julia < 1.11 the sublibrary dispatcher in test/runtests.jl works around Pkg ignoring the [sources] table by Pkg.activate-ing the sublibrary and Pkg.develop-ing the transitive [sources] closure. Pkg.develop into the active project adds those packages to the sublibrary's own Project.toml [deps] in the working tree. The Aqua QA tests then read that mutated Project.toml and fail:

Stale dependencies: Test Failed
  Evaluated: isempty(Base.PkgId[NonlinearSolve, NonlinearSolveQuasiNewton, BracketingNonlinearSolve,
  SimpleNonlinearSolve, NonlinearSolveSpectralMethods, NonlinearSolveFirstOrder])
NonlinearSolveHomotopyContinuation does not declare a compat entry for the following deps:
  BracketingNonlinearSolve, NonlinearSolveFirstOrder, NonlinearSolveQuasiNewton,
  NonlinearSolveSpectralMethods, SciMLJacobianOperators, SimpleNonlinearSolve

The flagged set is exactly the [sources]-transitive develop set (umbrella root → all sublibraries, NonlinearSolveBase → SciMLJacobianOperators), confirming the mechanism. The same job on Julia 1 / pre passes because [sources] is honored and no mutation happens.

Affected: any sublibrary whose [sources] includes the umbrella root (path = "../.."), i.e. NonlinearSolveHomotopyContinuation and SCCNonlinearSolve, and only their [QA] (julia lts) jobs. Easy to miss because the sublibrary matrix is path-filtered: these jobs only run when the sublibrary itself is touched — first observed on #970 (see https://github.com/SciML/NonlinearSolve.jl/actions/runs/27450537066/job/81144716461).

Possible directions (each with trade-offs, so leaving to a maintainer decision rather than bundling into #970):

  • Move the lts develop workaround from the dispatcher (which mutates the real Project.toml pre-test) into the sublibrary test runners, developing into the ephemeral test env instead — mirrors what the base-env groups do after Improve HomotopySweep adaptive step control: success expansion, quality-gated growth, trust-monitored secant predictor #967; Aqua would then read the unmutated package Project.toml via pkgdir.
  • Restore the sublibrary Project.toml after Pkg.test returns (doesn't help: Aqua runs during the test).
  • Scope the lts QA Aqua checks to the declared dep set (effectively ignoring harness-injected deps) — least invasive but weakens the check on lts.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions