Release v0.1.33: fix UI freezes from dead tunnels, unbounded dir sizes#7
Merged
Conversation
…a polls Severe hangs, all with the same shape: a synchronous Tauri command aimed at a peer that will never answer, blocking until ssh's own keepalive gives up (~45s) — and the file tree issues one per visible folder. VPN drop gating - vpnStatus.refresh now distinguishes a tunnel that died on its own from one torn down deliberately (every deliberate teardown forgets the config first, so only an unplanned death reaches the new branch). - A dropped tunnel clears the status of the projects that were holding it, which flips useRemoteBlocked so probes are never dispatched rather than each paying the timeout. Scoped to the tunnel's holders: a project that never claimed the config reaches its host another way. - The pooled backend session is deliberately left alone — reaping it is the pooled reader's job, and a teardown issued here would itself be a call over the dead connection. Directory sizes (src/lib/dirSizeGuard.ts) - Folder sizes are a best-effort display aid, so they are safe to bound aggressively: timeout, concurrency cap, and a per-project circuit breaker that opens after repeated failures. Ollama status (src/lib/ollamaStatus.ts) - Collapse the per-component polls into one app-wide timer. Also: run-host preference handling for shell/python runs, and backend project/git/openvpn updates. Tests: DirSizeGuard, VpnDropGating, ShellScriptRun. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.
Merges
developintomainfor the v0.1.33 release. This is a bug-fix release addressing severe UI freezes found during live QA of v0.1.32.The bugs
All three shared one shape: a synchronous Tauri command aimed at a peer that will never answer. Nothing about a black-holed socket produces an error, so each call blocks until ssh's own keepalive gives up (~45s) — and the file tree issues one per visible folder, all at once.
VPN drop gating —
vpnStatus.refreshnow tells a tunnel that died on its own apart from one torn down deliberately (every deliberate teardown forgets the config first, so only an unplanned death reaches the new branch). A dropped tunnel clears the status of the projects holding it, flippinguseRemoteBlockedso probes are never dispatched, rather than each paying the timeout. Scoped to the tunnel's holders: a project that never claimed the config reaches its host by another route.The pooled backend session is deliberately not torn down here — reaping it is already the pooled reader's job, and a teardown issued from this path would itself be a call over the dead connection, i.e. the exact thing being avoided.
Directory sizes (
src/lib/dirSizeGuard.ts) — for a remote project these areduover SSH. Folder sizes are a best-effort display aid (the tree renders fine without them), which is what makes them safe to bound aggressively: a timeout, a concurrency cap, and a per-project circuit breaker that opens after repeated failures.Ollama status (
src/lib/ollamaStatus.ts) — collapses per-component polls into one app-wide timer.Also included: run-host preference handling for shell/python runs, and backend project/git/openvpn updates.
Verification
tsc --noEmitclean ·cargo test1026 passed ·vitest1799 passed ·npm run buildclean.New regression tests:
DirSizeGuard,VpnDropGating,ShellScriptRun.Privacy scan clean — no matches at all this time.
🤖 Generated with Claude Code