# LeRobot Diffusion Policy PushT closed-loop evaluation

LeRobot Diffusion Policy PushT closed-loop evaluation. Source-pinned, bounded simulation with explicit goal checks; no physical execution.

Record version: `1.0.0` · Hub commit: `ede75c00118e9808e5099da43c26f4619cc3bc37`

## Executable interface

```json
{
  "version": "1",
  "kind": "task",
  "abstraction_level": 2,
  "execution_domain": "simulation",
  "language": "python",
  "input_transport": "json_file_or_inline",
  "output_transport": "json_stdout",
  "output_selector": "outputs",
  "conventions": {
    "linear_unit": "m",
    "angular_unit": "rad",
    "time_unit": "s",
    "coordinate_frame": "PushT native 2D pixel arena; no exposed metric pose",
    "joint_order": "not_used",
    "quaternion_order": "not_used"
  },
  "input_schema": {
    "type": "object",
    "required": [
      "seed"
    ],
    "properties": {
      "seed": {
        "type": "integer",
        "minimum": 0,
        "maximum": 10000
      }
    },
    "additionalProperties": false
  },
  "output_schema": {
    "type": "object",
    "required": [
      "maximum_coverage",
      "steps",
      "environment_success",
      "cuda_inference"
    ],
    "properties": {
      "maximum_coverage": {
        "type": "number",
        "minimum": 0,
        "maximum": 1
      },
      "steps": {
        "type": "integer",
        "minimum": 1,
        "maximum": 300
      },
      "environment_success": {
        "type": "boolean"
      },
      "cuda_inference": {
        "type": "boolean"
      }
    },
    "additionalProperties": false
  },
  "preconditions": [
    "Use the exact recorded source, Linux Python 3.10 environment and pinned direct packages.",
    "No physical robot, network actuation or external robot credentials.",
    "Policy internal pixel coordinates are not relabeled as metres. The public JSON exposes only seed, dimensionless coverage and steps. CUDA GPU and public pinned checkpoint required."
  ],
  "postconditions": [
    "All reported checks must be true and all output numbers finite.",
    "Success covers the declared goal and frozen cases, not arbitrary tasks or physical hardware."
  ],
  "failure_codes": [
    "invalid_input_or_environment",
    "execution_failed",
    "task_failed"
  ],
  "composition": {
    "depends_on": [],
    "automatic_frame_conversion": false,
    "automatic_hardware_execution": false
  }
}
```



## Exact environment

| Runtime | Robot | Controller | Observation | OS | Python | Evidence |
| --- | --- | --- | --- | --- | --- | --- |
| lerobot 0.3.3 | pusht-2d-pusher | diffusion_policy | rgb_pixels_and_pusher_state | linux x86_64 | >=3.10,<3.11 | import_verified |

96x96 RGB observations and 2D pusher state, consumed by the original frozen checkpoint; no object-state oracle or retraining.

Compatibility status: **source_reviewed**. An environment match does not establish task completion. Runtime verification: **import_verified**.

## Source and license

- Repository: https://github.com/huggingface/lerobot
- Source commit: `b883328e6c95681ca90a18b102e4ae5e1f91e2bf` (no tag)
- Original authors: Original lerobot contributors (preserve pinned LICENSE)
- License: [Apache-2.0](https://github.com/huggingface/lerobot/blob/b883328e6c95681ca90a18b102e4ae5e1f91e2bf/LICENSE)
- Source archive SHA256: `cf58261f6dbf614168337530f78f761929fb2d4d1b91e90f4f5f17209138aa40`
- Upstream files: `LICENSE`, `README.md`, `pyproject.toml`, `src/lerobot/__init__.py`, `src/lerobot/__version__.py`, `src/lerobot/calibrate.py`, `src/lerobot/cameras/__init__.py`, `src/lerobot/cameras/camera.py`, `src/lerobot/cameras/configs.py`, `src/lerobot/cameras/opencv/__init__.py`, `src/lerobot/cameras/opencv/camera_opencv.py`, `src/lerobot/cameras/opencv/configuration_opencv.py`, `src/lerobot/cameras/realsense/__init__.py`, `src/lerobot/cameras/realsense/camera_realsense.py`, `src/lerobot/cameras/realsense/configuration_realsense.py`, `src/lerobot/cameras/utils.py`, `src/lerobot/configs/default.py`, `src/lerobot/configs/eval.py`, `src/lerobot/configs/parser.py`, `src/lerobot/configs/policies.py`, `src/lerobot/configs/train.py`, `src/lerobot/configs/types.py`, `src/lerobot/constants.py`, `src/lerobot/datasets/backward_compatibility.py`, `src/lerobot/datasets/card_template.md`, `src/lerobot/datasets/compute_stats.py`, `src/lerobot/datasets/factory.py`, `src/lerobot/datasets/image_writer.py`, `src/lerobot/datasets/lerobot_dataset.py`, `src/lerobot/datasets/online_buffer.py`, `src/lerobot/datasets/push_dataset_to_hub/utils.py`, `src/lerobot/datasets/sampler.py`, `src/lerobot/datasets/transforms.py`, `src/lerobot/datasets/utils.py`, `src/lerobot/datasets/v2/batch_convert_dataset_v1_to_v2.py`, `src/lerobot/datasets/v2/convert_dataset_v1_to_v2.py`, `src/lerobot/datasets/v21/_remove_language_instruction.py`, `src/lerobot/datasets/v21/batch_convert_dataset_v20_to_v21.py`, `src/lerobot/datasets/v21/convert_dataset_v20_to_v21.py`, `src/lerobot/datasets/v21/convert_stats.py`, `src/lerobot/datasets/video_utils.py`, `src/lerobot/envs/__init__.py`, `src/lerobot/envs/configs.py`, `src/lerobot/envs/factory.py`, `src/lerobot/envs/utils.py`, `src/lerobot/errors.py`, `src/lerobot/find_cameras.py`, `src/lerobot/find_port.py`, `src/lerobot/model/kinematics.py`, `src/lerobot/motors/__init__.py`, `src/lerobot/motors/calibration_gui.py`, `src/lerobot/motors/dynamixel/__init__.py`, `src/lerobot/motors/dynamixel/dynamixel.py`, `src/lerobot/motors/dynamixel/tables.py`, `src/lerobot/motors/feetech/__init__.py`, `src/lerobot/motors/feetech/feetech.py`, `src/lerobot/motors/feetech/tables.py`, `src/lerobot/motors/motors_bus.py`, `src/lerobot/optim/__init__.py`, `src/lerobot/optim/factory.py`, `src/lerobot/optim/optimizers.py`, `src/lerobot/optim/schedulers.py`, `src/lerobot/policies/__init__.py`, `src/lerobot/policies/act/configuration_act.py`, `src/lerobot/policies/act/modeling_act.py`, `src/lerobot/policies/diffusion/configuration_diffusion.py`, `src/lerobot/policies/diffusion/modeling_diffusion.py`, `src/lerobot/policies/factory.py`, `src/lerobot/policies/normalize.py`, `src/lerobot/policies/pi0/configuration_pi0.py`, `src/lerobot/policies/pi0/conversion_scripts/benchmark.py`, `src/lerobot/policies/pi0/conversion_scripts/compare_with_jax.py`, `src/lerobot/policies/pi0/conversion_scripts/conversion_utils.py`, `src/lerobot/policies/pi0/conversion_scripts/convert_pi0_to_hf_lerobot.py`, `src/lerobot/policies/pi0/flex_attention.py`, `src/lerobot/policies/pi0/modeling_pi0.py`, `src/lerobot/policies/pi0/paligemma_with_expert.py`, `src/lerobot/policies/pi0fast/configuration_pi0fast.py`, `src/lerobot/policies/pi0fast/modeling_pi0fast.py`, `src/lerobot/policies/pretrained.py`, `src/lerobot/policies/sac/configuration_sac.py`, `src/lerobot/policies/sac/modeling_sac.py`, `src/lerobot/policies/sac/reward_model/configuration_classifier.py`, `src/lerobot/policies/sac/reward_model/modeling_classifier.py`, `src/lerobot/policies/smolvla/configuration_smolvla.py`, `src/lerobot/policies/smolvla/modeling_smolvla.py`, `src/lerobot/policies/smolvla/smolvlm_with_expert.py`, `src/lerobot/policies/tdmpc/configuration_tdmpc.py`, `src/lerobot/policies/tdmpc/modeling_tdmpc.py`, `src/lerobot/policies/utils.py`, `src/lerobot/policies/vqbet/configuration_vqbet.py`, `src/lerobot/policies/vqbet/modeling_vqbet.py`, `src/lerobot/policies/vqbet/vqbet_utils.py`, `src/lerobot/processor/__init__.py`, `src/lerobot/processor/device_processor.py`, `src/lerobot/processor/normalize_processor.py`, `src/lerobot/processor/observation_processor.py`, `src/lerobot/processor/pipeline.py`, `src/lerobot/processor/rename_processor.py`, `src/lerobot/record.py`, `src/lerobot/replay.py`, `src/lerobot/robots/__init__.py`, `src/lerobot/robots/bi_so100_follower/__init__.py`, `src/lerobot/robots/bi_so100_follower/bi_so100_follower.py`, `src/lerobot/robots/bi_so100_follower/config_bi_so100_follower.py`, `src/lerobot/robots/config.py`, `src/lerobot/robots/hope_jr/__init__.py`, `src/lerobot/robots/hope_jr/config_hope_jr.py`, `src/lerobot/robots/hope_jr/hope_jr_arm.py`, `src/lerobot/robots/hope_jr/hope_jr_hand.py`, `src/lerobot/robots/koch_follower/__init__.py`, `src/lerobot/robots/koch_follower/config_koch_follower.py`, `src/lerobot/robots/koch_follower/koch_follower.py`, `src/lerobot/robots/lekiwi/__init__.py`, `src/lerobot/robots/lekiwi/config_lekiwi.py`, `src/lerobot/robots/lekiwi/lekiwi.py`, `src/lerobot/robots/lekiwi/lekiwi_client.py`, `src/lerobot/robots/lekiwi/lekiwi_host.py`, `src/lerobot/robots/robot.py`, `src/lerobot/robots/so100_follower/__init__.py`, `src/lerobot/robots/so100_follower/config_so100_follower.py`, `src/lerobot/robots/so100_follower/so100_follower.py`, `src/lerobot/robots/so100_follower/so100_follower_end_effector.py`, `src/lerobot/robots/so101_follower/__init__.py`, `src/lerobot/robots/so101_follower/config_so101_follower.py`, `src/lerobot/robots/so101_follower/so101_follower.py`, `src/lerobot/robots/stretch3/README.md`, `src/lerobot/robots/stretch3/__init__.py`, `src/lerobot/robots/stretch3/configuration_stretch3.py`, `src/lerobot/robots/stretch3/robot_stretch3.py`, `src/lerobot/robots/utils.py`, `src/lerobot/robots/viperx/README.md`, `src/lerobot/robots/viperx/__init__.py`, `src/lerobot/robots/viperx/config_viperx.py`, `src/lerobot/robots/viperx/viperx.py`, `src/lerobot/scripts/display_sys_info.py`, `src/lerobot/scripts/eval.py`, `src/lerobot/scripts/find_joint_limits.py`, `src/lerobot/scripts/rl/actor.py`, `src/lerobot/scripts/rl/crop_dataset_roi.py`, `src/lerobot/scripts/rl/eval_policy.py`, `src/lerobot/scripts/rl/gym_manipulator.py`, `src/lerobot/scripts/rl/learner.py`, `src/lerobot/scripts/rl/learner_service.py`, `src/lerobot/scripts/server/configs.py`, `src/lerobot/scripts/server/constants.py`, `src/lerobot/scripts/server/helpers.py`, `src/lerobot/scripts/server/policy_server.py`, `src/lerobot/scripts/server/robot_client.py`, `src/lerobot/scripts/train.py`, `src/lerobot/scripts/visualize_dataset.py`, `src/lerobot/scripts/visualize_dataset_html.py`, `src/lerobot/scripts/visualize_image_transforms.py`, `src/lerobot/setup_motors.py`, `src/lerobot/teleoperate.py`, `src/lerobot/teleoperators/__init__.py`, `src/lerobot/teleoperators/bi_so100_leader/__init__.py`, `src/lerobot/teleoperators/bi_so100_leader/bi_so100_leader.py`, `src/lerobot/teleoperators/bi_so100_leader/config_bi_so100_leader.py`, `src/lerobot/teleoperators/config.py`, `src/lerobot/teleoperators/gamepad/__init__.py`, `src/lerobot/teleoperators/gamepad/configuration_gamepad.py`, `src/lerobot/teleoperators/gamepad/gamepad_utils.py`, `src/lerobot/teleoperators/gamepad/teleop_gamepad.py`, `src/lerobot/teleoperators/homunculus/__init__.py`, `src/lerobot/teleoperators/homunculus/config_homunculus.py`, `src/lerobot/teleoperators/homunculus/homunculus_arm.py`, `src/lerobot/teleoperators/homunculus/homunculus_glove.py`, `src/lerobot/teleoperators/homunculus/joints_translation.py`, `src/lerobot/teleoperators/keyboard/__init__.py`, `src/lerobot/teleoperators/keyboard/configuration_keyboard.py`, `src/lerobot/teleoperators/keyboard/teleop_keyboard.py`, `src/lerobot/teleoperators/koch_leader/__init__.py`, `src/lerobot/teleoperators/koch_leader/config_koch_leader.py`, `src/lerobot/teleoperators/koch_leader/koch_leader.py`, `src/lerobot/teleoperators/so100_leader/__init__.py`, `src/lerobot/teleoperators/so100_leader/config_so100_leader.py`, `src/lerobot/teleoperators/so100_leader/so100_leader.py`, `src/lerobot/teleoperators/so101_leader/__init__.py`, `src/lerobot/teleoperators/so101_leader/config_so101_leader.py`, `src/lerobot/teleoperators/so101_leader/so101_leader.py`, `src/lerobot/teleoperators/stretch3_gamepad/__init__.py`, `src/lerobot/teleoperators/stretch3_gamepad/configuration_stretch3.py`, `src/lerobot/teleoperators/stretch3_gamepad/stretch3_gamepad.py`, `src/lerobot/teleoperators/teleoperator.py`, `src/lerobot/teleoperators/utils.py`, `src/lerobot/teleoperators/widowx/__init__.py`, `src/lerobot/teleoperators/widowx/config_widowx.py`, `src/lerobot/teleoperators/widowx/widowx.py`, `src/lerobot/templates/lerobot_modelcard_template.md`, `src/lerobot/templates/visualize_dataset_homepage.html`, `src/lerobot/templates/visualize_dataset_template.html`, `src/lerobot/transport/services.proto`, `src/lerobot/transport/services_pb2.py`, `src/lerobot/transport/services_pb2_grpc.py`, `src/lerobot/transport/utils.py`, `src/lerobot/utils/benchmark.py`, `src/lerobot/utils/buffer.py`, `src/lerobot/utils/control_utils.py`, `src/lerobot/utils/encoding_utils.py`, `src/lerobot/utils/hub.py`, `src/lerobot/utils/import_utils.py`, `src/lerobot/utils/io_utils.py`, `src/lerobot/utils/logging_utils.py`, `src/lerobot/utils/process.py`, `src/lerobot/utils/queue.py`, `src/lerobot/utils/random_utils.py`, `src/lerobot/utils/robot_utils.py`, `src/lerobot/utils/train_utils.py`, `src/lerobot/utils/transition.py`, `src/lerobot/utils/utils.py`, `src/lerobot/utils/visualization_utils.py`, `src/lerobot/utils/wandb_utils.py`
- Upstream contribution rules: https://github.com/huggingface/lerobot

## Find, inspect, prepare

```sh
python /PATH_TO_SKILL/scripts/rsh.py find "task" --runtime lerobot --runtime-version 0.3.3 --robot pusht-2d-pusher --json
python /PATH_TO_SKILL/scripts/rsh.py inspect lerobot-diffusion-pusht --json
python /PATH_TO_SKILL/scripts/rsh.py prepare lerobot-diffusion-pusht --project ./experiment --expected-source-commit b883328e6c95681ca90a18b102e4ae5e1f91e2bf --expected-record-version 1.0.0 --plan --json
```

Remove `--plan` to download the checksum-verified pinned source and create an isolated project environment. Preparation returns the remaining configuration. Dependency installation is an explicit `--install-deps` step; it can execute package build hooks. Robot simulation is a separate command returned by prepare, never run by find/inspect.

Direct package pins: `lerobot==0.3.3`, `torch==2.7.1`, `torchvision==0.22.1`, `torchcodec==0.5.0`, `diffusers==0.33.1`, `gym-pusht==0.1.8`, `numpy==1.26.4`, `pymunk==6.11.1`.

Direct runtime versions are pinned and measured. The receipt retains the complete environment freeze; prepare records the installed environment. System drivers are separate host requirements. Linux device dependencies may build evdev from source; an available C compiler and explicit dependency-install permission are required.

Hardware: Linux x86_64; CUDA GPU, tested on A100 40GB.

Rendering: Headless. EGL libraries are required for MuJoCo imports; PushT uses SDL dummy video. No interactive display..

External API keys: none.

## Invocation contract

Entrypoint: `python run.py`.

```json
{
  "argv": [
    "{python}",
    "{recipe_dir}/run.py",
    "--source-dir",
    "{source_dir}",
    "--example"
  ],
  "inputs": {
    "seed": 0
  },
  "outputs": {
    "format": "single JSON object",
    "payload_selector": "outputs",
    "schema": {
      "type": "object",
      "required": [
        "maximum_coverage",
        "steps",
        "environment_success",
        "cuda_inference"
      ],
      "properties": {
        "maximum_coverage": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "steps": {
          "type": "integer",
          "minimum": 1,
          "maximum": 300
        },
        "environment_success": {
          "type": "boolean"
        },
        "cuda_inference": {
          "type": "boolean"
        }
      },
      "additionalProperties": false
    }
  }
}
```

Success: All declared goal and finite-state checks pass; exit 0 with task_complete. Original PushT success flag and measured object/target overlap >=95%; no accuracy claim beyond the three retained seed episodes. Checkpoint license: Apache-2.0, preserved at its immutable model revision.

Timeout: 1200 seconds. Terminate the adapter at the recorded timeout. No physical hardware is opened.

Failures: Invalid input or source checksum; Different pinned package version; Unavailable runtime/driver; Goal not reached within bounded steps.

## Actual evidence

1/3 frozen cases completed; retained failures are not promoted.

Reviewer: Hub finite-case Lambda execution harness · 2026-10-20.

Commands/checks actually performed:

- python tools/verify_runtime_expansion.py --backend lerobot --source-cache SOURCE_CACHE --output OUTPUT

Submitted evidence and hub verification remain separate. A schema check, PR creation or merge does not establish task success or publication.

## Reusable fixes

Change the runtime expansion manifest/template, regenerate, and rerun all frozen cases. Preserve source/model/checkpoint licenses and distinguish simulation from hardware.

# LeRobot Diffusion Policy PushT closed-loop evaluation

LeRobot Diffusion Policy PushT closed-loop evaluation. Source-pinned, bounded simulation with explicit goal checks; no physical execution.

Original PushT success flag and measured object/target overlap >=95%; no accuracy claim beyond the three retained seed episodes. Checkpoint license: Apache-2.0, preserved at its immutable model revision.

Source and model terms: Apache-2.0. The Hub wrapper is MIT. See the record for input JSON, exact environment, frozen execution receipts and preparation requirements.

