signalk-pypilot-newui 2.8.0 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,143 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.10.0 — 2026-09-27 — Sea-trial wind-mode fixes + maneuver forensics
4
+
5
+ Rolls up Rev309 through Rev323. Between 2.9.0 (Rev280) and 2.10.0 the
6
+ plugin absorbed a sea trial (2026-09-25) that surfaced several critical
7
+ gaps in the wind-mode workflow, plus a new forensics module so future
8
+ sea trials can be audited offline.
9
+
10
+ ### Added
11
+
12
+ - **Maneuver Trace Log** (Rev322, opt-in). Every user-driven action from
13
+ the visor — aproado / empopado pick, tack tap, mode change, target PUT,
14
+ engage / disengage — is recorded together with pypilot state right
15
+ before the command AND 300 ms after. Pair pre/post makes it trivial
16
+ to answer "did the pilot actually obey?". Files land as JSONL under
17
+ `<plugin data dir>/maneuver-trace/`. New endpoints:
18
+ `GET|POST /maneuver-trace/{status,start,stop,event}` +
19
+ `GET /maneuver-trace/tail?n=N`. Setup card "Maneuver trace
20
+ (sea-trial forensics)" toggles it on the fly, off by default.
21
+ - **Empopado pseudo-mode** (Rev313 → Rev320) — mirror of Aproado for the
22
+ other extreme: bring the boat to TWA ≈ 180° so the mainsail flogs the
23
+ least while striking sail. Full HUD (choosing → transit → active),
24
+ hot gains at latch (P × 1.5, D × 1.7, servo slew × 1.3), audible
25
+ warning when `|TWA| < 160°` sustained 1 s ("empopado inestable"),
26
+ auto-cancel when `|TWA| < 140°` sustained 2.5 s. Restore in order
27
+ hot gains → profile → mode → target → engaged on SALIR / cancel.
28
+ - **Attitude safety alarms** (Rev299 / I1) — `attitude-heel-extreme` and
29
+ `attitude-pitch-extreme` rules with configurable thresholds
30
+ (`alarmAttitudeHeelDeg`, `alarmAttitudePitchDeg`), off by default so
31
+ a fresh install never disarms on the dock.
32
+ - **Roll feed-forward** (Rev282+) and **Post-tack catch-up** (Rev299)
33
+ publish diagnostic paths under
34
+ `steering.autopilot.pypilot.tuning.rollFf.*` and `.tackCatchup.*`.
35
+ Both are currently `appliedToAp: false` — computed and observable
36
+ but not yet fed to the pilot; a later release flips the switch after
37
+ sea trial validation.
38
+ - **Leeway estimator** (Rev298 / H4) publishing
39
+ `steering.autopilot.pypilot.derived.leewayRad` from the classical
40
+ `drift_deg = adj * heel_deg / bsp_kn²` formula. Opt-in via
41
+ `leewayAdjustment > 0`, kept off the canonical `performance.leeway`
42
+ path so it never overwrites `signalk-derived-data`.
43
+ - **Failsafe boat speed** (Rev299 / H2) — when both BSP and SOG go
44
+ missing, the plugin injects a configurable knots value so downstream
45
+ wind / leeway calculations keep producing plausible numbers.
46
+ - **Profile default persistence fix** (Rev310) — opening the visor from
47
+ a second device no longer silently overwrites the pypilot profile with
48
+ `default`; the select is now primed from the HTTP snapshot before the
49
+ WebSocket delta arrives.
50
+
51
+ ### Fixed (critical — from the 2026-09-25 sea trial)
52
+
53
+ - **Tack in wind mode** (Rev309) — pressing VIRAR to a specific side now
54
+ reliably rotates the bow to that side, even when the "short arc" would
55
+ go the other way. Root cause: `planned = -refRad` in the countdown
56
+ path was ignoring the sign; now `_tackCountdownToExecuting` delegates
57
+ to `ap.tack.direction` + `ap.tack.state=begin` so pypilot honours the
58
+ band the sailor chose.
59
+ - **Aproado without countdown** (Rev311) — pressing POR PROA / POR POPA
60
+ starts the maneuver on the same tap (previously 5 s delay). Sustain
61
+ 3 s for the "achieved" latch avoids false positives on brief AWA
62
+ oscillations.
63
+ - **Alarm silence during maneuvers** (Rev311 → Rev312 → Rev323) — the
64
+ `heading-deviation`, `cruise-drift` and `unable-to-steer` rules now
65
+ respect both pypilot's own `ap.tack.state != "none"` AND a visor-side
66
+ pseudo-mode flag posted to `POST /maneuver-state` when Aproado /
67
+ Empopado are running. Independent flag needed because pypilot does
68
+ not always update `ap.tack.state` when the sailor uses one of the
69
+ pseudo-modes.
70
+ - **Heading-deviation false positives in wind mode** (Rev323) —
71
+ threshold raised to 35° and sustain to 30 s when the pilot mode is
72
+ `wind` / `true wind`. In waves and gusts the AWA target legitimately
73
+ oscillates ±20-30° while the AP is still correcting; the 20°/15 s
74
+ default of compass mode was disarming the alarm several times per
75
+ hour on Tunatunes.
76
+ - **Tack countdown stability close-out** (Rev312) — if the tack overshoots
77
+ the plan but the boat is clearly settled (rate-of-turn < 3°/s for 2 s),
78
+ the overlay closes on its own instead of counting up to the 120 s
79
+ timeout.
80
+
81
+ ### Changed
82
+
83
+ - **Alarms OFF by default** (Rev317) — a fresh install no longer arms
84
+ every rule; the sailor opts in via Setup → Alarms. Pre-Rev299 installs
85
+ keep legacy behaviour (undefined = all-on) so nothing changes silently
86
+ under an existing boat.
87
+ - **Terminology cleanup** (Rev321) — all references to third-party
88
+ autopilot brands / dashboards in code, comments, docs, UI hints and
89
+ package metadata have been rewritten as neutral descriptions of the
90
+ mechanism ("downstream Signal K clients", "wind-response damping
91
+ bands", "classical heel-over-speed² formula"). No behavioural change.
92
+ - **Tablet vertical crop hardening** (Rev314) — `100vh` → `100dvh` in
93
+ every fullscreen modal, `-webkit-overflow-scrolling: touch`, safe-area
94
+ padding. Fixes bottom-of-card clipping on Android tablets in portrait.
95
+
96
+ ### Removed
97
+
98
+ - `docs/PROMPT_FOR_LLM_maneuver_catalog.md` — obsolete Rev209 audit
99
+ prompt, superseded by the current tack design.
100
+
101
+ ## 2.9.0 — 2026-09-23 — Relicensed to AGPL-3.0-or-later
102
+
103
+ ### License change (see NOTICE for details)
104
+
105
+ Starting with this release the plugin is distributed under the
106
+ **GNU Affero General Public License 3.0 or later** instead of Apache
107
+ 2.0. The move is intended to keep downstream forks open under the
108
+ same license — including forks offered as a network service — while
109
+ still allowing personal and commercial USE without any fee, permission
110
+ or contract.
111
+
112
+ What this means in practice:
113
+
114
+ - **Personal or commercial use is unchanged.** A cruiser, charter
115
+ fleet, sailing school or workshop can install and use the plugin
116
+ without paying anything or asking anyone.
117
+ - **Fork for your own use or to contribute back — same as before.**
118
+ Anyone can clone the repo, modify the code, test it on their boat,
119
+ or open a pull request. The AGPL only kicks in the moment you
120
+ *distribute* your modified version (as a package or as a network
121
+ service).
122
+ - **Distributing a modified version obliges you to publish the source
123
+ code under AGPL-3.0-or-later too.** Closing a fork behind a
124
+ commercial product without releasing the source is no longer
125
+ permitted.
126
+
127
+ Previous releases (up to 2.8.0) remain available under the Apache 2.0
128
+ terms that were granted at the time — those rights are perpetual for
129
+ those specific versions.
130
+
131
+ ### Also in this release
132
+
133
+ - Ship the `LICENSE` file that was declared in `package.json` but
134
+ missing from the tarball in all prior releases. The file now
135
+ carries the full AGPL-3.0 text (previously an implicit Apache-2.0
136
+ reference in `NOTICE`).
137
+ - `NOTICE` updated with licensing history + reaffirmation that
138
+ Panaaj's Apache-2.0 code fragment (autopilot-provider adapter)
139
+ is compatible with an AGPL-3.0 combined work.
140
+
3
141
  ## 2.8.0 — 2026-09-23 — Sea-trial critical fixes + intelligence layer
4
142
 
5
143
  ### Fixed (critical, from real sea trial)