Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e3b277491e
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bc6d4fa687
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 00d991a02a
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0e07317ac1
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 023ae4e19f
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2006549946
ℹ️ 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".
`main` named the env-server wire vocabulary in #737, and so had this branch. `main`'s spelling wins on every name both sides give the same thing: the request envelope is `CMD`/`SPEC`/`TOKEN`/`ACTION`, the verbs are the `Command` enum, the replies are `OK`/`TASKS`/`ERROR`, and `encode` stays the cast partial. Those names reached only `client.py` and `server.py`, so nothing else on the branch moves. This branch keeps the four families `main` gives no name: the canonical command contract, the action and command fields, the spawn options, and the reply frames. Fourteen files read those, unchanged. `test_remote_env.py` takes both sides whole — `main`'s heartbeat fixture and its two tests, and its parametrized failure test, which also covers a verb the server does not know. `_settle` keeps this branch's body: `main` only reworded the docstring, while the fix here returns the first step's frame, so a caller asking for no settling steps reads a frame rather than `None`. The baseline drops `proxy.py`, whose finding this branch fixes.
Summary
Add Galaxea G0.5-DROID as a vendor for internal, non-commercial evaluation. The server returns every predicted action in one chunk through the standard Positronic API. The server-side codec converts DROID observations, joint targets, and gripper values.
An omitted gripper prediction preserves the previous target. A TODO records an optional local stateful layer for upstream RoboArena's measured-position behavior.
Include a dedicated Docker image, pinned upstream dependencies, checkpoint access instructions, and the model license and notice. Keep Galaxea image builds and publishing opt-in. Use a configurable, finite 600-second heartbeat timeout to accommodate slow RoboLab scene loading while still detecting lost connections.
Publish the Galaxea API on the Docker host's localhost. Document SSH forwarding for remote clients and private Compose-network access for RoboLab, with Docker Engine 28 or newer. Keep private backend handshake fields out of public policy metadata.
Validation
uv run --locked pytest -n 0 positronic/vendors/galaxea/tests positronic/tests/test_vendor_boundary.py positronic/policy/tests/test_session_close.py positronic/offboard/tests/test_server.py. Simulator tests also cover delayed heartbeat replies, lost connections, and unknown commands.Private evaluation data:
s3://inference/tmp/galaxea/g05-droid/robolab/2026-09-10T140031Z-10tasks/.Private comparison inputs, predictions, and results:
s3://inference/tmp/galaxea/g05-droid/upstream-parity/2026-09-10T1909Z/.