Skip to content

feat(sdk): spawnFleetSandbox, /fleet and /attach subpaths, sandbox readonlyPaths - #1787

Open
agent-relay-code[bot] wants to merge 23 commits into
mainfrom
relayflow/relay-software-garden-139d1a46
Open

agent-relay-code[bot] wants to merge 23 commits into
mainfrom
relayflow/relay-software-garden-139d1a46

Conversation

@agent-relay-code

@agent-relay-code agent-relay-code Bot commented Sep 18, 2026 •

Copy link
Copy Markdown
Contributor

Summary

This PR implements the workforce#338 upstream contract (issue #1765), with D4 resolved as option 1: spawnFleetSandbox starts a running agent.

  • @agent-relay/sdk/fleet → spawnFleetSandbox(input). It provisions a Cloud fleet sandbox and starts the agent harness through placement, waiting for confirmation by default. It then requires the engine's dispatch receipt (dispatchedNodeId/handlerNodeId) to prove the agent landed on the ensured sandbox node. If no receipt proves it, or a receipt names another node, the call releases the agent, deletes an owned sandbox, and throws placement_mismatch. Caller hooks (verifySandbox, resolveWorkerCwd, resolveTask) and persistRelaycastTarget may be async; they are awaited inside the cleanup boundary. The launcher client and attach() both use the transport pinned at spawn. It returns a FleetSandboxHandle:
    • fields: sandboxId, nodeId, nodeName, agentName, ownsSandbox, the redacted sandbox, and invocation;
    • attach({ mode }): a live terminal through a private local socket;
    • destroy(): idempotent; releases the agent, then deletes the sandbox only when this call provisioned it.
  • One path. agent-relay fleet spawn --sandbox now calls spawnFleetSandbox, passing its repo inference, cwd and task context as hooks and its dependencies for injection. The CLI and SDK cannot drift. All existing sandbox regression tests pass unchanged.
  • @agent-relay/sdk/attach / @agent-relay/cloud/attach: startFleetNodeAttachProxy with socketPath, finished and close(), plus single-agent discovery from nodeId.
  • readonlyPaths: forwarded in the sandbox ensure request (also via --sandbox-readonly-path). Cloud enforcement: AgentWorkforce/cloud#4303.
  • A caller-declared sandboxId is retained: failure cleanup and destroy() never delete it. A non-empty env is rejected (unsupported_env) rather than silently dropped, because fleet spawn cannot deliver a per-agent environment yet.

Merge of main

Main was merged in. Main's newer attach changes (relay#1829 decoded repaint, terminal-session replacement) and workspace-transport changes (fallbackBaseUrl, DEV Relaycast route) were ported into the modules this PR moved to @agent-relay/cloud. persistWorkspaceRelaycastTarget moved to @agent-relay/cloud/workspace-transport, and the CLI re-exports it.

Consumer note (workforce#338)

  • Import from @agent-relay/sdk/fleet and @agent-relay/sdk/attach, not the @agent-relay/cloud/* paths the draft probes.
  • Prefer handle.attach(): it carries the verified Relaycast target. startFleetNodeAttachProxy({ node: handle.nodeName, agent: handle.agentName }) also works.
  • Pass name for the agent; label, permissions and authMode are not part of the contract.
  • An empty readonlyPaths list is ignored.

Live proof (production)

These runs used this branch's spawnFleetSandbox against production Cloud on agent37 (E2B) sandboxes:

  • Before cloud#4303 deployed (red): readonlyPaths was ignored. The mount token kept fs:write, the read-only file was mode 644, an append exited 0, and the server content changed.
  • After the deploy (green): the mount token's write grant is narrowed to the writable roots. The read-only file is mode 444 and an append is denied. A direct Relayfile API write returns 403. The server content is unchanged, and writes to the normal path still succeed.
  • Details: https://github.com/AgentWorkforce/cloud/pull/4303#issuecomment-6070839084

Local verification (CI does not run on trunk PRs)

Head 5ec40ec9a (trunk merged in). Inherited RELAY_*/AGENT_RELAY* variables were removed for the test runs.

Command Result
npx npm@10.9.4 ci --ignore-scripts (CI's npm) ok
npm run build exit 0
npm run typecheck exit 0
npm run lint 0 errors (103 warnings, all pre-existing)
(cd packages/sdk && npm test) 15 files, 197 passed
(cd packages/cloud && npm test) 24 files (1 skipped), 522 passed, 4 skipped
npx vitest run packages/cli/ --maxWorkers=4 96 files (1 skipped), 1,995 passed, 15 skipped

Validation

  • Red → green: packages/sdk/src/__tests__/fleet-spawn.test.ts (7 tests) failed before spawnFleetSandbox existed. The new CLI test "rejects an agent that lands on another node and tears the sandbox down" fails on the previous CLI and passes now.
  • SDK suite: 197 passed. Cloud package: 521 passed. CLI: 1,993–1,995 passed (15 skipped). All runs had inherited RELAY_* and AGENT_RELAY* variables removed.
  • Two CLI tests are timing-sensitive on a loaded machine and flake intermittently:
    • broker-lifecycle "keeps the claim when the spawn rejects…" (a file this PR doesn't touch);
    • attach-fleet-node "uses the terminal-session request timeout…". Main's own original CLI attach module fails this one in 4 of 5 isolated runs here, so it is pre-existing.
      Both pass on re-run.
  • Every review-bot finding was fixed with a regression test that failed before the fix; the replies on each thread name the test.
  • npm run build and npm run typecheck pass; lint reports 0 errors.
  • Live read-only enforcement proof on E2B: see AgentWorkforce/cloud#4303 and the comment below.

Release: RELEASE NEEDED

v13.2.0 was cut before this PR merged and does not contain it. @agent-relay/sdk gains the ./fleet and ./attach exports and an exact dependency on @agent-relay/cloud (13.2.0). The CHANGELOG is marked [Unreleased - Minor]. workforce#338 needs the next minor release of @agent-relay/sdk and @agent-relay/cloud after this merges.

RelayFlow Proof

  • Change type: feature
  • RelayFlow case: sandbox-readonly-paths

The generated base/head probe checks exact request forwarding and the compiled CLI help. Server-side enforcement is proven live in AgentWorkforce/cloud#4303.

🤖 Generated with Claude Code


Note

Medium Risk
Touches Cloud sandbox provisioning, placement verification, and terminal attach—critical fleet paths—but behavior is heavily tested and failures fail closed with cleanup.

Overview
Introduces spawnFleetSandbox on @agent-relay/sdk/fleet as the single orchestration path for Cloud fleet sandboxes: ensure sandbox, pin Relaycast transport, spawn and confirm the harness, fail closed when the dispatch receipt does not prove the agent landed on the sandbox node, and return a handle with attach() (private stdio socket) and idempotent destroy(). agent-relay fleet spawn --sandbox now delegates to that function so CLI and SDK stay aligned.

Shared Cloud modules are published and re-exported: @agent-relay/cloud/attach (fleet terminal attach; CLI’s large loopback adapter becomes a re-export), @agent-relay/cloud/fleet, and @agent-relay/cloud/workspace-transport. SDK adds matching ./fleet and ./attach entries and depends on @agent-relay/cloud.

Read-only Relayfile mounts: readonlyPaths on ensure (validated /path/** subtrees) plus --sandbox-readonly-path on fleet spawn; requests are forwarded to Cloud for server-side enforcement.

CI/eval builds now compile session, config, and cloud before the SDK; changelog and docs describe the new APIs.

Reviewed by Cursor Bugbot for commit 8a7e568. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitai Bot commented Sep 18, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 0d1daa77-6eea-40bd-ace4-ce348d49a98c

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Ports main's attach changes (relay#1829 decoded repaint, terminal-session
replacement) and workspace-transport changes (fallbackBaseUrl, DEV
Relaycast route) into the moved @agent-relay/cloud/attach and
@agent-relay/cloud/workspace-transport modules. Keeps readonlyPaths in
the async-v1 ensure request.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Session-Id: 5fe0438a-3323-4877-8199-91318ed6457a
@agent-relay/sdk/fleet now exports spawnFleetSandbox (D4 option 1): it
provisions the sandbox, starts the agent harness, confirms the node the
agent landed on, and returns a handle with attach() and an idempotent
destroy(). agent-relay fleet spawn --sandbox drives the same function, so
the CLI and the SDK contract cannot drift.

- An agent that lands on a node other than the ensured sandbox fails closed:
  the agent is released and an owned sandbox is deleted.
- A caller-declared sandboxId is retained by failure cleanup and destroy().
- A non-empty env is rejected rather than silently dropped.
- persistWorkspaceRelaycastTarget moves to @agent-relay/cloud/workspace-transport
  (the CLI re-exports it).
- attach tests send base64 terminal.ready screens, matching relay#1829.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Session-Id: 5fe0438a-3323-4877-8199-91318ed6457a
@khaliqgant khaliqgant changed the title Expose attach subpaths and sandbox readonly requests (spawn contract pending) feat(sdk): spawnFleetSandbox, /fleet and /attach subpaths, sandbox readonlyPaths Oct 8, 2026
@agent-relay/sdk now imports @agent-relay/cloud/{attach,fleet,workspace-transport},
so the offline-evals job and eval:build must build session, config and cloud first.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Session-Id: 5fe0438a-3323-4877-8199-91318ed6457a
@khaliqgant

Copy link
Copy Markdown
Member

@codex review

@khaliqgant
khaliqgant marked this pull request as ready for review October 8, 2026 19:39
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-08T23:50:41.813185Z 5ec40ec Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 7 potential issues.

Devin Review

Comment thread packages/sdk/src/fleet-spawn.ts Outdated
Comment thread packages/cloud/src/attach.ts Outdated
Comment thread packages/cloud/src/attach.ts Outdated
Comment thread packages/sdk/src/fleet-spawn.ts Outdated
Comment thread packages/sdk/src/fleet-spawn.ts Outdated
Comment thread packages/cloud/src/attach.ts
Comment thread packages/cloud/src/fleet-sandbox.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8c980d44a6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/sdk/src/fleet-spawn.ts Outdated
Comment thread packages/sdk/src/fleet-spawn.ts Outdated

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

Comment thread packages/cloud/src/attach.ts
Comment thread packages/sdk/src/fleet-spawn.ts
Comment thread packages/cloud/src/attach.ts
Comment thread packages/cloud/src/attach.ts
Comment thread packages/cloud/src/attach.ts
- spawnFleetSandbox: run resolveWorkerCwd/resolveTask inside the cleanup
  boundary so a throwing hook cannot strand an owned sandbox.
- Landing check uses the dispatch receipt (dispatchedNodeId/handlerNodeId);
  invocation.node/placement.node only echo the requested target.
- spawnMetadata is spread before name/cli/task/worker_cwd so it can never
  replace the fields the handle attaches to and releases.
- A reused node without a sandbox identity is refused instead of returning
  an empty sandboxId.
- attach: buffer output for a not-yet-ready raw socket separately from the
  event-listener replay buffer (reset at each terminal.ready snapshot).
- attach: trust the DEV Relaycast origin so a DEV spawn's handle.attach() works.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Session-Id: 5fe0438a-3323-4877-8199-91318ed6457a
@khaliqgant

Copy link
Copy Markdown
Member

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 31968ec0d8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/sdk/src/fleet-spawn.ts Outdated
…dary

verifySandbox, resolveWorkerCwd and resolveTask may return promises; awaiting
them keeps a late rejection inside the cleanup that deletes an owned sandbox.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Session-Id: 5fe0438a-3323-4877-8199-91318ed6457a
@khaliqgant

Copy link
Copy Markdown
Member

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0cdd92b35d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/sdk/src/fleet-spawn.ts Outdated
Comment thread packages/sdk/src/fleet-spawn.ts Outdated
…ed sandbox type

- spawnFleetSandbox fails closed unless at least one dispatch receipt id
  (dispatchedNodeId/handlerNodeId) proves the ensured sandbox node, and none
  names another node. Verified live: production receipts carry both ids and
  they equal Cloud's sandbox nodeId.
- handle.sandbox is typed RedactedFleetSandboxResult, which omits
  relaycastTarget.relaycastApiKey, instead of the credential-bearing type.
- Test harness stubs persistRelaycastTarget so tests never write a project
  session or credential store; CLI placement doubles return receipts like the
  engine does.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Session-Id: 5fe0438a-3323-4877-8199-91318ed6457a
@khaliqgant

Copy link
Copy Markdown
Member

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 813a003617

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/cloud/src/attach.ts Outdated
With no /ws listener and a ready raw client, output is now retained as a
bounded newest-first ring for a later listener instead of being dropped;
the raw client draining the stream is not backpressure, so the session is
never ended for it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Session-Id: 5fe0438a-3323-4877-8199-91318ed6457a
A request-less connection-fatal terminal.error after ready now closes the
raw stdio socket and settles finished with 1, as broker input sockets are
already closed, so socketPath consumers stop writing to a dead session.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Session-Id: 5fe0438a-3323-4877-8199-91318ed6457a
@khaliqgant

Copy link
Copy Markdown
Member

@codex review

… API)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Session-Id: 5fe0438a-3323-4877-8199-91318ed6457a
@khaliqgant

Copy link
Copy Markdown
Member

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e3c17c78bf

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/cloud/src/attach.ts
Comment thread packages/sdk/src/fleet-spawn.ts Outdated
…t at spawn

- attach: while the terminal transport reconnects, raw input is paused and
  unshifted, then resumed at the next terminal.ready, instead of ending a
  recoverable session. Input overflow on an open transport still ends it.
- spawnFleetSandbox resolves the compatibility (no relaycastTarget) transport
  once at spawn and pins it for attach(), so a later rebind or env change
  cannot redirect attach to another workspace.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Session-Id: 5fe0438a-3323-4877-8199-91318ed6457a
@khaliqgant

Copy link
Copy Markdown
Member

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1ce7c7c121

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/sdk/src/fleet-spawn.ts
Comment thread packages/cloud/src/attach.ts
…fatal error

- spawnFleetSandbox creates the launcher client on the base URL of the
  transport it resolved at spawn (verified target or compatibility transport),
  not the ambient process environment.
- attach refuses later raw socketPath clients once a connection-fatal session
  error has been reported through finished, even when no client was attached.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Session-Id: 5fe0438a-3323-4877-8199-91318ed6457a
@khaliqgant

Copy link
Copy Markdown
Member

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5c155d3c41

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/cloud/src/attach.ts

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

Comment thread packages/cloud/src/attach.ts
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Session-Id: 5fe0438a-3323-4877-8199-91318ed6457a
@khaliqgant

Copy link
Copy Markdown
Member

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. You're on a roll.

Reviewed commit: 5e05ea5ddf

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@khaliqgant

Copy link
Copy Markdown
Member

Live GREEN proof: production after deploy (e88433bd3, contains 047db016)

This run used the relay#1787 spawnFleetSandbox build against production Cloud.

  • Sandbox: agent37 (E2B) node rofproof-node-green-… (node_234088939229945856); claude placement confirmed by dispatch receipt.
  • Request: relayfilePaths: [<proof>/docs/**, <proof>/work/**] and readonlyPaths: [<proof>/docs/**], exactly as in the red run.
  • The agent ran the seeded probe as uid 1000 (node).
mount token scopes: ["fs:read","sync:read","sync:trigger","relayfile:fs:write:<proof>/work/*"]   <- write narrowed
docs/readonly.txt mode 444, content "original"
append to docs/readonly.txt          -> "Permission denied", exit 1      (red: exit 0)
relayfile API PUT docs/api-write.txt -> 403 "missing required scope: fs:write"
write work/proof.txt                 -> exit 0
relayfile API PUT work/api-write.txt -> 202
server docs/readonly.txt: 200 "original\n"     (red: "original\nhacked\n")
server docs/created.txt:  404                  (red: 200 "new\n")
server work/proof.txt:    200 "proof-ok\n"
server work/api-write.txt: 200 "api\n"

Note: the agent could still create a new file locally inside the read-only directory (create_exit=0), because directories are not made read-only. The mount daemon immediately dropped it to -r--r--r-- and never synced it (server 404), so no write reached Relayfile. Teardown: handle.destroy() released the agent and deleted the sandbox.

…ware-garden-139d1a46

Session-Id: 5fe0438a-3323-4877-8199-91318ed6457a
@khaliqgant
khaliqgant changed the base branch from main to trunk October 8, 2026 23:28
@khaliqgant

Copy link
Copy Markdown
Member

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Chef's kiss.

Reviewed commit: 06c32373be

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 06c3237. Configure here.

Comment thread packages/sdk/src/fleet-spawn.ts
startFleetNodeAttachProxy gains pinnedTransport: the given workspaceKey and
baseUrl are used exactly instead of re-resolving the selection, where a
matching persisted project route could replace the credential or reject the
origin. handle.attach() always pins (Relaycast's canonical origin when the
spawn transport had none). The CLI's selector semantics are unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Session-Id: 5fe0438a-3323-4877-8199-91318ed6457a
@khaliqgant

Copy link
Copy Markdown
Member

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Nice work!

Reviewed commit: 5ec40ec9af

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@khaliqgant
khaliqgant changed the base branch from trunk to main October 10, 2026 07:23
@khaliqgant khaliqgant closed this Oct 10, 2026
@khaliqgant khaliqgant reopened this Oct 10, 2026
khaliqgant and others added 2 commits October 10, 2026 00:41
…hangelog and SDK test entries)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
spawnFleetSandbox fails closed (placement_mismatch) unless the engine's
dispatch receipt names the ensured sandbox node. The 1656, 1744 and 1746
probes mocked a spawn with no receipt, so 1656 stopped before reaching the
output-sink failure it relies on. Their subject is sandbox identity and
launcher authority, not placement, so the mocks now report the receipt a real
dispatch to that node returns.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@khaliqgant

Copy link
Copy Markdown
Member

Targeted verification shard 23 failed on 1656-long-running-agent37-sandbox. That was the probe's fixture, not the code. spawnFleetSandbox now fails closed with placement_mismatch when no dispatch receipt names the sandbox node, which is intended, and the probe's mocked spawn returned no receipt. 8a7e568 gives the 1656, 1744 and 1746 probe mocks the receipt a real dispatch returns (dispatchedNodeId = the ensured node). I ran the head arm of all three locally and each reports its expected fixed signature.

🤖 Generated with Claude Code

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants