Skip to content

Release v0.1.33: fix UI freezes from dead tunnels, unbounded dir sizes#7

Merged
fseiffarth merged 2 commits into
mainfrom
develop
Jul 21, 2026
Merged

Release v0.1.33: fix UI freezes from dead tunnels, unbounded dir sizes#7
fseiffarth merged 2 commits into
mainfrom
develop

Conversation

@fseiffarth

Copy link
Copy Markdown
Owner

Merges develop into main for 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 gatingvpnStatus.refresh now 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, flipping 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 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 are du over 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 --noEmit clean · cargo test 1026 passed · vitest 1799 passed · npm run build clean.
New regression tests: DirSizeGuard, VpnDropGating, ShellScriptRun.

Privacy scan clean — no matches at all this time.

🤖 Generated with Claude Code

fseiffarth and others added 2 commits July 21, 2026 16:12
…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>
@fseiffarth
fseiffarth merged commit e47219a into main Jul 21, 2026
12 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