From 0166faf0e1570cb418380133139eeddf8a9868f3 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sat, 6 Jun 2026 04:53:38 -0400 Subject: [PATCH 1/4] Fix Julia 1.10 support and add downgrade CI DiscreteMeasures: replace two-arg `allequal(length, x)` (Julia >= 1.11 only) with `allequal(length.(x))`, which is semantically identical and works on Julia 1.10. The two-arg form MethodErrors on 1.10, breaking the LTS. CanonicalMoments: raise the IntervalArithmetic compat floor 0.16 -> 0.18. IntervalArithmetic 0.16-0.17 require RecipesBase <= 0.7 / pull ConstructionBase down, which is unsatisfiable with this package's Symbolics floor; 0.18 is the lowest version that resolves and passes. Kept the disjoint =0.20.9 range. Add .github/workflows/Downgrade.yml: matrix over the 3 workspace submodules (CanonicalMoments.jl, DiscreteMeasures.jl, OUQBase.jl) calling the reusable SciML downgrade workflow at julia-version 1.10, mirroring Tests.yml. Downgrade suite run locally at the compat floors on Julia 1.10: - DiscreteMeasures (IntervalArithmetic 0.16.0): PASS - CanonicalMoments (IntervalArithmetic 0.18.0, Symbolics 6.29.2): PASS - OUQBase (ModelingToolkit 9.69.0, SciMLBase 2.89.1, Symbolics 6.39.1, JuMP 1.23.6, DomainSets 0.7.15, Polynomials 4.0.13): PASS Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/Downgrade.yml | 34 +++++++++++++++++++++ CanonicalMoments.jl/Project.toml | 2 +- DiscreteMeasures.jl/src/DiscreteMeasures.jl | 2 +- 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/Downgrade.yml diff --git a/.github/workflows/Downgrade.yml b/.github/workflows/Downgrade.yml new file mode 100644 index 0000000..86c5ef6 --- /dev/null +++ b/.github/workflows/Downgrade.yml @@ -0,0 +1,34 @@ +name: "Downgrade" + +on: + pull_request: + branches: + - main + paths-ignore: + - 'docs/**' + push: + branches: + - main + paths-ignore: + - 'docs/**' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + downgrade: + name: "Downgrade ${{ matrix.project }} on Julia 1.10" + strategy: + fail-fast: false + matrix: + project: + - CanonicalMoments.jl + - DiscreteMeasures.jl + - OUQBase.jl + uses: "SciML/.github/.github/workflows/downgrade.yml@v1" + with: + julia-version: "1.10" + project: "${{ matrix.project }}" + projects: "${{ matrix.project }}" + secrets: "inherit" diff --git a/CanonicalMoments.jl/Project.toml b/CanonicalMoments.jl/Project.toml index 09f59fe..5c09817 100644 --- a/CanonicalMoments.jl/Project.toml +++ b/CanonicalMoments.jl/Project.toml @@ -24,6 +24,6 @@ IntervalArithmeticExt = "IntervalArithmetic" SymbolicsExt = "Symbolics" [compat] -IntervalArithmetic = "0.16 - 0.20, =0.20.9" +IntervalArithmetic = "0.18 - 0.20, =0.20.9" Reexport = "1.2.2" Symbolics = "6.29.2" diff --git a/DiscreteMeasures.jl/src/DiscreteMeasures.jl b/DiscreteMeasures.jl/src/DiscreteMeasures.jl index 315ba39..ca9b9fb 100644 --- a/DiscreteMeasures.jl/src/DiscreteMeasures.jl +++ b/DiscreteMeasures.jl/src/DiscreteMeasures.jl @@ -31,7 +31,7 @@ struct DiscreteMeasure{𝕋, 𝕏, 𝕎} <: AbstractDiscreteMeasure function DiscreteMeasure(x::𝕏, w::𝕎) where {𝕋, 𝕏 <: AbstractVector{𝕋}, 𝕎 <: AbstractVector} @assert length(w) == length(x) - @assert allequal(length, x) + @assert allequal(length.(x)) return new{𝕋, 𝕏, 𝕎}(length(first(x)), x, w) end end From 54161c7784c03a4755e57965b3d8912aee3562f5 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sat, 6 Jun 2026 14:26:12 -0400 Subject: [PATCH 2/4] ci(downgrade): set allow-reresolve: true The strict (allow-reresolve: false) downgrade cannot reconcile this package's floored core deps against the latest-floating transitive SciML stack. allow-reresolve: true lets Pkg resolve a consistent set while still enforcing the floor [compat] pins set by julia-downgrade-compat. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/Downgrade.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/Downgrade.yml b/.github/workflows/Downgrade.yml index 86c5ef6..7f74cf4 100644 --- a/.github/workflows/Downgrade.yml +++ b/.github/workflows/Downgrade.yml @@ -28,6 +28,7 @@ jobs: - OUQBase.jl uses: "SciML/.github/.github/workflows/downgrade.yml@v1" with: + allow-reresolve: true julia-version: "1.10" project: "${{ matrix.project }}" projects: "${{ matrix.project }}" From 7dfe4a977730184f29cceae5090d2fb1c3fb2a32 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sat, 6 Jun 2026 16:53:39 -0400 Subject: [PATCH 3/4] fix(downgrade): add [sources] for sibling submodules and raise floors The downgrade CI resolves each workspace submodule in isolation via julia-downgrade-compat, which cannot resolve sibling submodule deps (DiscreteMeasures, CanonicalMoments) since they are unregistered path deps -> "unknown package UUID". Declare them via [sources] so the action removes them for resolution and re-adds them to the manifest as path deps (the same mechanism SciML tests.yml@v1 relies on). Submodule floor bumps (verified resolvable + test-passing at floors on Julia 1.10, deps-mode, allow_reresolve=true): CanonicalMoments: - add [sources] DiscreteMeasures = ../DiscreteMeasures.jl - Polynomials: (none) -> "4" (0.5.0 lacked AbstractPolynomial export) - RecurrenceRelationships: (none) -> "0.2" - add julia/LinearAlgebra/Statistics/DiscreteMeasures floors OUQBase: - add [sources] CanonicalMoments + DiscreteMeasures path deps - SciMLBase: 2.89.1 -> 2.153 (2.89.1 held Optimization to 3.25.1, too old for the test stack's OptimizationBBO -> UndefVarError deduce_retcode; 2.153 lets OptimizationBBO/OptimizationBase/Optimization resolve consistently, matching the passing latest-CI set) Downgrade suite run locally at these floors: PASS - CanonicalMoments: Orthogonal Polynomial Roots 11/11, Moment Sequence 260/260 - OUQBase: FloodProblem solve pipeline completes (was failing on deduce_retcode) Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- CanonicalMoments.jl/Project.toml | 9 +++++++++ OUQBase.jl/Project.toml | 6 +++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CanonicalMoments.jl/Project.toml b/CanonicalMoments.jl/Project.toml index 5c09817..744eaf7 100644 --- a/CanonicalMoments.jl/Project.toml +++ b/CanonicalMoments.jl/Project.toml @@ -24,6 +24,15 @@ IntervalArithmeticExt = "IntervalArithmetic" SymbolicsExt = "Symbolics" [compat] +julia = "1.10" +DiscreteMeasures = "0.1" +LinearAlgebra = "1.10" +Polynomials = "4" +RecurrenceRelationships = "0.2" +Statistics = "1.10" IntervalArithmetic = "0.18 - 0.20, =0.20.9" Reexport = "1.2.2" Symbolics = "6.29.2" + +[sources] +DiscreteMeasures = { path = "../DiscreteMeasures.jl" } diff --git a/OUQBase.jl/Project.toml b/OUQBase.jl/Project.toml index 69a106a..d57720e 100644 --- a/OUQBase.jl/Project.toml +++ b/OUQBase.jl/Project.toml @@ -27,8 +27,12 @@ NaNMath = "1.1.3" OrderedCollections = "1.7.0" Polynomials = "4.0.13" Reexport = "1.2.2" -SciMLBase = "2.89.1" +SciMLBase = "2.153" Symbolics = "6.39.1" +[sources] +CanonicalMoments = { path = "../CanonicalMoments.jl" } +DiscreteMeasures = { path = "../DiscreteMeasures.jl" } + [workspace] projects = ["test"] From 6d8a521beecb2671a7ebc8e8d8d7c39acbc54c52 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sat, 6 Jun 2026 18:34:09 -0400 Subject: [PATCH 4/4] ci(downgrade): use strict allow-reresolve: false Flip the Downgrade.yml caller from allow-reresolve: true to the strict SciML default (false). With false, julia-downgrade-compat resolves each workspace submodule's [deps] to their floors with transitive deps at LATEST, and Pkg.test must instantiate that exact set with NO reconciliation -- the rigorous downgrade that forces the declared [deps] floors to be genuinely compatible with the latest transitive ecosystem. Verified locally on Julia 1.10 (deps-mode, Pkg.test(allow_reresolve=false)) per matrix submodule -- ALL PASS at the existing floors, no floor raises needed beyond those already in this PR: - DiscreteMeasures.jl: 45/45 (DiscreteMeasure 8, ProductDiscreteMeasure 15, Expectation 3, Measure Restrictions 19) - CanonicalMoments.jl: Orthogonal Polynomial Roots 11/11, Moment Sequence 260/260 - OUQBase.jl: FloodProblem OptimizationBBO solve pipeline completes (best candidate [0.344441, 0.831005], fitness 0.1927), tests passed Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/Downgrade.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/Downgrade.yml b/.github/workflows/Downgrade.yml index 7f74cf4..afbb38c 100644 --- a/.github/workflows/Downgrade.yml +++ b/.github/workflows/Downgrade.yml @@ -28,7 +28,7 @@ jobs: - OUQBase.jl uses: "SciML/.github/.github/workflows/downgrade.yml@v1" with: - allow-reresolve: true + allow-reresolve: false julia-version: "1.10" project: "${{ matrix.project }}" projects: "${{ matrix.project }}"