Skip to content

Add no_promote: exclude a currently-unresolvable backend (Mooncake) from the merged promotion#52

Merged
ChrisRackauckas merged 1 commit into
julia-actions:mainfrom
ChrisRackauckas-Claude:weakdep-no-promote
Jul 4, 2026
Merged

Add no_promote: exclude a currently-unresolvable backend (Mooncake) from the merged promotion#52
ChrisRackauckas merged 1 commit into
julia-actions:mainfrom
ChrisRackauckas-Claude:weakdep-no-promote

Conversation

@ChrisRackauckas-Claude

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

Copy link
Copy Markdown
Contributor

Problem

In merged resolution (old-style [extras] + [targets].test), the action promotes every weakdep test-extra into one merged [deps] and floor-resolves them together with Resolver.jl --min. That joint floor-test is correct — the extensions all coexist in a single test environment, so they should be resolved together.

The only real problem is one backend that is currently unresolvable on its own: Mooncake, whose dependency graph Resolver.jl cannot --min-resolve at all (StefanKarpinski/Resolver.jl#24 — Pkg resolves the identical graph fine). When Mooncake is in the joint resolve, the whole merged --min errors Unsatisfiable (and it's registry-fragile — the same commit flips UNSATSAT as packages release). This is the fleet-wide SciML Downgrade red.

Fix (minimal, conservative)

Add a no_promote input (comma-separated; new 5th script arg / action input, default empty). A test-extra that is also a [weakdeps] entry and named in no_promote is kept as a weakdep instead of being promoted — it installs at latest during instantiate and is never force-min-resolved. Every other weakdep extension is still promoted and floor-tested jointly, exactly as before.

So no_promote: Mooncake drops just Mooncake from the joint resolve → it succeeds → the Downgrade lane goes green, while every other extension's floor is still exercised together. It's the smallest possible change that greens the lane, and it's opt-in per repo.

Threaded through create_merged_project (both the old-style and the workspace-merge paths).

Validation

  • The otherwise-unsatisfiable JSON = "0.999" extension fails the joint resolve when promoted (stock behavior), and succeeds — kept as a weakdep, absent from the resolved [deps] — when named in no_promote.
  • Suite 105/105.

Sits on top of current main (includes #51). Companion: SciML/.github#106 wires no_promote: Mooncake as the reusable downgrade.yml default so the whole SciML fleet goes green once this releases.

Draft — ignore until reviewed by @ChrisRackauckas.

@ChrisRackauckas-Claude ChrisRackauckas-Claude changed the title Do not promote weakdeps to hard deps in merged resolution Downgrade each weakdep extension independently (per-backend floor-check) in merged resolution Jul 3, 2026
@ChrisRackauckas-Claude ChrisRackauckas-Claude marked this pull request as ready for review July 3, 2026 17:58
…motion

Merged resolution (old-style [extras]/[targets].test) promotes every weakdep
test-extra into one merged [deps] and floor-resolves them together. That joint
floor-test is correct -- the extensions all coexist in a single test environment.
The only problem is a backend that is currently unresolvable on its own: Mooncake,
whose dependency graph Resolver.jl cannot --min-resolve (StefanKarpinski/
Resolver.jl#24) though Pkg resolves it fine.

Add a `no_promote` input (comma-separated; new 5th script arg / action input,
default empty): a test-extra that is also a [weakdeps] entry AND named in
`no_promote` is kept as a weakdep instead of being promoted, so it installs at
latest and is never force-min-resolved. Every other weakdep extension is still
promoted and floor-tested jointly. This is the minimal, most conservative way to
green the Downgrade lane for one bugged backend.

Threaded through create_merged_project (both the old-style and workspace-merge
paths). Test: the otherwise-unsatisfiable JSON="0.999" extension fails the joint
resolve when promoted, and succeeds (kept as a weakdep, absent from resolved deps)
when named in no_promote. Suite 105/105.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
@ChrisRackauckas-Claude ChrisRackauckas-Claude changed the title Downgrade each weakdep extension independently (per-backend floor-check) in merged resolution Add no_promote: exclude a currently-unresolvable backend (Mooncake) from the merged promotion Jul 4, 2026
@ChrisRackauckas ChrisRackauckas merged commit 3cae905 into julia-actions:main Jul 4, 2026
2 checks passed
ChrisRackauckas added a commit to SciML/.github that referenced this pull request Jul 4, 2026
…or-check)

Adds a `no_promote` input (passed to julia-actions/julia-downgrade-compat) that
keeps named weakdep extensions as weakdeps instead of floor-checking them.
Defaults to `Mooncake`, whose dependency graph Resolver.jl cannot --min-resolve
(StefanKarpinski/Resolver.jl#24) and which is registry-fragile, so its floor-check
is skipped fleet-wide while every other weakdep extension is still floor-checked.
Callers can override (e.g. add Reactant, or set empty to floor-check Mooncake).

NOTE: inert until julia-actions/julia-downgrade-compat#52 (which adds the
`no_promote` action input) merges and v2 is retagged; the currently-released v2
ignores the unknown `with:` key, so this is safe to land ahead of that.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
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