- loadSortieData: call applyTrailAndCursor() after sortie load so map
polylines appear when allPoints already populated from datebar
- loadDiveData: split into Phase1 (track only, batched by 4) + Phase2
(series + sub, batched by 4) — map draws as soon as tracks load
- loadShipSession split into fetchShipTrack + fetchShipSeries helpers
- T3: filter ship sessions by date (sess.start.slice(0,10) === filterDate)
- Pass date param from loadDate to loadDiveData
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Bug 1: cursor slider started at tMin (no data in 60s window at start of data).
Fix: start slider at tMax so trail window covers the last trailMs of actual data.
Feature 2 (Alexandre Larribau): setupSyncedZoom() propagates xaxis.range
to all sibling charts on plotly_relayout, with _syncing guard vs infinite loop.
Applied to global charts (depth/PWM/USBL), USV tab, and AUV tab independently.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
BUG3b: data-dates API returns hash prefix, missions API returns underscore.
Normalize both sides before comparing to properly filter mission fetches.
BUG1c: auto-switch to USV tab after sortie data loaded so charts are visible.
Bug1: populatePlotlyCharts now forces requestAnimationFrame Plotly.Plots.resize
after react() so charts render correctly even after hidden/late init
Bug1b: switchTab(charts) triggers resize on all 4 chart divs
Bug2: loadSortieData calls showNoDataOverlay(false) when USV data loaded
Bug3: loadDate filters missions via availableDates cache before fetching
all dives — avoids O(n*missions) requests when date entry known
- Merge new signals (pitch/roll/yaw/altitude/battery_v/obstacle_dist) at
top level of output dict via **unpacking, not nested under 'signals' key
- Replace t_ms -> t in all new signal appends to match depth/state format
- Fix all_t computation to use unified 't' key across old and new signals
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>