From 527d63e1a3f9571cbe75c2adda6d12881266c776 Mon Sep 17 00:00:00 2001 From: Note Flow AI Date: Tue, 15 Sep 2026 07:44:07 +0800 Subject: [PATCH 1/2] Inspect final-motion failures and keep released stress packs verifiable --- CHANGELOG.md | 25 +++++++++------ CITATION.cff | 2 +- README.md | 8 +++-- README.zh-CN.md | 6 +++- docs/failure-review.png | Bin 0 -> 76410 bytes docs/stress.md | 16 +++++++--- docs/stress/METHODS.md | 16 +++++++--- docs/stress/index.html | 40 ++++++++++++++++++++++-- docs/stress/manifest.json | 4 +-- pyproject.toml | 2 +- robot_reel/reliability.py | 28 +++++++++++------ robot_reel/resources/stress/METHODS.txt | 16 +++++++--- robot_reel/stress.html | 38 +++++++++++++++++++++- robot_reel/stress_site.py | 16 +++++----- tests/replay.test.cjs | 27 ++++++++++++++++ tests/test_reliability.py | 17 ++++++++++ tests/test_stress.py | 18 +++++++++++ 17 files changed, 229 insertions(+), 50 deletions(-) create mode 100644 docs/failure-review.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f5340a..8ebdbaf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,17 +1,14 @@ # Changelog -## 0.11.0 — 2026-09-14 - -- Add Scene Lab: CC0 captured geometry, 25,000 mesh-derived surface Gaussians, separate collision heightfield, two actual L40S OptiX renders, bounded edit recipes and independent native Blender readback. -- Add the official LIBERO-Plus adapter and source-linked SmolVLA replay: paired baseline, camera viewpoint ID 609 and lighting ID 2124. Outcomes are success at 77 actions, step limit at 220, and success at 87. This is a diagnostic subset, not a benchmark score. -- Add an OpenEnv 0.4.2 verifiable creation environment. Numeric actions build and independently reopen a native scene; completion claims do not earn reward. -- Add a pinned Cosmos Policy recorder/access preflight. Actual Cosmos inference remains unavailable until the account receives access to its gated NVIDIA dependency. No prediction results are claimed. -- Link all 27 cross-project skill trials from the homepage and Hugging Face Space; improve mobile layouts, video seeking and lazy Gaussian loading. +## Unreleased +## 0.12.0 — 2026-09-14 -## Unreleased +- Inspect failure classifications in Stress Lab and jump to each recorded final motion window without dropping experiment totals. Show measured travel in millimetres and keep causal limits explicit. +- Accept original released stress packs that predate `reliability.json`; new packs still seal and independently recompute it. +- Reject identical-input claims when a repeat lacks consumed frames or both records lack camera hashes. -- Say what a failure was, not only that it happened: split step-limit failures by whether the arm was still moving at the cut-off. All 14 recorded failures were still in motion, so the 160-action budget is binding on the reported success rate rather than the policy having given up. +- Say what a failure was, not only that it happened: split step-limit failures by whether the arm was still moving at the cut-off. All 14 recorded failures were still in motion, under the stated motion threshold; continued movement does not establish progress or success with a larger action budget. - Measure whether a repeat of the identical plan agrees, on the same L40S, at every level: 30/30 outcomes, action counts, bitwise physics states and actions, and 360/360 renders on the frames a policy call consumed. Report renders on consumed frames apart from recorded-only frames, because only the former can change an outcome. One recorded-only frame of 3,195 differed and did not propagate. - Seal the failure taxonomy inside the experiment pack and recompute it on verification, rather than only checking its hash. Keep the reproducibility aggregate beside the pack, since it is a property of two collections and belongs to neither. @@ -20,6 +17,16 @@ Preserve existing public releases and drafts; document recovery using the original tested CI artifacts. Record the completed 0.10.0 publication. +## 0.11.0 — 2026-09-14 + +- Add Scene Lab: CC0 captured geometry, 25,000 mesh-derived surface Gaussians, separate collision heightfield, two actual L40S OptiX renders, bounded edit recipes and independent native Blender readback. +- Add the official LIBERO-Plus adapter and source-linked SmolVLA replay: paired baseline, camera viewpoint ID 609 and lighting ID 2124. Outcomes are success at 77 actions, step limit at 220, and success at 87. This is a diagnostic subset, not a benchmark score. +- Add an OpenEnv 0.4.2 verifiable creation environment. Numeric actions build and independently reopen a native scene; completion claims do not earn reward. +- Add a pinned Cosmos Policy recorder/access preflight. Actual Cosmos inference remains unavailable until the account receives access to its gated NVIDIA dependency. No prediction results are claimed. +- Link all 27 cross-project skill trials from the homepage and Hugging Face Space; improve mobile layouts, video seeking and lazy Gaussian loading. + + + ## 0.10.0 — One launch, six recorded futures - Add Solver Lab: six independent L40S/CUDA ballistic flights from Genesis 1.4.1 diff --git a/CITATION.cff b/CITATION.cff index 9b8fba2..e12a617 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -7,7 +7,7 @@ authors: repository-code: "https://github.com/noteflowai/robot-reel" url: "https://noteflowai.github.io/robot-reel/" license: Apache-2.0 -version: 0.11.0 +version: 0.12.0 date-released: 2026-09-14 abstract: "Robot Reel is a physical-AI replay lab that records MuJoCo and Newton physics and SmolVLA/LeRobot rollouts, verifies the recorded traces, and directs them into inspectable browser replays and editable Blender/OpenUSD films through a CLI and an MCP agent director." keywords: diff --git a/README.md b/README.md index 7525d25..b7affa6 100644 --- a/README.md +++ b/README.md @@ -190,12 +190,16 @@ report for independent verification with the 0.8.0+ installed CLI. [Compare paired outcomes](https://noteflowai.github.io/robot-reel/stress/#outcomes) · [Report method and CLI](docs/stress.md#compare-paired-outcomes). +**[Inspect every failure](https://noteflowai.github.io/robot-reel/stress/#failures).** Filter the recorded classifications and jump to each final motion window, with measured end-effector travel. + +[![Recorded failure review: classified episodes, complete denominators and a jump to the final motion window.](docs/failure-review.png)](https://noteflowai.github.io/robot-reel/stress/#failures) + **What the failures were.** A success rate does not say. All 14 failures here end at the step limit, and that covers a policy that froze and one still reaching when the budget expired. Measured: **every one was still in motion at the cut-off**, 44.8 mm to 138.6 mm of end-effector travel over the final tenth of its episode, -against a 1 mm stall threshold. So 160 actions is binding on the reported success -rate, not a policy that gave up. +against a 1 mm stall threshold. The recorded budget expired while the arm was moving. This does not show +that extra actions would complete the task or that the motion made progress. **Whether a repeat agrees.** The paired groups blame a condition for an outcome flip, which only holds if the same seed and condition answer the same twice. The diff --git a/README.zh-CN.md b/README.zh-CN.md index 70cac23..63c5881 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -174,10 +174,14 @@ Markdown,重新导入可恢复原始样本位置,也可用命令行与完整 记录明确标注末帧停留,保留完整实验统计,个人备注与录制事实分开。 [复盘流程与核验命令](docs/stress.md#share-a-moment-for-review)。 +**[逐次检查失败](https://noteflowai.github.io/robot-reel/stress/#failures)。** 按记录类别筛选,直接跳到每个回合的末段运动窗口,并查看以毫米表示的末端移动距离。 + +[![真实失败分类与末段运动复盘界面](docs/failure-review.png)](https://noteflowai.github.io/robot-reel/stress/#failures) + **失败究竟是什么。** 成功率不回答这个问题。这里 14 次失败全部止于步数上限,而这个标签 同时涵盖「策略停住了」和「预算耗尽时仍在伸手」两种情形。实测结果是:**每一次失败在截断时 都仍在运动**,末端在最后十分之一个回合内移动 44.8 mm 到 138.6 mm,而停滞阈值为 1 mm。 -所以 160 步的预算才是所报成功率的约束,而不是策略放弃了。 +记录预算耗尽时机械臂仍在运动,但这不能证明增加步数会成功,也不能证明该运动代表任务进展。 **重跑是否给出同样的答案。** 配对分组把结果翻转归因于条件,这只在同一种子与条件两次给出 同样答案时才成立。整个计划在同一块 L40S 上重跑了一遍:**结果、动作步数、逐位物理状态与 diff --git a/docs/failure-review.png b/docs/failure-review.png new file mode 100644 index 0000000000000000000000000000000000000000..5a0f89a2b2c644cde187327f04b39e4c10a7cd74 GIT binary patch literal 76410 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 the view.
Check the policy.

“Not completed” includes step limits and terminated runs; execution errors remain in the attempt ledger. Groups use the complete set of paired seeds. These are observed outcomes on one task, not a significance test or a general robustness score.

Check an exported report independently

With Robot Reel 0.8.0+ installed: robot-reel stress stress-lab --paired-report paired-outcomes.json. Replace stress-lab with your extracted experiment folder. The command checks the full experiment before comparing every group and count. From a source checkout, use python3 -m robot_reel.cli stress docs/stress --paired-report paired-outcomes.json.

+
+

What happened at the cut-off?

+

+
+

+ +

Motion is measured over the final tenth of recorded samples, with a 1 mm stall threshold. It does not establish task progress, the cause of failure, or success with a larger action budget. Filtering keeps the experiment totals and attempt ledger intact.

+

Take the evidence with you.

Every camera, applied action, inference timing, initial state and result. The offline folder embeds its telemetry and needs no service.

- +

MCAP contains JSON observation and inference channels, with episode-relative nanosecond timestamps. Videos are separate MP4s. No model weights are bundled.

Inspect every recorded result and source file
TrialOutcomeActionsEpisodePolicy callsEvidence
Attempt history
Trial / attemptStatusStarted UTCResult or error
@@ -99,6 +107,34 @@

Turn a moment into a review.

let pair=[],master=null,distances=[],peakFrame=0; let outcomeFilter='all',outcomeCondition=condition==='reference'?'dim':condition; function element(tag,text,className){const el=document.createElement(tag);el.textContent=text;if(className)el.className=className;return el;} +const failureLabels={success:'Success',step_limit_in_motion:'Step limit · still moving',step_limit_stalled:'Step limit · below motion threshold',terminated:'Terminated'}; +const failureRuns=new Map(data.traces.map(t=>{ + const points=t.frames.map(f=>f.state.slice(0,3)),start=points.length-Math.max(2,Math.floor(points.length/10)); + let travel=0;for(let i=start+1;iv-points[i-1][j])); + const kind=t.result.outcome==='step_limit'?(travel<.001?'step_limit_stalled':'step_limit_in_motion'):t.result.outcome; + return [t.stress.trial_id,{kind,travel,start}]; +})); +for(const kind of ['all',...Object.keys(failureLabels)]){ + const count=kind==='all'?failureRuns.size:[...failureRuns.values()].filter(r=>r.kind===kind).length; + const option=element('option',`${kind==='all'?'All completed trials':failureLabels[kind]} · ${count}`);option.value=kind;$('failure-kind').append(option); +} +$('failure-kind').value=[...failureRuns.values()].some(r=>r.kind==='step_limit_in_motion')?'step_limit_in_motion':'all'; +$('failure-summary').textContent=`${data.summary.completed_trials} recorded trials / ${data.summary.planned_trials} planned. Select a trial to inspect its final motion window alongside the paired reference.`; +function renderFailures(){ + const kind=$('failure-kind').value,box=$('failure-trials');box.replaceChildren(); + for(const t of data.traces){ + const run=failureRuns.get(t.stress.trial_id);if(kind!=='all'&&run.kind!==kind)continue; + const button=element('button',`Seed ${t.seed} · ${label(t.stress.condition)}`);button.type='button'; + button.dataset.trial=t.stress.trial_id;button.setAttribute('aria-pressed',String(seed===t.seed&&condition===t.stress.condition)); + button.onclick=()=>{seed=t.seed;condition=t.stress.condition;frame=run.start;loadPair();document.querySelector('.workbench').scrollIntoView({block:'start'});$('play').focus({preventScroll:true});}; + box.append(button); + } + $('failure-count').textContent=`${box.childElementCount} of ${failureRuns.size} recorded trials in this view.${box.childElementCount?'':' No recorded trial matches this classification.'}`; + const selected=get(seed,condition),run=failureRuns.get(selected.stress.trial_id); + $('failure-detail').textContent=`${selected.stress.trial_id} · ${failureLabels[run.kind]||run.kind}. ${(run.travel*1000).toFixed(1)} mm of end-effector travel across the last ${selected.frames.length-run.start} samples (${run.start}–${selected.frames.length-1}).`; +} +$('failure-kind').onchange=renderFailures; +$('failure-tail').onclick=()=>{selectFrame(failureRuns.get(get(seed,condition).stress.trial_id).start,'Inspecting the recorded final motion window.');document.querySelector('.workbench').scrollIntoView({block:'start'});$('play').focus({preventScroll:true});}; const outcomeLabels={both_success:'Success → success',lost_success:'Success → not completed',gained_success:'Not completed → success',neither_success:'Neither completed'}; function pairedOutcomes(){ return { @@ -241,7 +277,7 @@

Turn a moment into a review.

const curve=distances.map((v,n)=>`${n?'L':'M'}${n/(distances.length-1)*720},${70-v/high*66}`).join(' '); $('distance-line').setAttribute('d',curve);$('distance-area').setAttribute('d',curve+' L720,72 L0,72 Z'); $('distance-caption').textContent=`Peak ${(distances[peakFrame]*100).toFixed(1)} cm at sample ${peakFrame} · ${distances.length} shared observations. Measured trajectory difference, not a task-error or accuracy score.`; - master=videos[end(pair[0])>=end(pair[1])?0:1];render();renderOutcomeLens(); + master=videos[end(pair[0])>=end(pair[1])?0:1];render();renderOutcomeLens();renderFailures(); } function selectFrame(n,message){pause(message);frame=n;render();} function tick(){ diff --git a/docs/stress/manifest.json b/docs/stress/manifest.json index 7abe1a4..475b767 100644 --- a/docs/stress/manifest.json +++ b/docs/stress/manifest.json @@ -2,11 +2,11 @@ "schema": "robot-reel-stress-1", "files": { "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", - "METHODS.md": "af88bc74853f90dd3aa877f9043960c0076ed78efb88a030fba626f1d7d9aa93", + "METHODS.md": "77e93913aca3528db0602a890ee1e9f68150927862d35085127de39c3846ad4a", "NOTICE.txt": "ea626872970c7acaf4faafb6fa4a904d2f7b885e376c9cf6ba249b71c3e5ad3e", "attempts.json": "ae3fc2cc21f3eb0808836eacb39ed26fdeedbb7ae36141927f2efde68676f938", "experiment.json": "d3b2292a818db5298e2b42562170ba8c263bb44c25f6265ad65473cd39b77bf0", - "index.html": "33168032866701b9253f92bef7f409071cb3647f8f8d39e3f2f34297d3f220c7", + "index.html": "6aaa7addeb1f501f2cf463f3fcfedbff207fdc400a2ff59ed735d773d4c3a3fd", "media-checks.json": "5019ec2eaf03244ea91cb1357d611cc364b80da0e13ae43401b6e83fd2521db0", "reliability.json": "4b1a189366d5e954762b0d8f2f89b7b0c36671474c52c8d0cfeecbc65cbdbc41", "results.csv": "fa7799110bb38edfb74dbbc5f6393574615d1d56e2a273873a3d6208af6a4126", diff --git a/pyproject.toml b/pyproject.toml index 11df7b5..be973e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "robot-reel" -version = "0.11.0" +version = "0.12.0" description = "Inspect real VLA rollouts and direct recorded physics into editable Blender/OpenUSD films." readme = "README.md" requires-python = ">=3.12" diff --git a/robot_reel/reliability.py b/robot_reel/reliability.py index c4e4f54..c8fee78 100644 --- a/robot_reel/reliability.py +++ b/robot_reel/reliability.py @@ -2,8 +2,8 @@ A success rate answers neither question. Fourteen of thirty recorded trials end at the step limit, and that label alone does not distinguish a policy that froze -from one that was still reaching when the budget ran out. The two call for -opposite responses: raise the step limit, or fix the policy. +from one that was still moving when the budget ran out. This describes the +recording; selecting an effective intervention requires a controlled experiment. Reproducibility is the other half. The paired design attributes an outcome flip to a condition, which only holds if the same seed and condition give the same @@ -20,10 +20,9 @@ SCHEMA = "robot-reel-reliability-1" -# A tenth of a millimetre of end-effector travel over the final tenth of an -# episode is below anything a moving arm produces, so a run under it was not -# merely slow. The threshold is stated rather than fitted: the smallest tail -# motion in the recorded collection is 24.7 mm, three orders of magnitude above. +# One millimetre of end-effector travel over the final tenth of recorded frames. +# This descriptive threshold does not distinguish slow progress from a stall, +# nor establish that a moving arm would succeed with a larger action budget. STALL_METRES = 1e-3 @@ -44,6 +43,8 @@ def classify_run(trace, *, stall_metres=STALL_METRES): early termination is a different event from exhausting the budget. """ points = _positions(trace) + if not math.isfinite(stall_metres) or stall_metres <= 0: + raise ValueError("stall_metres must be finite and positive") if len(points) < 2: raise ValueError("A trial needs at least two recorded frames") outcome = trace["result"]["outcome"] @@ -113,20 +114,29 @@ def compare_run(reference, repeat, action_steps): action_steps = int(action_steps) if action_steps < 1: raise ValueError("action_steps must be positive") - consumed = _input_frames(a, action_steps) | _input_frames(b, action_steps) + inputs_a, inputs_b = _input_frames(a, action_steps), _input_frames(b, action_steps) + consumed = inputs_a | inputs_b shared = range(min(len(a), len(b))) render = {"input_frames": [0, 0], "recorded_frames": [0, 0]} for index in shared: key = "input_frames" if index in consumed else "recorded_frames" render[key][1] += 1 - render[key][0] += a[index].get("raw_camera_sha256") == b[index].get("raw_camera_sha256") + hashes_a, hashes_b = a[index].get("raw_camera_sha256"), b[index].get("raw_camera_sha256") + complete = all( + isinstance(hashes, dict) + and all(isinstance(hashes.get(camera), str) and hashes[camera] + for camera in ("main", "wrist")) + for hashes in (hashes_a, hashes_b) + ) + render[key][0] += complete and hashes_a == hashes_b return { "same_outcome": reference["result"]["outcome"] == repeat["result"]["outcome"], "same_action_count": reference["result"]["actions"] == repeat["result"]["actions"], "same_frame_count": len(a) == len(b), "identical_states": [frame["state"] for frame in a] == [frame["state"] for frame in b], "identical_actions": [frame.get("action") for frame in a] == [frame.get("action") for frame in b], - "identical_input_renders": render["input_frames"][0] == render["input_frames"][1], + "identical_input_renders": bool(consumed) and inputs_a == inputs_b + and render["input_frames"][0] == len(consumed), "input_renders": {"identical": render["input_frames"][0], "compared": render["input_frames"][1]}, "recorded_renders": {"identical": render["recorded_frames"][0], "compared": render["recorded_frames"][1]}, } diff --git a/robot_reel/resources/stress/METHODS.txt b/robot_reel/resources/stress/METHODS.txt index d99c45c..e8f44e8 100644 --- a/robot_reel/resources/stress/METHODS.txt +++ b/robot_reel/resources/stress/METHODS.txt @@ -51,8 +51,8 @@ UI filter never removes pairs from the report. “Not completed” combines A success rate does not say what a failure was. All fourteen failures here end at the step limit, and that label covers two different things: a policy that stopped, -and a policy still reaching when the budget expired. They call for opposite -responses. +and an arm still moving when the budget expired. This measurement describes +the recorded motion; it does not identify which intervention would fix the task. ```bash python3 -m robot_reel.cli stress docs/stress --reliability @@ -61,9 +61,9 @@ python3 -m robot_reel.cli stress docs/stress --reliability Measured over the published collection, **every one of the fourteen failures was still in motion at the cut-off**; none had stalled. End-effector travel over the final tenth of each episode ranges from 44.8 mm to 138.6 mm, against a stall -threshold of 1 mm chosen to sit far below anything a moving arm produces. So the -step limit of 160 actions is binding on the reported success rate rather than the -policy having given up, and raising it would be expected to change that rate. +threshold of 1 mm. The 160-action budget expired while motion continued. +That does not establish progress toward the goal or that a larger budget would +change the success rate; either conclusion would require a new controlled run. Failures also wander further to end up no further along: median path-to- displacement ratio 3.17 against 1.92 for successes. The ranges overlap, so that @@ -383,3 +383,9 @@ the ordinary imageio-ffmpeg/Pillow dependencies. Neither check reruns a policy. See the included media notice for third-party attribution. Model weights and upstream simulation meshes are not redistributed in the public experiment. + +## Inspect final motion and retain legacy packs + +Stress Lab now groups the recorded outcomes and lets a reviewer jump to the final tenth of samples of any selected episode. It displays the exact sample window and end-effector path length, with a stated 1 mm threshold. Movement alone cannot establish progress or the effect of a larger action budget. The full matrix, denominators and attempt ledger remain available. + +The verifier accepts the original exact inventory of releases through v0.11.0, which predated `reliability.json`. New exports include the derived taxonomy and independently recompute it. A missing consumed frame, or absent camera hashes in both runs, cannot count as identical policy input. diff --git a/robot_reel/stress.html b/robot_reel/stress.html index 616ce3e..b2bc2ec 100644 --- a/robot_reel/stress.html +++ b/robot_reel/stress.html @@ -38,6 +38,14 @@

Change the view.
Check the policy.

“Not completed” includes step limits and terminated runs; execution errors remain in the attempt ledger. Groups use the complete set of paired seeds. These are observed outcomes on one task, not a significance test or a general robustness score.

Check an exported report independently

With Robot Reel 0.8.0+ installed: robot-reel stress stress-lab --paired-report paired-outcomes.json. Replace stress-lab with your extracted experiment folder. The command checks the full experiment before comparing every group and count. From a source checkout, use python3 -m robot_reel.cli stress docs/stress --paired-report paired-outcomes.json.

+
+

What happened at the cut-off?

+

+
+

+ +

Motion is measured over the final tenth of recorded samples, with a 1 mm stall threshold. It does not establish task progress, the cause of failure, or success with a larger action budget. Filtering keeps the experiment totals and attempt ledger intact.

+