* fix: address pr-bug-scan validated finding from #2901
Trim trailing whitespace from description currentValue so blur-without-edit on whitespace-terminated descriptions short-circuits and skips the spurious PATCH.
* test: cover Linear description save normalization
---------
Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Removed duplicate 'openclaude' entry at index 3 of MOBILE_TUI_AGENT_AUTO_PICK_ORDER so mobile pickers no longer render two OpenClaude rows or emit duplicate-key warnings.
Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Low-risk resource-cleanup perf fix. Duplicate pending/running startup history-GC schedules are coalesced so repeated main-window service attaches do not queue duplicate disk-GC passes. Verified with terminal-history Vitest and file-level oxlint.
* fix: address pr-bug-scan validated finding from #2613
Re-added the pre-diff attempt cap to waitForTerminal: it now takes an attempt counter and only reschedules while attempt < READY_MAX_ATTEMPTS (50), so the retry loop terminates after ~5s instead of lo
* test: cover onboarding terminal retry cap
---------
Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
* fix: address pr-bug-scan validated finding from #2633
Split the post-stop refresh try/catch so only first-scan failures return ok:false; settled second-scan failures are swallowed since UI is already correct.
* test: cover settled port refresh failures
---------
Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Support packaged Linux AppImage CLI registration with a stable wrapper that invokes the outer AppImage and resolves the CLI entry from APPDIR at runtime.
The takeover drops the already-landed Linux command rename plus unrelated perf/GPU sandbox changes from the original branch, and adds regression coverage for wrapper install, stale wrapper replacement, legacy symlink cleanup, argument forwarding, and env preservation.
Co-authored-by: Emad Fussi <43019044+omd0@users.noreply.github.com>
store-session-cascades.test.ts and tabs.test.ts each carried a
byte-for-byte copy of createTestStore (plus the make* fixture factories
in the session-cascades file) instead of importing the canonical ones
from store-test-helpers.ts. Switch both to the shared helpers, dropping
~170 lines of duplicated harness and the now-unused slice/create/AppState
imports. The removed bodies were identical to the shared exports, so test
behavior is unchanged.
* Keep project group headers sticky over nested repo headers
- Prevent nested repo headers from replacing their top-level project group
as the pinned sidebar header
- Split imported-row tests from scroll adjustment coverage
- Add sticky header tests for manual and built row hierarchies
* Tell users to commit before publishing dirty new branches
* fix(cli): fall back to ~/.local/bin on macOS arm64 when /usr/local/bin is absent
/usr/local/bin does not exist by default on Apple Silicon Macs — Homebrew
moved to /opt/homebrew after the arm64 transition. The previous code called
mkdir(/usr/local/bin) inside install(), which threw EACCES (root-owned parent
directory) before installSymlink() was reached, so the existing osascript
privileged-runner fallback was never invoked. Settings permanently showed
"not installed" with no error surfaced anywhere, silently blocking all four
agent skill install flows (Orchestration, Browser Use, Computer Use, CLI).
Changes:
- resolveCommandPath() darwin branch now returns this.macCommandPath, a field
resolved once at construction time via existsSync(dirname(candidatePath)).
When /usr/local/bin is absent the constructor falls back to ~/.local/bin/orca
(user-writable, no sudo, XDG standard, already on PATH via shell init on arm64).
existsSync is not called on every getStatus() invocation.
- mkdir is moved from install() into installSymlink()'s try/catch block so any
EACCES failure reaches the osascript privileged runner instead of propagating
as an unhandled rejection. mkdir is kept in install() for the Windows wrapper
path where the target directory is always user-writable.
- defaultMacCommandPath option added as a test seam so tests can simulate an
absent /usr/local/bin without touching the real filesystem.
Fixesstablyai/orca#3557
* review: tighten macOS CLI installer coverage
- cover the macOS path-selection seam without bypassing it
- make the privileged-runner test invoke install and assert the fallback
- prove macCommandPath stays fixed after construction
---------
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Exclude repo-only package inputs and move renderer/build-only dependencies out of production dependencies to reduce packaged app.asar size while keeping source maps allowed for crash diagnostics.