Releases: sailingnaturali/signalk-currents
Release list
v0.12.0 — national gates + alias-resolved station ids
Takes the plugin national with station-corrections 2.9.0: Nakwakto Rapids, Quatsino Narrows, Masset Sound and Great Bras d'Or now load from the registry alongside the Salish Sea gates.
Two of them needed a fix to arrive. CHS publishes a station under its own name, which is not always the registry's name — the current file says "Masset Channel" for Masset Sound and "Big Bras D'Or" for Great Bras d'Or. Live-id resolution folded the label only, so both resolved nothing and served no predictions, while the two gates CHS agrees with came up fine. The registry has carried the provider's name as an alias all along; resolution now tries the label first, then the aliases, so an alias can never shadow a gate that matched on its own name.
Requires @sailingnaturali/station-corrections ^2.9.0.
v0.11.2
Adopts currentGates from station-corrections 2.7.1 in place of the hand-rolled gate filter, so the gate/tide/derived distinction lives in the package that owns the registry rather than being re-derived per consumer. No behaviour change from 0.11.1.
v0.11.1
Stop treating the shared registry's tide reference ports as current gates. station-corrections 2.3.0 added ten CHS tide ports (kind: 'tide') so a gate can name its companion port; the gate filter predated that field and swept them in, so each threw no live id for <port> on every poll cycle. No served data changes.
v0.11.0
Fixed
-
Every CHS gate was served twice.
effectiveStationsdeduped onstationIdalone, so a
config written beforestation-corrections2.0.0 — which names gates by their provider-minted
CHS id — never collided with the registry's slug. The same gate appeared as two stations, and
the stale id resolved no live id either. Such an entry is now re-keyed onto the registry slug,
landing as the override it was always meant to be, carrying the operator's set directions,
estimate flags and bins across. Seen live as 39 stations covering 20 gates. -
NOAA stations fetched every day twice.
fetchNoaaEventspassed its exclusive end instant
straight to a CO-OPS client that formatsbegin_date/end_dateas bare YMD, which the API
reads inclusively — so each day request pulled that day and its successor, and consecutive
windows overlapped. Callers concatenating a horizon got duplicate events: Boundary Pass served
48 events over a 3-day horizon, 16 of them duplicates, surfacing downstream as the same slack
time listed twice.
Both were invisible from outside the plugin: consumers that key on station label silently
discarded one of each duplicated pair rather than reporting a conflict.
Added
- App icon (current-flow streamlines) and a simplified web-app card description.
v0.10.0 — serve derived-gate slack timing (Malibu Rapids)
- Serve derived gates (Malibu Rapids) to
/resources/currents: predict the reference tide port's HW/LW, shift by the lags, publish slack timing withderived: true. - Never publishes
environment.currentfor a derived gate (no speed vector); derived gates stay out of the nearest-station path. adaptChsBundlenow sorts three record types (currents / tide-harmonic references / derived-slack gates) instead of rejecting the new ones.- Requires
@sailingnaturali/chs-constituents0.2.0.
v0.9.3 — plain-language build page
Clearer offline-build page
Rewrote the offline-build webapp for someone who just installed the plugin: it now leads with what will happen in plain words, keeps the jargon (CHS, licensing) below the fold, and gives a realistic 2–3 hour estimate instead of ~30 minutes (the old number was for a small station set, not the full fetch).
v0.9.2 — fix Currents webapp loading
Fix: Currents webapp fails to load in the admin UI
The offline-CHS-build page is a standalone static webapp, but was tagged signalk-embeddable-webapp, so the admin UI tried to load it via webpack module federation and errored with "Module _sailingnaturali_signalk_currents is not available." Corrected to the signalk-webapp keyword.
v0.9.1 — harden CHS bundle I/O
Hardening for the offline CHS build path (0.9.0):
- Atomic bundle write — the local build now writes to a temp file and renames it into place, so a crash mid-write can't leave a half-written
chs-constituents.json. - Bundle validation — a malformed built bundle is rejected with a clear error instead of a bare
TypeError. - Corrupt builds are surfaced — a present-but-unreadable CHS bundle now degrades to NOAA-only and reports the error in the plugin status, instead of silently serving NOAA-only as if nothing were wrong. A genuinely-missing bundle stays a quiet, valid state.
No config or API changes.
v0.9.0 — offline CHS models, no committed CHS data
Offline Canadian (CHS) current prediction — built locally
The plugin now ships with no Canadian station data. CHS current gates load automatically from the shared @sailingnaturali/station-corrections registry by name, and each gate's live station id is resolved from the CHS IWLS index at runtime — so nothing CHS-copyrighted is bundled with the plugin.
New: build offline CHS models
A "Build offline CHS models" webapp (SignalK → Webapps → Currents) fits harmonic constituents for every CHS current station on your own machine, under your own CHS licence, giving offline Canadian current prediction where CHS gates were previously online-only. Built models stay on your server — Crown copyright, not redistributable, not for navigation.
US (NOAA) offline fallback is unchanged: public-domain constituents remain bundled.
Safety
Constricted gates (rapids, narrows, passes) are tagged unreliableForTransit whenever served from an offline harmonic model — don't time a rapids transit on a harmonic-only reading. Only open straits (Juan de Fuca East, Johnstone Strait Central) are exempt.
New config
chsGates(default on) — turn off to skip the CHS registry gates and the IWLS lookup entirely if you cruise outside BC.
Notes
- CHS live-id resolution needs a network connection on start; offline, CHS gates serve the locally-built harmonic model if you've built one.
- No breaking config changes — an existing
stationslist still works and overrides registry gates by id.
v0.8.0
Added
Four stations join DEFAULT_STATIONS, syncing the plugin to the currents-vault
passage list (the canonical station set, which currents-mcp loads):
- Johnstone Strait - Central — the WEAK_AND_VARIABLE fix in 0.7.2 was for exactly this station
- Blackney Passage
- Weynton Passage
- First Narrows — replaces Calamity Point: same physical gate (Lions Gate), better-placed CHS station
Vault-only gates previously resolved station ids the /currents payload never
served, so MCP slack windows for them came back empty. With the sync, every gate
the passage database knows resolves out of the box.
Fixed
The requiresLive doc comment claimed the flag was seeded from the currents-mcp
passage list; it is a per-station judgment maintained in defaults.ts.