Skip to content

Improve/stability dx - #18

Merged
Jayuda merged 32 commits into
mainfrom
improve/stability-dx
Sep 19, 2026
Merged

Jayuda merged 32 commits into
mainfrom
improve/stability-dx

Conversation

@Jayuda

@Jayuda Jayuda commented Sep 19, 2026

Copy link
Copy Markdown
Contributor

No description provided.

Antigravity Agent and others added 30 commits September 17, 2026 19:04
… on server

- Give QueryTab a stable id and carry it through QueryJob/QueryResultMessage
  so a result that finishes after a tab switch lands in the tab that ran it.
- Run INSERT/UPDATE/DELETE/DDL via execute() and report the driver's
  rows_affected instead of the result-set length (always 0 before).
- Split statements with the quote/dollar-quote/comment aware splitter in the
  executors, auto-pagination check and user manager (was split(';')).
- Execute statements that start with a comment instead of skipping them.
- Decode PostgreSQL values by native type (INT4, NUMERIC, TIMESTAMP, UUID,
  JSON, arrays, ...) instead of showing [unsupported]/Error.
- MySQL: stop retrying the whole job after a statement error or timeout,
  which could execute DML up to three times; retry only on connect failure.
- Replace hard-coded 10s/15s/60s timeouts with a configurable query timeout
  (default: none) and add a max-rows-per-result limit with a notice.
- Record backend pid per job; cancel and timeout send pg_cancel_backend /
  KILL QUERY so the statement stops on the server too.
- Surface query start failures as toasts and reset the running state.
- Collapse the duplicated synchronous executor into a wrapper over the async
  executor (~780 lines removed).
- Fix pre-existing clippy errors that broke CI.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…d guards

- Compile logging in (was max_level_off) and write it to
  <data_dir>/logs/tabular.log with size-based rotation; "Enable Debug
  Logging" now applies immediately.
- Install a panic hook that saves crash-<time>.log with location and
  backtrace, and tell the user on the next launch.
- Add "Open Logs Folder" and "Copy Diagnostics" to the settings menu.
- Hot exit: persist query tabs (including unsaved drafts) and window size to
  session.json from a background writer and restore them on startup
  (Settings → Performance → Restore open tabs).
- Ask before closing tabs with unsaved changes (single, others, to the
  right) and before quitting with an open manual-commit transaction.
- Remove duplicated eprintln/info tab-action tracing that would flood logs.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Add run_query_for_active_tab / run_query_with_callback helpers that
  spawn background jobs and queue until the connection pool is ready.
- Move every blocking execute_query_with_connection caller (spreadsheet
  save, create-table wizard, table removal, structure edits and refresh,
  quick open, FK navigation, Redis key browse, SQL filter, pagination
  fallback) onto the job pipeline, then delete the synchronous executor.
- Apply the tab's PostgreSQL schema as search_path on the connection that
  runs the query (the old SET ran on an arbitrary pool connection).
- Stop inventing a 10,000 row total for server pagination: total is unknown
  until "Count rows" runs COUNT(*) in the background; Next follows full pages.
- Keep two copies of a result set instead of ~7 and fix result-tab switching
  that ignored pagination.
- Spreadsheet save only clears the edits it submitted.
- Recover poisoned mutexes in backup/restore instead of panicking.
- Write HTTP collections/request state atomically, report save failures,
  and log (not silently skip) corrupt workspace files.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Add a central keymap (src/keymap.rs): every app/editor shortcut is defined
  once, matched exactly and consumed so it never fires twice. Shortcuts are
  searchable and rebindable in a Keyboard Shortcuts window (F1 / ⌘⇧/),
  persisted as overrides in keybindings.json, with conflict warnings.
- Implement shortcuts Quick Open already advertised but never handled
  (new tab, settings, manual-commit toggle); Quick Open hints now come from
  the live bindings.
- Capture error positions (PostgreSQL position, MySQL "at line N") and offer
  "Go to error" to move the editor cursor to the failing spot.
- Replace the remaining blocking error dialogs with toasts; drop duplicate
  toasts and the stale spreadsheet save toast now reported by the job.
- Use English consistently for UI strings (66 mixed Indonesian strings).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Narrow the crate-wide clippy allow list from 25 lints to 3 structural ones
  and fix what they were hiding (clamp, struct init, late init, docs, ...).
- CI: clippy -D warnings for all targets with and without `collab` plus tests
  on Linux and macOS (Windows non-blocking), dependency caching, cancel
  superseded runs, and an informational rustfmt check; add rustfmt.toml.
- Drop cargo-deb from runtime dependencies (a packaging CLI, never used by
  the code) and pin mssql-client/mssql-driver-pool to 0.20.x as intended.
- Stop tracking .env (add .env.example), stop ignoring Cargo.lock, and move
  old planning/audit documents from the repo root to docs/archive.
- Group the nine query-job fields of Tabular into QueryJobsState with a
  single allocate_id() in place of eleven copies of the id bookkeeping.
- Honour RUST_LOG only when it holds a valid level spec.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…with read-only SQL safety guard and schema browsing tools
@Jayuda
Jayuda merged commit 810d7f0 into main Sep 19, 2026
2 of 10 checks passed
@Jayuda
Jayuda deleted the improve/stability-dx branch September 19, 2026 01:11
Jayuda added a commit that referenced this pull request Sep 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant