wai-quantum-service: sandboxed workers, IPv6 clients counted by /64, a per-client memory cap #464

Merged
dcharlot merged 1 commit from wai/quantum-service-client-identity into main 2026-10-25 06:35:04 -04:00

2026-10-25

Transaction Science
wai-quantum-service: sandboxed workers, IPv6 clients counted by /64, a per-client memory cap
All checks were successful
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 8s
WAI energy receipts / does this change touch it (pull_request) Successful in 7s
wai-quantum service / does this change touch it (pull_request) Successful in 6s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 2m38s
wai-quantum service / service · linux (pull_request) Successful in 50s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 9m45s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 3m52s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 7m25s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 9m4s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 4m37s
wai-quantum service / service · macos (pull_request) Successful in 42s
The audit of the public job service found three ways past its limits:

- Each IPv6 address counted as its own client. A subscriber is usually
  given a /64 whole, so rotating through it handed out fresh per-client
  limits with every request. A client is now an IPv4 address or an IPv6
  /64; an IPv4 address carried in IPv6 counts as itself.
- Three active jobs from one client could hold the whole 96 GiB budget.
  One client's queued and running jobs may now hold at most one job's
  worth together (WAI_QSVC_CLIENT_GB, default the job size), so any client
  can still run its largest job, and no client holds the rest.
- A worker ran as the service's user with everything that user can reach,
  so a flaw in parsing a submitted circuit would have been code running as
  the account that owns the build host. On macOS each worker now runs under
  sandbox-exec: no network, no file writes, no program but itself. It needs
  none of them, since it reads its job on stdin and writes its result on
  stdout. WAI_QSVC_SANDBOX=0 turns it off for debugging.

GET /v1 and the MCP server publish the new limit, and the README documents
all three.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 04:34:37 -04:00