Dev the local package in each GPU test environment - #4053
Merged
ChrisRackauckas merged 1 commit intoJul 29, 2026
Conversation
Every lib/*/test/gpu/Project.toml lists the sublibrary under test in [deps] but
most had no matching [sources] entry, so Pkg resolved the package under test
from the General registry instead of the working tree.
That made lib/OrdinaryDiffEqCore/test/gpu unresolvable. The registry's newest
OrdinaryDiffEqCore is 4.8.0, but OrdinaryDiffEqTsit5 -- which does arrive by
path, through the umbrella's [sources] -- requires OrdinaryDiffEqCore 4.10:
OrdinaryDiffEqCore [bbf590c4] log:
├─possible versions are: 1.0.0 - 4.8.0 or uninstalled
├─restricted to versions 4.8.0 - 5 by OrdinaryDiffEq, leaving only 4.8.0
└─restricted to versions 4.10.0 - 4 by OrdinaryDiffEqTsit5 — no versions left
A source entry is needed on the gpu environment itself: [sources] is only read
from the active project, and a direct dependency of the active project with no
source is taken from the registry regardless of what any dependency's [sources]
says.
The quieter half of the bug is that the other six environments resolved fine
while testing released code rather than the branch. Resolving each gpu
environment and checking where the package under test comes from:
before after
OrdinaryDiffEqBDF self=REGISTRY Core=REGISTRY self=LOCAL Core=LOCAL
OrdinaryDiffEqCore RESOLVE FAILED self=LOCAL Core=LOCAL
OrdinaryDiffEqLinear self=REGISTRY Core=LOCAL self=LOCAL Core=LOCAL
OrdinaryDiffEqLowStorageRK self=REGISTRY Core=LOCAL self=LOCAL Core=LOCAL
OrdinaryDiffEqRKIP self=REGISTRY Core=REGISTRY self=LOCAL Core=LOCAL
OrdinaryDiffEqRosenbrock self=REGISTRY Core=LOCAL self=LOCAL Core=LOCAL
OrdinaryDiffEqStabilizedRK self=REGISTRY Core=LOCAL self=LOCAL Core=LOCAL
OrdinaryDiffEqDefault self=LOCAL Core=LOCAL unchanged
StochasticDiffEq self=absent Core=absent unchanged
Resolution only; the GPU tests themselves need a CUDA device to run.
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_013WW2jGeoWZVZu7AiscUNSz
ChrisRackauckas
marked this pull request as ready for review
July 29, 2026 10:30
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.
The bug
Every
lib/*/test/gpu/Project.tomllists the sublibrary under test in[deps], but most had no matching[sources]entry. So Pkg resolved the package being tested from the General registry rather than from the working tree.For
lib/OrdinaryDiffEqCore/test/gputhat is fatal. The registry's newestOrdinaryDiffEqCoreis 4.8.0; the working tree is at 4.11.1; andOrdinaryDiffEqTsit5— which does arrive by path, through the umbrella's[sources]— hascompat OrdinaryDiffEqCore = "4.10":A source entry is needed on the gpu environment itself.
[sources]is only read from the active project, and a direct dependency of the active project with no source is taken from the registry regardless of what any dependency's[sources]says. That is exactly whyOrdinaryDiffEqTsit5(not a direct dep of the gpu env) resolves to a path whileOrdinaryDiffEqCore(a direct dep) does not.The quieter half
The six environments that did resolve were resolving the package under test from the registry — running the GPU suite against the last release instead of the branch. Green, and meaningless. That is arguably the worse failure, since it produced no signal at all.
The change
One
[sources.<self>]entry per affected gpu environment. 7 files, +21 lines, no code.Verification
I resolved every gpu environment before and after (scratch copy of each
Project.tomlat identical directory depth so the relative paths still apply), recording where the package under test andOrdinaryDiffEqCoreactually come from:OrdinaryDiffEqCoreOrdinaryDiffEqBDFOrdinaryDiffEqRKIPOrdinaryDiffEqLinearOrdinaryDiffEqLowStorageRKOrdinaryDiffEqRosenbrockOrdinaryDiffEqStabilizedRKOrdinaryDiffEqDefaultStochasticDiffEqThe
OrdinaryDiffEqCorefailure reproduces locally byte-for-byte against the CI log before the change, and resolves toOrdinaryDiffEqCore 4.11.1fromlib/OrdinaryDiffEqCore/after.This is resolution only. I have no CUDA device, so I have not run the GPU tests themselves. What this PR establishes is that the environments resolve, and that they now resolve to the working tree.
Two related problems this PR does not fix
lib/StochasticDiffEq/test/gpudoesusing StochasticDiffEqandusing DiffEqNoiseProcess, but itsProject.tomldeclares neither in[deps](only CUDA, DiffEqGPU, Statistics, Test). That is a missing-dependency bug rather than a missing-source one, it would fail at load rather than resolve, and its group (WeakAdaptiveGPU) islocal_only+ gpu-pinned so it does not currently run. I left it alone rather than add deps I cannot exercise.OrdinaryDiffEqBDF [GPU]andOrdinaryDiffEqDefault [GPU]were red for a different reason — they failed earlier, at the sublibrary's own project, onNonlinearSolve:OrdinaryDiffEqNonlinearSolvedeclared a floor of 4.24.0 while the registry topped out at 4.23.0. NonlinearSolve 4.24.0 has since been released, and bothlib/OrdinaryDiffEqBDFandlib/OrdinaryDiffEqDefaultnow resolve cleanly, so that one has self-resolved. Worth noting as a pattern though: a compat floor landed ahead of the release it depended on.Separately, six GPU jobs in recent history are
cancelled, not failed — no runner carrying thegpulabel picked them up. That is a fleet/scheduling matter, unrelated to this PR.Links
🤖 Generated with Claude Code
https://claude.ai/code/session_013WW2jGeoWZVZu7AiscUNSz