Skip to content

test_persistent_tasks errors when an installed dependency ships a path-[sources] (Julia ≥1.11) #387

Description

@ChrisRackauckas-Claude

Summary

On Julia ≥1.11, Aqua.test_persistent_tasks / find_persistent_tasks_deps(P) errors for a package P when P (or one of its direct deps) is an installed package whose Project.toml carries a relative-path [sources] entry pointing at a sibling that does not exist in the depot.

The persistent-tasks wrapper develops each dep by path — Pkg.develop(PackageSpec(path = installed_dep_dir)). On Julia ≥1.11, Pkg honors the [sources] baked into that installed dep's Project.toml and hard-errors on the absent ../Sibling:

expected package `OptimizationBase [bca83a33]` to exist at path
`/.../packages/OptimizationBBO/OptimizationBase`

(raised from persistent_tasks.jlPkg.developcollect_fixed!).

This affects any package depending on a monorepo sublibrary that ships a relative-path [sources] in its registered tarball — e.g. OptimizationBBO 0.4.4–0.4.7 ships [sources] OptimizationBase = {path = "../OptimizationBase"}; ~76 registered packages ecosystem-wide do the same. It passes on Julia 1.10 (which ignores installed [sources]) and fails on 1.11/1.12/1.13.

Root cause & suggested mitigation

The underlying issue is arguably in Pkg — it honors [sources] for a package being used as a dependency, contrary to Pkg's documented contract that [sources] "is not used if this project is a package that is being used as a dependency." Reported at JuliaLang/Pkg.jl#4705 (with a self-contained MWE).

As an Aqua-side mitigation that doesn't depend on the Pkg fix landing: before Pkg.develop-ing a dependency by path in the persistent-tasks wrapper, strip the [sources] table from the (copied) dep Project.toml in the temporary env, so the genuine persistent-tasks precompile still runs but the spurious relative-[sources] can't be honored. (The check itself — whether the package leaves a persistent task running — is unaffected; only the dev-wiring [sources] is removed.)

Reproduction

See the MWE in JuliaLang/Pkg.jl#4705 (a 1-dep package with a path-[sources] to a non-existent sibling; Pkg.develop(path=...) succeeds on 1.10, fails on ≥1.11). The Aqua surface is test_persistent_tasks over a dep-set that includes such a package.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions