Repository navigation
Re-enable downgrade CI; raise compat floors (LinearSolve 5.4 et al.) - #174
Merged
ChrisRackauckas merged 2 commits intoSep 27, 2026
Merged
ChrisRackauckas merged 2 commits into
ChrisRackauckas merged 2 commits into
Conversation
The declared floors were unreachable in the merged dependency graph or shipped a known bug: LinearSolve <5.4 calls `issquare` in its ForwardDiff extension without importing it (UndefVarError when SciMLBase <3.50 does not re-export it), and ConcreteStructs/DiffEqBase/DiffEqCallbacks/ ForwardDiff/SymbolicIndexingInterface at their old floors cannot co-resolve with the package's own SciMLBase >=3.55 requirement. Part of SciML#115 Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Devin <noreply@cognition.ai> Agent-Harness: Devin CLI 3000.11.1 Agent-Model: swe-2-max Agent-Session: local session, transcript at /home/crackauc/sandbox/agent-jobs/SteadyStateDiffEq.jl/jobs/115-devin/log.txt on amdci2.julia.csail.mit.edu
Restore the workflow disabled in SciML#162 now that the compat floors resolve to a self-consistent minimum set that passes the full Core test group on Julia lts with allow_reresolve=false. Closes SciML#115 Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Devin <noreply@cognition.ai> Agent-Harness: Devin CLI 3000.11.1 Agent-Model: swe-2-max Agent-Session: local session, transcript at /home/crackauc/sandbox/agent-jobs/SteadyStateDiffEq.jl/jobs/115-devin/log.txt on amdci2.julia.csail.mit.edu
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.
Summary
Re-enables the downgrade CI workflow (disabled in #162 after the failure reported in #115) and raises six minimum compat bounds to the smallest versions that are both bug-free and mutually resolvable. The key bump is
LinearSolve = "5.1"→"5.4": LinearSolve <5.4 callsissquareinLinearSolveForwardDiffExtwithout importing it (fixed by SciML/LinearSolve.jl#1125), and a runtime-only resolve at the old floor still selects LinearSolve 5.1.0 today, so the broken bound is still reachable. The other five bumps are documentation-only corrections of floors that were already unreachable — at the declared bounds those versions cannot co-resolve with this package's ownSciMLBase = "3.55"requirement.Root cause of the September failure
Historical CI log (run 34304353015, Julia lts, julia-downgrade-compat@30b83cf):
That run resolved LinearSolve 5.2.0 + SciMLBase 3.48.0.
issquarelives in SciMLOperators and is re-exported by SciMLBase only from 3.50.0 onward; LinearSolve's ForwardDiff extension used it bare until the explicitusing SciMLOperators: issquarewas added in LinearSolve 5.4.0 (5.2.0 and 5.3.0 both still lack the import — verified against the depot sources). The declared5.1floor is genuinely reachable: a scratch env with only the runtime deps at the old bounds resolved LinearSolve 5.1.0.Verification
All steps on Julia
+lts(1.10.12), matching the workflow'sjulia-version: lts, using the currentjulia-actions/julia-downgrade-compat@v2.7.0downgrade.jl(commit30b83cf94e89744fcbd7ea5496be4967d6fbe540) with modedepsand the effective skip list = Julia stdlibs (no caller skip), exactly asSciML/.githubdowngrade.yml@v1passes. Each environment used its own depot under scratch.Resolution at the new floors (merged main+test project, as v2.7 builds):
Build:
140 dependencies successfully precompiled in 407 seconds. 114 already precompiled.Test (CI-faithful,
GROUP=""→ SciMLTesting default "All" = Core files):The same CI-faithful run at the baseline (pre-bump) floors also passed, because today's registry already forces LinearSolve ≥5.4 through test-only deps (NonlinearSolveFirstOrder/NonlinearSolveQuasiNewton → NonlinearSolveBase ≥1.15). That is exactly why the floor documentation matters: the resolved graph hides that the declared bounds were wrong.
Lint checks on the diff:
typos .github/workflows/Downgrade.yml Project.toml→ clean;Runic.main(["--check", "src", "test"])→ exit 0 (no.jlfiles changed);yaml.safe_loadon the workflow → OK. The workflow diff is a pure rename of the file disabled in #162.What I did NOT verify
GROUP=QA, Aqua/ExplicitImports/JET) was not run at the downgraded floor; the CI-faithfulGROUP=""run covers the Core files only, matching the workflow's invocation.UndefVarErrorreproduction at LinearSolve <5.4 is not possible with this package's currentSciMLBase = "3.55"bound (3.55 re-exportsissquare); the mechanism is established from the September log (SciMLBase 3.48.0), the missing import in LinearSolve 5.2.0/5.3.0 source, and the added import in 5.4.0.What a reviewer should push back on
SciMLBase = "3.55". They match the floor correction produced bymerged_resolve.jland the precedent set in Re-enable downgrade CI: raise compat lower bounds and use allow_reresolve OrdinaryDiffEq.jl#3701 (bump every unreachable floor to the resolved minimum). Each is the smallest version satisfying the graph: e.g. ForwardDiff 1.0.0 is excluded by PreallocationTools required via SciMLBase ≥3.55; DiffEqBase <7.15 caps SciMLBase below the declared floor.LinearSolve = "5.4"rather than a tighter bound: 5.4.0 is the first release with theissquareimport; nothing else forces higher.Closes #115
Please ignore this draft until reviewed by @ChrisRackauckas.
Risk assessment
[compat]lower bounds only — no code changes; worst case a user pinned below a new floor cannot upgrade to the next release of this package (that combination was already unresolvable or buggy). Re-enabled workflow adds one CI job.UndefVarError: issquare), source-level fix boundary confirmed in LinearSolve 5.2.0/5.3.0 vs 5.4.0, full Core suite green locally at the new floor withallow_reresolve=falseon Julia 1.10.12.🤖 Generated with Devin CLI 3000.11.1 (model: swe-2-max). Session: local transcript at /home/crackauc/sandbox/agent-jobs/SteadyStateDiffEq.jl/jobs/115-devin/log.txt on amdci2.julia.csail.mit.edu
Risk assessment
33d2ac3has 13 successful checks, includingtest / Downgrade Tests, Core (lts, 1, x86), and QA. Corresponding Core/QA checks pass on default branchd81bcf1; no test regressions found. Corepreskips execution on both.Dependabot Auto-mergereportsstartup_failure: pre-existing infrastructure failure supported by earlier identical failures using the same reusable-workflow SHA; direct default-branch comparison is unavailable because this workflow only runs on PRs. Its logs are unavailable. No review comments exist. The description omits this startup failure and is stale about Downgrade CI not having run; its missing failing-before reproduction is explicitly disclosed.🤖 Risk assessment posted by an AI agent (fleet master) — harness: Codex CLI 0.156.1 (Mac) / gpt-6-astra; dispatched by Claude Code head, model claude-opus-5-5[1m]
Conversation: local Claude Code session 3cd6500a-1f81-46b5-ac0b-c466e15b6a53 on Chris's Mac (session ID, no URL)