signalk-pypilot-newui 3.6.0 → 3.7.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,101 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.7.0 — 2026-10-26 — Route following (NAV), black box, external review fixes
4
+
5
+ Rolls up Rev521 → Rev551 on top of 3.6.0. Minor bump: new NAV route
6
+ following and black box. No breaking changes. The steering fixes come
7
+ from a full code review by two external LLMs plus four self-audits; not
8
+ yet tested at sea (see `docs/QA_Rev526-540.md`, rollback tag
9
+ `pre-audit-rev530`).
10
+
11
+ ### Added
12
+ - **Follow Freeboard routes with pypilot's NAV mode, no extra plugins**:
13
+ the plugin reads the active route from Signal K's Course API, computes
14
+ leg bearing, cross-track error and arrival itself and sends an APB
15
+ sentence every second on Signal K's NMEA output, which pypilot already
16
+ reads - NAV then appears in pypilot. Cross-track error capped both
17
+ ways (pypilot caps it only on one side). Waypoints advance on their
18
+ own (arrival circle or perpendicular passed) with a spoken message:
19
+ "Waypoint X reached. Next, Y. New course N degrees. D miles." At the
20
+ destination, or if the route or the GPS position is lost for 5 s, the
21
+ pilot goes to compass on the current heading and says so (also with
22
+ the AP disengaged, where pypilot would otherwise pick GPS). Engage
23
+ from Freeboard / KIP with a route goes straight to NAV; in the visor
24
+ NAV is chosen in the mode list ("NAV (ROUTE)"), with a confirmation
25
+ when it would turn more than 60°. ±1 / ±10 in NAV take over in
26
+ compass with the new heading; tacking in NAV is refused. "Next
27
+ waypoint" in the mode list and through the Autopilot API. Mode button
28
+ shows "NAV · waypoint · nm". Status on `steering.autopilot.route`.
29
+ - **Black box** - chart with every recorded field (one band each, touch
30
+ cursor with all values), View / Download of each incident, Setup tile
31
+ amber until the incident has been opened, and a **note** per incident
32
+ dictated with the phone keyboard (Mark asks for it right away; a
33
+ second Mark in the same incident adds to it).
34
+ - **Black box** (Setup card): keeps the last minute of autopilot data
35
+ and saves one minute before and one after when something happens - AP
36
+ taken off from outside the app, stuck pilot or recovery cycle, servo
37
+ overcurrent fault, a tack slower than usual (40 s, gybe 75 s) or that
38
+ failed, an alarm with the AP engaged - or when you press Mark (also a
39
+ long-press on the helm button of the rose). Each incident shows heading
40
+ error, apparent wind and servo current with the fault marked, its
41
+ events, and can be downloaded. The newest 50 are kept.
42
+ - **Saved displays**: name the rose layout (corners, arrows, overlays,
43
+ bottom bar) and keep it on this device or on the server for every
44
+ device; apply it in one tap from the rose configuration window.
45
+ - **Tap sound** (rose configuration, off by default): a short, bright
46
+ sound on every button tap so you know it registered in wind and noise.
47
+ Five lower sounds to choose from (wood, drop, soft thud, low bell, low
48
+ click) with a test button; soft thud by default.
49
+
50
+ ### Changed
51
+ - Rose ring, ticks and the heading / wind box frames in grey (#8e9bab);
52
+ degree labels and card / corner titles in white.
53
+ - Gust strategy **"freeze target" removed**: it rewrote the target every
54
+ second for 12 s, undoing the sailor's nudges, tacks and mode changes.
55
+ Saved configs with it behave as "warn".
56
+ - App Store: recommended companion plugins, PNG app icon, reorganised
57
+ README and screenshots.
58
+ - An ACK on an alarm banner also closes it.
59
+ - **More contrast for sunlight**: white text, brighter secondary text,
60
+ borders and separators.
61
+ - **AUTO WIND** also switches with the AP disengaged (engaging lands in
62
+ the right mode), but only with at least 3 kn of true wind - in port
63
+ the true wind angle is noise.
64
+ - English label of the downwind pseudo-mode: **DEAD DOWNWIND** (was
65
+ "head downwind").
66
+
67
+ ### Fixed
68
+ - **Pilot core** (external review): targets kept in the mode's own
69
+ range; a target retry is dropped on a mode change; mode change then
70
+ target in sequence, waiting for pypilot's echo (reverts if refused);
71
+ late echoes of a burst of nudges no longer pull the target back, and
72
+ the target is reconciled to pypilot's last command; handover to a wind
73
+ mode waits and verifies; API tacks go through the virtual tack, API
74
+ nudges re-aim a running tack, KIP cancel stops it; a small overshoot is
75
+ arrival, not a 360.
76
+ - **Alarms**: a muted alarm still clears; ACK, mute and severity are
77
+ republished; "AP dropped" uses STW without GPS; unable-to-steer
78
+ ignores missing RMS; the black box opens an alarm incident only when
79
+ the alarm fires.
80
+ - **Doctor**: clamps to pypilot's gain range, waits for its forked
81
+ profile, one change per session, apply-all locks only after success.
82
+ - **Recording / storage**: trip ids validated before building paths;
83
+ atomic writes (display presets, black-box incidents); recorders keep
84
+ lines on a failed write; the active session cannot be deleted; KPI
85
+ integration on real time steps; restore never sends orders.
86
+ - Head-to-wind / downwind: the manoeuvre flag expires (180 s), a failed
87
+ mode change ends it, cancelled manoeuvres write nothing.
88
+ - App dialogs above popups (the black-box Delete confirm was hidden).
89
+ - Tack buttons: the arrow is centred when there is no number under it
90
+ (wind modes).
91
+ - **Screen kept on over plain http** (tablet at http://<ip>:3000): the
92
+ Wake Lock API only exists on https / localhost; a tiny silent looping
93
+ video now keeps the screen on there, and the lock is re-taken after
94
+ the browser releases it.
95
+ - **"AP disengaged from outside the app" fired in port** on every
96
+ Signal K restart (the first ap.enabled=false is the initial sync) and
97
+ with no GPS (unknown speed counted as underway).
98
+
3
99
  ## 3.6.0 — 2026-10-19 — AUTO WIND and a logbook button on the rose
4
100
 
5
101
  Rolls up Rev517 → Rev520 on top of 3.5.0. Minor bump: new AUTO WIND