From b00ff9cfd545b862d4ad11779319160d00be48ee Mon Sep 17 00:00:00 2001 From: 1-Bort-1 <323661610+1-Bort-1@users.noreply.github.com> Date: Tue, 6 Oct 2026 14:07:58 +0200 Subject: [PATCH 1/5] Bring CHANGELOG.md to the release header convention Releases are `## WinchControllers vX.Y.Z YYYY-MM-DD` with `###` groups, and the pending v0.6.5 note moves verbatim to changelog.d/. v0.5.2 gets its tag date, 2025-05-29. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 69 +++++++++++++--------------- changelog.d/winch-pos-anti-windup.md | 5 ++ 2 files changed, 36 insertions(+), 38 deletions(-) create mode 100644 changelog.d/winch-pos-anti-windup.md diff --git a/CHANGELOG.md b/CHANGELOG.md index be4c5e5..75e2419 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,29 +1,22 @@ -### WinchControllers v0.6.5 (unreleased) -#### Fixed -- `WinchPosController` sets the anti-windup tracking time of its speed PI to - `Tt = winch_speed_ti`. It was unset, so `DiscretePIDs` used its 10 s fallback, and after - a long torque saturation the integrator unwound five times slower than it wound up. - Changes the output only during and after a saturation at `winch_torque_limit`. - -### WinchControllers v0.6.4 2026-09-28 -#### Added +## WinchControllers v0.6.4 2026-09-28 +### Added - an Acknowledgements section in the README, crediting the MERIDIONAL project (EU Horizon Europe grant agreement no. 101084216) -#### Changed +### Changed - `Manifest-v1.13.toml.default` re-resolved with Julia 1.13.1; its Pkg also hashes `[sources]`, so a manifest from 1.13.0 warned that the project had changed -### WinchControllers v0.6.3 2026-09-26 -#### Changed +## WinchControllers v0.6.3 2026-09-26 +### Changed - `[compat]` accepts KiteUtils 0.13 as well as 0.11.1 and 0.12 -#### Removed +### Removed - `WCSettings.force_limit_tau_rise`; the force low-pass of the soft limiter is now always symmetric (`force_limit_tau`). `LowPass` still supports `tau_rise`. -### WinchControllers v0.6.2 2026-09-24 -#### Added +## WinchControllers v0.6.2 2026-09-24 +### Added - acceleration feed-forward in `winch_position_torque!`: new keyword `inertia` (drum inertia seen from the motor) and `WinchPosController.acc_ff`, set from the new `WCSettings.winch_acc_ff`, add `acc_ff·inertia·a_ref·gear_ratio/drum_radius`, @@ -39,7 +32,7 @@ - support for Julia 1.13 in `bin/install`, with the default manifest `Manifest-v1.13.toml.default` - a testset for the acceleration feed-forward in `test/test_torque_controllers.jl` -#### Changed +### Changed - `AWE_TRIM_F_MAX` (the AWETrim `f_max`) lowered from 8000 N to 7200 N - `data/wc_settings_soft_lfc.yaml`: `f_low` 350 → 700 N, `f_high` 8000 → 7200 N, `reel_in_beta` 11 → 20, and `v_sat_beta: 10.0` @@ -49,8 +42,8 @@ - compat for `julia`, `LinearAlgebra`, `Pkg` and `Test` extended to 1.13 - `scripts/build_docu.jl` installs `LiveServer` in the global environment if it is missing -### WinchControllers v0.6.1 2026-09-03 -#### Added +## WinchControllers v0.6.1 2026-09-03 +### Added - soft force limiting for REEL_OUT mode: `WCSettings.force_limit` (`"hard"`/`"soft"`) replaces the `UpperForceController` with `calc_vro_soft`, a continuous law with no threshold or hand-over @@ -74,12 +67,12 @@ - `test/test_soft_limit.jl`, covering `calc_vro_soft`, `soft_min`, the `LowPass` filter and the `WinchController` validation errors - documentation of soft force limiting in `docs/src/settings.md` -#### Changed +### Changed - `f_err(logger)` returns `0.0` instead of erroring when every logged force error is `NaN` (e.g. under `soft_lfc`, where neither force controller ever activates) -### WinchControllers v0.6.0 2026-08-16 -#### Added +## WinchControllers v0.6.0 2026-08-16 +### Added - torque controllers, moved here from V3Kite.jl: `WinchPosController` (cascaded length/speed control) and `WinchForceController` (compliant force mode), with `winch_position_torque!`, `winch_force_torque!`, `force_to_torque` and @@ -93,12 +86,12 @@ the saturation/rate-limiting of `winch_position_torque!` and the `f_lpf` initialization/force floor of `winch_force_torque!` - `build/` to `.gitignore` -#### Changed +### Changed - `WCSettings.dt` defaults to `NaN` instead of `0.02`, so a caller that forgets to set it fails loudly instead of silently running at the wrong timestep -### WinchControllers v0.5.6 2026-08-14 -#### Added +## WinchControllers v0.5.6 2026-08-14 +### Added - REEL_OUT winch-controller mode: `WCSettings.mode` (`"piecewise"`/`"reelout"`), dispatched in `calc_vro`; `test = true` still selects `"reelout"` for backwards compatibility - the examples `test_reelout.jl` (bench-test plot of the REEL_OUT law) and `test/test_reelout.jl` @@ -108,42 +101,42 @@ - `bin/install` script - default manifests `Manifest-v1.11.toml.default` and `Manifest-v1.12.toml.default` - CI badge in `README.md` -#### Changed +### Changed - switched from `ControlPlots` to `MakieControlPlots` throughout `examples/`, `test/`, `mwes/` and the `src/` docstrings - `bin/run_julia`: forwards arguments to `julia` and `cd`s to the repo root when invoked from `bin/` - improved `bin/install` - CI workflow fixes -### WinchControllers v0.5.5 2026-03-23 -#### Added +## WinchControllers v0.5.5 2026-03-23 +### Added - `CITATION.cff` file - `.markdownlint` configuration file -### WinchControllers v0.5.4 2026-03-03 -#### Added +## WinchControllers v0.5.4 2026-03-03 +### Added - the package `RobustAndOptimalControl` - the example `stability_ufc.jl` which tests the stability of the upper force controller -#### Changed +### Changed - bump KiteUtils to 0.11.1 - use subprojects instead of TestEnv - fix warnings -### WinchControllers v0.5.3 2025-05-31 -#### Added +## WinchControllers v0.5.3 2025-05-31 +### Added - the functions `get_v_set()`, `get_f_err()` - the script `autotune.jl`, using the **NOMAD** optimizer - added a documentation page for the autotuning feature - added the function `install_examples()` and updated the docu accordingly -### WinchControllers v0.5.2 -#### Added +## WinchControllers v0.5.2 2025-05-29 +### Added - the script `test_components.jl` -#### Changed +### Changed - export `saturate()` -### WinchControllers v0.5.1 2025-05-28 -#### Added +## WinchControllers v0.5.1 2025-05-28 +### Added - all public functions document - add page `Performance Indicators` to documentation - add page `Tests` to documentation @@ -151,7 +144,7 @@ - add `menu.jl` to the folder examples - the functions `f_err()`, `v_err()` and `gamma()` to calculate the performance indicators of the winch controller based on the log file of a test case -#### Changed +### Changed - reduced `df_high` in `wc_settings.yaml` to reduce oscillations - all examples are making use of `wc_settings.yaml` now - the function `get_v_err` returns now `NaN` instead of zero when the speed controller is inactive diff --git a/changelog.d/winch-pos-anti-windup.md b/changelog.d/winch-pos-anti-windup.md new file mode 100644 index 0000000..bcafd8f --- /dev/null +++ b/changelog.d/winch-pos-anti-windup.md @@ -0,0 +1,5 @@ +### Fixed +- `WinchPosController` sets the anti-windup tracking time of its speed PI to + `Tt = winch_speed_ti`. It was unset, so `DiscretePIDs` used its 10 s fallback, and after + a long torque saturation the integrator unwound five times slower than it wound up. + Changes the output only during and after a saturation at `winch_torque_limit`. From d9dd39ed70051fccbf1b5961b1923c2b526df556 Mon Sep 17 00:00:00 2001 From: 1-Bort-1 <323661610+1-Bort-1@users.noreply.github.com> Date: Tue, 6 Oct 2026 14:09:19 +0200 Subject: [PATCH 2/5] Ignore the machine-local LocalPreferences.toml Same line as #38; left untracked it blocks the box's pre-push gate. Co-Authored-By: Claude Opus 5.5 --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index e51f44b..65e0d99 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ examples/Manifest-v1.11.toml test/Manifest-v1.11.toml build/ output/winch_curve.pdf +LocalPreferences.toml From bc0ca0d903cbcb896c8bc955c69d758932e314b4 Mon Sep 17 00:00:00 2001 From: 1-Bort-1 <323661610+1-Bort-1@users.noreply.github.com> Date: Tue, 6 Oct 2026 14:12:24 +0200 Subject: [PATCH 3/5] Read ## release headers in bin/release; unwrap the changelog.d note bin/release grepped for '### ' entries, which after the header move would pick up '### Added'. The pending note is now one line per paragraph, text unchanged. Co-Authored-By: Claude Opus 5.5 --- bin/release | 10 +++++----- changelog.d/winch-pos-anti-windup.md | 5 +---- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/bin/release b/bin/release index c46275f..15bc273 100755 --- a/bin/release +++ b/bin/release @@ -67,22 +67,22 @@ fi # --- top CHANGELOG.md entry must match Project.toml's version -------------- # Line-number based, not "the header is line 1": robust even if this file -# ever grows a leading title line before the first "### " entry. -mapfile -t header_lines < <(grep -n '^### ' CHANGELOG.md | cut -d: -f1 | head -2) +# ever grows a leading title line before the first "## " entry. +mapfile -t header_lines < <(grep -n '^## ' CHANGELOG.md | cut -d: -f1 | head -2) if [[ ${#header_lines[@]} -eq 0 ]]; then - echo "Error: no '### ' entry found in CHANGELOG.md." >&2 + echo "Error: no '## ' entry found in CHANGELOG.md." >&2 exit 1 fi first=${header_lines[0]} second=${header_lines[1]:-$(($(wc -l < CHANGELOG.md) + 1))} header=$(sed -n "${first}p" CHANGELOG.md) -if [[ ! "$header" =~ ^\#\#\#\ WinchControllers\ v${version//./\\.}(\ |$) ]]; then +if [[ ! "$header" =~ ^\#\#\ WinchControllers\ v${version//./\\.}(\ |$) ]]; then echo "Error: CHANGELOG.md's top entry ('$header') does not match" >&2 echo " Project.toml's version ($version). Write the changelog entry first." >&2 exit 1 fi -# Body of the top entry: everything between the first and second "### " +# Body of the top entry: everything between the first and second "## " # headers (or end of file if there is no second one). notes=$(sed -n "$((first + 1)),$((second - 1))p" CHANGELOG.md) diff --git a/changelog.d/winch-pos-anti-windup.md b/changelog.d/winch-pos-anti-windup.md index bcafd8f..d0361b1 100644 --- a/changelog.d/winch-pos-anti-windup.md +++ b/changelog.d/winch-pos-anti-windup.md @@ -1,5 +1,2 @@ ### Fixed -- `WinchPosController` sets the anti-windup tracking time of its speed PI to - `Tt = winch_speed_ti`. It was unset, so `DiscretePIDs` used its 10 s fallback, and after - a long torque saturation the integrator unwound five times slower than it wound up. - Changes the output only during and after a saturation at `winch_torque_limit`. +- `WinchPosController` sets the anti-windup tracking time of its speed PI to `Tt = winch_speed_ti`. It was unset, so `DiscretePIDs` used its 10 s fallback, and after a long torque saturation the integrator unwound five times slower than it wound up. Changes the output only during and after a saturation at `winch_torque_limit`. From 50e757e4183d618a736391899d7928296b483827 Mon Sep 17 00:00:00 2001 From: 1-Bort-1 <323661610+1-Bort-1@users.noreply.github.com> Date: Fri, 9 Oct 2026 13:02:05 +0200 Subject: [PATCH 4/5] docs: write release header dates as DD-MM-YYYY Release headers follow the box's ## vX.Y.Z DD-MM-YYYY form; bin/release converts the header date back to ISO for CITATION.cff. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 22 +++++++++++----------- bin/release | 4 +++- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75e2419..1f508af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## WinchControllers v0.6.4 2026-09-28 +## WinchControllers v0.6.4 28-09-2026 ### Added - an Acknowledgements section in the README, crediting the MERIDIONAL project (EU Horizon Europe grant agreement no. 101084216) @@ -7,7 +7,7 @@ - `Manifest-v1.13.toml.default` re-resolved with Julia 1.13.1; its Pkg also hashes `[sources]`, so a manifest from 1.13.0 warned that the project had changed -## WinchControllers v0.6.3 2026-09-26 +## WinchControllers v0.6.3 26-09-2026 ### Changed - `[compat]` accepts KiteUtils 0.13 as well as 0.11.1 and 0.12 @@ -15,7 +15,7 @@ - `WCSettings.force_limit_tau_rise`; the force low-pass of the soft limiter is now always symmetric (`force_limit_tau`). `LowPass` still supports `tau_rise`. -## WinchControllers v0.6.2 2026-09-24 +## WinchControllers v0.6.2 24-09-2026 ### Added - acceleration feed-forward in `winch_position_torque!`: new keyword `inertia` (drum inertia seen from the motor) and `WinchPosController.acc_ff`, set from the new @@ -42,7 +42,7 @@ - compat for `julia`, `LinearAlgebra`, `Pkg` and `Test` extended to 1.13 - `scripts/build_docu.jl` installs `LiveServer` in the global environment if it is missing -## WinchControllers v0.6.1 2026-09-03 +## WinchControllers v0.6.1 03-09-2026 ### Added - soft force limiting for REEL_OUT mode: `WCSettings.force_limit` (`"hard"`/`"soft"`) replaces the `UpperForceController` with `calc_vro_soft`, a continuous law with no @@ -71,7 +71,7 @@ - `f_err(logger)` returns `0.0` instead of erroring when every logged force error is `NaN` (e.g. under `soft_lfc`, where neither force controller ever activates) -## WinchControllers v0.6.0 2026-08-16 +## WinchControllers v0.6.0 16-08-2026 ### Added - torque controllers, moved here from V3Kite.jl: `WinchPosController` (cascaded length/speed control) and `WinchForceController` (compliant force mode), with @@ -90,7 +90,7 @@ - `WCSettings.dt` defaults to `NaN` instead of `0.02`, so a caller that forgets to set it fails loudly instead of silently running at the wrong timestep -## WinchControllers v0.5.6 2026-08-14 +## WinchControllers v0.5.6 14-08-2026 ### Added - REEL_OUT winch-controller mode: `WCSettings.mode` (`"piecewise"`/`"reelout"`), dispatched in `calc_vro`; `test = true` still selects `"reelout"` for backwards compatibility @@ -108,12 +108,12 @@ - improved `bin/install` - CI workflow fixes -## WinchControllers v0.5.5 2026-03-23 +## WinchControllers v0.5.5 23-03-2026 ### Added - `CITATION.cff` file - `.markdownlint` configuration file -## WinchControllers v0.5.4 2026-03-03 +## WinchControllers v0.5.4 03-03-2026 ### Added - the package `RobustAndOptimalControl` - the example `stability_ufc.jl` which tests the stability of the upper force controller @@ -122,20 +122,20 @@ - use subprojects instead of TestEnv - fix warnings -## WinchControllers v0.5.3 2025-05-31 +## WinchControllers v0.5.3 31-05-2025 ### Added - the functions `get_v_set()`, `get_f_err()` - the script `autotune.jl`, using the **NOMAD** optimizer - added a documentation page for the autotuning feature - added the function `install_examples()` and updated the docu accordingly -## WinchControllers v0.5.2 2025-05-29 +## WinchControllers v0.5.2 29-05-2025 ### Added - the script `test_components.jl` ### Changed - export `saturate()` -## WinchControllers v0.5.1 2025-05-28 +## WinchControllers v0.5.1 28-05-2025 ### Added - all public functions document - add page `Performance Indicators` to documentation diff --git a/bin/release b/bin/release index 15bc273..19cfbda 100755 --- a/bin/release +++ b/bin/release @@ -93,7 +93,9 @@ echo "$notes" echo "----------------------------------------" # --- sync CITATION.cff ------------------------------------------------------- -release_date=$(echo "$header" | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}' || date +%F) +release_date=$(echo "$header" | grep -oE '[0-9]{2}-[0-9]{2}-[0-9]{4}' \ + | sed -E 's/(..)-(..)-(....)/\3-\2-\1/' || true) +release_date=${release_date:-$(date +%F)} if [[ -f CITATION.cff ]]; then sed -i -E "s/^version: .*/version: \"$version\"/" CITATION.cff sed -i -E "s/^date-released: .*/date-released: \"$release_date\"/" CITATION.cff From 541e769355e38eec3f5099cd670af4bfe02662e9 Mon Sep 17 00:00:00 2001 From: 1-Bort-1 <323661610+1-Bort-1@users.noreply.github.com> Date: Sat, 10 Oct 2026 17:24:16 +0200 Subject: [PATCH 5/5] revert: release header dates back to ISO YYYY-MM-DD The release bump writes ## vX.Y.Z YYYY-MM-DD again (1-Bart-1/Agents#635), so the headers and bin/release's date read go back to ISO. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 22 +++++++++++----------- bin/release | 4 +--- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f508af..75e2419 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## WinchControllers v0.6.4 28-09-2026 +## WinchControllers v0.6.4 2026-09-28 ### Added - an Acknowledgements section in the README, crediting the MERIDIONAL project (EU Horizon Europe grant agreement no. 101084216) @@ -7,7 +7,7 @@ - `Manifest-v1.13.toml.default` re-resolved with Julia 1.13.1; its Pkg also hashes `[sources]`, so a manifest from 1.13.0 warned that the project had changed -## WinchControllers v0.6.3 26-09-2026 +## WinchControllers v0.6.3 2026-09-26 ### Changed - `[compat]` accepts KiteUtils 0.13 as well as 0.11.1 and 0.12 @@ -15,7 +15,7 @@ - `WCSettings.force_limit_tau_rise`; the force low-pass of the soft limiter is now always symmetric (`force_limit_tau`). `LowPass` still supports `tau_rise`. -## WinchControllers v0.6.2 24-09-2026 +## WinchControllers v0.6.2 2026-09-24 ### Added - acceleration feed-forward in `winch_position_torque!`: new keyword `inertia` (drum inertia seen from the motor) and `WinchPosController.acc_ff`, set from the new @@ -42,7 +42,7 @@ - compat for `julia`, `LinearAlgebra`, `Pkg` and `Test` extended to 1.13 - `scripts/build_docu.jl` installs `LiveServer` in the global environment if it is missing -## WinchControllers v0.6.1 03-09-2026 +## WinchControllers v0.6.1 2026-09-03 ### Added - soft force limiting for REEL_OUT mode: `WCSettings.force_limit` (`"hard"`/`"soft"`) replaces the `UpperForceController` with `calc_vro_soft`, a continuous law with no @@ -71,7 +71,7 @@ - `f_err(logger)` returns `0.0` instead of erroring when every logged force error is `NaN` (e.g. under `soft_lfc`, where neither force controller ever activates) -## WinchControllers v0.6.0 16-08-2026 +## WinchControllers v0.6.0 2026-08-16 ### Added - torque controllers, moved here from V3Kite.jl: `WinchPosController` (cascaded length/speed control) and `WinchForceController` (compliant force mode), with @@ -90,7 +90,7 @@ - `WCSettings.dt` defaults to `NaN` instead of `0.02`, so a caller that forgets to set it fails loudly instead of silently running at the wrong timestep -## WinchControllers v0.5.6 14-08-2026 +## WinchControllers v0.5.6 2026-08-14 ### Added - REEL_OUT winch-controller mode: `WCSettings.mode` (`"piecewise"`/`"reelout"`), dispatched in `calc_vro`; `test = true` still selects `"reelout"` for backwards compatibility @@ -108,12 +108,12 @@ - improved `bin/install` - CI workflow fixes -## WinchControllers v0.5.5 23-03-2026 +## WinchControllers v0.5.5 2026-03-23 ### Added - `CITATION.cff` file - `.markdownlint` configuration file -## WinchControllers v0.5.4 03-03-2026 +## WinchControllers v0.5.4 2026-03-03 ### Added - the package `RobustAndOptimalControl` - the example `stability_ufc.jl` which tests the stability of the upper force controller @@ -122,20 +122,20 @@ - use subprojects instead of TestEnv - fix warnings -## WinchControllers v0.5.3 31-05-2025 +## WinchControllers v0.5.3 2025-05-31 ### Added - the functions `get_v_set()`, `get_f_err()` - the script `autotune.jl`, using the **NOMAD** optimizer - added a documentation page for the autotuning feature - added the function `install_examples()` and updated the docu accordingly -## WinchControllers v0.5.2 29-05-2025 +## WinchControllers v0.5.2 2025-05-29 ### Added - the script `test_components.jl` ### Changed - export `saturate()` -## WinchControllers v0.5.1 28-05-2025 +## WinchControllers v0.5.1 2025-05-28 ### Added - all public functions document - add page `Performance Indicators` to documentation diff --git a/bin/release b/bin/release index 19cfbda..15bc273 100755 --- a/bin/release +++ b/bin/release @@ -93,9 +93,7 @@ echo "$notes" echo "----------------------------------------" # --- sync CITATION.cff ------------------------------------------------------- -release_date=$(echo "$header" | grep -oE '[0-9]{2}-[0-9]{2}-[0-9]{4}' \ - | sed -E 's/(..)-(..)-(....)/\3-\2-\1/' || true) -release_date=${release_date:-$(date +%F)} +release_date=$(echo "$header" | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}' || date +%F) if [[ -f CITATION.cff ]]; then sed -i -E "s/^version: .*/version: \"$version\"/" CITATION.cff sed -i -E "s/^date-released: .*/date-released: \"$release_date\"/" CITATION.cff