Commit Graph
22127 Commits
Author SHA1 Message Date
Neil d4cd4dd2cb fix(cloud): N-01 lint: no as-casts in phase guards, return await in failAfterStart 2026-11-11 13:01:35 -08:00
Neil ef49c858c5 feat(cloud): N-01 per-create phase timing in app.log
Each Orca Cloud create logs `[orca-cloud] create <creationId> <phase> +<ms>`
(ms since its provision started) to the main app log, so a slow create shows
which phase took the time. The provision's own `[orca-cloud] <stage>` progress
lines are unchanged.

Also folds the two identical post-start cleanup-and-fail blocks in the
provision handler into one helper (ephemeral-vm.ts was at the 300-line cap).
2026-11-11 13:01:35 -08:00
Neil d8dac59474 Merge pull request #466 from nwparker/cloud/n04-held-queued-copy
fix(cloud): N-04 queued prompt editing hint says it waits for agent setup when held
2026-11-11 12:55:04 -08:00
Neil 3eaf1ea505 test(cloud): N-04 cast on its own annotated line 2026-11-11 12:38:37 -08:00
Neil 8103fc9886 Merge pull request #462 from nwparker/cloud/n02-reattach-history
fix(cloud): N-02 desktop subscribers get a local terminal's scrollback depth (app restart keeps cloud history)
2026-11-11 12:32:03 -08:00
Neil 9a2e5c7ce9 Merge pull request #460 from nwparker/cloud/n03-scoped-notices
Orca Cloud: workspace notices stay in their workspace, never over Settings (N-03); neutral repository step (N-12)
2026-11-11 12:28:29 -08:00
Neil de4b5045ca test(cloud): N-02 a full desktop-budget snapshot goes out in frames under every receiver cap 2026-11-11 12:19:13 -08:00
Neil 4df88820f5 fix(cloud): N-04 held hint matches the row's 'Sends once {{agent}} is set up'; fixture agent is Claude 2026-11-11 12:18:35 -08:00
Neil ffe1d633ed fix(cloud): N-04 held copy in the queued prompt's editing hint, decided from the first frame 2026-11-11 12:17:08 -08:00
Neil 9211cbfa8b Merge branch 'cloud/integration' of https://github.com/nwparker/orca-private into cloud/n03-scoped-notices
# Conflicts:
#	src/renderer/src/components/worktree-creation/VmBuildStepRow.test.tsx
#	src/renderer/src/components/worktree-creation/VmBuildStepRow.tsx
2026-11-11 12:16:15 -08:00
Neil 8a384f4692 Merge pull request #458 from nwparker/cloud/n03-scoped-toasts
Cloud: no away toast for a held cloud agent; the sidebar row marks it (N-03, my half)
2026-11-11 12:12:48 -08:00
Neil 760142b055 Merge pull request #464 from nwparker/lc2/ja25-branch-label
copy(cloud): composer branch choice says "Branch for this workspace" when Run on is Orca Cloud (JA-25 follow-up)
2026-11-11 12:08:40 -08:00
Neil 593c00f38a Merge pull request #465 from nwparker/cloud/premerge-concurrency
chore(cloud): premerge runs at most 2 at once per machine (queues and logs the wait; killed runs clean up)
2026-11-11 11:58:14 -08:00
Neil a1970323fb Merge pull request #457 from nwparker/cloud/mpg-n05-chip
fix(cloud): N-05 W-number chip reads as Copy link at rest
2026-11-11 11:56:54 -08:00
Neil 5def277410 copy(cloud): cloud New branch hint reads "Create a new branch." (the branch lives in the sandbox); local keeps upstream copy (JA-25) 2026-11-11 11:54:04 -08:00
Neil c19ddc77d4 Merge pull request #459 from nwparker/lc2/ja25-nouns
copy(cloud): JA-25 remaining nouns: Start, Cloud workspace, workspace and its files
2026-11-11 11:52:57 -08:00
Neil 7652e1a4a4 Merge pull request #463 from nwparker/create-speed/fixture-settle
fix(cloud-create): no blank Repository row: placeholder shows at once after 150 ms of create
2026-11-11 11:51:52 -08:00
Neil 58bf15f6d6 test(cloud): JA-25 branch choice title per run target; orcaCloudRemoteBranch fixture 2026-11-11 11:51:39 -08:00
Neil 95db71fa56 fix(cloud-create): repository placeholder shows at once once the create has waited 150 ms (no blank row in fixtures or remounts) 2026-11-11 11:48:16 -08:00
Neil 6a8a0f997a fix(cloud): N-03 the row mark in the template-based sidebar card too (real-run find) 2026-11-11 11:48:11 -08:00
Neil df0998e827 copy(cloud): the composer's branch choice says "Branch for this workspace" when Run on is Orca Cloud; local keeps the upstream label (JA-25) 2026-11-11 11:46:56 -08:00
Neil c3a4d46176 fix(cloud): N-02 a desktop subscriber gets a local terminal's scrollback depth, so an app restart keeps a cloud pane's history
Quitting and reopening the app restored a running cloud terminal's saved
scrollback, then its reattach replayed the host's subscribe snapshot with a
clear - capped at the phone-sized 1000 rows - so everything above was gone.
Local panes survive the same clear because their daemon snapshot carries the
full 5000 rows.

Host side (runs in the VM; needs the dev golden rotation):
- the initial subscribe snapshot for a non-mobile stream tries 5000 rows
  (DESKTOP_TERMINAL_SCROLLBACK_ROWS_DEFAULT) under a 2 MB raw budget (the same
  a requested desktop snapshot already gets; snapshots are chunked), stepping
  down 5000 -> 2000 -> 1000 -> ... when over; phones keep 1000 rows / 512 KB;
- ack-recovery snapshots after dropped output: desktop depth for non-mobile.
Renderer: a gap resync asks for desktop depth (the host caps by bytes).
2026-11-11 11:46:27 -08:00
Neil 4dca3ca244 chore(cloud): N-03 drop the removed toast's strings 2026-11-11 11:46:06 -08:00
Neil af0e0cf855 Merge pull request #461 from nwparker/create-speed/start-stage
fix(cloud-create): 'Start sandbox' names what it waits on after 5 s (N-01 progress text)
2026-11-11 11:45:09 -08:00
Neil 61f8c9f26e fix(cloud): premerge removes its temp merge worktree on any exit, including a kill while queued
The slot-holding python parent now traps INT/TERM (forwarding to a running child) and, in a finally, removes the temp
worktree (git worktree remove --force, rm -rf) and prunes it from the main repo. The pre-exec stage has its own
EXIT/INT/TERM trap for the window between worktree add and the hand-over. Tested: 3 runs, limit 2, run 3 killed with
TERM while queued -> exit 143, 'stopped by signal 15; removed …'; all three temp worktrees gone from disk and from
git worktree list.
2026-11-11 11:44:01 -08:00
Neil 6f8a4e9183 chore(cloud): premerge runs at most 2 at once per machine; extra runs queue and log the wait
The shared Mac hit load 60 from parallel premerges and vitest runs, starving the e2e harness. In the merged copy
every branch re-runs (#447), after the merge and before install/typecheck/lint/tests, the script now takes one of
PREMERGE_MAX_CONCURRENT (default 2) flock'd slot files under PREMERGE_LOCK_DIR (default /tmp/vdrv), held by a python
parent for the run (a killed run frees its slot). Queued runs print 'premerge: queued for one of 2 slots …, waited Ns'
every 30 s and 'got slot i/2 after Ns'. Tested: 3 concurrent runs with a limit of 2, the third queued 10 s.
2026-11-11 11:42:24 -08:00
Neil 809c2dcff3 test: N-01 stage threshold (4.9 s / 5 s) and one fixture per stage line 2026-11-11 11:41:23 -08:00
Neil 6f904ba5c3 copy(cloud): Run on's Orca Cloud subtitle reads "Sandbox · 8 vCPU · 16 GB", not "Hosted sandbox" (JA-25, glossary) 2026-11-11 11:41:22 -08:00
Neil c4f0cacf42 feat(cloud): workspace notices stay in their workspace, never over Settings (N-03); neutral repository step on an early failure (N-12) 2026-11-11 11:40:33 -08:00
Neil ca276bf0da fix(cloud): N-03 no away toast for a held cloud agent; the sidebar row marks it instead
journey-audit v2: the 'Claude isn't set up' toast followed the user through other workspaces and the sleep view. design-squad (PC-3 reversed on purpose): in the workspace the pane's Set up once strip asks; away, the sidebar row shows a key mark with the tooltip and aria-label 'Claude isn't set up for Orca Cloud' (or 'sign-in expired'). The away toast and its modules are removed. Toast-stack scoping (push notice) is env-check-ux's half.
2026-11-11 11:39:26 -08:00
Neil b5e6dbed03 fix(cloud): N-05 copied state keeps the chip's width — check glyph, 'Link copied' in the tooltip 2026-11-11 11:38:21 -08:00
Neil db67596159 fix(cloud-create): 'Start sandbox' names what it waits on after 5 s (N-01 progress text)
Past 5 s the running Start sandbox row says what it is waiting on: 'Getting your project ready…'
(the desktop is still preparing, before the create is sent), 'Checking your plan…', 'Starting the
sandbox…', or 'Connecting to the sandbox…' (after the server answered). A normal start stays quiet.
Replaces the immediate phase detail (latestOrcaCloudPhaseLabel).
2026-11-11 11:37:43 -08:00
Neil fd82d3f655 fix(cloud): N-05 W-number chip leads with a link glyph so it reads as Copy link at rest; drops below 960px 2026-11-11 11:36:59 -08:00
Neil 3df8851c3b Merge pull request #456 from nwparker/cloud/wake-scrollback-scroll
fix(cloud): WAKE-SCROLLBACK-SCROLL a scroll made during a wake survives the remount
2026-11-11 11:34:57 -08:00
Neil eb8c8a978f test(cloud): WAKE-SCROLLBACK-SCROLL keepWakeScrollPlace waits for the replay rebuild, pins, corrects one fit drift, leaves a return-to-bottom alone 2026-11-11 11:30:05 -08:00
Neil a5373f4ba4 fix(cloud): WAKE-SCROLLBACK-SCROLL re-apply the kept line once after the pane's own fit (bottom-offset pin drift) 2026-11-11 11:25:48 -08:00
Neil 309e753ace fix(cloud): WAKE-SCROLLBACK-SCROLL apply the kept place after the replay's own scroll-intent rebuild completes (it restored follow-output) 2026-11-11 11:23:38 -08:00
Neil cc79bf1fbe fix(cloud): WAKE-SCROLLBACK-SCROLL scroll back with intent enforcement paused (its synchronous follow-output snapped back), then pin 2026-11-11 11:18:34 -08:00
Neil 98cc759063 test(cloud): WAKE-SCROLLBACK-SCROLL the wake scroll listener: capture phase hears a wheel xterm stops, passive, removed on cleanup 2026-11-11 11:12:43 -08:00
Neil 2275be0d29 fix(cloud): WAKE-SCROLLBACK-SCROLL hear the wheel in the capture phase (xterm's scrollable element stops its propagation) 2026-11-11 11:09:28 -08:00
Neil 8669af7a7e test(cloud): WAKE-SCROLLBACK-SCROLL a pinned wake scroll stays put under new output and follows output again at the bottom 2026-11-11 11:08:41 -08:00
Neil 5bae7c5b13 fix(cloud): WAKE-SCROLLBACK-SCROLL a scroll made during a wake survives the remount (stale held at-bottom fit restores are cancelled) 2026-11-11 11:02:40 -08:00
Neil 5db0b96893 Merge pull request #455 from nwparker/cloud/wake-scrollback
feat(cloud): WAKE-SCROLLBACK keep a woken terminal's pre-sleep output above a 'Slept … · processes stopped' divider
2026-11-11 10:32:59 -08:00
Neil f1f0cfc5d3 fix(cloud): WAKE-SCROLLBACK the kept scroll is recorded as a pinned scroll intent, so post-fit intent restores keep it 2026-11-11 10:24:54 -08:00
Neil c4bb9d26b5 fix(cloud): WAKE-SCROLLBACK any sleep keeps the full history (pre-resubscribe copy for sleeps not clicked here), a scroll made while asleep/waking survives the wake remount 2026-11-11 10:16:23 -08:00
Neil a974f6120b fix(cloud): WAKE-SCROLLBACK capture only at going-to-sleep/asleep (never while waking, when a remount holds restored copies); preview only into a remount with no replayed saved output 2026-11-11 10:03:30 -08:00
Neil 80c180c8fb fix(cloud): WAKE-SCROLLBACK the restore drops the scrollback with xterm's clear() so a remount preview is never duplicated 2026-11-11 09:58:23 -08:00
Neil a07ca09b41 fix(cloud): WAKE-SCROLLBACK a pane remounted on wake paints its kept output at once (the blank frames were the fresh xterm before the snapshot) 2026-11-11 09:53:09 -08:00
Neil 1ed60a9774 fix(cloud): WAKE-SCROLLBACK hold rendering from the woken terminal's bind (the process-boundary ground released it), so no pre-restore clear is painted; tests on a fixed clock 2026-11-11 09:47:25 -08:00
Neil 40d2c4d1f3 fix(cloud): WAKE-SCROLLBACK divider copy on its own key (the catalog value renders; the old key had from/to) 2026-11-11 09:43:04 -08:00