Skip to content

downgrade: auto-skip [sources] path deps (fix Unsatisfiable on monorepo/path-dep downgrade)#87

Merged
ChrisRackauckas merged 1 commit into
SciML:masterfrom
ChrisRackauckas-Claude:downgrade-skip-sources
Jun 13, 2026
Merged

downgrade: auto-skip [sources] path deps (fix Unsatisfiable on monorepo/path-dep downgrade)#87
ChrisRackauckas merged 1 commit into
SciML:masterfrom
ChrisRackauckas-Claude:downgrade-skip-sources

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown

Problem

When a Project.toml declares a [sources] table (path/url deps — common in
monorepos and lib/* workspaces), that dep is satisfied in-tree by the
checkout, not from the registry. julia-actions/julia-downgrade-compat rewrites
every dep's [compat] to =<floor>, but the in-tree path version is whatever
the checkout is — so the pin can't be satisfied and resolution dies with:

ERROR: Unsatisfiable requirements detected for package X:
  ... no versions left

before any test runs. This is the org-wide [sources]+[extras]+[compat]
downgrade breakage.

Fix

Treat every [sources] dep the same way stdlibs are already treated: never
downgrade-pin them
, by unioning their names into the effective skip list.

downgrade.yml

In the existing "Compute effective downgrade skip list" step, for each dir
in projects (comma-separated, default .), parse <dir>/Project.toml's
[sources] keys and union them into EFFECTIVE_SKIP:

using TOML
get(TOML.parsefile(joinpath(dir, "Project.toml")), "sources", Dict()) |> keys

Missing Project.toml / missing [sources] section are guarded; the found
source names are echoed. EFFECTIVE_SKIP is now stdlibs ∪ [sources] ∪ inputs.skip.

sublibrary-downgrade.yml

Its skip step already unions stdlibs + in-repo lib/* directory basenames.
Added: parse the downgraded sublibrary's own [sources] keys
(matrix.project/Project.toml) and union them in. The basename skip only
matches deps whose source name equals a lib/ dir name; parsing the actual
[sources] keys also catches url-/aliased sources.

README.md

Documents that [sources] path/url deps are auto-skipped for both workflows.

Local verification

  • actionlint clean on both workflows.
  • Unit-tested the parse logic against throwaway Project.toml fixtures (with
    [sources], without [sources], a missing dir, and a sublibrary's own
    [sources]). Extracted-step-body output:
[sources] deps in proj_a: MyURLDep,MyPathDep
No Project.toml in 'no_such_dir', skipping [sources] scan
Effective downgrade skip: Pkg,TOML,Statistics,MyURLDep,MyPathDep,ExtraSkipDep

[sources] deps in lib/SubLib: SiblingLib
Effective downgrade skip: Pkg,TOML,Statistics,SubLib,SiblingLib

NOTE

v1 must be retagged after merge for callers (which pin @v1) to pick this
up.

Ignore until reviewed by @ChrisRackauckas.

A dep declared in a Project.toml `[sources]` table is satisfied in-tree
by a path/url checkout, not the registry. julia-downgrade-compat rewrites
its `[compat]` to `=<floor>`, which the in-tree version cannot satisfy ->
"Unsatisfiable requirements ... no versions left" before any test runs.

downgrade.yml: in the "Compute effective downgrade skip list" step, for
each dir in `projects` (comma-separated), parse `<dir>/Project.toml`'s
`[sources]` keys via `using TOML; get(parsefile, "sources", Dict()) |> keys`
and union them into EFFECTIVE_SKIP. Missing files/sections are guarded;
the found names are echoed.

sublibrary-downgrade.yml: the existing skip step already unions stdlibs
and lib/* basenames; additionally parse the downgraded sublibrary's own
`[sources]` keys (catches url/aliased sources that the basename skip
misses) and union them in.

README: note that `[sources]` path/url deps are auto-skipped for both
workflows.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ChrisRackauckas ChrisRackauckas marked this pull request as ready for review June 13, 2026 08:49
@ChrisRackauckas ChrisRackauckas merged commit f82fbfe into SciML:master Jun 13, 2026
2 checks passed
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