Commit Graph
18582 Commits
Author SHA1 Message Date
Neil 3ec2ff557a fix(cloud): unreachable GitHub repository on a remote-server project says so with More access (UNREACHABLE-REPO-NO-ROUTE) (#730)
* fix(cloud): Orca Cloud on a remote-server project whose GitHub repository it can't reach says so with More access, not the folder wording (UNREACHABLE-REPO-NO-ROUTE)

* fix(cloud): UNREACHABLE-REPO-NO-ROUTE design-squad: 'Give Orca access' link, muted (not red) precondition line, fixture

* test(cloud): OrcaCloudNeedsRepoSubmit fixtures press the footer's Create

* fix(cloud): UNREACHABLE-REPO-NO-ROUTE the Project field's ring is amber while Orca Cloud waits for a GitHub repository (design-squad); aria-invalid kept

* fix(cloud): UNREACHABLE-REPO-NO-ROUTE ring classes stay literal (localization audit), drop the unreferenced remoteServerDetail key
2026-11-13 10:06:25 -08:00
Neil 438982b0ef fix(cloud): a refused create's row offers Retry and Dismiss, and the next create replaces it (REFUSED-CREATE-ROW-STICKY) (#729)
* fix(cloud): a refused create's row offers Retry and Dismiss, and a new create replaces it (REFUSED-CREATE-ROW-STICKY)

* fix(cloud): REFUSED-CREATE-ROW-STICKY a billing or limit refusal's cloud glyph is amber, a real failure stays red (design-squad)
2026-11-13 09:34:57 -08:00
Neil ea58d9ee1e fix(cloud): a project cloned only on a remote server offers Orca Cloud in Run on (RUNON-NO-NEW-SANDBOX) (#727)
* fix(cloud): a project cloned only on a remote server offers Orca Cloud in Run on and starts it from its GitHub repository (RUNON-NO-NEW-SANDBOX)

* fix(cloud): RUNON-NO-NEW-SANDBOX design-squad wording for an unreachable repository
2026-11-13 09:20:23 -08:00
Neil 1b0f087214 fix(cloud): TRANSFER-TOAST-OTHER-DEVICE the 'You made X the owner' notice shows only on the device that made the change 2026-11-13 09:14:00 -08:00
Neil 3f2e7e84be fix(cloud): a team switch moves off the old team's paired cloud workspace, and the status bar counts only this team's hosts (TEAM-SWITCH-STALE-PANE) (#726)
The team-switch leave fired only for an owned workspace's host going from
the team's (+) to hidden (-); a paired one's host is ~ since #690, so the
main pane kept showing another team's workspace after the switch (n57).
It leaves for ~ to - too. The status bar's host list and count now drop
another team's cloud servers, the same scope as the sidebar (#722).
2026-11-13 09:11:37 -08:00
Neil a58988ea8b fix(cloud): Follow and the Following section use the workspace's current owner, so after a hand-off the new owner gets no Follow (FOLLOW-OWN-AFTER-TRANSFER) (#725) 2026-11-13 08:45:00 -08:00
Neil ea5bc46199 fix(cloud): a paired cloud workspace's terminal recovery knows it is asleep or waking (ASLEEP-SR-RECONNECTING) (#724)
useCloudRecoveryContext counted only owned workspaces as cloud, so for a
paired one its asleep and waking states were unknown to the recovery
notices: the remote-server outage notice ('Reconnecting to ... (cloud)',
role=status, aria-live=polite) stayed up under the asleep view, where a
screen reader would announce it (n56 DOM dump). Paired rows count as cloud
there too, so the notice stays silent while asleep or waking.
2026-11-13 08:43:00 -08:00
Neil 060e47ba0f fix(cloud): opening from the picker waits for the workspace's row before revealing it (PICKER-OPEN-INTERMITTENT) (#723)
Right after pairing, the server can answer the project and worktree reads
before it lists the workspace's own row; the row lands a moment later.
connectAndReveal looked once, found nothing, toasted 'is connected' and
returned, so the picker closed and nothing was selected (n48, n55). It now
waits a bounded 15 s for the row (the picker spinner and #710's Opening
toast cover the wait), then reveals it as before.
2026-11-13 08:29:09 -08:00
Neil f5ed624a93 Merge pull request #721 from nwparker/cloud/owner-transfer-desktop
feat(cloud): OWNER-TRANSFER desktop: confirmation, notices, Owner changed chip, audit wording
2026-11-13 08:24:58 -08:00
Neil 61ff0b940c fix(cloud): another team's cloud workspace is neither a Run on target nor announced as reconnecting, same scope as the sidebar (STALE-RUN-TARGET) (#722) 2026-11-13 08:16:30 -08:00
Neil e6540b0859 fix(cloud): OWNER-TRANSFER en catalog matches the approved audit fallback 2026-11-13 08:09:40 -08:00
Neil 86a039a6c8 fix(cloud): a Restart's own invalidate never shows 'This operation was aborted' (RESTART-ABORT-BANNER) (#719)
* fix(cloud): a Restart's own transport invalidate never shows 'This operation was aborted'; a stream mid-setup fails as recoverable and the pane resubscribes (RESTART-ABORT-BANNER)

* test(cloud): RESTART-ABORT-BANNER type the subscribe result as a promise

* test(cloud): RESTART-ABORT-BANNER no type assertions in the invalidate test
2026-11-13 08:08:48 -08:00
Neil 5dfc617112 fix(cloud): OWNER-TRANSFER confirmation lists consequences as bullets; audit fallback says Notified 2026-11-13 08:06:40 -08:00
Neil 9c486f4107 fix(cloud): the type-through waking pill never takes focus; no reconnect banner on the asleep view (PAIRED-WAKE-TYPE-THROUGH, ASLEEP-RECONNECT-BANNER) (#720)
The waking overlay moved focus to itself when it mounted (~0.3 s into a
wake) unless the wake had failed, the type-through pill included: the
first key reached the terminal and was held, every later key went to the
overlay and was lost (n53: 'e' held, 22 lost). The pill now leaves focus
where it is while typing goes through. The reconnect banner was held while
waking or going to sleep but not once asleep; asleep holds it too.
2026-11-13 08:04:36 -08:00
Neil ff6c7599c1 feat(cloud): OWNER-TRANSFER desktop says what an owner change does and tells the people it affects
- Make owner confirmation lists what happens (sleeps, share links stop, the
  disk goes with it, shared mode for good), stays open while the workspace
  goes to sleep, and shows a refusal in place.
- Whoever made the change is told whether the previous owner will see a notice.
- The previous owner gets a notice (until dismissed) advising them to rotate
  personal secrets; the new owner is told once that it runs like a shared
  workspace.
- "Owner changed" chip in the top bar and a line in the sidebar hover card.
- Audit log words Orca's "previous owner told" row, and a row cut short shows
  its whole sentence on hover (AUDIT-TRUNC-HOVER).
2026-11-13 08:03:56 -08:00
Neil 634f7753fb fix(cloud): a paired cloud workspace put to sleep on screen stays on its asleep view, not Home (SLEEP-HOME-REGRESSION) (#716)
Sleeping a paired cloud workspace on screen left for Home (n49/n51): the
asleep-view hold only knew owned workspaces, and the host's sleep stops the
workspace's terminals (or its chat), so its last tab closed and every
'emptied workspace' path landed on Home within half a second. The hold now
takes paired rows too, and the store's last-tab close, the emptied reaction
and the terminal tab close all stay on a workspace held asleep on screen.
The asleep view is the workspace's, not a tab's, so it covers a workspace
with no tab left (terminal-only and chat-only alike).
2026-11-13 07:46:35 -08:00
Neil 647c1bbbe6 fix(cloud): a paired wake shows as waking from the press, so the first second's typing reaches the hold (PAIRED-WAKE-TYPE-THROUGH) (#717)
#692 began the typing hold at the press, but the 'waking' report (which
moves the paired surface from its asleep cover, inert over the pane, to
the type-through waking layer) still came after an awaited bindings read.
Keys typed in that first second hit the inert pane and were lost (n49:
2/2, n51: 1/2). The wake now reports waking at the press; a row whose
sandbox can't be found still ends with its not-linked card.
2026-11-13 07:41:11 -08:00
Neil ce3c58040b fix(cloud): EP-4 a secret with no ending says why (tooltip) (#715)
* fix(cloud): EP-4 a secret with no ending says why: too short, or only owners and admins see it (tooltip and screen-reader label)

* fix(cloud): EP-4 design-squad wording: 'last characters', 'Short values are fully hidden'
2026-11-13 07:34:54 -08:00
Neil 1f3ae41b96 Merge pull request #714 from nwparker/cloud/chat-first-tab
fix(cloud): CLOUD-CHAT-FIRST-TAB no plain shell seeded in front of a create's first chat
2026-11-13 07:30:19 -08:00
Neil 0f23abb59d test(cloud): CLOUD-CHAT-FIRST-TAB seeder test state is annotated, not cast 2026-11-13 07:24:45 -08:00
Neil 4061fe68f3 Merge pull request #687 from nwparker/cloud/ep11-plan-copy
fix(cloud): EP-11 the plan blocker says 'ended' only for a plan that existed
2026-11-13 07:24:45 -08:00
Neil 654c58e5fb fix(cloud): a paired Unarchive settles its wake, so the row isn't left waking with Archive disabled (ARCHIVE-MENU-DISABLED) (#712)
Main's paired unarchive reported waking (source unarchive) but never
ready on success. The control plane answers once the VM is up, so the
window's open found it running and started no wake of its own, and
nothing settled the event: the row stayed waking (Archive disabled) until
the overlay called it stalled ('stopped responding while waking'). Main
now reports ready when the paired unarchive succeeds, and the renderer
settles a still-pending unarchive wake from a fresh read that says ready.
2026-11-13 07:22:23 -08:00
Neil caffab508b fix(cloud): CLOUD-CHAT-FIRST-TAB a create whose first agent opens as a chat seeds no shell in front of it (chat counts as the first surface; the create holds the seeder off while its chat opens) 2026-11-13 07:22:17 -08:00
Neil e429e917cf fix(cloud): opening a cloud workspace says so while it waits, and a timeout or a missing workspace says why (EP-6-FLAKE) (#710)
An open could wait up to 120 s (a grant or wake timing out, or a workspace
created, slept or deleted on another device mid-open) with nothing on
screen, then drop the person on Home. While an open runs, a loading toast
appears after 3 s ('Opening {{name}}...'); a timeout is a warning with Try
again; a workspace the server no longer has (not_found) fails at once with
'Couldn't find {{name}}' and Show cloud workspaces. The picker's own row
spinner holds the toast back until the picker closes; a GitHub-only
create's pending row keeps its own progress. design-squad copy.
2026-11-13 07:20:16 -08:00
Neil 82ffa965b6 Merge pull request #707 from nwparker/create-speed/card-restarting-inert
fix(cloud): the card's Restarting… button is inert during a restart
2026-11-13 07:09:01 -08:00
Neil 1f0453c153 fix(cloud): GRANT-ID-TRACKING pairing recovery never leaves stray grants; transient failures retry (#706)
* fix(cloud): GRANT-ID-TRACKING pairing recovery tracks every grant it leaves behind (owned re-grants, failed binds) and retries transient failures twice, spaced out

* fix(cloud): GRANT-ID-TRACKING a grant for a different server is final; a failed tracking write keeps the grant tracked for this run (sso-scim review)
2026-11-13 07:06:05 -08:00
Neil c144c6fbce Merge pull request #698 from nwparker/cloud/env-build-churn
feat(cloud): golden refresh churn: rebuild what's used, security goldens rebuild all, never charged to teams (ENV-BUILD-CHURN)
2026-11-13 07:02:25 -08:00
Neil 35ad650bae Merge pull request #709 from nwparker/cloud/held-surface-menu-route
fix(cloud): CLOUD-HELD-SURFACE VM create decides chat/terminal at submit (the agent menu has no VM host and always said terminal)
2026-11-13 06:59:26 -08:00
Neil 4cb3f324c7 fix(cloud): a member's Sleep on a teammate's shared workspace never hangs; Sleep shows who can (SHARED-MEMBER-SLEEP-HANG) (#708)
* fix(cloud): a member's Sleep on a teammate's shared workspace never hangs; Sleep shows who can (SHARED-MEMBER-SLEEP-HANG)

#690 registers a shared workspace's linked row as the paired workspace,
but the paired sleep target still required the main checkout, so a
member's Sleep skipped the sandbox silently and 'Saving copy...' never
cleared. The sleep target now follows the paired registry; every paired
target ends slept, still running or refused (the saving state always
clears). The control plane lets only the owner or a team admin sleep it:
a refusal is a warning toast saying so, and a member known not to be an
admin sees Sleep disabled with the reason (design-squad copy).

* test(cloud): refusal toast fixture waits for the Toaster and uses a full-size frame

* fix(cloud): lint (no cast in the registry mock; the menu item keeps its own spacing)
2026-11-13 06:56:14 -08:00
Neil e05dee2312 Merge remote-tracking branch 'private/cloud/integration' into cloud/env-build-churn 2026-11-13 06:50:47 -08:00
Neil 59ed67dd0c Merge pull request #689 from nwparker/cloud/ep9-billing-mint-org
fix(cloud): EP-9 billing tokens name the team this device shows (cross-device active-team leak)
2026-11-13 06:49:21 -08:00
Neil 4d6041ff71 fix(cloud): no reconnect banner while a paired workspace goes to sleep (SLEEP-RECONNECT-BANNER) (#705)
A paired workspace's going-to-sleep mark was cleared before its sandbox
slept through the control plane, and it has no local record that flips
to suspended, so while the connection dropped the pane showed
'Reconnecting... Down for N sec'. Paired ids now stay going to sleep until
their control-plane sleep and status re-read finish, and the reconnect
banner and outage notice hold while a sleep is in progress.
2026-11-13 06:45:52 -08:00
Neil c2254de342 test(cloud): CLOUD-HELD-SURFACE Claude set to Terminal keeps an Orca Cloud create a terminal 2026-11-13 06:41:08 -08:00
Neil 5fa069bc05 fix(cloud): CLOUD-HELD-SURFACE a VM create's route is decided at submit, not taken from the agent menu (which has no VM host to ask and always says terminal) 2026-11-13 06:39:52 -08:00
Neil 15b94d9567 Merge remote-tracking branch 'private/cloud/integration' into cloud/ep9-billing-mint-org 2026-11-13 06:39:11 -08:00
Neil 1b59a54b9f Merge remote-tracking branch 'private/cloud/integration' into cloud/env-build-churn 2026-11-13 06:39:03 -08:00
Neil 756b55f962 Merge pull request #696 from nwparker/cloud/chat-running-revoke
fix(cloud): END-PASS CHAT-RENEW polish — empty-composer Renew hint, shared chat env helper, Esc stops in-place renew
2026-11-13 06:38:42 -08:00
Neil 7a55601415 Merge pull request #701 from nwparker/pl/secrets-swap-tag
fix(cloud): secrets list tags only keys Orca swaps at the edge (SEC-CLAIMS-ENV follow-up)
2026-11-13 06:35:10 -08:00
Neil 5faae7d94b Merge pull request #686 from nwparker/cloud/ep9-cancel-at
fix(billing): EP-9 a portal cancel (Stripe cancel_at) shows as the team's own plan ending
2026-11-13 06:32:14 -08:00
Neil 57f0127024 fix(cloud): the card's Restarting… button is inert during a restart (CLOUD-CARD-RESTARTING-CLICK) 2026-11-13 06:32:06 -08:00
Neil 17dbe9008b Merge pull request #704 from nwparker/create-speed/ep5b-cancel-retry
fix(cloud): EP-5 a cancelled create never goes on with a new row; cancel sweeps the workspace
2026-11-13 06:29:23 -08:00
Neil b17d30357f chore(cloud): EP-9 lint: no import() type, no Array<T>, no assertions in tests 2026-11-13 06:27:04 -08:00
Neil 74a1489576 chore(cloud): EP-11 lint: explicit null/undefined case; typed test reason (no assertion) 2026-11-13 06:27:00 -08:00
Neil 42613457ab Merge pull request #700 from nwparker/pl/sec-claims-copy
fix(cloud): secrets copy says which secrets stay out of the sandbox (SEC-CLAIMS-ENV)
2026-11-13 06:26:39 -08:00
Neil b6fe25532e fix(cloud): CHAT-RENEW the chat's Escape catch leaves the strip's own Escape to the strip (no double stop) 2026-11-13 06:25:01 -08:00
Neil 60f59e649d Merge pull request #697 from nwparker/cloud/held-surface-chat
fix(cloud): CLOUD-HELD-SURFACE Orca Cloud create with chat preferred opens a held chat; declined VM falls back to held terminal
2026-11-13 06:24:06 -08:00
Neil 1b81ecec15 feat(cloud): EP-10 delete a team whose plan is set to end (desktop dialog) (#695)
* feat(cloud): EP-10 delete a team whose plan is set to end: the dialog says it ends now with no refund; a failure after the plan ended says so and offers to try again

* fix(cloud): EP-10 delete dialog copy (design-squad)

* chore(cloud): EP-10 sync protected-copy keys for the delete dialog's new lines
2026-11-13 06:22:04 -08:00
Neil b671273718 Merge remote-tracking branch 'private/cloud/integration' into cloud/env-build-churn
# Conflicts:
#	cloud/apps/sandbox-control/src/environments.ts
2026-11-13 06:18:54 -08:00
Neil 477583f9f4 fix(cloud): EP-5 a cancelled create never goes on with a new row; cancel sweeps the workspace 2026-11-13 06:18:39 -08:00
Neil 5fddec514f fix(cloud): the swapped-key tag reads "Kept out of sandbox" (design-squad) 2026-11-13 06:10:46 -08:00