From 567360c833b2e98593ee4b8e76358f40f51f9623 Mon Sep 17 00:00:00 2001 From: tactino <18781106300@163.com> Date: Thu, 1 Oct 2026 20:24:29 -0400 Subject: [PATCH 1/2] ci: probe this client against SPEC.md on every change; pin plugrl-protocol main - plugrl-protocol moves from plugrl-protocol#11's branch head (4c877bc) to main (0a76192), the merge of #11. - The test job runs plugrl-conformance --probe --scenario all with this client running probe-v1: once as a version 1 server, once offering reuse-feedback-obs, which the client then uses. Locally both report no violations, with 9 reusing infers in the second, all of rows the server held. This is the checker that found the stale-chunk bug #15 fixed. --- .github/workflows/ci.yml | 16 ++++++++++++++++ pyproject.toml | 2 +- uv.lock | 4 ++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5e243a3..97ca04f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -54,3 +54,19 @@ jobs: - name: Test run: uv run pytest -q + + # plugrl-protocol's probe checker, with this client running the probe + # environment (SPEC.md section 8.1). It works out from each feedback + # what the client did with each action, and drives every scenario: + # basic, a resync, a text frame. Once as a version 1 server, once + # offering reuse-feedback-obs (10.1), which this client then uses. + - name: Probe this client against SPEC.md + run: | + client=".venv/bin/plugrl-run-env-client probe-v1 --server-host 127.0.0.1 --server-port 8000 --num-envs 3 --num-episodes 1000000" + for features in "" "--features reuse-feedback-obs"; do + echo "::group::plugrl-conformance --probe ${features:-(no features)}" + uv run plugrl-conformance --probe --scenario all --port 8000 \ + --steps 12 --horizon 4 --action-dim 3 --action-dtype float64 \ + --timeout 60 $features --client "$client" + echo "::endgroup::" + done diff --git a/pyproject.toml b/pyproject.toml index 7f753b0..b76ad64 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,7 @@ dependencies = [ "websockets>=15.0.1,<16.0.0", "msgpack>=1.1.1,<2.0.0", "tyro>=0.9.31,<0.10.0", - "plugrl-protocol @ git+https://github.com/PlugRL/plugrl-protocol.git@4c877bc9929fadbf49fbce8a5cd7d141bb3566a3", + "plugrl-protocol @ git+https://github.com/PlugRL/plugrl-protocol.git@0a76192cc2456ee1136c5cbabe5206ca75e38f98", # The recorder's PNG snapshots. Its mp4 videos need ffmpeg: the `video` # extra. "imageio>=2.37.2,<3.0.0", diff --git a/uv.lock b/uv.lock index f8225b3..b6f97f2 100644 --- a/uv.lock +++ b/uv.lock @@ -2388,7 +2388,7 @@ requires-dist = [ { name = "mujoco", marker = "extra == 'libero'", specifier = "==2.3.7" }, { name = "mujoco", marker = "extra == 'robomimic'", specifier = "==2.3.7" }, { name = "patchelf", marker = "extra == 'd4rl'", specifier = ">=0.17.2.4,<0.18.0" }, - { name = "plugrl-protocol", git = "https://github.com/PlugRL/plugrl-protocol.git?rev=4c877bc9929fadbf49fbce8a5cd7d141bb3566a3" }, + { name = "plugrl-protocol", git = "https://github.com/PlugRL/plugrl-protocol.git?rev=0a76192cc2456ee1136c5cbabe5206ca75e38f98" }, { name = "pyopengl", marker = "extra == 'robomimic'", specifier = "==3.1.4" }, { name = "robomimic", marker = "extra == 'robomimic'", git = "https://github.com/ARISE-Initiative/robomimic.git?rev=v0.4.0" }, { name = "robosuite", marker = "extra == 'robomimic'", specifier = "==1.4.1" }, @@ -2407,7 +2407,7 @@ dev = [ [[package]] name = "plugrl-protocol" version = "0.1.0" -source = { git = "https://github.com/PlugRL/plugrl-protocol.git?rev=4c877bc9929fadbf49fbce8a5cd7d141bb3566a3#4c877bc9929fadbf49fbce8a5cd7d141bb3566a3" } +source = { git = "https://github.com/PlugRL/plugrl-protocol.git?rev=0a76192cc2456ee1136c5cbabe5206ca75e38f98#0a76192cc2456ee1136c5cbabe5206ca75e38f98" } dependencies = [ { name = "msgpack" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-17-plugrl-env-client-libero' and extra == 'extra-17-plugrl-env-client-mujoco') or (extra == 'extra-17-plugrl-env-client-mujoco' and extra == 'extra-17-plugrl-env-client-robomimic')" }, From 1b2368febfbcf085a1acdd01403805f52051eb7b Mon Sep 17 00:00:00 2001 From: tactino <18781106300@163.com> Date: Fri, 2 Oct 2026 02:52:27 -0400 Subject: [PATCH 2/2] ci: cap the probe step at 10 minutes, and show what was running if it hangs One run hung until the job's 6-hour limit and left no log; it did not reproduce on a Linux workstation (both probe runs pass in seconds). --- .github/workflows/ci.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 97ca04f..d9bd73c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -60,13 +60,18 @@ jobs: # what the client did with each action, and drives every scenario: # basic, a resync, a text frame. Once as a version 1 server, once # offering reuse-feedback-obs (10.1), which this client then uses. + # Each run takes seconds. One run on 2026-10-01 hung until the job's + # 6-hour limit and left no log (not reproduced on a Linux workstation), + # so a hang now fails within minutes and shows what was still running. - name: Probe this client against SPEC.md + timeout-minutes: 10 run: | client=".venv/bin/plugrl-run-env-client probe-v1 --server-host 127.0.0.1 --server-port 8000 --num-envs 3 --num-episodes 1000000" for features in "" "--features reuse-feedback-obs"; do echo "::group::plugrl-conformance --probe ${features:-(no features)}" - uv run plugrl-conformance --probe --scenario all --port 8000 \ + timeout 240 uv run plugrl-conformance --probe --scenario all --port 8000 \ --steps 12 --horizon 4 --action-dim 3 --action-dtype float64 \ - --timeout 60 $features --client "$client" + --timeout 60 $features --client "$client" \ + || { rc=$?; echo "plugrl-conformance exited $rc"; ps -ef | grep -i "[p]lugrl"; exit $rc; } echo "::endgroup::" done