Skip to content

README fact-check + screenshots, keymap/preview/export fixes (v0.18.1) - #60

Merged
killertux merged 6 commits into
mainfrom
docs/readme-audit-and-fixes
Oct 11, 2026
Merged

killertux merged 6 commits into
mainfrom
docs/readme-audit-and-fixes

Conversation

@killertux

@killertux killertux commented Oct 11, 2026 •

Copy link
Copy Markdown
Owner

Summary

README fact-check. Every section was checked against the source. About 50 claims had drifted, for example:

  • --connection takes a saved-connection name, not a URL.
  • There are 14 themes plus a picker, not Dark/Light, and <Space>t / :theme toggle are gone.
  • Session switching is <Space>0–9.
  • = formats the statement under the cursor.
  • The LLM has nine tools.
  • The connection is pinned only during a transaction.
  • Fixed: the keybindings rules, autocomplete insert behaviour, and the stale Architecture and Project layout sections.

Shipped features that weren't documented are now covered: query parameters, saved queries, search & replace, theme picker, which-key hints, the destructive-statement guard, : completion, mouse support, result column tools, and :update.

Screenshots. Seven screenshots are generated with vhs from the sample DB. docs/screenshots/generate.sh rebuilds them in a throwaway $HOME, so your ~/.rowdy is never touched.

Code fixes found during the audit:

  • Inline preview: the "⤥ N more rows" footer used to paint over the last data row. It now gets its own row, and the title's preview count matches the rows actually visible.
  • : in the expanded result view opens the command bar, so :export (and :export sql <table>) can act on the Visual selection. That code path was previously unreachable.
  • [result], [chat_normal], [chat_insert] keybindings are now consulted (after the mode-dependent keys that stay hardcoded). Before, they were parsed but had no effect.
  • Multi-key overrides such as "<Space>r" under [leader] are now rejected with a clear error instead of being silently ignored.
  • Stale text: :help showed the old Shift+digit session chord; the seeder printed the URL-style --connection.
  • MSRV: rust-version goes from 1.86 to 1.88, because the code uses let-chains. Dependencies top out at 1.87. With the new MSRV, clippy flagged three collapsible if lets in autocomplete/context.rs; they are fixed.
  • Version: 0.18.0 → 0.18.1. No tag is pushed, so no release is triggered.

Testing

  • cargo fmt --all -- --check, cargo clippy --all-targets -- -D warnings: clean.
  • cargo test: 663 passed, including 8 new tests for the preview row count, : in the expanded view, result/chat overrides, and the multi-key rejection.
  • Manually in the TUI via vhs: the preview footer no longer overlaps rows, and :export csv on a 3×2 Visual selection put exactly that block on the clipboard.
  • Not verified: an actual build on a Rust 1.88 toolchain.

CI fix and dependency updates (added after the first CI run)

  • Clippy on Rust 1.99: the CI clippy job failed because it uses the newest stable Rust (1.99.0), not because of this PR's changes.
    • async-trait 0.1.89's macro expansion triggered double_must_use; this is fixed upstream in 0.1.92.
    • A question_mark lint fired in state/command.rs.
  • cargo update: every semver-compatible update (236 lockfile changes). The resolver only picks versions that support Rust 1.88.
  • Breaking bumps:
    • argon2 0.6, chacha20poly1305 0.11 and base64 0.23 needed no code changes beyond replacing the deprecated from_slice.
    • sqlparser 0.63 adds the new ExprWithAliases variant, which :export sql inference now rejects like a single alias.
  • Crypto compatibility: a store encrypted by the old build was opened by the new build. It unlocked, decrypted the connection URL and ran a query. A wrong password is still rejected, and the old build can still read the store afterwards.
  • Not updated:
    • reqwest 0.13: llm 1.3.8 (its latest release) still depends on reqwest 0.12, so upgrading ours would compile two HTTP stacks. Also, 0.13's rustls feature defaults to aws-lc, which needs a C toolchain in the cross-compile release jobs.
    • sqlx 0.9: about 15 compile errors (the new SqlSafeStr audit for dynamic SQL, plus lifetime changes in the drivers). Worth its own PR.

- Inline result preview reserves its own row for the "⤥ N more rows"
  footer instead of painting over the last data row, and the title's
  preview count now matches the rows actually visible.
- `:` opens the command bar in the expanded result view, so `:export`
  (incl. `:export sql <table>`) can act on the Visual selection — that
  branch was unreachable before.
- The `[result]`, `[chat_normal]` and `[chat_insert]` keybindings tables
  are now consulted (after the sub-mode keys that stay hardcoded);
  previously they were parsed but had no effect.
- Multi-key entries (e.g. `"<Space>r"` under `[leader]`) are rejected
  with a clear error instead of being silently dead.
- `:help` lists `<Space> 0..9` for session switching (was the stale
  Shift+digit gesture); fix stale SessionSwitch comments.
- seed_sqlite prints the saved-connection flow (`--connection` takes a
  name, not a URL).
- Collapse three nested `if let`s flagged by clippy once MSRV is 1.88.
Correct claims that drifted from the implementation (--connection takes
a saved-connection name, 14 themes + picker, <Space>0-9 sessions, `=`
scope, nine LLM tools, transaction-only connection pinning, keybindings
semantics, autocomplete insert rules, Screen/Overlay architecture,
project layout, ...) and document shipped-but-undocumented features:
query parameters, saved queries, search & replace, theme picker,
which-key hints, destructive-statement guard, command completion, mouse
support, result column tools, :update.

Add screenshots generated reproducibly with vhs from the sample DB
(docs/screenshots/generate.sh + tapes).
The code uses let-chains, which need Rust 1.88; 1.86 could not build it.
…pletion

Rust 1.99's clippy flags `double_must_use` on async-trait 0.1.89's
expansion (fixed upstream in 0.1.92) and a `question_mark` candidate in
the command-completion tree walk.
…parser 0.63

- chacha20poly1305 0.11 deprecates `from_slice`; borrow the fixed-size
  key/nonce arrays as `&Key` / `&Nonce` instead (no key copy).
- sqlparser 0.63 adds `SelectItem::ExprWithAliases`; `:export sql`
  inference rejects it like a single alias.

Verified cross-version: a connection store encrypted by the previous
build unlocks, decrypts and connects with this one, and vice versa.
reqwest 0.13 and sqlx 0.9 are left for later (see PR description).
@killertux
killertux merged commit 14c37d3 into main Oct 11, 2026
3 checks passed
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