You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: batch B — data-loss guards, query timeout, banner mutex
Confirmed-broken behaviors from the deep audit:
- **F5 mid-edit data loss**: refresh on a dirty tab silently dropped
every pending edit. on_refresh_active_tab now opens a destructive
AlertDialog (Cancel | Discard and refresh) when the tab tracker
has pending changes, mirroring the close-with-pending pattern.
- **Disconnect with pending no warn**: clicking Disconnect with any
tracker dirty silently destroyed the work. on_disconnect now
prompts; "Discard and disconnect" routes through a new
AppMsg::ForceDisconnect that calls do_disconnect (the previous
body, factored out).
- **Query timeout**: editor's Run had no wall-clock cap; runaway
queries pinned the UI. New `query_timeout_secs` preference
(default 60s, 0 disables); editor's tokio::select! arm races
against the timeout and emits ShowTimedOut on expiry. Surfaced
in Preferences → Editor as a SpinRow with subtitle.
- **Banner stacking**: read-only / no-PK / pending-changes banners
could all reveal at once, wasting vertical space and dulling user
attention. New `refresh_banner_visibility` enforces single-banner
mutual exclusion in priority order (read-only > no-PK > pending);
every toggle site routes through it.
Triaged as already-fixed and skipped: MySQL tinyint(1) bool
detection (grid.rs:596), Postgres multi-attribute alter
(structure_tracker materialize collapses), hourly history-prune
timer (correct GTK pattern, no leak). ComboBoxText kept
intentionally for free-text type entry.
0 commit comments