Audit: Connection Management
Drives docs/audits/connection.md. Scope: profiles, SSH/SSL/keyring/pooling/auto-reconnect/color/groups/read-only/quick-connect.
Findings (P0/P1 — child issues)
Backlog (P2 — 10 items)
See audit doc:
Backlog (P3 — 9 items)
See audit doc: F19–F27 covering TESTING_STRATEGY drift, keyring migration tests, tab-level database clobber, ARCHITECTURE §6.1 password wording, port constant duplication, env-color hint, path allowlist, password placeholder.
Doc drift
Good (👍)
See docs/audits/connection.md "Good (👍)" section for the full list. Highlights:
snake_case TS types match Rust serde
Password never crosses IPC for list responses
Tracing discipline + AssertSqlSafe correct usage
Migration framework on PRAGMA user_version
Frontend IPC chain clean
Proposed fix order
[P0][security] SSH tunnel stored but never used; no ssh2 dependency; ARCHITECTURE §3.1 SSHTunnel unimplemented #273 (SSH) + [P0][security] edit-save save_connection_profile silently wipes the OS keyring password when get() fails #274 (keyring wipe) — restore the security contracts first
[P0][arch] ConnectionDialog.tsx is a 616-LOC monolith; refactor to one component per tab #275 (refactor) — required before adding features
[P1][security] read_only profile flag is UI-only — backend executes DML/DDL unrestricted (FR-1.2.7) #277 (read_only enforcement), [P1][security] init_keyring() panic on Linux + ConnectionStore::new .expect() block all app launches #278 (graceful keyring), [P1][bug] auto-reconnect on launch is a single-shot try/catch; no backoff, no surface, no HealthChecker (FR-1.2.4 / ARCHITECTURE §3.1 HealthChecker) #276 (HealthChecker) — third wave
[P1][security] init_keyring() panic on Linux + ConnectionStore::new .expect() block all app launches #278 , [P1][bug] Pool exhaustion (per-profile pool_max=5 default) surfaces opaquely; no UI for live pool stats (FR-1.2.3) #279 , [P1][bug] connect→disconnect race leaks a connection in activeConnections map (test documents as expected) #280 — operational correctness
Everything P2/P3 — opportunistic as touched
Audit: Connection Management
Drives
docs/audits/connection.md. Scope: profiles, SSH/SSL/keyring/pooling/auto-reconnect/color/groups/read-only/quick-connect.Findings (P0/P1 — child issues)
SSHTunnelunimplemented #273 [P0] [security] SSH tunnel stored but never used;ssh2crate missingsave_connection_profilesilently wipes the OS keyring password whenget()fails #274 [P0] [security] edit-save silently wipes OS keyring password whenget()failsHealthChecker) #276 [P1] [bug] auto-reconnect single-shot try/catch; no backoff / HealthCheckerread_onlyprofile flag is UI-only — backend executes DML/DDL unrestricted (FR-1.2.7) #277 [P1] [security]read_onlyUI-only — backend executes DML/DDLinit_keyring()panic on Linux +ConnectionStore::new.expect()block all app launches #278 [P1] [security]init_keyringpanic +ConnectionStore::new.expect()block all launchespool_max=5default) surfaces opaquely; no UI for live pool stats (FR-1.2.3) #279 [P1] [bug] Pool exhaustion opaque; no status-bar pool stats (FR-1.2.3)activeConnectionsmap (test documents as expected) #280 [P1] [bug] connect→disconnect race leaks connection inactiveConnectionsBacklog (P2 — 10 items)
See audit doc:
default_databaseover-loggedconnect()overwritesselectedConnectionIdunexpectedlysave_connection_profileBacklog (P3 — 9 items)
See audit doc: F19–F27 covering TESTING_STRATEGY drift, keyring migration tests, tab-level database clobber, ARCHITECTURE §6.1 password wording, port constant duplication, env-color hint, path allowlist, password placeholder.
Doc drift
Good (👍)
See
docs/audits/connection.md"Good (👍)" section for the full list. Highlights:AssertSqlSafecorrect usageProposed fix order
SSHTunnelunimplemented #273 (SSH) + [P0][security] edit-savesave_connection_profilesilently wipes the OS keyring password whenget()fails #274 (keyring wipe) — restore the security contracts firstread_onlyprofile flag is UI-only — backend executes DML/DDL unrestricted (FR-1.2.7) #277 (read_only enforcement), [P1][security]init_keyring()panic on Linux +ConnectionStore::new.expect()block all app launches #278 (graceful keyring), [P1][bug] auto-reconnect on launch is a single-shot try/catch; no backoff, no surface, no HealthChecker (FR-1.2.4 / ARCHITECTURE §3.1HealthChecker) #276 (HealthChecker) — third waveinit_keyring()panic on Linux +ConnectionStore::new.expect()block all app launches #278, [P1][bug] Pool exhaustion (per-profilepool_max=5default) surfaces opaquely; no UI for live pool stats (FR-1.2.3) #279, [P1][bug] connect→disconnect race leaks a connection inactiveConnectionsmap (test documents as expected) #280 — operational correctness