Skip to content

Rebase features into Rewrite#61

Draft
AlCap23 wants to merge 86 commits into
CJM-Layersfrom
main
Draft

Rebase features into Rewrite#61
AlCap23 wants to merge 86 commits into
CJM-Layersfrom
main

Conversation

@AlCap23

@AlCap23 AlCap23 commented May 8, 2026

Copy link
Copy Markdown
Collaborator

Checklist

  • Appropriate tests were added
  • Any code changes were done in a way that does not break public API
  • All documentation related to code changes were updated
  • The new code follows the
    contributor guidelines, in particular the SciML Style Guide and
    COLPRAC.
  • Any new documentation only uses public API

Additional context

Add any other context about the problem here.

rlampel and others added 30 commits March 9, 2026 16:25
Updating FIM from previous experiments
Added ModelingToolkit benchmark library
Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.18.0 to 1.45.2.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.18.0...v1.45.2)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-version: 1.45.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bump version from 0.0.2 to 0.0.3
…typos-1.45.2

Bump crate-ci/typos from 1.18.0 to 1.45.2
ChrisRackauckas and others added 21 commits June 4, 2026 22:06
Don't assume python3 is on the runner. jq is preinstalled on GitHub-hosted
ubuntu runners (where the list-sublibraries job runs) and builds the JSON
array directly.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
jq isn't guaranteed on self-hosted runners any more than python3 is. lib/*
directory names have no JSON-special characters, so build the array with
plain shell quoting and depend on neither.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The list-lib/*-and-matrix logic moved into the reusable
sublibrary-project-tests.yml in SciML/.github, so this caller collapses to
just the branch triggers, concurrency, and a single `uses:`. No duplicated
detection logic per repo.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Part of bringing this repo onto the full centralized CI setup (SciML/.github
@v1): remove retired CompatHelper (Dependabot drives [compat]) and/or add the
centralized Documenter preview cleanup.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ect-model

ci: uniformize onto centralized CI (project-model SublibraryCI + cleanup)
Adds the missing SciML standard centralized caller workflows.

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The reusable SciML/.github downgrade workflows now always use
allow_reresolve: false and no longer accept an allow-reresolve input
(see SciML/.github#71). Remove the now-invalid input so this caller keeps
working once @v1 is retagged.

Co-authored-by: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- OrdinaryDiffEqBDF, OrdinaryDiffEqTsit5: "1" → "1, 2"
- SciMLBase: "2" → "2, 3" across all sub-packages
- Migrate DEProblem/DEAlgorithm → AbstractDEProblem/AbstractDEAlgorithm
- Migrate SciMLBase.DEAlgorithm → SciMLBase.AbstractDEAlgorithm

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
* ci: uniformize monorepo structure to OrdinaryDiffEq canonical style

Thread a repo-specific group-env-name (CORLEONE_TEST_GROUP) consistently
through the sublibrary CI callers and runtests, GROUP-dispatch the root CI,
and fix the root test harness so Pkg.test() on the root works.

- SublibraryCI.yml: pass group-env-name CORLEONE_TEST_GROUP + check-bounds auto.
- DowngradeSublibraries.yml: add group-env-name CORLEONE_TEST_GROUP / value Core.
- Sublib runtests (CorleoneOED, OptimalControlBenchmarks): read
  CORLEONE_TEST_GROUP (fall back to GROUP, then All).
- CI.yml: GROUP-dispatched matrix over the root's own Core/QA groups
  (no hardcoded sublibrary rows; sublibs covered by the project model).
- test/runtests.jl: _detect_sublibrary_group dispatcher sets
  CORLEONE_TEST_GROUP on sublib hand-off, transitive [sources] develop on
  Julia <1.11, Core/QA root groups; drop dead `using JET`.
- Project.toml: add Pkg to [extras]/[compat]/[targets].test (root runtests
  uses Pkg; matches the canonical root and keeps Aqua deps_compat green).

The leaf->root [sources] graph (sublibs depend on Corleone) is preserved;
no root->leaf edges are added since the root does not re-export the sublibs.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix: remove self-import of OptimalControlBenchmarks in its own module

The module's source file did `using OptimalControlBenchmarks` inside the
`module OptimalControlBenchmarks ... end` block, importing itself. Remove it.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* chore: canonicalize LICENSE files to LICENSE.md

Rename root LICENSE -> LICENSE.md and lib/CorleoneOED/LICENSE -> LICENSE.md
(content preserved via git mv), and add lib/OptimalControlBenchmarks/LICENSE.md
so every component carries an MIT LICENSE.md, matching the OrdinaryDiffEq.jl
monorepo layout.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs: canonical component READMEs for sublibraries

Rewrite lib/CorleoneOED/README.md (was pointing at the stale external
AlCap23/CorleoneOED.jl CI badge) and add lib/OptimalControlBenchmarks/README.md,
both using the canonical Corleone.jl monorepo component README template
(Zulip + Global Docs + ColPrac + SciML Code Style badges and the
'component of the Corleone.jl monorepo' wording), matching OrdinaryDiffEq.jl.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ci: add .typos.toml/.codecov.yml and canonical TagBot with subpackage matrix

- Add .typos.toml with [default.extend-words] (matches SpellCheck/typos workflow)
- Add .codecov.yml with comment: false
- Convert TagBot.yml to the canonical OrdinaryDiffEq.jl form: top-level
  permissions block, workflow_dispatch.inputs.lookback default '3', the root
  TagBot-Corleone job, and a TagBot-Subpackages matrix (fail-fast: false) that
  tags the registered sublibrary CorleoneOED via subdir lib/CorleoneOED.
  OptimalControlBenchmarks is not registered in General, so it is excluded.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Remove self-import of OptimalControlBenchmarks in run_benchmarks.jl

run_benchmarks.jl is include()d into module OptimalControlBenchmarks, so the
line `using OptimalControlBenchmarks` executed inside the module's own
namespace and hard-failed to load (ArgumentError: Package
OptimalControlBenchmarks not found). The symbols it would import are already in
scope inside the module, so the line is simply removed.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test: isolate root + CorleoneOED QA into canonical test/qa sub-env

Move the Aqua code-quality checks for the root Corleone package and the
CorleoneOED sublibrary out of the main test target into dedicated test/qa
Pkg sub-environments, matching the canonical OrdinaryDiffEq structure
(lib/<Name>/test/qa).

Each package now has:
- test/qa/Project.toml: Aqua + the package (+ in-repo Corleone sibling) + Test,
  with relative [sources] and [compat] for every dep plus julia = "1.10".
- test/qa/qa.jl: the Aqua.test_all testset.
- runtests.jl: an activate_qa_env() helper that activates test/qa, develops the
  package (and sibling) by path so the PR branch code is tested on Julia < 1.11
  where [sources] is ignored, then instantiates. The QA branch calls it and then
  @safetestset includes qa/qa.jl.

Aqua (and the vestigial, unused JET entry in the root) are removed from each
main Project.toml's [compat]/[extras]/[targets].test so the QA tooling deps no
longer participate in the main test resolve. No QA coverage changed: each
package still runs exactly Aqua, with identical pass/fail behavior (verified the
CorleoneOED qa env resolves and Aqua.test_all produces the same 6-pass/5-fail
result as the pristine base, confirming the pre-existing Aqua failures are
unchanged by this restructure).

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test: isolate OptimalControlBenchmarks QA into canonical test/qa sub-env

Move the Aqua code-quality check for the OptimalControlBenchmarks sublibrary
out of the main test target into a dedicated test/qa Pkg sub-environment,
matching the canonical OrdinaryDiffEq structure (lib/<Name>/test/qa) and the
root + CorleoneOED migration in the preceding commit.

- test/qa/Project.toml: Aqua + OptimalControlBenchmarks + in-repo Corleone
  sibling + Test, with relative [sources] and [compat] for every dep plus
  julia = "1.10".
- test/qa/qa.jl: the Aqua.test_all testset.
- runtests.jl: activate_qa_env() activates test/qa, develops the package and
  the Corleone sibling by path (for Julia < 1.11 where [sources] is ignored),
  then instantiates; the QA branch calls it and @safetestset includes qa/qa.jl.

Aqua is removed from the main Project.toml's [compat]/[extras]/[targets].test
so the QA tooling deps no longer participate in the main test resolve. QA
coverage is unchanged: the package still runs exactly Aqua.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test(CorleoneOED): add test_groups.toml pinning Core/QA version matrix

Make the centralized SublibraryCI (sublibrary-project-tests.yml@v1) discover
this sublibrary's groups explicitly instead of falling back to the default
shape. Core runs on [lts, 1, pre]; QA (Aqua) runs on [lts, 1]. Matches the
canonical OrdinaryDiffEq.jl per-sublibrary test/test_groups.toml convention.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test(OptimalControlBenchmarks): add test_groups.toml pinning Core/QA matrix

Make the centralized SublibraryCI (sublibrary-project-tests.yml@v1) discover
this sublibrary's groups explicitly instead of the default shape. Core runs on
[lts, 1, pre]; QA (Aqua) runs on [lts, 1]. Matches the canonical
OrdinaryDiffEq.jl per-sublibrary test/test_groups.toml convention.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ci: align root CI version matrix with canonical group matrix

Core runs on [lts, 1, pre]; QA (Aqua) runs on [lts, 1] (drops the redundant
1.11 row and the pre/1.11/lts QA excludes, adding lts to QA). Mirrors the
test_groups.toml matrix used by the sublibraries.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test: canonical group-folder layout for the root package

Make the root test suite conform to the OrdinaryDiffEq canonical
group-folder model: every test lives in exactly one test/<group>/ folder;
no-extra-dep groups run in the light main test env as part of GROUP=All,
while dep-adding groups carry their own isolated test/<group>/Project.toml
that runtests.jl activates and that the CI matrix runs explicitly.

- Move the loose root tests into test/core/ (Core group, light env).
- Promote the example scripts (test/examples/) into a dep-adding "Examples"
  group with test/examples/Project.toml carrying the heavy optimal-control
  stack (ModelingToolkit, Ipopt/OptimizationMOI, SciMLSensitivity,
  ForwardDiff, OrdinaryDiffEqBDF) + Corleone via [sources].
- runtests.jl: GROUP=All/Core run the light Core group; Examples and QA each
  activate their own test/<group> env.
- Make the main [extras]/[targets].test LIGHT: drop the heavy test-only deps
  (now provided by the Examples group env) and their stale [compat] entries.
- test/test_groups.toml pins the canonical version matrix: Core/Examples on
  [lts,1,pre], QA on [lts,1]; CI.yml matrix kept consistent (adds Examples).

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Declare Pkg in test deps and group CorleoneOED core tests

CorleoneOED and OptimalControlBenchmarks test/runtests.jl both `using Pkg`
to activate the isolated QA env, but Pkg was not declared in [extras] or
[targets].test. Under Pkg.test the test environment doesn't get Pkg by
default, so `using Pkg` failed at load time and blocked the entire sublib
test suites before any test ran. Add Pkg to both [extras] and
[targets].test.

Also move CorleoneOED's Core test files (1d_oed.jl, lotka_oed.jl,
lotka_oed_svd.jl) into test/core/ and update the runtests.jl includes,
matching the uniform monorepo test layout.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ci: canonical TagBot thin caller + downgrade skip/version cleanup

- TagBot.yml: replace verbose JuliaRegistries/TagBot steps with the
  centralized SciML/.github tagbot.yml@v1 thin caller, plus a
  tagbot-subpackages matrix over registered lib sublibraries
  (only CorleoneOED; OptimalControlBenchmarks is not yet registered).
- Downgrade.yml: drop hand-listed stdlib skip (Pkg,TOML) now that the
  central workflow auto-populates skip; bump julia-version 1.10 -> lts.
- DowngradeSublibraries.yml: drop hand-listed skip (stdlibs + Corleone
  caller pkg) now auto-populated by the central workflow.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…oml) (#81)

Replace the hand-maintained group x version matrix in the root CI test job
with the thin grouped-tests.yml@v1 caller, which computes the matrix from
test/test_groups.toml. The non-default check-bounds: auto and
coverage-directories: src inputs are preserved; group-env-name stays the
default GROUP (which root test/runtests.jl reads).

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
- Replace RNG with StableRNG
- Replace equality check with isapprox
Fix dimension error of F_init in edge case
Replace the hand-written GROUP dispatcher in test/runtests.jl with a single
SciMLTesting.run_tests call (explicit-args mode, the monorepo shape). The Core
body @safetestset-includes the existing test/core/ files; Examples and QA become
env-bearing group specs that activate test/examples and test/qa (the v1.2
activate_group_env replicates the old activate_examples_env/activate_qa_env). A
curated all = ["Core"] keeps GROUP="All" running only the light Core group, and
sublib_env = "CORLEONE_TEST_GROUP" + lib_dir keep sublibrary routing semantics.

The explicit sublibrary pre-step (detect_sublibrary_group + the Julia < 1.11
transitive [sources] develop walk + withenv("CORLEONE_TEST_GROUP") Pkg.test) is
preserved verbatim ahead of the run_tests call, so the sublibrary Pkg.test path
is byte-for-byte unchanged. The exact set of tests run under each GROUP value
(All, Core, Examples, QA, and sublibrary names) is unchanged.

Add SciMLTesting to the root test target (keep Pkg + SafeTestsets, since the
sublib pre-step still uses Pkg) and to the examples/qa sub-environments. Widen
SafeTestsets compat to "0.1, 1". test_groups.toml is unchanged.

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@AlCap23

AlCap23 commented Jun 15, 2026

Copy link
Copy Markdown
Collaborator Author

@copilot resolve the merge conflicts in this pull request

Copilot AI commented Jun 15, 2026

Copy link
Copy Markdown

@AlCap23 I can’t apply these changes because the pull request’s branch is the repository’s default branch, which I’m not allowed to push to directly.

You can ask me to create a new pull request with the requested changes instead and I'll open a separate PR on a new branch.

ChrisRackauckas and others added 7 commits June 23, 2026 01:32
…nt (#101)

PR #100 released parent Corleone v0.0.4 but did not update the sublibraries'
Corleone [compat], which still pinned "0.0.3". For pre-1.0 versions the caret
range "0.0.3" means [0.0.3, 0.0.4), so the path-sourced parent at 0.0.4 has an
empty intersection with that compat. The downgrade-sublibraries lanes
(lib/CorleoneOED, lib/OptimalControlBenchmarks) fail during the test-sandbox
resolve with:

  ERROR: LoadError: empty intersection between Corleone@0.0.4 and project
  compatibility 0.0.3

On Julia 1.10 (lts) [sources] is ignored and the parent is develop'd by path at
0.0.4, so the conflict is unavoidable until compat admits 0.0.4. Also bumps the
matching Corleone compat in the QA and examples test sub-projects (which path-
source the parent) so the QA/Examples lanes don't inherit the same wall.

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… parent (#106)

PRs #104/#105 released parent Corleone v0.0.5 but did not update the
sublibraries' / test sub-projects' Corleone [compat], which still pinned
"0.0.4". For pre-1.0 versions the caret range "0.0.4" means [0.0.4, 0.0.5),
so the path-sourced parent at 0.0.5 ([sources] Corleone = {path = "../.."})
has an empty intersection with that compat. The downgrade-sublibraries lanes
(lib/CorleoneOED, lib/OptimalControlBenchmarks) — and the regular Sublibrary
CI / QA lanes — fail during the test-sandbox resolve with:

  ERROR: LoadError: empty intersection between Corleone@0.0.5 and project
  compatibility 0.0.4

The downgrade root (main) lane is unaffected because the root package does not
depend on itself. This mirrors PR #101 (the same 0.0.3 -> 0.0.4 bump after the
v0.0.4 parent release).

Also bumps the now-stale CorleoneOED self-compat (0.0.4 -> 0.0.5) in
lib/CorleoneOED/test/qa/Project.toml, since CorleoneOED was released as v0.0.5
(#105) and is path-sourced there. OptimalControlBenchmarks stays at 0.0.3
(matches its current version).

Verified locally on Julia 1.10.11 (lts): Pkg.develop of the path-sourced
parent throws the empty-intersection error on the unmodified tree and succeeds
(Corleone v0.0.5 accepted) with this change.

Ignore until reviewed by @ChrisRackauckas.

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
* Fix sublibrary QA (Aqua) and Downgrade CI red lanes

Sublibrary CI was red on both the QA (Aqua.test_all) and Downgrade
lanes for lib/CorleoneOED and lib/OptimalControlBenchmarks.

QA (genuine Aqua violations, fixed at the source, no ignore-lists):

CorleoneOED
- unbound_args: drop the unused `DISCRETE` type param from the two
  `update_fim(::OEDLayer{<:Any, SAMPLED, FIXED, ...})` methods in
  src/oed.jl, and the unused `SPLIT` param from the two
  `update_fim(::MultiExperimentLayer{DISCRETE, FIXED, <:Any, ...})`
  methods in src/multiexperiments.jl (first/third positional params are
  `<:Any`, so the declared vars never bind).
- ambiguities: add the disambiguating
  `get_sampling_sums(!)(::OEDLayer{<:Any, false, <:Any,
  <:MultipleShootingLayer}, ..., st::NamedTuple{fields})` methods that
  Aqua suggests (SAMPLED=false has no sampling, so `[]`/`nothing`).
- piracy: move the `shooting_constraints(!)(::AbstractVector{
  <:Trajectory})` methods out of CorleoneOED into the owning package
  Corleone (src/multiple_shooting.jl), next to the single-Trajectory
  methods — both the function and `Trajectory` are Corleone's, so the
  vector dispatch belongs there, not in a downstream package.
- stale_deps: StableRNGs is used only in test/core, not src -> move it
  from [deps] to [extras]+[targets].test (it was silently pulled from
  the parent dev tree before).
- deps_compat: add `Pkg = "1"` compat (Pkg is a test extra).

OptimalControlBenchmarks
- stale_deps: remove OptimizationLBFGSB, Ipopt, UnoSolver,
  OrdinaryDiffEq, Runic from [deps] (none imported in src; the module
  uses OrdinaryDiffEqTsit5 and takes the optimizer as an argument).
  Ipopt stays in [extras] as a benchmark-only optimizer.
- deps_compat: add missing [compat] for BenchmarkTools, CairoMakie,
  IntervalSets, ModelingToolkit, ModelingToolkitBase, and `Pkg = "1"`.

Downgrade (both sublibs path-source the parent, so they must not declare
a lower floor than the parent for a shared dep):
- SciMLBase "2, 3" -> "2.141.0, 3" (match parent Corleone floor)
- SymbolicIndexingInterface "0.3" -> "0.3.43" (match parent floor)

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

* Fix downgrade dead-ends in sublib compat floors

The sublibrary downgrade lanes still failed after the previous floor
bumps because several direct-dep compat floors were below what the
resolved graph actually needs at min-resolution.

CorleoneOED / OptimalControlBenchmarks:
- Reexport "1.2" -> "1.2.2": the parent Corleone (path-sourced) requires
  Reexport >= 1.2.2, but the merged downgrade resolve strips Corleone and
  picked Reexport 1.2.0 from the sublib floor. The Pkg.test sandbox then
  re-resolves WITH the parent and rejects the pinned 1.2.0 as
  Unsatisfiable ("restricted to 1.2.0 by an explicit requirement -- no
  versions left"). Matching the parent's floor makes the downgrade pick
  1.2.2 up front.
- DocStringExtensions "0.9" -> "0.9.3": same class of latent dead-end
  (parent floor is 0.9.3; 0.9.0-0.9.2 exist in the registry).

OptimalControlBenchmarks only:
- ModelingToolkit "11" -> "11.2.0": MTK 11.0.0/11.1.0 call
  Base.ispublic unguarded in @import_mtkbase; Base.ispublic only exists
  on Julia >= 1.11, so precompile dies on the LTS (1.10) downgrade lane
  with "UndefVarError: ispublic not defined". MTK 11.2.0 is the first
  release that guards the call with @static if VERSION >= v"1.11".
- Symbolics "7" -> "7.2.0": at floor, ModelingToolkitBase 1.0.0 and
  ModelingToolkitTearing 1.0.2 declare no Symbolics lower bound, so the
  resolver picks Symbolics 7.1.1. MTKTearing calls
  fixpoint_sub(iv, dict, Shift) positionally, but 7.1.1's fixpoint_sub
  takes the operator only as a keyword; the positional OP arg was added
  in Symbolics 7.2.0. Without the bump, MTK's precompile workload dies
  with "MethodError: no method matching fixpoint_sub(..., ::Type{Shift})".

Validated at floor (Julia 1.10, GROUP=Core, the downgrade lane's group):
- CorleoneOED: 1D Example 36/36, Lotka Volterra 125/125, LV SVD 17/17,
  tests passed.
- OptimalControlBenchmarks: 12 deps (incl. MTK/MTKBase/Tearing)
  precompiled cleanly, tests passed.

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

---------

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
* QA: run_qa v1.6 form + ExplicitImports (root + sublibs)

Convert the root and both lib/ sublibrary QA environments from the
hand-rolled `@testset "Aqua" Aqua.test_all(Mod)` to the SciMLTesting v1.6
`run_qa(Mod; explicit_imports = true, ...)` dispatcher, enabling the six
ExplicitImports checks alongside the unchanged Aqua run. Bump SciMLTesting
compat to "1.6" per QA env; ExplicitImports is pulled transitively. The
sublib [sources]/develop wiring is preserved exactly.

Per-env ExplicitImports curation:
- Corleone: no_implicit_imports broken (bare-`using` deps, tracked);
  ignore :ADTypes for via_owners and the deliberate Base/SciML internal
  names for qualified-accesses-are-public.
- CorleoneOED: no_implicit_imports broken (tracked); ignore Base/SciML
  internals plus Corleone's own unexported helpers for
  qualified-accesses-are-public.
- OptimalControlBenchmarks: allow_unanalyzable (dynamic include in
  problem_registry.jl) for the implicit/stale checks; ignore :inputs
  (MTK re-export) and :default_rng/:initialstates. All six EI checks pass.

The CorleoneOED and OptimalControlBenchmarks QA lanes are already red on
master from genuine pre-existing Aqua failures; this conversion runs the
same Aqua.test_all with no new disables and does not mask them.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* QA: sweep redundant public-API EI ignores after SciMLTesting 1.7

SciMLTesting 1.7 runs the two public-API ExplicitImports checks
(all_qualified_accesses_are_public / all_explicit_imports_are_public) only
on Julia >= 1.11, and several base libs now declare more names public
(SciMLBase 3.24, Symbolics 7.28+, SymbolicUtils 4.36, ModelingToolkit 11.29,
ArrayInterface 7.26, CommonSolve 0.2.9). Many per-repo public-API ignore
entries are now redundant.

Emptied both public-API ignore-lists in all three qa.jl files and restored,
verified on Julia 1.12 against the registered releases, only the names the
public checks still flag as non-public:

- root (Corleone): kept 9 (ADTypes/AbstractDEAlgorithm/AbstractDEProblem/
  EnsembleAlgorithm/get_colorizers from SciMLBase, AbstractVecOrTuple/Splat
  from Base, Tunable/canonicalize from SciMLStructures); dropped 10.
- lib/CorleoneOED: kept 18 (SciMLBase/SciMLStructures/SymbolicUtils/Symbolics/
  ForwardDiff internals + Corleone's own unexported helpers); dropped 6.
- lib/OptimalControlBenchmarks: dropped both ignores entirely (inputs,
  default_rng, initialstates are now all public); kept the via-owners ignore.

Other ignores (no_implicit_imports broken-marker, *_via_owners,
allow_unanalyzable) left untouched. Verified Julia 1.10 (public checks
skipped) and 1.12 (public checks run): ExplicitImports group green-or-broken,
0 EI hard failures, on root + both sublibs.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.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.

7 participants