Repository navigation
fix(app): finish the state-surfaces follow-ups - #4018
Merged
Merged
Conversation
…commits after Stop
datlechin
marked this pull request as ready for review
November 3, 2026 15:01
datlechin
enabled auto-merge (squash)
November 3, 2026 15:01
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Finishes what #4001, #4005, #4007 and #4009 left open.
1. Restore Previous Values is disabled when nothing is kept (from #4007)
QueryHistoryStoragekeeps a revision and publishes the kept tables and history ids after every snapshot write, delete, clear, retention prune and connection delete. The read uses plain columns, no decrypt.RewindAvailabilityCacheon the main actor feeds the synchronous menu and toolbar checks and only takes newer revisions, so a snapshot written after the drawer loaded enables the item without a reload (the refactor(ui): native notices and status labels on every surface #4007 round 4 staleness).2. Export and table transfer stop only when their owner goes away (from #4009)
SheetWorkScopeandSheetJob: a job is listed for the closers and stopped byMainContentCoordinator.teardown()(window close,ConnectionWorkspace.teardown(), a released session), never byonDisappear. A connection switch or an Agent mode toggle keeps it running.disconnectAll.3. Agent mode and finished results (from #4009)
showSelectedContentPanesclears the selected tab's mark when Browse shows again, and when its connection is selected. The second case was a stale mark on main too.4. MCP
disconnectrefuses instead of skipping the ask (from #4009)disconnectreturnsdeniedwhen TablePro's own Disconnect would ask: running work, unsaved changes or an open transaction on that connection. The message names kinds only, never a tab, file or connection.DatabaseAccessBridge.disconnecton the main actor, re-read after the transaction probe with no suspension before the disconnect.transactionSafety(for:)tells idle from holding from unknown. A busy lane, a 1 s timeout or an unknown state is refused. This narrows the tool: on Dameng, KingbaseES, libSQL, Snowflake, Spanner, StarRocks and Teradata, which never report their state, the user disconnects in TablePro.5. Tunnel creation races (from #4001)
TunnelCreationGenerations: only the newestcreateTunnelper connection adopts its tunnel; a superseded one closes what it built. In SSH, SOCKS, Cloudflare, Cloud SQL, tunnel command and remote SQLite.closeTunnelandcloseAllTunnelsalso cancel a creation still dialing, so nothing is adopted after a close returns.6. A real SSH tunnel drop (verification #4001 could not do)
docker stopon sshd: the pane bar read "Reconnecting to orders-prod (4 of 10)" with "SSH tunnel disconnected." and Cancel;docker start: the session came back with its tabs. Stopped again: after the 10th attempt the window showed "Disconnected from orders-prod" with Reconnect. Screenshots below.7. iOS NULL toggle in edit mode (from #4007)
RowDetailViewand pressing its Edit bar button in a hosted window.8. Selected rail entry's status badge (from #4001)
NSTableCellViewpasses the emphasized style to the mark's image view, and a template symbol then draws in the selection white and ignorescontentTintColor.SheetWorkScopestopped by teardowndisconnectskipped the running-work askdeniedwith kinds onlyTests changed on purpose:
CloudSQLProxyManagerTests"service account key is written 0600 and removed on close" reads the per-attempt path from--credentials-file.WritePolicyFixture's driver answers.idle, so the write-policy matrix disconnect cells reach a known-safe session.WorkspaceRailCellView+LabelrenderedTintreadsdisplayedTint, sincecontentTintColorno longer carries the tint.Decisions made without the maintainer:
disconnectrefuses rather than raising the alert on the Mac: a remote client should not put a modal in front of the user at an arbitrary time.Deliberately not fixed here
GObatch could hide aCOMMIT;COMMITran while the promise still showed;Test plan
GutterNumberOffsetTests/windowGutterKeepsItsMargin, which fails on main whenever the Mac is in Dark Mode (it was); no editor code changes here.RewindAvailabilityTests,CoordinatorRewindAvailabilityTests,SheetWorkTests,SheetWorkLifetimeTests,AgentModeResultVisibilityTests,TunnelCreationRaceTests,TunnelCloseDuringCreationTests, plus new cases inDisconnectToolTests,CloudSQLProxyManagerTestsandWorkspaceRailCellTextTests.TunnelCreationRaceTests(11 issues on main: the older creation adopted its tunnel and the newer leaked); the selected-row badge case inWorkspaceRailCellTextTests(all 4 cases failed onselected > 0).TableProMobilebuilt with theRowDetailViewchange and the render harness ran on an iPhone Duo simulator, iOS 27.1 (the only runtime installed).verify.sh l10npasses; 8 strings added throughlocalization.py extracted --add.Screenshots
Shot from a second, sandboxed copy of the Debug build (the user's own TablePro was running, so XCUITest could not), captured by window id. The SSH states are a real drop: Postgres behind an sshd container,
docker stopanddocker starton sshd. The iOS shots renderRowDetailViewin a hosted window and press its Edit button. Before is main at 4030434 for the menu; for the rail badge and the iOS toggle it is this branch before those fixes.