v1.4.167
Highlights
v1.4.167
IME & Terminal (6) — macOS Korean composition preserved; Hangul syllables flushed before next composition; IME deletions adopted at composition end; test coverage for live macOS Korean syllable flush and leading Korean vowels; Windows IME Shift commits covered
v1.4.166
IME & Terminal (8) — cancelled IME compositions no longer replay stale preedit; Windows IME Shift shape replayed; IME ownership rationale clarified; press evidence kept per Enter press; IME Enter-keyup newline requires press-time evidence; IME-owned Process shortcuts blocked; IME Process keys distinguished from Enter; stale Windows IME modifiers cleared
v1.4.165
SSH & Reliability (7) — FIDO2 transport gated on OpenSSH binary; SSH targets auto-recover after network drops; consumer-recovery no longer freezes main thread; hosted-review lookups bounded; remote-ref probe fan-out capped; relay HOST_OFFLINE lifecycle fixed; director reconnection fast-lane declared
Terminal (3) — fullscreen atlas recovery bounded; Pi CSI-u Shift+Enter trusted on Windows; paired-client renderer work bounded
Agent Status (3) — background work preserved in sidebar; question indicator cleared on Escape; status restored in reused terminal panes
Browser (3) — Windows all-black window fixed; unsafe close bypass removed; tabs stay rendered across worktree switches
Worktrees & Workspaces (2) — remote deletion idempotent; sidebar reorder preserved during refresh
Editor (1) — lazy-chunk recovery reloads instead of being silently vetoed
Quit & Performance (3) — app no longer freezes on quit with network-mounted profiles; redundant fetch skipped during worktree deletion; speech model download progress coalesced
Dev (1) — confirmation dialog split so Fast Refresh can accept it (ChecksPanel crash fix)
Mobile (3) — OMP icon gradient fixed; secondary text contrast improved; support modules no longer registered as routes
i18n (2) — Editor Font Family translations added for es/ja/ko/zh; status labels localized in Settings and Stats
Tests & Docs (2) — Azure DevOps/Bitbucket remote-url probe assertions restored; search-window error pattern comment trimmed
Other
- Dead-code cleanup: ~2k lines of unreachable exports removed via
knip - FrameDecoder dedup, push-target reuse, Codex/OpenCode fold sharing, GitHub component extraction (-1324 lines)
- Marine-creature corpus imported instead of mirrored in mobile
- Lint rules enabled:
no-useless-call,no-accumulating-spread - Issue templates ask reporters to write in English
What's Changed
v1.4.167
- fix(terminal): preserve macOS Korean composition (#12280) by @nwparker
- fix(terminal): flush Hangul syllables before the next composition (#12278) by @nwparker
- fix(native-chat): adopt IME deletions at composition end (#12281) by @nwparker
- test(terminal): cover live macOS Korean syllable flush (#12284) by @nwparker
- test(terminal): cover leading Korean vowels (#12282) by @nwparker
- test(terminal): preserve Windows IME Shift commits (#12276) by @nwparker
v1.4.166
- fix(terminal): stop cancelled IME compositions replaying stale preedit by @nwparker
- fix(terminal): keep press evidence per Enter press, not per code by @nwparker
- fix(terminal): require press-time evidence before synthesizing an IME Enter-keyup newline by @nwparker
- fix(terminal): block IME-owned Process shortcuts by @nwparker
- fix(terminal): distinguish IME Process keys from Enter by @nwparker
- fix(terminal): clear stale Windows IME modifiers (#12259) by @nwparker
- test(terminal): replay the native Windows IME Shift shape by @nwparker
- style(terminal): keep IME ownership rationale concise by @nwparker
v1.4.165
- fix(i18n): add missing Editor Font Family translations for es, ja, ko, zh (#11573) by @qiuyongjin
- Add first user prompt to AI Vault session history row (#12006) by @AmethystLiang
- fix(P1-C): gate FIDO2 system-SSH transport on an OpenSSH binary (#12029) by @AmethystLiang
- fix(quit): stop durable state writes from parking the main thread on quit (#11931) by @nwparker
- fix(windows): keep browser close marker URL absolute (#12038) by @nwparker
- fix(browser): remove unsafe window close bypass (#12040) by @nwparker
- fix(agent-status): preserve Claude background work (#11838) by @nwparker
- perf(worktrees): avoid redundant fetch during deletion (#11918) by @nwparker
- fix(P1-D): bound hosted-review in-flight lookups so a wedged provider cannot pin a branch (#12030) by @AmethystLiang
- fix(P1-B): recover SSH targets and remote file watchers after a network drop (#12032) by @AmethystLiang
- fix(P1-A): async SSH consumer-recovery persistence and detach on failed connect (#12026) by @AmethystLiang
- chore: ask issue reporters to write in English (#12066) by @nwparker
- fix(terminal): bound fullscreen atlas recovery (#12061) by @OrcaWin
- fix(agent-status): clear Claude question indicator after Escape (#12064) by @nwparker
- fix(workspaces): make remote workspace deletion idempotent (#11684) by @AmethystLiang
- chore(lint): enable safe performance guard rules (#12073) by @nwparker
- fix(agent-status): restore status in reused terminal panes (#12074) by @nwparker
- fix(P1-D): coalesce remote-ref probes, TTL negatives, and bound unsettled keys (#12065) by @AmethystLiang
- chore(dead-code): drop ~2k lines of unreachable exports and orphan modules (#12077) by @nwparker
- fix(relay): desktop control lifecycle — truthful registration, silence watchdog, named-check host proof (#12076) by @Jinwoo-H
- fix(sidebar): preserve manual order during refresh (#12072) by @Jinwoo-H
- fix(test): restore Azure DevOps and Bitbucket remote-url probe assertions (#12080) by @nwparker
- refactor(relay): collapse the duplicated FrameDecoder into one shared module (#12078) by @nwparker
- fix(terminal): trust Pi CSI-u Shift+Enter on Windows (#9703) (#11769) by @itisvincent
- fix(dev): split the confirmation dialog so Fast Refresh can accept it (#11980) by @nwparker
- fix(terminal): bound paired-client renderer work (#12081) by @OrcaWin
- fix(speech): coalesce model download progress churn on the Settings/Voice path (#11962) by @nwparker
- fix(i18n): localize status labels in settings and stats (#11826) by @smwbev
- fix(editor): make lazy-chunk recovery actually reload instead of being silently vetoed (#11929) by @nwparker
- fix(relay): declare reconnection to the director's verified fast lane (#12086) by @Jinwoo-H
- chore(mobile): import the shared marine-creature corpus instead of mirroring it (#12090) by @nwparker
- feat(updater): add an adhoc release channel for branch builds (#12051) by @nwparker
- refactor(worktrees): reuse the shared push-target helpers on the SSH path (#12091) by @nwparker
- refactor(usage): share the Codex/OpenCode scan fold behind a provider contract (#12082) by @nwparker
- refactor(github): extract shared GitHubItemDialog/PullRequestPage code (#12092) by @nwparker
- Allow clearing all agents from AI Vault session history filter (#12128) by @AmethystLiang
- fix(tasks): make GitHub pagination honest — cap unreachable pages, survive background refreshes, explain empty pages (#11584) by @brennanb2025
- docs(tasks): trim the search-window error pattern comment (#12130) by @AmethystLiang
- fix(browser): keep browser tabs rendering across worktree switches (STA-3228) (#12137) by @brennanb2025
- fix(mobile): correct OMP icon gradient stop (#11650) by @brennanb2025
- fix(mobile): improve secondary text contrast (#11651) by @brennanb2025
- fix(mobile): stop support modules from registering as routes (#11652) by @brennanb2025
New Contributors
- @qiuyongjin made their first contribution in #11573
- @itisvincent made their first contribution in #11769
- @smwbev made their first contribution in #11826
Full Changelog: v1.4.164...v1.4.167