Skip to content

Deps bump for 1.1.1-beta: CTParser 0.9, CTModels 0.18, ExaModels 0.12; kkt→occidata runner - #622

Merged
PierreMartinon merged 12 commits into
mainfrom
v1.1.1
Sep 7, 2026
Merged

PierreMartinon merged 12 commits into
mainfrom
v1.1.1

Conversation

@PierreMartinon

@PierreMartinon PierreMartinon commented Aug 10, 2026

Copy link
Copy Markdown
Member

Compat / deps

Package before after source
CTModels 0.16 0.18 General (0.18.0) — required by CTSolvers 0.5.3
CTParser 0.8 0.9 ct-registry (0.9.0-beta)
ExaModels 0.11 0.12 General (0.12.0) — required by CTParser 0.9 & CTSolvers 0.5.3
CTBase (docs) 0.28 0.29 General (0.29.3)

CTBase = "0.29" and CTSolvers = "0.5" were already correct; the stale Manifest.toml just hadn't been re-resolved since the previous compat commit.

Package version 1.1.11.1.1-beta because CTParser is still on a beta (0.9.0-beta).

CTParser 0.9 breaking changes — no impact on CTDirect

  • :exa emission now requires ExaModels ≥ 0.12: this is CTParser's def_exa codegen; CTDirect only calls the builder closure via CTModels.get_build_examodel and never touches the ExaModels builder API directly.
  • String errors → CTException subtypes: no CTDirect test catches a string error from CTParser.
  • New CTParserExaModels extension (ExaModels + LinearAlgebra): arms automatically, LinearAlgebra is already in the graph.

CUDSS / GPU

MadNLPGPU 0.10 no longer pulls CUDSS transitively; CTSolvers 0.5.3 made CUDSS an explicit weakdep and its CTSolversMadNLPGPU trigger is now ["MadNLPGPU", "CUDA", "CUDSS"]. CTDirect already adapted in 38e1c16 (using CUDSS in test/test_gpu.jl, CUDSS in [extras]/[compat]/[targets].test). No change needed here.

CI: kkt → occidata

The self-hosted kkt runner was retired. Replaced with occidata (job test-gpu-occidata, label run ci occidata-runner, runs_on: [["occidata"]]), following CTParser.jl and CTFlows.jl. test_args: 'GPU' kept — CTDirect's GPU suite (test/test_gpu.jl) is deliberately separate from the plain CPU suite. GitHub label run ci kkt-runner renamed to run ci occidata-runner on the repo.

Verification

Local CPU suite: 535/535 pass, no failures, no errors. Manifest re-resolves to CTBase 0.29.3, CTModels 0.18.0, CTParser 0.9.0-beta, CTSolvers 0.5.3, ExaModels 0.12.0.

GPU suite: run on occidata via the run ci occidata-runner label on this PR.

@ocots ocots closed this Aug 10, 2026
@ocots ocots added run documentation Trigger the Documentation workflow on this PR run ci github-runner Trigger the CI workflow on GitHub-hosted runners run ci occidata-runner Trigger the CI workflow on the self-hosted occidata runner (GPU/CUDA) labels Aug 10, 2026
@ocots ocots reopened this Aug 10, 2026
@ocots

ocots commented Aug 10, 2026

Copy link
Copy Markdown
Member

@jbcaillau Waiting for CTParser.

@ocots ocots added run ci occidata-runner Trigger the CI workflow on the self-hosted occidata runner (GPU/CUDA) and removed run ci occidata-runner Trigger the CI workflow on the self-hosted occidata runner (GPU/CUDA) labels Aug 26, 2026
…a runner

- Project.toml: CTModels 0.16→0.18, CTParser 0.8→0.9 (picks up 0.9.0-beta from
  ct-registry), ExaModels 0.11→0.12. Version 1.1.1→1.1.1-beta since CTParser is
  still a beta.
- docs/Project.toml: CTBase 0.28→0.29.
- CI.yml: the self-hosted kkt runner was retired; replace it with occidata
  (job test-gpu-occidata, label "run ci occidata-runner", runs_on [["occidata"]]),
  following CTParser.jl and CTFlows.jl. test_args=GPU kept — CTDirect's GPU suite
  (test/test_gpu.jl) is deliberately separate from the plain suite.

CTParser 0.9 breaking changes (:exa emission needs ExaModels ≥ 0.12, String errors
become CTException subtypes) do not affect CTDirect: it never touches the ExaModels
builder API (the closure comes from CTModels.get_build_examodel) and no test catches
a string error. CUDSS (no longer pulled transitively by MadNLPGPU 0.10) is already
handled in test/test_gpu.jl since 38e1c16.

Local CPU suite green: 535/535, no failures, no errors.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@ocots ocots changed the title compats for stable release 1.1.1 Deps bump for 1.1.1-beta: CTParser 0.9, CTModels 0.18, ExaModels 0.12; kkt→occidata runner Aug 26, 2026
@ocots

ocots commented Aug 26, 2026

Copy link
Copy Markdown
Member

@PierreMartinon @jbcaillau Since CTParser is in beta version, I will make a beta of CTDirect. I need these two new versions to make a beta in OptimalControl with all the new stuffs.

Work to be done:

  • CTParser 0.9.0-beta
  • CTDirect 1.1.1-beta
  • OptimalControl 2.2.0-beta with new documentation
  • Stable releases of CTParser, CTDirect and OptimalControl

@codecov

codecov Bot commented Aug 26, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 40.00000% with 6 lines in your changes missing coverage. Please review.
✅ Project coverage is 71.53%. Comparing base (5555a67) to head (ec03856).

Files with missing lines Patch % Lines
src/ode/common.jl 0.00% 4 Missing ⚠️
src/direct_shooting.jl 0.00% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #622      +/-   ##
==========================================
+ Coverage   71.25%   71.53%   +0.27%     
==========================================
  Files          14       14              
  Lines        1395     1391       -4     
==========================================
+ Hits          994      995       +1     
+ Misses        401      396       -5     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

…sts (#624)

:variable was advertised in the :scheme option description (surfaced by
describe(:collocation)) and had a live dispatch branch, but src/ode/variable.jl
is not compiled, so scheme=:variable failed with a raw UndefVarError. Remove the
advertisement and the dead branch; the WIP file and its commented include stay.
scheme=:variable now raises the normal "Unknown discretization method" error.

Also: the else-branch error message listed phantom :gauss_legendre_*_stagewise
values and omitted the real :gauss_legendre_*_constant_control ones — realign it
with the actual branches. Fix docs default (midpoint, not trapeze).

Bump 1.1.1-beta -> 1.1.2-beta.

Local CPU suite: 536/536.

Closes #624

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
ocots and others added 4 commits August 27, 2026 16:07
Both testsets ran test_problem(moonlander(); adnlp_backend=:manual) (the
:quadrotor one via an old copy-paste slip). ADNLPModels' SparseReverseADHessian
records its ReverseDiff tape on an uninitialised Vector{Dual} and runs the model
function on it; moonlander's unbounded state `theta` inside cos()/sin() turns a
garbage -Inf seed into a DomainError during model build. Deterministic on the
Julia 1.12 CI runners, flaky on 1.10 — surfaced (not caused) by the dependency
bump in this PR.

Upstream: JuliaSmoothOptimizers/ADNLPModels.jl#383
Re-enable: #626

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
CTDirect had neither, which the Handbook requires of every package
(philosophy/changelog.md). Bootstrapped like CTParser.jl (e185d6e): a baseline
entry for the last stable release (1.0.12), then full entries for the three
betas of the 1.1 line —

- 1.1.0-beta: CTSolvers dispatch contract, immutable BuiltModel / BuiltModel-based
  build_solution, CTBase 0.28 parameter contract.
- 1.1.1-beta: "1-D is a scalar" call-boundary contract, ecosystem compat
  realignment (CTBase 0.29 / CTModels 0.18 / CTSolvers 0.5 / CTParser 0.9 /
  ExaModels 0.12), CI label gating, kkt -> occidata.
- 1.1.2-beta: :variable scheme removal (bug fix; it never compiled), scheme
  error-message resync, moonlander/quadrotor test disable, these two files.

Breaking changes are mirrored in BREAKING.md with # Before / # After migration
blocks; near-breaking items (the :variable removal, compat floor raises) are
non-breaking notes. Docs-only; no source or Project.toml change.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Replace six untyped error() / ArgumentError throws in src/DOCP_data.jl
and src/ode/common.jl with CTBase.Exceptions subtypes, matching the
CTParser 0.9.0 alignment:

- non-strictly-increasing time_grid, unknown discretization scheme and
  unknown getter value -> IncorrectArgument (with got/expected/
  suggestion/context); the unknown-scheme expected list is derived from
  the real dispatch branches, and points at the smaller :exa set
- DOCP_Jacobian_pattern / DOCP_Hessian_pattern interface stubs ->
  NotImplemented (required_method + suggestion)

Tests: tighten the :variable-scheme assertion to
@test_throws Exceptions.IncorrectArgument, add a non-increasing
time_grid assertion, import Exceptions in test_common.jl.

Docs: CHANGELOG "Changed" + Testing entries and a BREAKING.md
non-breaking note for the 1.1.2-beta section.

src/ode/variable.jl is untouched (WIP, not compiled).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Add $(TYPEDEF) docstrings to the Collocation and DirectShooting
  discretizer structs: what the transcription is, when to prefer one
  over the other, supported modeler backends, how to select it from
  the explicit-mode API. Fixes the "no docs found" warning when
  OptimalControl.jl transcludes CTDirect.Collocation.
- Bump version 1.1.2-beta -> 1.1.3-beta (1.1.2-beta already released).
- Move the #627 typed-exception entry from the released 1.1.2-beta
  section to a new 1.1.3-beta section in CHANGELOG.md / BREAKING.md,
  alongside the #623 documentation entry and the :truck_trailer test
  disable.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
ocots and others added 4 commits August 28, 2026 16:05
…#628)

Docstrings (24 symbols; src/ode/variable.jl left as WIP):
- module CTDirect, const AbstractModel, __discretizer
- Euler / Midpoint / Trapeze structs; GenericIRK / GenericIRKStagewise
  abstract types (with Interface Requirements)
- Collocation / DirectShooting: Strategies.id/parameter/options/metadata,
  the kwarg constructors, the __*_grid_size/scheme/... defaults
- ode/common.jl: getter (Arguments/Returns/Throws), the three extra
  add_nonzero_block! methods
- irk_stagewise.jl: __initial_guess(::DOCP{<:GenericIRKStagewise})

docs/api_reference.jl: the primary_modules file lists were stale
(named collocation_core.jl / disc/*.jl, omitted direct_shooting.jl,
DOCP_*.jl, ode/irk_stagewise.jl). Since the generator silently ignores
missing paths, those symbols were absent from the generated API
reference. Lists resynced with the current src/ layout.

Verified: docstring audit clean except variable.jl; docs build has no
"no docs found" warnings and the new symbols appear on the API pages;
full suite 531/531.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
De-qualify every `[`CTDirect.Collocation`](@ref)` / `[`CTDirect.DirectShooting`](@ref)`
self-reference in src/ to plain inline code — same treatment as 1.1.4-beta's
DOCPCache fix. Both types have their own docstring (added for #623) and the
links resolve fine in CTDirect's own docs build, but a downstream package
(OptimalControl.jl) only ever transcludes the default_parameter/
available_parameters docstrings that reference them, never the type
docstrings themselves, so the links never had an anchor to resolve to there.

`[`CTDirect.Scheme`](@ref)` and other type cross-references are untouched —
not confirmed to have the same failure.

Surfaced while raising OptimalControl.jl's [compat] to unlock the Makie
backend (Phase I of its documentation campaign): 2 new "Cannot resolve @ref"
warnings on api/options.md, absent from the previous baseline. Filed as
#631.

Version bumped to 1.1.6-beta. CHANGELOG.md and BREAKING.md updated.

CTDirect test suite unchanged, all passing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@PierreMartinon
PierreMartinon merged commit 292594d into main Sep 7, 2026
22 checks passed
@PierreMartinon
PierreMartinon deleted the v1.1.1 branch September 7, 2026 13:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

run ci github-runner Trigger the CI workflow on GitHub-hosted runners run ci occidata-runner Trigger the CI workflow on the self-hosted occidata runner (GPU/CUDA) run documentation Trigger the Documentation workflow on this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants