v0.20.0 polish: offline state, error toasts, pairing rate limit, settings healing - #117
Merged
Conversation
providerOnline/onOpenConnections props existed but were ignored, leaving a blank screen with no guidance when the provider is down. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Failed drop-file reads, idle-purge restore, and whisper model reload failed silently; users saw features stop working with no signal. Native drop path also had an unhandled promise rejection. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
migrate only runs on version bumps, so a new nested field (or a half-stamped storage from a dev HMR race) stayed missing until the next migration. merge runs every load and heals it; new fields no longer require a SETTINGS_VERSION bump. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
bg-background/bg-secondary match the old hex in dark theme and make the overlay follow light theme instead of staying black. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The LAN pairing server allowed unlimited token guessing. After 10 bad tokens in 60s, unauthorized requests get 429 until the window resets; correct-token requests and public paths are never blocked. No CORS headers on purpose: same-origin serving means their absence is what keeps cross-origin reads blocked. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Mounts only once a viewport session exists; splits 28.8 kB out of the initial chunk. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Component already works on the in-repo Reasoning primitives; the regression test pinned the TODO string, updated alongside. Co-Authored-By: Claude Fable 5 <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.
Summary
Batch of v0.20.0 audit items (1–3, 5–10). Branched off
main(notdev—devis behind and missing the #116 voice-mode code this touches).providerOnline/onOpenConnectionsprops: offline shows guidance + "Open connections" buttonmergeSettingsWithDefaultsas persistmerge: every rehydrate deep-fills missing nested fields from defaults, so new settings fields no longer needSETTINGS_VERSIONbumps and half-stamped storage (dev HMR race) self-heals#0A0A0A/#2A2A2A→bg-background/bg-secondary(visually identical in dark theme, follows light theme)AgentViewportDrawerlazy-mounts once a viewport session exists (28.8 kB out of initial chunk)No code needed for two audit items: title-generation retry already exists (retry on conversation switch + deterministic fallback title + manual rename), and agent
noopis a deliberate result classification, not missing handling.Test plan
bun run test— 221 passed (incl. newtests/settingsMerge.test.ts)cargo test— 104 passed (incl. new rate-limiter tests)bun run build— clean, drawer chunk split confirmed🤖 Generated with Claude Code