Commit Graph
9651 Commits
Author SHA1 Message Date
Neil 0edda5e86f ci(docs): skip releases without docs source 2026-08-31 00:52:22 -07:00
Neil 649c188cc4 docs: clarify release cutover ordering
Clarifies that marketing rewrites are prepared but remain disabled until a stable release-backed docs deployment is verified.
2026-08-31 00:48:39 -07:00
Neil c09810b641 perf(rpc): restore compiled Zod request schemas without override (#17374)
* perf(rpc): compile Zod request schemas lazily

* chore(deps): pin zod 4.5.4 and except it from the release-age gate

4.5.4 is the first release fixing isRecursiveSchema (upstream 84e416f, #6500),
which compile() calls on every schema — on 4.5.0 it fired .default() factories
at compile time. Verified: compile-time factory calls 0 on 4.5.4, 1 on 4.5.0.
2026-08-31 00:47:22 -07:00
Neil 0293ebe3eb perf(packaging): prune JS source maps from all packaged node_modules (#17638)
Generalizes the @linear/sdk-scoped prune to every packaged dependency,
matching the existing type-declaration prune's single-predicate walk over
Resources/node_modules. Recovers ~1.01 MB beyond the SDK.

Nothing in the packaged app enables Node source-map support
(no --enable-source-maps, no setSourceMapsEnabled, no source-map-support
require), and the CLI launchers strip NODE_OPTIONS, so these maps were
never read. Orca's own main-process maps live outside node_modules and
already ship as a separate release artifact.
2026-08-31 00:19:09 -07:00
Neil ca516a4306 test(git): pin FETCH_HEAD lock order in the admission lifetime test (#17641)
`serializes FETCH_HEAD callers before they enter admission` assumed that two
same-repo fetches join the FETCH_HEAD lock lane in call order. They do not.

`runWithGitFetchHeadLock` first `await`s `fetchLockPath`, which walks the
filesystem (`realpath`, `stat` per parent directory, `readFile` of `commondir`,
`realpath` again) before it calls `runWithGitOperationLock`, and the lane is
registered only after that walk resolves. For a non-existent `/repo` that is
five libuv threadpool round-trips per caller. Two callers issued back to back
run their chains concurrently, so lane order is threadpool completion order,
not call order.

When the `interactive` fetch won that race it entered the lane ahead of the
`background` fetch. On the first caller's release it reached admission
immediately and, being interactive, took the free network headroom slot instead
of queueing, while the background fetch stayed parked on the lock. `queued`
therefore settled at 0 and never reached the asserted 1. Measured inversion
rate for the bare lock-path walk was 54/500 on an idle machine; the test itself
failed 5/20 locally, always at the same assertion, matching the two CI failures
on unrelated PRs (#17530, #17630) at the same line.

Fix the premise rather than the symptom: stub only the key derivation, keeping
the real FIFO `runWithGitOperationLock` that the test actually exercises, so the
lane is registered synchronously with the call. Key derivation keeps its own
coverage in `src/shared/git-fetch-head-lock.test.ts`. This also stops the fetch
tests in this file from sharing one global `/.git/FETCH_HEAD` lane with each
other and from touching the real filesystem.

Verified deterministic: 40/40, then 30/30 clean runs, plus 25/25 with twelve CPU
hogs and a concurrent `src/main/git/command-runner/` run saturating the box.
2026-08-31 00:09:07 -07:00
Neil 6aba202d5e feat(docs): publish OSS docs with stable releases
Publish the standalone docs site under docs/site and deploy it on stable desktop releases.
2026-08-30 23:51:25 -07:00
Neil 6cc9319d87 perf(wsl): warn at project-add when the tree sits on a Windows drive (#17636)
* perf(wsl): warn at project-add when the tree sits on a Windows drive

Worktree placement now puts new workspaces inside the distro, but a project
whose own tree is on C:\ still pays the 9p/drvfs crossing on every git command
it runs — measured at ~20x for a clean `git status` against the same tree on
ext4. Nothing in the UI says so, so the project just feels slow.

Warn once, right after the add succeeds, naming the distro the project's git
actually runs in. The advisory is wrapped so it can never fail the add.

Two path shapes cross the boundary and both warn: a Windows drive path under a
WSL project runtime, and the UNC spelling of a distro's own drvfs mount
(\\wsl.localhost\Ubuntu\mnt\c\...), which crosses it however the runtime is set.
A tree already inside the distro, a drive path under Windows-host git, a plain
UNC share, and every POSIX/SSH path stay silent.

* chore(i18n): register the WSL filesystem boundary advisory keys in en.json
2026-08-30 23:48:50 -07:00
Jinwoo Hong 46fa1a98d0 fix(browser): show reload loading feedback (#17635) 2026-08-31 02:46:17 -04:00
Neil 017811f0de perf(renderer): memoize active worktree editor files (#17484)
Reuse the filtered editor-file projection while Terminal rerenders without changing its inputs.
2026-08-30 23:40:45 -07:00
2sumtech d641d87905 fix(browser): accept an empty --value in cookie set and --pass in set credentials (#17226) 2026-08-30 23:30:49 -07:00
Neil c55121231a fix(remote): re-activate the pending host surface on paired PTY attach (STA-5291) (#17429) 2026-08-30 23:21:18 -07:00
Neil fc73903beb ci(release): publish main-process source maps with each release (#17630)
* ci(release): publish main-process source maps with each release

Desktop bundles ship minified, and packaging drops out/**/*.map from
app.asar, so a stack trace from a released build cannot be mapped back to
source. main builds with sourcemap:'hidden' — the maps exist in CI but were
never published anywhere.

Zip them on the linux-x64 leg and upload to the draft release as
orca-sourcemaps-<tag>.zip (33.7MB raw, ~8MB zipped, 69 files). The main
bundle is platform-independent, so one leg covers the whole release. The
step fails loudly if no maps are found, so a regression of build.sourcemap
breaks the release instead of silently shipping undecodable builds.

* fix(release): stage source map bundle outside the checkout

Every entry in electron-builder's `files` is a negation, so app-builder hits
containsOnlyIgnore() and prepends `**/*` (fileMatcher.js:285). A zip left in
the workspace root would have been packed into the linux-x64 app.asar,
growing that platform's installers by ~8MB and diverging them from arm64 —
the same hazard the '!pr-evidence' exclusion already guards against.

Stage it in $RUNNER_TEMP, matching the release-state file at :444.
2026-08-30 23:21:00 -07:00
Neil 6a65d8406a perf(ssh): index source spans by ID (#17504) 2026-08-30 23:05:37 -07:00
Neil 337b729f82 perf(main): summarize workspace space rows in one pass (#17483) 2026-08-30 23:05:32 -07:00
Neil 900fce25cd perf(renderer): cache active terminal chrome projection (#17480) 2026-08-30 23:05:28 -07:00
Neil bc6ed60e83 perf(browser): group client-hosted row publication (#17479)
Reuse one registry snapshot when publishing rows for every workspace.
2026-08-30 23:05:24 -07:00
Neil 8c6cf4769e perf(main): index structured TUI process rows (#17478)
Build a PID index once per process snapshot so descendant ownership checks
avoid rescanning the full row list for every PID.
2026-08-30 23:05:20 -07:00
Neil 490a7de5fa perf(shared): index git history merge parents lazily (#17469) 2026-08-30 23:05:16 -07:00
Neil 435a5e2490 perf(renderer): index folder workspace host ownership (#17468) 2026-08-30 23:05:12 -07:00
Neil 4d19b3382c perf(shared): project automation list in one pass (#17466) 2026-08-30 23:05:08 -07:00
Neil 824dc89e97 perf(shared): classify folder workspace repos in one pass (#17464) 2026-08-30 23:05:03 -07:00
Neil d20679e609 perf(renderer): cache project host setup projection reads (#17463) 2026-08-30 23:04:59 -07:00
Neil e65d2dadeb perf(browser): use reverse guest tab lookup (#17462)
* perf(browser): use reverse guest tab lookup

* test(browser): keep mutable tab harness lookup
2026-08-30 23:04:55 -07:00
Neil 1e4c56baa1 perf(git): classify status line-stat inputs once (#17461) 2026-08-30 23:04:51 -07:00
Neil 55efba2ac0 perf(mobile): summarize diff review counts in one pass (#17460) 2026-08-30 23:04:47 -07:00
Neil 7e5cc79e93 perf(mobile): project home host connection maps once (#17459) 2026-08-30 23:04:42 -07:00
Neil fb271f2f3b perf(renderer): cache startup action selector (#17458) 2026-08-30 23:04:37 -07:00
Neil 8e132880be perf(renderer): stabilize window visibility action selector (#17457) 2026-08-30 23:04:25 -07:00
Neil 7a72976d51 perf(mobile): compare terminal themes without serialization (#17455) 2026-08-30 23:04:21 -07:00
Neil 225b28199a perf(renderer): avoid remote PTY selector allocations (#17454) 2026-08-30 23:04:17 -07:00
Neil 2dd67e83b2 perf(worktree): overlap configured path filesystem probes (#17453) 2026-08-30 23:04:13 -07:00
Neil c9ef3aab5a perf(filesystem): avoid per-entry directory promises (#17452) 2026-08-30 23:04:08 -07:00
Neil 3cb44480c1 perf(renderer): narrow app root settings subscriptions (#17451) 2026-08-30 23:04:03 -07:00
Neil 1075dce185 perf(memory): prune claimed PTY subtrees (#17450) 2026-08-30 23:03:59 -07:00
Neil 30ca6bc953 perf(worktree): parallelize head identity metadata reads (#17449) 2026-08-30 23:03:55 -07:00
Neil 3e2d0f2118 perf(build): minify desktop JavaScript bundles without dropping crash context (#17527)
* perf(build): minify desktop JavaScript bundles

* perf(build): minify with rolldown's oxc and emit hidden main source maps

'esbuild' made rolldown disable its own minifier and re-print every chunk
through esbuild, which is not a declared dependency and resolves only via
pnpm's shamefullyHoist from electron-vite's tree (0.25.12 against a declared
peer of ^0.27.0). Switching to rolldown's in-process 'oxc' minifier drops
that second pass: main+renderer build falls 23.2s -> 11.9s and ships ~2.7MB
less JavaScript.

keepNames is dropped with it — it cost ~1.5MB and only recovered function
names. main now builds with sourcemap:'hidden', which restores names *and*
locations without emitting a sourceMappingURL. Packaging excludes
out/**/*.map so app.asar is unaffected; release CI publishes the maps.
2026-08-30 22:57:04 -07:00
Neil 9f0b94d9b6 perf(packaging): prune Linear SDK source maps (#17530) 2026-08-30 22:54:44 -07:00
Jinwoo Hong 87d9bc12c0 fix(persistence): stop rejected UI trailing flush loops (#17378)
* test(sta-5938): pin persisted UI rejection retry behavior

* fix(persistence): bound rejected UI trailing flushes
2026-08-31 01:47:49 -04:00
Jinjing 5897b7b4f5 ui: highlight completed downloads with success styling (#17617)
Completed downloads now display with a success background and text color to make their completion status more visually obvious.
2026-08-30 21:27:34 -07:00
Neil 3d65466d99 perf(agent-hooks): coalesce Codex transcript poll timers
Coalesce per-pane Codex transcript polling onto a shared deadline scheduler while preserving cancellation and stale-callback fencing.
2026-08-30 21:20:53 -07:00
Brennan BensonandMerge Sim 91cc834584 fix(remote): preserve standing host reconnect intent (#17067)
* fix(remote): preserve standing host reconnect intent

* chore(lint): merge duplicate imports flagged by the native code-quality audit

* fix(remote): fence stale capability runtime identities

* fix(remote): release capability evidence on host removal

---------

Co-authored-by: Merge Sim <sim@local>
2026-08-30 21:17:06 -07:00
Neil b892f05c34 perf(packaging): ship one native runtime per target (#17528) 2026-08-30 21:12:34 -07:00
Neil 251c9a0f7d perf: remove shell wrapper rebuilds from path checks (#17548)
Avoid rebuilding shell-wrapper contents when only their paths are needed, preserve dispatcher lint boundaries, and isolate updater test timers.
2026-08-30 20:48:45 -07:00
Neil 3db5a6aab8 perf(mobile): index slept worktree identity lookups (#17512) 2026-08-30 20:47:58 -07:00
Jinjing 3060cf73b9 fix(tasks): restore scroll position when reopening GitHub item details (#17524)
Track scroll-restore generation to invalidate stale callbacks that were
resetting the scroll position to 0 when reopening a detail page. Prevent
restoration while a detail page is open.

Update automation test to use runtime.call RPC instead of removed preload
CRUD method. Hide browser import hint in E2E profile to prevent overlay from
intercepting test setup clicks.
2026-08-30 20:28:35 -07:00
Neil ad5ba2572e perf(dashboard): build sidebar bucket counts without cards (#17497)
* perf(dashboard): build sidebar bucket counts without cards

* fix dashboard bucket parity for unified agent tabs

* docs(dashboard): clarify count projection comment

* refactor(dashboard): share bucket projection derivation
2026-08-30 20:12:41 -07:00
Neil 8eaae88bf1 perf(agent-status): coalesce deferred freshness scans (#17496) 2026-08-30 19:50:42 -07:00
Neil 947c8d3864 perf(renderer): cache structured session tab projection (#17477) 2026-08-30 19:50:21 -07:00
Neil f55f9352df fix(perf): index mirrored agent tab mappings for cleanup (#17476) 2026-08-30 19:49:39 -07:00
Brennan BensonandMerge Sim 728691173e feat(native-chat): preview pending image attachments (#17517)
* feat(native-chat): preview pending image attachments

* fix(native-chat): preserve remote image previews

* fix(editor): clear pinned image cache state on dispose

* fix(native-chat): defer offscreen image previews

---------

Co-authored-by: Merge Sim <sim@local>
2026-08-30 19:49:01 -07:00