Commit Graph
23348 Commits
Author SHA1 Message Date
Neil 857ca653b0 Merge pull request #733 from nwparker/create-speed/sc-typecheck
fix(cloud): sandbox-control typecheck to zero
2026-11-13 11:18:45 -08:00
Neil 84a776923c docs(cloud): sandbox-control typecheck split pinned by path; README on why raw tsc shows imported diagnostics 2026-11-13 11:16:23 -08:00
Neil ec679a8f52 fix(cloud): sandbox-control typecheck to zero (SANDBOX-CONTROL-TYPECHECK) 2026-11-13 11:14:50 -08:00
Neil f2391aff70 Merge pull request #732 from nwparker/cloud/premerge-cloud-pkg-typecheck
chore(premerge): typecheck each touched cloud/ package that is listed as clean
2026-11-13 11:10:45 -08:00
Neil 6fc2b8951b chore(premerge): typecheck each touched cloud/ package that is listed as clean
The root pnpm typecheck covers no cloud/ package and vitest strips types, so cloud
packages' own type errors went unseen (261 in sandbox-control). premerge-check.sh now
runs the own pnpm typecheck of every touched cloud/apps or cloud/packages package listed
in premerge-typecheck-packages.txt, after installing the cloud workspace and building its
packages. The list holds the 11 packages that are clean today; sandbox-control joins once
its errors are fixed.
2026-11-13 11:08:52 -08:00
Neil 32b21bb4cb Merge pull request #731 from nwparker/cloud/owner-transfer-timing
feat(cloud): TRANSFER-SLOW-N60: a completed owner hand-off logs per-step timings
2026-11-13 11:07:13 -08:00
Neil d20dc4e20a feat(cloud): TRANSFER-SLOW-N60 a completed owner hand-off logs how long each step took 2026-11-13 11:04:44 -08:00
Neil 46f081f336 Merge pull request #703 from nwparker/cloud/g9-claude-key-tail
fix(cloud): G9 never write a real ANTHROPIC_API_KEY tail into ~/.claude.json
2026-11-13 10:33:28 -08:00
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 8e866e83ef Merge pull request #728 from nwparker/cloud/transfer-toast-other-device
fix(cloud): TRANSFER-TOAST-OTHER-DEVICE: no echo of your own owner change on other devices
2026-11-13 09:18:31 -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 9c1feb60da Merge pull request #718 from nwparker/cloud/owner-transfer-notice-retention
feat(cloud): OWNER-TRANSFER previous-owner notices expire after 90 days and go with a deleted team
2026-11-13 07:43:38 -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 648f5bb67f feat(cloud): OWNER-TRANSFER previous-owner notices expire after 90 days and go with a deleted team 2026-11-13 07:39:07 -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 a58aad5522 Merge pull request #713 from nwparker/cloud/owner-transfer-notify
feat(cloud): OWNER-TRANSFER tell the previous owner; expose the owner-changed mark
2026-11-13 07:27:20 -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 881b82e401 Merge pull request #711 from nwparker/create-speed/snap404-skip-deleted
fix(cloud): the fresh-build 404 retry never runs for a create its owner deleted
2026-11-13 07:16:53 -08:00
Neil 04457ec384 fix(cloud): OWNER-TRANSFER an email answer with no mode is not a delivery (sso-scim review) 2026-11-13 07:15:58 -08:00
Neil 8026ca98af feat(cloud): OWNER-TRANSFER tell the previous owner (notice in Orca, email asked of auth, audit row); expose the owner-changed mark 2026-11-13 07:14:33 -08:00
Neil 950a8165c8 Merge pull request #691 from nwparker/cloud/ep10-cancel-on-delete
feat(billing): EP-10 team delete can cancel a plan that's already set to end (cancel-now)
2026-11-13 07:11:50 -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 7922504e4b fix(cloud): the fresh-build 404 retry never runs for a create its owner deleted 2026-11-13 06:59:42 -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 5e6fcd30f3 Merge pull request #702 from nwparker/cloud/owner-transfer-fix
fix(cloud): OWNER-TRANSFER a workspace is only handed to a current team member, and a transferred workspace stays in shared mode for credentials
2026-11-13 06:42:12 -08:00