Commit Graph
890 Commits
Author SHA1 Message Date
Neil 80d65a5b1c feat(cloud): EP-3c the control plane takes member display names from auth, as labels only 2026-11-13 05:13:29 -08:00
Neil 2be9406d7d fix(cloud): validate ORCA_PLATFORM_HOST_SUFFIXES up front; smoke boots use the configured hosts (#680)
* fix(cloud): validate ORCA_PLATFORM_HOST_SUFFIXES up front; smoke boots use the configured hosts

A malformed suffix now refuses every request (503 platform_hosts_misconfigured,
naming the bad entries) and skips scheduled work, instead of failing each
limited-mode create later. Golden-image and environment-build smoke boots
use the workspace base allowlist, so they follow the configured platform
hosts rather than the built-in *.onorca.dev.

* fix(cloud): narrow the platform-host guard to what compiles an allowlist

A malformed ORCA_PLATFORM_HOST_SUFFIXES no longer takes the Worker down.
GET /v1/health (no auth, for the post-deploy smoke) returns 503
platform_hosts_misconfigured; limited-mode creates, wakes and resumes,
new environment builds and the golden rotation refuse or skip. Reads,
sleep, stop, delete and the reconcile cron keep working; open-mode
creates compile no allowlist and are unaffected.

* fix(cloud): platform_hosts_misconfigured responses carry the code only

/v1/health is public, so the bad entries stay in the config_error log
line; the authenticated refusals return the same bare code.
2026-11-13 05:03:58 -08:00
Neil b6453d9dc9 Merge pull request #664 from nwparker/create-speed/parity-docker
feat(cloud): Docker in Orca Cloud workspaces, installed on first use (PARITY-DOCKER)
2026-11-13 04:13:00 -08:00
Neil c92b709831 feat(cloud): docker shim copy per design-squad (retry hints, three-line CA notice once per workspace) 2026-11-13 04:10:53 -08:00
Neil 5220097529 Merge pull request #676 from nwparker/cloud/audit-workspace-visibility
feat(cloud): EP-3 workspace share with team, make private and owner change go in the audit log
2026-11-13 04:08:44 -08:00
Neil 1ffa40e87c feat(cloud): docker first-use message states the measured time (7.5 s on dev) 2026-11-13 04:08:21 -08:00
Neil 4793446068 fix(cloud): EP-3 design review: the audit log names a workspace's new owner 2026-11-13 03:55:03 -08:00
Neil 82f75b4be8 merge cloud/integration (#525 open egress) 2026-11-13 03:52:40 -08:00
Neil fee272abff feat(cloud): EP-3 sharing a workspace with the team, making it private and changing its owner go in the audit log 2026-11-13 03:52:22 -08:00
Neil 1c72218c59 fix(cloud): E3-PROD-GUARD open egress without EGRESS_PROXY_URL in a deployed env falls back to limited and logs egress_open_without_proxy 2026-11-13 03:52:21 -08:00
Neil fd3a473695 Merge remote-tracking branch 'private/cloud/integration' into cloud/e3-open-egress
# Conflicts:
#	cloud/apps/sandbox-control/src/env.ts
#	cloud/apps/sandbox-control/src/lifecycle.ts
#	cloud/apps/sandbox-control/src/network-policy.ts
#	cloud/apps/sandbox-control/test/network-policy.test.ts
2026-11-13 03:47:25 -08:00
Neil 98bdda862a merge cloud/integration (#666); regenerate VM scripts 2026-11-13 03:47:14 -08:00
Neil 2a232cc3ab fix(cloud/mcp): MCP approval page works in real browsers (referrer-policy same-origin; no-referrer made browsers send Origin: null, which the CSRF origin check refused) 2026-11-13 03:38:39 -08:00
Neil 5870930dad feat(cloud): issuer lists, platform egress suffixes and a prod-required setup pages URL (DOMAIN-1 D2) (#668)
- SANDBOX_/BILLING_(STAGING_)AUTH_ISSUER accept a comma-separated issuer list; a single value behaves as before.
- ORCA_PLATFORM_HOST_SUFFIXES supplies the platform egress hosts (default *.onorca.dev, unchanged allowlist).
- Billing: CLOUD_SETUP_PAGES_URL unset with BILLING_ENV=prod answers 503 billing_misconfigured; dev/staging keep the fallback.

No wrangler config or current value changes.
2026-11-13 03:32:59 -08:00
Neil e65f777984 Merge pull request #661 from nwparker/cloud/rs5-claude-label
fix(cloud): RS-5 a Claude credential is always labelled "Claude subscription" (never a possibly-wrong email)
2026-11-13 03:30:11 -08:00
Neil 36f243041b Merge pull request #670 from nwparker/cloud/auto-env-deps-label
feat(cloud): environment page says whether an automatic environment's dependencies installed (AUTO-ENV-DEPS-LABEL)
2026-11-13 03:27:32 -08:00
Neil a7554e7176 chore(cloud): DOMAIN-1 D3: fallback VM git identity Orca <noreply@orca.dev> + benchmark token URL (ROTATES GOLDEN; w6 deploys with it) (#666)
* chore(ci): DOMAIN-1 D3 the benchmark workflow's diagnostics token URL matches the other release workflows (orca.dev)

* chore(cloud): DOMAIN-1 D3 (DOM-d) fallback VM git email noreply@orca.dev (prelude, vm-agent, routines); image/vm unchanged, no VM_SCRIPTS_HASH change

* chore(cloud): DOMAIN-1 GIT-EMAIL-ALIGN image/vm fallback git email noreply@orca.dev; earlier defaults migrate to it

* chore(cloud): regenerate vm-scripts.generated.ts

* chore(cloud): DOMAIN-1 DOM-d fallback VM git identity Orca <noreply@orca.dev> (name migrates from 'Orca Cloud'); shim notice copy per design-squad

* chore(cloud): regenerate vm-scripts.generated.ts

* test(cloud): update environment-build-auto-install VM_SCRIPTS_HASH pin for DOMAIN-1 #666
2026-11-13 03:22:32 -08:00
Neil fe61ab6e1f Merge remote-tracking branch 'private/cloud/integration' into cloud/rs5-claude-label
# Conflicts:
#	cloud/apps/sandbox-control/src/agent-credentials.ts
2026-11-13 03:16:59 -08:00
Neil 03044c1f22 Merge pull request #659 from nwparker/cloud/rs3-rs4-codex-messages
fix(cloud): RS-3/RS-4 Codex errors say what to do (device-code sign-in off; signed-out 403 with a renew message)
2026-11-13 03:16:23 -08:00
Neil 79c04c5c19 Merge pull request #655 from nwparker/cloud/rs2-probe-suspect
fix(cloud): RS-2 a failed auth check never revokes a sign-in; it needs a check until a real request confirms or clears it
2026-11-13 03:11:23 -08:00
Neil c5d1fb6f6b feat(cloud): the environment page says whether an automatic environment's dependencies installed (AUTO-ENV-DEPS-LABEL)
The Worker reads environment-build.sh's own lines from the stored build log at finalize and records
autoInstall { manager, outcome } in the build result (no image change). The build view carries it;
the environment page shows 'Dependencies installed (pnpm)' or that the install failed and workspaces
run their own setup.
2026-11-13 03:04:16 -08:00
Neil e37176cbe0 test(cloud): drop an inaccurate rotation claim from a comment 2026-11-13 03:03:35 -08:00
Neil 51d7dcbce6 merge cloud/integration; regenerate VM scripts; auto-install test checks env scripts stay out of VM_SCRIPTS instead of pinning the hash 2026-11-13 03:03:21 -08:00
Neil fd1b37c29f Merge remote-tracking branch 'private/cloud/integration' into create-speed/parity-docker 2026-11-13 03:02:54 -08:00
Neil 204fc9e04c test(cloud): docker shim tests tolerate loaded hosts 2026-11-13 03:00:44 -08:00
Neil 5942f40782 Merge pull request #660 from nwparker/cloud/auto-env-deps
feat(cloud): automatic environments install lockfile dependencies, softly (PARITY-AUTO-ENV-DEPS)
2026-11-13 02:57:31 -08:00
Neil ba3962d9cc feat(cloud): Docker installs on first use instead of in the golden (+5 s create p50 measured) 2026-11-13 02:55:10 -08:00
Neil 667f59a3b5 docs(cloud): E3 review F2/F3/F5 notes (cost of open, switch reach, 403 is fail-fast) 2026-11-13 02:42:03 -08:00
Neil e0a86386b8 fix(cloud): E3 review F1 github.com installation token forwarded through our egress proxy (not a Vercel transform); F3 unknown SANDBOX_EGRESS_PRESET fails closed to limited 2026-11-13 02:40:32 -08:00
Neil d12ce48fbc Merge remote-tracking branch 'private/cloud/integration' into HEAD 2026-11-13 02:35:21 -08:00
Neil 5b9a783f41 fix(cloud): source-built goldens get the Docker apt pins too (commit-provision-env) 2026-11-13 02:31:44 -08:00
Neil 6ae882e132 fix(cloud): keep the default egress allowlist unchanged for Docker; registries go to #525's limited preset 2026-11-13 02:27:31 -08:00
Neil 41894956d0 feat(cloud): Docker in Orca Cloud workspaces (PARITY-DOCKER)
The golden image ships Ubuntu's docker.io, docker-compose-v2 and docker-buildx (pinned in the
manifest; daemon.json: overlay2, local log driver with caps, mirror.gcr.io registry mirror).
dockerd runs rootful inside the workspace's microVM and is never started at boot: the new
/opt/orca/bin/docker shim (image/vm/docker, first on PATH) starts it on the first command that
needs it (0.3 s in the spike), says once what differs from a laptop (containers stop on sleep;
credential hosts need the proxy CA mounted), then execs plain docker. An image without Docker
says so instead of waiting.

Off switch: SANDBOX_DOCKER=off (Worker var, default on) sends ORCA_DOCKER=off on every boot;
orca-sandbox-start leaves ~/.orca-sandbox/docker.off and the shim refuses with a plain message.
Starts without the flag (retries, repairs) keep the VM's last answer.

Egress: CONTAINER_REGISTRY_HOSTS (mirror.gcr.io, Docker Hub, GHCR) join the default allowlist.
Docs: cloud/docs/sandbox-docker.md (incl. the proxy-CA mount). Golden rotation carries only
this change, with the Worker deployed from the same commit (runbook 1.8a).
2026-11-13 02:25:21 -08:00
Neil 87fd6a95e5 test(cloud): E3 shared-workspace personal key host has no entry under open egress 2026-11-13 02:17:48 -08:00
Neil 2642b3e4d0 feat(cloud): PARITY-FOLLOW follow endpoint: workspace_follows (0055), PUT/DELETE /v1/team/workspaces/:id/follow, followers in workspace views (#654) 2026-11-13 02:17:45 -08:00
Neil 71b8cd4c32 feat(cloud): automatic environments install the repo's lockfile dependencies, softly (PARITY-AUTO-ENV-DEPS)
An automatic environment (no install script) now runs the first repo's JavaScript install from its
lockfile during its build, so creates start with node_modules: pnpm/yarn through corepack (frozen /
immutable), npm ci; package.json's packageManager wins. A failure, a lockfile out of date or the
15-minute cap never fails the build: the log says why, half-installed node_modules are removed, and
the warm clone is snapshotted as before. Lockfiles the image has no tool for (bun, uv, bundler, go,
cargo) are named in the log. Admin environments are unchanged. env/ scripts ship in the Worker:
VM_SCRIPTS_HASH is unchanged (no golden rotation).
2026-11-13 02:14:03 -08:00
Neil 83ccaa4a8b fix(cloud): RS-5 a Claude credential is always labelled "Claude subscription": never this computer's email or the Orca name; old labels read the same 2026-11-13 02:10:24 -08:00
Neil 72223723b0 fix(cloud): RS-3/RS-4 copy per design-squad (device code sign-in off: amber, no guessed setting name; Codex 403 says check it in Orca); RS-3 strip fixture 2026-11-13 02:07:58 -08:00
Neil df47672708 fix(cloud): RS-3 device-code sign-in turned off on ChatGPT gets its own message; RS-4 a signed-out Codex gets a 403 that says to renew in Orca 2026-11-13 02:03:49 -08:00
Neil 2790a51999 chore(cloud): RS-2 migration renumbered to 0056 (0055 belongs to #654) 2026-11-13 01:46:02 -08:00
Neil aa475971e4 fix(cloud): RS-2 any later 401 on a sign-in in question confirms it (no clock comparison) 2026-11-13 01:44:21 -08:00
Neil 49fb8a9d8c fix(cloud): RS-2 a failed auth check never revokes an Orca-account sign-in: it needs a check (shown as expired); a later real 401 revokes, a real success clears it 2026-11-13 01:40:50 -08:00
Neil 5e018065f3 Merge remote-tracking branch 'private/cloud/integration' into cloud/e3-open-egress 2026-11-13 01:29:33 -08:00
Neil 8f9354d0c7 Merge pull request #637 from nwparker/cloud/secrets-effective-shared
feat(cloud): SECRETS-EFFECTIVE-SHARED effective view answers for shared workspaces (stacked on #632)
2026-11-13 01:25:21 -08:00
Neil 7645922c24 Merge pull request #645 from nwparker/cloud/w6-repo-can-install
feat(sandbox-control): canInstall on repo-access (REPO-CAN-INSTALL)
2026-11-13 01:18:27 -08:00
Neil 35520d4da0 Merge remote-tracking branch 'private/cloud/integration' into cloud/w6-repo-can-install-local 2026-11-13 00:43:49 -08:00
Neil 6eaa958196 Merge remote-tracking branch 'private/cloud/integration' into cloud/billing-subscribed-flag 2026-11-13 00:42:57 -08:00
Neil a2f63a0c7d fix(sandbox-control): canInstall never says false for an unreadable org membership
A GitHub App user token generally can't read orgs the App isn't installed on, which is
exactly when canInstall is asked. Read the owner type anonymously first (GET /users/{owner}):
another user's account is false; an org is true only for active admin, false for another
role/state, and null for 403/404/errors/timeouts. Owner-type lookup failures are null.
2026-11-13 00:09:05 -08:00
Neil 1049be50c2 feat(sandbox-control): canInstall on GET /v1/github/repo-access (REPO-CAN-INSTALL)
Present while the Orca GitHub App isn't installed for the repo owner ('missing', or
'public' with no installation). true: the caller's connected GitHub login is the owner,
or their membership in the owner org is active admin. false: member, non-member (403/404),
or another user's account. null: no connected GitHub user token, the token can't be read
or refreshed, or GitHub errored / timed out (3 s). Never fails the answer.

The token comes from memberGitIdentity (decrypt + refresh near expiry).
2026-11-13 00:06:50 -08:00
Neil af0d0802a4 Merge remote-tracking branch 'private/sec5/shared-workspace-secrets' into secrets-effective-shared 2026-11-12 23:51:16 -08:00