[Release v1.3.0] - #83
Merged
Merged
Conversation
- i2rt/robot_models/: version existing arm models and add the YAM Ultra v2 model assets - i2rt/robots/: add version-aware assembly, recording support, configuration updates, and coverage - examples/: update MuJoCo, Viser, and minimum-gello workflows for the synchronized APIs - .agents/, .claude/, .codex/: synchronize URDF and MJCF alignment workflows - pyproject.toml and uv.lock: synchronize the dev dependency set while retaining package version 1.1.2 Co-authored-by: Codex <noreply@openai.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Release v1.3.0 mirrors the current dev/JH_i2rt-main content into the public repository. It adds versioned arm models, YAM Ultra v2 support, MCAP recording, refreshed examples, and the aligned URDF/MJCF tooling. Per release direction,
pyproject.tomlremains at package version1.1.2; its change only adds the MCAP dependency.Changes
.agents/skills/align-urdf-mjcf/SKILL.md: add Codex-native guidance for regenerating and validating aligned URDF and MJCF arm models.agents/skills/align-urdf-mjcf/scripts/sync_gripper_mounts.py: add the tool that propagates versioned terminal-mount transforms into every gripper configuration.agents/skills/align-urdf-mjcf/scripts/urdf_to_arm_mjcf.py: add the deterministic URDF-to-arm-MJCF generator.agents/skills/transform-onshape-urdf/SKILL.md: add Codex-native guidance for normalizing and orienting ONShape URDF exports.agents/skills/transform-onshape-urdf/scripts/apply_urdf_heading.py: add the tool that bakes an operator-selected heading into URDF geometry and inertia.agents/skills/transform-onshape-urdf/scripts/normalize_onshape_urdf.py: add deterministic ONShape URDF cleanup and frame normalization.agents/skills/transform-onshape-urdf/scripts/urdf_align_lib.py: add shared transform, mesh, and forward-kinematics helpers for the alignment pipeline.agents/skills/transform-onshape-urdf/scripts/view_urdf.py: add the visual inspection step used before committing a URDF heading.claude/skills/align-urdf-mjcf/SKILL.md: update Claude alignment guidance for versioned arm layouts and terminal-mount composition.claude/skills/align-urdf-mjcf/scripts/sync_gripper_mounts.py: update gripper-mount synchronization for arm model versions.claude/skills/align-urdf-mjcf/scripts/urdf_to_arm_mjcf.py: update MJCF generation for the versioned model layout and gripper mount frame.claude/skills/transform-onshape-urdf/SKILL.md: update the ONShape transformation workflow for versioned source models.claude/skills/transform-onshape-urdf/scripts/normalize_onshape_urdf.py: update normalization logic for the aligned versioned model pipeline.codex/skills/align-urdf-mjcf/SKILL.md: update Codex alignment guidance to match the version-aware robot model contractAGENTS.md: add Codex project architecture, workflow, and verification guidanceCLAUDE.md: document versioned arm models, runtime gripper composition, recording, and alignment behaviorexamples/control_with_mujoco/README.md: document hardware-version selection and recording options for the MuJoCo control exampleexamples/control_with_mujoco/control_with_mujoco.py: propagate arm model versions and optional MCAP recording through the MuJoCo control exampleexamples/control_with_viser/README.md: document hardware-version selection and recording options for the Viser exampleexamples/control_with_viser/control_with_viser.py: propagate arm model versions and optional MCAP recording through the Viser control exampleexamples/minimum_gello/README.md: document the stale-command timeout used to prevent growing teleoperation lagexamples/minimum_gello/minimum_gello.py: drop stale follower commands and expose the maximum accepted command agei2rt/robot_models/__init__.py: resolve versioned arm model paths while preserving v1 compatibility aliasesi2rt/robot_models/arm/big_yam/README.md -> i2rt/robot_models/arm/big_yam/v1/README.md: move and update the arm documentation fromi2rt/robot_models/arm/big_yam/README.mdto the versioned v1 pathi2rt/robot_models/arm/big_yam/v1/README.mdi2rt/robot_models/arm/big_yam/assets/base.stl -> i2rt/robot_models/arm/big_yam/v1/assets/base.stl: move the base.stl mesh fromi2rt/robot_models/arm/big_yam/assets/base.stlto the versioned v1 asset pathi2rt/robot_models/arm/big_yam/v1/assets/base.stli2rt/robot_models/arm/big_yam/assets/gripper.stl -> i2rt/robot_models/arm/big_yam/v1/assets/gripper.stl: move the gripper.stl mesh fromi2rt/robot_models/arm/big_yam/assets/gripper.stlto the versioned v1 asset pathi2rt/robot_models/arm/big_yam/v1/assets/gripper.stli2rt/robot_models/arm/big_yam/assets/link1.stl -> i2rt/robot_models/arm/big_yam/v1/assets/link1.stl: move the link1.stl mesh fromi2rt/robot_models/arm/big_yam/assets/link1.stlto the versioned v1 asset pathi2rt/robot_models/arm/big_yam/v1/assets/link1.stli2rt/robot_models/arm/big_yam/assets/link2.stl -> i2rt/robot_models/arm/big_yam/v1/assets/link2.stl: move the link2.stl mesh fromi2rt/robot_models/arm/big_yam/assets/link2.stlto the versioned v1 asset pathi2rt/robot_models/arm/big_yam/v1/assets/link2.stli2rt/robot_models/arm/big_yam/assets/link3.stl -> i2rt/robot_models/arm/big_yam/v1/assets/link3.stl: move the link3.stl mesh fromi2rt/robot_models/arm/big_yam/assets/link3.stlto the versioned v1 asset pathi2rt/robot_models/arm/big_yam/v1/assets/link3.stli2rt/robot_models/arm/big_yam/assets/link4.stl -> i2rt/robot_models/arm/big_yam/v1/assets/link4.stl: move the link4.stl mesh fromi2rt/robot_models/arm/big_yam/assets/link4.stlto the versioned v1 asset pathi2rt/robot_models/arm/big_yam/v1/assets/link4.stli2rt/robot_models/arm/big_yam/assets/link5.stl -> i2rt/robot_models/arm/big_yam/v1/assets/link5.stl: move the link5.stl mesh fromi2rt/robot_models/arm/big_yam/assets/link5.stlto the versioned v1 asset pathi2rt/robot_models/arm/big_yam/v1/assets/link5.stli2rt/robot_models/arm/big_yam/assets/tip_left.stl -> i2rt/robot_models/arm/big_yam/v1/assets/tip_left.stl: move the tip_left.stl mesh fromi2rt/robot_models/arm/big_yam/assets/tip_left.stlto the versioned v1 asset pathi2rt/robot_models/arm/big_yam/v1/assets/tip_left.stli2rt/robot_models/arm/big_yam/assets/tip_right.stl -> i2rt/robot_models/arm/big_yam/v1/assets/tip_right.stl: move the tip_right.stl mesh fromi2rt/robot_models/arm/big_yam/assets/tip_right.stlto the versioned v1 asset pathi2rt/robot_models/arm/big_yam/v1/assets/tip_right.stli2rt/robot_models/arm/big_yam/big_yam.urdf -> i2rt/robot_models/arm/big_yam/v1/big_yam.urdf: move the URDF source fromi2rt/robot_models/arm/big_yam/big_yam.urdfto the versioned v1 pathi2rt/robot_models/arm/big_yam/v1/big_yam.urdfi2rt/robot_models/arm/big_yam/big_yam.xml -> i2rt/robot_models/arm/big_yam/v1/big_yam.xml: move the MJCF model fromi2rt/robot_models/arm/big_yam/big_yam.xmltoi2rt/robot_models/arm/big_yam/v1/big_yam.xmland retain the v1-aligned modeli2rt/robot_models/arm/yam/README.md -> i2rt/robot_models/arm/yam/v1/README.md: move and update the arm documentation fromi2rt/robot_models/arm/yam/README.mdto the versioned v1 pathi2rt/robot_models/arm/yam/v1/README.mdi2rt/robot_models/arm/yam/assets/base.stl -> i2rt/robot_models/arm/yam/v1/assets/base.stl: move the base.stl mesh fromi2rt/robot_models/arm/yam/assets/base.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam/v1/assets/base.stli2rt/robot_models/arm/yam/assets/gripper.stl -> i2rt/robot_models/arm/yam/v1/assets/gripper.stl: move the gripper.stl mesh fromi2rt/robot_models/arm/yam/assets/gripper.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam/v1/assets/gripper.stli2rt/robot_models/arm/yam/assets/link1.stl -> i2rt/robot_models/arm/yam/v1/assets/link1.stl: move the link1.stl mesh fromi2rt/robot_models/arm/yam/assets/link1.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam/v1/assets/link1.stli2rt/robot_models/arm/yam/assets/link2.stl -> i2rt/robot_models/arm/yam/v1/assets/link2.stl: move the link2.stl mesh fromi2rt/robot_models/arm/yam/assets/link2.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam/v1/assets/link2.stli2rt/robot_models/arm/yam/assets/link3.stl -> i2rt/robot_models/arm/yam/v1/assets/link3.stl: move the link3.stl mesh fromi2rt/robot_models/arm/yam/assets/link3.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam/v1/assets/link3.stli2rt/robot_models/arm/yam/assets/link4.stl -> i2rt/robot_models/arm/yam/v1/assets/link4.stl: move the link4.stl mesh fromi2rt/robot_models/arm/yam/assets/link4.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam/v1/assets/link4.stli2rt/robot_models/arm/yam/assets/link5.stl -> i2rt/robot_models/arm/yam/v1/assets/link5.stl: move the link5.stl mesh fromi2rt/robot_models/arm/yam/assets/link5.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam/v1/assets/link5.stli2rt/robot_models/arm/yam/assets/tip_left.stl -> i2rt/robot_models/arm/yam/v1/assets/tip_left.stl: move the tip_left.stl mesh fromi2rt/robot_models/arm/yam/assets/tip_left.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam/v1/assets/tip_left.stli2rt/robot_models/arm/yam/assets/tip_right.stl -> i2rt/robot_models/arm/yam/v1/assets/tip_right.stl: move the tip_right.stl mesh fromi2rt/robot_models/arm/yam/assets/tip_right.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam/v1/assets/tip_right.stli2rt/robot_models/arm/yam/yam.urdf -> i2rt/robot_models/arm/yam/v1/yam.urdf: move the URDF source fromi2rt/robot_models/arm/yam/yam.urdfto the versioned v1 pathi2rt/robot_models/arm/yam/v1/yam.urdfi2rt/robot_models/arm/yam/yam.xml -> i2rt/robot_models/arm/yam/v1/yam.xml: move the MJCF model fromi2rt/robot_models/arm/yam/yam.xmltoi2rt/robot_models/arm/yam/v1/yam.xmland retain the v1-aligned modeli2rt/robot_models/arm/yam_pro/README.md -> i2rt/robot_models/arm/yam_pro/v1/README.md: move and update the arm documentation fromi2rt/robot_models/arm/yam_pro/README.mdto the versioned v1 pathi2rt/robot_models/arm/yam_pro/v1/README.mdi2rt/robot_models/arm/yam_pro/assets/base.stl -> i2rt/robot_models/arm/yam_pro/v1/assets/base.stl: move the base.stl mesh fromi2rt/robot_models/arm/yam_pro/assets/base.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_pro/v1/assets/base.stli2rt/robot_models/arm/yam_pro/assets/gripper.stl -> i2rt/robot_models/arm/yam_pro/v1/assets/gripper.stl: move the gripper.stl mesh fromi2rt/robot_models/arm/yam_pro/assets/gripper.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_pro/v1/assets/gripper.stli2rt/robot_models/arm/yam_pro/assets/link1.stl -> i2rt/robot_models/arm/yam_pro/v1/assets/link1.stl: move the link1.stl mesh fromi2rt/robot_models/arm/yam_pro/assets/link1.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_pro/v1/assets/link1.stli2rt/robot_models/arm/yam_pro/assets/link2.stl -> i2rt/robot_models/arm/yam_pro/v1/assets/link2.stl: move the link2.stl mesh fromi2rt/robot_models/arm/yam_pro/assets/link2.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_pro/v1/assets/link2.stli2rt/robot_models/arm/yam_pro/assets/link3.stl -> i2rt/robot_models/arm/yam_pro/v1/assets/link3.stl: move the link3.stl mesh fromi2rt/robot_models/arm/yam_pro/assets/link3.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_pro/v1/assets/link3.stli2rt/robot_models/arm/yam_pro/assets/link4.stl -> i2rt/robot_models/arm/yam_pro/v1/assets/link4.stl: move the link4.stl mesh fromi2rt/robot_models/arm/yam_pro/assets/link4.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_pro/v1/assets/link4.stli2rt/robot_models/arm/yam_pro/assets/link5.stl -> i2rt/robot_models/arm/yam_pro/v1/assets/link5.stl: move the link5.stl mesh fromi2rt/robot_models/arm/yam_pro/assets/link5.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_pro/v1/assets/link5.stli2rt/robot_models/arm/yam_pro/assets/tip_left.stl -> i2rt/robot_models/arm/yam_pro/v1/assets/tip_left.stl: move the tip_left.stl mesh fromi2rt/robot_models/arm/yam_pro/assets/tip_left.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_pro/v1/assets/tip_left.stli2rt/robot_models/arm/yam_pro/assets/tip_right.stl -> i2rt/robot_models/arm/yam_pro/v1/assets/tip_right.stl: move the tip_right.stl mesh fromi2rt/robot_models/arm/yam_pro/assets/tip_right.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_pro/v1/assets/tip_right.stli2rt/robot_models/arm/yam_pro/yam_pro.urdf -> i2rt/robot_models/arm/yam_pro/v1/yam_pro.urdf: move the URDF source fromi2rt/robot_models/arm/yam_pro/yam_pro.urdfto the versioned v1 pathi2rt/robot_models/arm/yam_pro/v1/yam_pro.urdfi2rt/robot_models/arm/yam_pro/yam_pro.xml -> i2rt/robot_models/arm/yam_pro/v1/yam_pro.xml: move the MJCF model fromi2rt/robot_models/arm/yam_pro/yam_pro.xmltoi2rt/robot_models/arm/yam_pro/v1/yam_pro.xmland retain the v1-aligned modeli2rt/robot_models/arm/yam_ultra/README.md -> i2rt/robot_models/arm/yam_ultra/v1/README.md: move and update the arm documentation fromi2rt/robot_models/arm/yam_ultra/README.mdto the versioned v1 pathi2rt/robot_models/arm/yam_ultra/v1/README.mdi2rt/robot_models/arm/yam_ultra/assets/base.stl -> i2rt/robot_models/arm/yam_ultra/v1/assets/base.stl: move the base.stl mesh fromi2rt/robot_models/arm/yam_ultra/assets/base.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_ultra/v1/assets/base.stli2rt/robot_models/arm/yam_ultra/assets/gripper.stl -> i2rt/robot_models/arm/yam_ultra/v1/assets/gripper.stl: move the gripper.stl mesh fromi2rt/robot_models/arm/yam_ultra/assets/gripper.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_ultra/v1/assets/gripper.stli2rt/robot_models/arm/yam_ultra/assets/link1.stl -> i2rt/robot_models/arm/yam_ultra/v1/assets/link1.stl: move the link1.stl mesh fromi2rt/robot_models/arm/yam_ultra/assets/link1.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_ultra/v1/assets/link1.stli2rt/robot_models/arm/yam_ultra/assets/link2.stl -> i2rt/robot_models/arm/yam_ultra/v1/assets/link2.stl: move the link2.stl mesh fromi2rt/robot_models/arm/yam_ultra/assets/link2.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_ultra/v1/assets/link2.stli2rt/robot_models/arm/yam_ultra/assets/link3.stl -> i2rt/robot_models/arm/yam_ultra/v1/assets/link3.stl: move the link3.stl mesh fromi2rt/robot_models/arm/yam_ultra/assets/link3.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_ultra/v1/assets/link3.stli2rt/robot_models/arm/yam_ultra/assets/link4.stl -> i2rt/robot_models/arm/yam_ultra/v1/assets/link4.stl: move the link4.stl mesh fromi2rt/robot_models/arm/yam_ultra/assets/link4.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_ultra/v1/assets/link4.stli2rt/robot_models/arm/yam_ultra/assets/link5.stl -> i2rt/robot_models/arm/yam_ultra/v1/assets/link5.stl: move the link5.stl mesh fromi2rt/robot_models/arm/yam_ultra/assets/link5.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_ultra/v1/assets/link5.stli2rt/robot_models/arm/yam_ultra/assets/tip_left.stl -> i2rt/robot_models/arm/yam_ultra/v1/assets/tip_left.stl: move the tip_left.stl mesh fromi2rt/robot_models/arm/yam_ultra/assets/tip_left.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_ultra/v1/assets/tip_left.stli2rt/robot_models/arm/yam_ultra/assets/tip_right.stl -> i2rt/robot_models/arm/yam_ultra/v1/assets/tip_right.stl: move the tip_right.stl mesh fromi2rt/robot_models/arm/yam_ultra/assets/tip_right.stlto the versioned v1 asset pathi2rt/robot_models/arm/yam_ultra/v1/assets/tip_right.stli2rt/robot_models/arm/yam_ultra/yam_ultra.urdf -> i2rt/robot_models/arm/yam_ultra/v1/yam_ultra.urdf: move the URDF source fromi2rt/robot_models/arm/yam_ultra/yam_ultra.urdfto the versioned v1 pathi2rt/robot_models/arm/yam_ultra/v1/yam_ultra.urdfi2rt/robot_models/arm/yam_ultra/yam_ultra.xml -> i2rt/robot_models/arm/yam_ultra/v1/yam_ultra.xml: move the MJCF model fromi2rt/robot_models/arm/yam_ultra/yam_ultra.xmltoi2rt/robot_models/arm/yam_ultra/v1/yam_ultra.xmland retain the v1-aligned modeli2rt/robot_models/arm/yam_ultra/v2/README.md: document YAM Ultra v2 kinematics, inertial properties, frames, and model conventionsi2rt/robot_models/arm/yam_ultra/v2/assets/base.stl: add the YAM Ultra v2 base.stl mesh asseti2rt/robot_models/arm/yam_ultra/v2/assets/gripper.stl: add the YAM Ultra v2 gripper.stl mesh asseti2rt/robot_models/arm/yam_ultra/v2/assets/link1.stl: add the YAM Ultra v2 link1.stl mesh asseti2rt/robot_models/arm/yam_ultra/v2/assets/link2.stl: add the YAM Ultra v2 link2.stl mesh asseti2rt/robot_models/arm/yam_ultra/v2/assets/link3.stl: add the YAM Ultra v2 link3.stl mesh asseti2rt/robot_models/arm/yam_ultra/v2/assets/link4.stl: add the YAM Ultra v2 link4.stl mesh asseti2rt/robot_models/arm/yam_ultra/v2/assets/link5.stl: add the YAM Ultra v2 link5.stl mesh asseti2rt/robot_models/arm/yam_ultra/v2/assets/tip_left.stl: add the YAM Ultra v2 tip_left.stl mesh asseti2rt/robot_models/arm/yam_ultra/v2/assets/tip_right.stl: add the YAM Ultra v2 tip_right.stl mesh asseti2rt/robot_models/arm/yam_ultra/v2/yam_ultra.urdf: add the YAM Ultra v2 URDF source modeli2rt/robot_models/arm/yam_ultra/v2/yam_ultra.xml: add the generated YAM Ultra v2 MuJoCo modeli2rt/robots/config/big_yam.yml -> i2rt/robots/config/big_yam_v1.yml: renamei2rt/robots/config/big_yam.ymltoi2rt/robots/config/big_yam_v1.ymlso the arm configuration is explicitly versioned as v1i2rt/robots/config/crank_4310.yml: key terminal-mount transforms by arm model version for the crank gripperi2rt/robots/config/flexible_4310.yml: key terminal-mount transforms by arm model version for the flexible gripperi2rt/robots/config/linear_3507.yml: key terminal-mount transforms by arm model version for the 3507 linear gripperi2rt/robots/config/linear_4310.yml: key terminal-mount transforms by arm model version for the 4310 linear gripperi2rt/robots/config/no_gripper.yml: key terminal-mount transforms by arm model version for arm-only assembliesi2rt/robots/config/yam_pro.yml -> i2rt/robots/config/yam_pro_v1.yml: renamei2rt/robots/config/yam_pro.ymltoi2rt/robots/config/yam_pro_v1.ymlso the arm configuration is explicitly versioned as v1i2rt/robots/config/yam_teaching_handle.yml: key terminal-mount transforms by arm model version for the teaching handlei2rt/robots/config/yam_ultra.yml -> i2rt/robots/config/yam_ultra_v1.yml: renamei2rt/robots/config/yam_ultra.ymltoi2rt/robots/config/yam_ultra_v1.ymlso the arm configuration is explicitly versioned as v1i2rt/robots/config/yam_ultra_v2.yml: add motor, gain, direction, and gravity-compensation configuration for YAM Ultra v2i2rt/robots/config/yam.yml -> i2rt/robots/config/yam_v1.yml: renamei2rt/robots/config/yam.ymltoi2rt/robots/config/yam_v1.ymlso the arm configuration is explicitly versioned as v1i2rt/robots/get_robot.py: thread the requested hardware version through robot configuration and model selectioni2rt/robots/motor_chain_robot.py: add timestamped joint command and observation recording supporti2rt/robots/tests/test_assembly.py: cover version-aware arm and gripper model compositioni2rt/robots/tests/test_motor_chain_recording.py: cover motor-chain command and observation recording behaviori2rt/robots/tests/test_onshape_normalization.py: cover deterministic ONShape URDF normalization behaviori2rt/robots/tests/test_robot_variants.py: cover versioned arm configuration and model selectioni2rt/robots/tests/test_urdf_mjcf_alignment.py: validate home-pose URDF and MJCF alignment across versioned arm modelsi2rt/robots/tests/test_urdf_mjcf_posed_alignment.py: validate posed URDF and MJCF alignment across versioned arm modelsi2rt/robots/utils.py: implement version-aware arm paths, config loading, and gripper mount compositioni2rt/utils/recording.py: add the MCAP-based robot command and observation recorderi2rt/utils/tests/test_recording.py: cover recorder schema, timestamps, serialization, and close behaviorpyproject.toml: add the MCAP ROS 2 support dependency while retaining package version 1.1.2uv.lock: lock the MCAP ROS 2 support dependency graph without changing the package versionHow to Test
uv sync --lockedin a fresh checkout and confirm dependency resolution succeeds without modifyinguv.lock.uv run ruff check .and confirmAll checks passed!.uv run pytest -n autoand confirm all tests pass; the verified release tree produced 374 passed and 2 skipped.uv run pytest i2rt/robots/tests/test_robot_variants.py i2rt/robots/tests/test_assembly.py -vand confirm both v1 and v2 model/config selections pass.uv run pytest i2rt/robots/tests/test_urdf_mjcf_alignment.py i2rt/robots/tests/test_urdf_mjcf_posed_alignment.py -vand confirm home and posed alignment checks pass across supported variants.uv run pytest i2rt/robots/tests/test_motor_chain_recording.py i2rt/utils/tests/test_recording.py -vand confirm command, observation, timestamp, and close behavior passes.🤖 Generated with Claude Code