Skip to content

Commit c9875be

Browse files
committed
docs: add CHANGELOG.md from v1.0.0 to v1.2.0-beta with breaking changes summary
1 parent 378f324 commit c9875be

1 file changed

Lines changed: 271 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 271 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,271 @@
1+
# Changelog
2+
3+
All notable changes to **OptimalControl.jl** are documented here.
4+
5+
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6+
Versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
---
9+
10+
## [Unreleased] — branch `action-options`
11+
12+
### Added
13+
14+
- **Action options routing**: `initial_guess` and `display` are now routed through
15+
`CTSolvers.route_all_options`, enabling alias support and a cleaner separation of
16+
concerns between action-level and strategy-level options.
17+
- **Alias `init`** for `initial_guess` in all solve modes:
18+
```julia
19+
solve(ocp, :collocation; init=x0)
20+
```
21+
- **`_extract_action_kwarg`** helper in `src/helpers/kwarg_extraction.jl`: alias-aware
22+
extraction with conflict detection (raises `CTBase.IncorrectArgument` when two aliases
23+
are provided simultaneously).
24+
- **DRY constants** in `src/helpers/descriptive_routing.jl`:
25+
- `_DEFAULT_DISPLAY = true`
26+
- `_DEFAULT_INITIAL_GUESS = nothing`
27+
- `_INITIAL_GUESS_ALIASES_ONLY = (:init,)` — used in `OptionDefinition`
28+
- `_INITIAL_GUESS_ALIASES = (:initial_guess, :init)` — used in `_extract_action_kwarg`
29+
- **Docstring** for the Layer 3 `CommonSolve.solve` method in `src/solve/canonical.jl`.
30+
31+
### Changed
32+
33+
- `CommonSolve.solve` top-level signature simplified: `initial_guess` and `display` are
34+
no longer explicit named arguments — they are extracted from `kwargs...` by the routing
35+
layer.
36+
- `solve_descriptive` no longer accepts `initial_guess` and `display` as explicit named
37+
arguments; they are extracted from `kwargs...` via `_build_components_from_routed`.
38+
- `solve_explicit` extracts `initial_guess` (with alias `init`) and `display` from
39+
`kwargs...` using `_extract_action_kwarg`.
40+
- `_build_components_from_routed` now receives `ocp` as first argument to call
41+
`CTModels.build_initial_guess`.
42+
43+
### Removed
44+
45+
- Alias `:i` for `initial_guess` (too short, risk of collision with user variables).
46+
47+
---
48+
49+
## [1.1.8-beta] — 2026-01-17
50+
51+
### Changed
52+
53+
- Widened compat for **CTParser** to accept `0.7` and `0.8` (preparation for CTParser
54+
v0.8.x migration, tracked in control-toolbox/CTParser.jl#207).
55+
- Widened compat for **CTBase** to accept `0.16` and `0.17`.
56+
57+
---
58+
59+
## [1.1.7-beta] — 2026-01-17
60+
61+
### Changed
62+
63+
- Added compat for **CTBase v0.17**.
64+
- Merged test dependencies into the main `Project.toml` (previously in a separate
65+
`test/Project.toml`).
66+
67+
---
68+
69+
## [1.1.6] — 2025-10-31
70+
71+
### Added
72+
73+
- **`RecipesBase`** added as a direct dependency, enabling plot recipes for solutions
74+
without requiring `Plots.jl` to be loaded.
75+
76+
### Fixed
77+
78+
- Improved error handling for the `Plots.jl` extension: a clear `CTBase.IncorrectArgument`
79+
is now raised when plotting is attempted without `Plots.jl` loaded (#653).
80+
- Fixed maximisation objective sign for ExaModels backend (#663).
81+
- Replaced `Minpack` by `NonlinearSolve` in the shooting extension.
82+
83+
### Changed
84+
85+
- Bumped compat for **NLPModelsIpopt** to `0.11`.
86+
87+
---
88+
89+
## [1.1.5] — 2025-10-23
90+
91+
### Added
92+
93+
- AI assistant buttons in the documentation to try examples interactively.
94+
- Spell-check CI workflow (`SpellCheck.yml`).
95+
96+
---
97+
98+
## [1.1.4] — 2025-10-05
99+
100+
### Fixed
101+
102+
- Improved error handling for the `Plots.jl` extension (#653): raises a descriptive
103+
error instead of a cryptic `MethodError` when `Plots` is not loaded.
104+
105+
### Added
106+
107+
- JuliaCon Paris 2025 documentation page.
108+
- Responsive CSS columns (math vs code) in documentation.
109+
110+
---
111+
112+
## [1.1.3] — 2025-09-25
113+
114+
### Added
115+
116+
- Documentation for AI-assisted problem description generation (`manual-ai-ded.md`).
117+
- Documentation for GPU solving (`manual-solve-gpu.md` update).
118+
- Usage of `MadNLPMumps` in documentation examples.
119+
120+
---
121+
122+
## [1.1.2] — 2025-09-25
123+
124+
### Added
125+
126+
- **Trapeze scheme** support via CTDirect v0.17 (`scheme=:trapeze`).
127+
- **ExaModels v0.9** compat.
128+
- Indirect method examples in documentation.
129+
- Detailed solver options documentation.
130+
131+
### Changed
132+
133+
- Bumped compat for **CTDirect** to `0.17`.
134+
- Bumped compat for **CTParser** to `0.7`.
135+
- Default scheme documented explicitly.
136+
137+
---
138+
139+
## [1.1.1] — 2025-08-06
140+
141+
### Changed
142+
143+
- Bumped compat for **ExaModels** to `0.9`.
144+
- Updated GPU solve documentation.
145+
146+
---
147+
148+
## [1.1.0] — 2025-08-05
149+
150+
### Added
151+
152+
- **`ADNLPModels`** and **`ExaModels`** added as direct dependencies, enabling GPU
153+
solving via ExaModels backend out of the box.
154+
- GPU solving documentation (`manual-solve-gpu.md`).
155+
- Export of `dual` function.
156+
- Flow with state constraints support (CTFlows update).
157+
- Non-autonomous flow tutorial.
158+
- `display` option for `solve`: shows a compact configuration table before solving.
159+
- MadNLP solver added to the registry and available methods.
160+
- Documentation for the `solve` function arguments (tutorial-solve.md).
161+
- Manual pages for OCP model interaction and solution inspection.
162+
- JLESC17 and JuliaCon 2025 conference documentation.
163+
164+
### Changed
165+
166+
- Bumped compat for **CTBase** to `0.16`.
167+
- Bumped compat for **CTDirect** to `0.16`.
168+
- Bumped compat for **CTModels** to `0.6`.
169+
- Bumped compat for **CTParser** to `0.6`.
170+
- Bumped compat for **ADNLPModels** to `0.8`.
171+
- Bumped compat for **ExaModels** to `0.8`.
172+
173+
---
174+
175+
## [1.0.3] — 2025-05-08
176+
177+
### Changed
178+
179+
- Bumped compat for **CTModels** to `0.3`.
180+
- Bumped compat for **CTBase** to `0.16`.
181+
- Removed tutorials from the documentation (moved to separate repositories).
182+
- Pretty URLs in documentation.
183+
184+
---
185+
186+
## [1.0.2] — 2025-05-05
187+
188+
### Changed
189+
190+
- Renamed `export`/`import` keyword (internal change following CTBase update).
191+
- Bumped compat for **CTBase**.
192+
- Added `Breakage.yml` CI workflow.
193+
194+
---
195+
196+
## [1.0.1] — 2025-05-04
197+
198+
### Added
199+
200+
- Scalar vs dimension-one variable handling improvement (#478).
201+
- Documentation updates: dependency graph, tutorials, README.
202+
203+
### Fixed
204+
205+
- Typo in tutorial (#475, @oameye).
206+
207+
---
208+
209+
## [1.0.0] — 2025-04-18
210+
211+
Initial stable release.
212+
213+
### Dependencies
214+
215+
| Package | Compat |
216+
|---|---|
217+
| CTBase | 0.15 |
218+
| CTDirect | 0.14 |
219+
| CTFlows | 0.8 |
220+
| CTModels | 0.2 |
221+
| CTParser | 0.2 |
222+
| CommonSolve | 0.2 |
223+
| Julia | ≥ 1.10 |
224+
225+
---
226+
227+
## Breaking Changes Summary
228+
229+
This section summarises all breaking changes since v1.0.0 for users upgrading across
230+
multiple versions.
231+
232+
### v1.2.0-beta (current `action-options` branch)
233+
234+
- **`solve` signature change**: `initial_guess` and `display` are no longer positional
235+
or explicitly named keyword arguments in the top-level `CommonSolve.solve`,
236+
`solve_descriptive`, and `solve_explicit`. They are now extracted from `kwargs...`.
237+
Existing call sites using `solve(ocp; initial_guess=x0, display=false)` continue to
238+
work unchanged — only internal dispatch signatures changed.
239+
- **Alias `:i` removed**: `solve(ocp; i=x0)` now raises `CTBase.IncorrectArgument`.
240+
Use `init=x0` or `initial_guess=x0` instead.
241+
242+
### v1.1.0
243+
244+
- **CTBase v0.16 required** (from v0.15): users of CTBase directly may need to update.
245+
- **CTModels v0.6 required** (from v0.2–v0.3): significant internal API changes in
246+
CTModels; users relying on internal CTModels types should review the CTModels changelog.
247+
- **CTParser v0.6 required** (from v0.2): parser API updated.
248+
- **CTDirect v0.16 required** (from v0.14): discretization API updated.
249+
- **`ADNLPModels` and `ExaModels` are now direct dependencies**: they will be installed
250+
automatically. This should not break existing code but increases installation size.
251+
252+
### v1.0.2
253+
254+
- **`export`/`import` keyword renamed**: if you used `export=...` or `import=...` as
255+
keyword arguments to any OptimalControl function, rename to the new keyword (see
256+
CTBase changelog for details).
257+
258+
[Unreleased]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.8-beta...HEAD
259+
[1.1.8-beta]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.7-beta...v1.1.8-beta
260+
[1.1.7-beta]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.6...v1.1.7-beta
261+
[1.1.6]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.5...v1.1.6
262+
[1.1.5]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.4...v1.1.5
263+
[1.1.4]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.3...v1.1.4
264+
[1.1.3]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.2...v1.1.3
265+
[1.1.2]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.1...v1.1.2
266+
[1.1.1]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.0...v1.1.1
267+
[1.1.0]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.0.3...v1.1.0
268+
[1.0.3]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.0.2...v1.0.3
269+
[1.0.2]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.0.1...v1.0.2
270+
[1.0.1]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.0.0...v1.0.1
271+
[1.0.0]: https://github.com/control-toolbox/OptimalControl.jl/releases/tag/v1.0.0

0 commit comments

Comments
 (0)