Skip to content

Reconcile path-source constraints in downgrade tests#118

Closed
ChrisRackauckas-Claude wants to merge 1 commit into
SciML:masterfrom
ChrisRackauckas-Claude:agent/reconcile-downgrade-sources
Closed

Reconcile path-source constraints in downgrade tests#118
ChrisRackauckas-Claude wants to merge 1 commit into
SciML:masterfrom
ChrisRackauckas-Claude:agent/reconcile-downgrade-sources

Conversation

@ChrisRackauckas-Claude

@ChrisRackauckas-Claude ChrisRackauckas-Claude commented Jul 16, 2026

Copy link
Copy Markdown
Member

Ignore this PR until reviewed by @ChrisRackauckas.

Summary

  • Expose runtime dependencies, weak dependencies, and effective minimum compat floors from local path-source packages before julia-downgrade-compat runs.
  • Restore the package's original Project.toml after minimum resolution while retaining the reconciled manifest and refreshing its project hash.
  • Keep the final package test locked with allow_reresolve: false.
  • Add a local-registry regression that first reproduces the omitted path-source constraint, then proves the reconciled floor passes the same locked test.

Why

julia-actions/julia-downgrade-compat@v2 removes local [sources] packages before Resolver.jl computes minimum versions and appends them to the manifest afterward. Their unique transitive constraints therefore do not participate in resolution.

That made OrdinaryDiffEq's source OrdinaryDiffEqNonlinearSolve require SciMLOperators >= 1.24.3 and NonlinearSolveBase >= 2.34.1 only after the shared workflow had already selected older versions. Duplicating those floors across every consuming sublibrary would encode transitive implementation details in unrelated packages. This wrapper lets the resolver see the source constraints instead.

OrdinaryDiffEq PR #3917 remains the package-level declaration of the direct NonlinearSolveBase requirement. This PR makes that declaration effective in all path-source downgrade lanes.

Local verification

  • julia +1.11 --startup-file=no test/runtests.jl — passed; all testsets passed, including reconciliation 20/20, locked source-floor regression 8/8, and workflow ordering 4/4.
  • julia +1.12 --startup-file=no test/runtests.jl — passed with the same results.
  • actionlint -color — passed.
  • julia +1.12 --startup-file=no -m Runic --check . — passed.
  • git diff --check — passed.

OrdinaryDiffEq replay

On clean OrdinaryDiffEq commit aa895b563, with only #3917's direct NonlinearSolveBase = "2.34.1" change applied, I ran this helper around the exact deployed downgrade action. Resolver.jl selected:

  • MuladdMacro 0.2.4
  • SciMLOperators 1.24.3
  • NonlinearSolveBase 2.34.1
  • LinearSolve 4.3.0

The original Core project was restored exactly, and the exact locked Core package test then exited 0: 10/10, 18/18, 30/30, and 49/49 assertions passed.

After merge, the shared v1 tag must be advanced before existing callers receive the helper.

Julia 1.10 boundary

The failing OrdinaryDiffEq workflow explicitly uses Julia 1.11. On Julia 1.10, Pkg.test ignores [sources] while constructing its test sandbox and rejects an unregistered test source before reaching this constraint-reconciliation path. This PR does not claim to fix that separate pre-existing limitation of path-sourced sublibrary tests on pre-1.11 Julia.

Expose transitive runtime constraints from local source packages before minimum resolution, then restore the original project for locked testing.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>

Copy link
Copy Markdown
Member Author

CI timer check (2026-07-16 16:33 EDT): all hosted checks passed.

  • actionlint + shellcheck: passed
  • monorepo TagBot resolver tests: passed
  • compute_affected_sublibraries.jl tests: passed in 8m37s, including the new locked path-source regression

A fresh git fetch upstream leaves git log HEAD..upstream/master --oneline empty. The branch is clean, the PR is draft, and GitHub reports it mergeable with a CLEAN merge state.

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Member Author

Closing this draft as superseded by julia-actions/julia-downgrade-compat#56.

The upstream action fix now handles the problem at its source: it traverses recursive path sources, includes their hard constraints in minimum resolution, reconstructs complete path-manifest metadata, intersects root/local compat ranges, and prevents test-only path graphs from escaping their locked floors during Pkg.test.

At upstream head aa650a4:

  • local action suites passed on Julia 1.10 (162/162), 1.11 (166/166), and 1.12 (166/166)
  • hosted action CI passed on Julia 1.10 and current Julia
  • the exact OrdinaryDiffEq#3917 replay selected MuladdMacro 0.2.4, SciMLOperators 1.24.3, NonlinearSolveBase 2.34.1, NonlinearSolve 4.20.3, and LinearSolve 4.3.0
  • locked InterfaceI testing completed all 27 testsets with OrdinaryDiffEq tests passed
  • locked Pkg.build() exited 0 after successfully precompiling 400 dependencies
  • both operations left the Project and Manifest hashes unchanged

This PR was not merged. The shared workflow needs no repository-specific reconciliation once upstream #56 is merged and the floating v2 action tag is advanced; until then, the released @v2 still has the old behavior.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants