Skip to content

feat(manipulation): add OpenYAM Damiao adapter#3129

Draft
TomCC7 wants to merge 13 commits into
mainfrom
cc/feat/openyam-driver
Draft

feat(manipulation): add OpenYAM Damiao adapter#3129
TomCC7 wants to merge 13 commits into
mainfrom
cc/feat/openyam-driver

Conversation

@TomCC7

@TomCC7 TomCC7 commented Jul 21, 2026

Copy link
Copy Markdown
Member

Summary

  • Add a six-DOF OpenYAM Damiao hardware adapter with gravity-compensation preflight and rollback safety.
  • Retain the active Xacro as planning and joint-limit authority; add a fixed-finger gravity model asset.
  • Add operator approval gating and OpenYAM commissioning guidance.

Safety boundary

Physical gripper commands and readback remain unavailable until upstream provides calibrated normalized-opening readback; the adapter does not fabricate gripper state.

Verification

  • Focused OpenYAM/Damiao pytest suite: 63 passed.
  • Ruff, lockfile, and diff checks passed.

@mintlify

mintlify Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
dimensional 🟢 Ready View Preview Jul 21, 2026, 11:39 PM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@codecov

codecov Bot commented Jul 21, 2026

Copy link
Copy Markdown

❌ 13 Tests Failed:

Tests completed Failed Passed Skipped
2671 13 2658 165
View the top 3 failed test(s) by shortest run time
::dimos.hardware.manipulators.openyam_damiao.test_adapter
Stack Traces | 0s run time
.../manipulators/openyam_damiao/test_adapter.py:20: in <module>
    import dimos.hardware.manipulators.openyam_damiao.adapter as adapter_module
        Mock       = <class 'unittest.mock.Mock'>
        Path       = <class 'pathlib.Path'>
        __builtins__ = <builtins>
        __cached__ = '.../openyam_damiao/__pycache__/test_adapter.cpython-312.pyc'
        __doc__    = 'Focused OpenYAM adapter tests.\n\nThe shared Damiao runtime is an optional hardware dependency in this checkout;\nthe tests become active when that runtime is installed (as they are in the\nhardware test environment).\n'
        __file__   = '.../work/dimos/dimos/.../manipulators/openyam_damiao/test_adapter.py'
        __loader__ = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xff2b36b0e0c0>
        __name__   = 'openyam_damiao.test_adapter'
        __package__ = 'openyam_damiao'
        __spec__   = ModuleSpec(name='openyam_damiao.test_adapter', loader=<_pytest.assertion.rewrite.AssertionRewritingHook object at 0xff2b36b0e0c0>, origin='.../work/dimos/dimos/.../manipulators/openyam_damiao/test_adapter.py')
        pytest     = <module 'pytest' from '.../dimos/dimos/.venv/lib/python3.12.../site-packages/pytest/__init__.py'>
.../manipulators/openyam_damiao/adapter.py:27: in <module>
    _OPENYAM_MODEL_PATH = Path(LfsPath("yam_description")) / "urdf/yam_gripper.urdf.xacro"
        Any        = typing.Any
        DamiaoArmAdapter = <class 'dimos.hardware.damiao.arm_adapter.DamiaoArmAdapter'>
        DamiaoBusSpec = <class 'dimos.hardware.damiao.specs.DamiaoBusSpec'>
        DamiaoJointGroupSpec = <class 'dimos.hardware.damiao.specs.DamiaoJointGroupSpec'>
        DamiaoMotorSpec = <class 'dimos.hardware.damiao.specs.DamiaoMotorSpec'>
        DamiaoRobotSpec = <class 'dimos.hardware.damiao.specs.DamiaoRobotSpec'>
        LfsPath    = <class 'dimos.utils.data.LfsPath'>
        OPENING_METRES = 0.096
        Path       = <class 'pathlib.Path'>
        _ARM_GROUP = 'arm'
        _BUS_NAME  = 'openyam_can'
        __builtins__ = <builtins>
        __cached__ = '.../openyam_damiao/__pycache__/adapter.cpython-312.pyc'
        __doc__    = "OpenYAM's six-axis Damiao adapter."
        __file__   = '.../work/dimos/dimos/.../manipulators/openyam_damiao/adapter.py'
        __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0xff2a4fde1610>
        __name__   = 'dimos.hardware.manipulators.openyam_damiao.adapter'
        __package__ = 'dimos.hardware.manipulators.openyam_damiao'
        __spec__   = ModuleSpec(name='dimos.hardware.manipulators.openyam_damiao.adapter', loader=<_frozen_importlib_external.SourceFileLoa...bject at 0xff2a4fde1610>, origin='.../work/dimos/dimos/.../manipulators/openyam_damiao/adapter.py')
        annotations = _Feature((3, 7, 0, 'beta', 1), None, 16777216)
        cast       = <function cast at 0xff2b38f068e0>
        math       = <module 'math' (built-in)>
        parse_model = <function parse_model at 0xff2a4fb5ab60>
....../usr/lib/python3.12/pathlib.py:1164: in __init__
    super().__init__(*args)
        __class__  = <class 'pathlib.Path'>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a4fb727d0>,)
        kwargs     = {}
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xff2a4fc12810>
....../usr/lib/python3.12/pathlib.py:362: in __init__
    if arg._flavour is ntpath and self._flavour is posixpath:
        arg        = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a4fb727d0>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a4fb727d0>,)
        ntpath     = <module 'ntpath' (frozen)>
        paths      = []
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xff2a4fc12810>
dimos/utils/data.py:364: in __getattribute__
    resolved = object.__getattribute__(self, "_ensure_downloaded")()
        name       = '_flavour'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a4fb727d0>
dimos/utils/data.py:347: in _ensure_downloaded
    cache = get_data(filename)
        cache      = None
        filename   = 'yam_description'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a4fb727d0>
dimos/utils/data.py:304: in get_data
    archive_path = _decompress_archive(_pull_lfs_archive(archive_name))
        archive_name = 'yam_description'
        data_dir   = PosixPath('.../dimos/dimos/data')
        file_path  = PosixPath('.../dimos/dimos/data/yam_description')
        name       = 'yam_description'
        nested_path = None
        path_parts = ('yam_description',)
dimos/utils/data.py:248: in _pull_lfs_archive
    _lfs_pull(file_path, repo_root)
        file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
        filename   = 'yam_description'
        repo_root  = PosixPath('.../work/dimos/dimos')
dimos/utils/data.py:216: in _lfs_pull
    raise RuntimeError(
E   RuntimeError: Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.
        attempt    = 3
        env        = {'ACCEPT_EULA': 'Y', 'ACTIONS_ID_TOKEN_REQUEST_TOKEN': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4ODI2YjE3LTZhMzAtNWY5Yi1iMTY5LT...-version=2.0', 'ACTIONS_ORCHESTRATION_ID': '4dabb6bb-0cb6-4ada-a18d-544eab718932.tests.ubuntu-24_04-arm_3_14_fal', ...}
        file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
        last_err   = CalledProcessError(1, ['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz'])
        relative_path = PosixPath('data/.lfs/yam_description.tar.gz')
        repo_root  = PosixPath('.../work/dimos/dimos')
        retries    = 2
::dimos.robot.manipulators.openyam.test_openyam
Stack Traces | 0s run time
.../manipulators/openyam/test_openyam.py:22: in <module>
    from dimos.robot.manipulators.openyam.blueprints.basic import (
        Any        = typing.Any
        Blueprint  = <class 'dimos.core.coordination.blueprints.Blueprint'>
        ControlCoordinator = <class 'dimos.control.coordinator.ControlCoordinator'>
        ManipulationModule = <class 'dimos.manipulation.manipulation_module.ManipulationModule'>
        ManipulationModuleConfig = <class 'dimos.manipulation.manipulation_module.ManipulationModuleConfig'>
        MockAdapter = <class 'dimos.hardware.manipulators.mock.adapter.MockAdapter'>
        __builtins__ = <builtins>
        __cached__ = '.../openyam/__pycache__/test_openyam.cpython-312.pyc'
        __doc__    = None
        __file__   = '.../work/dimos/dimos/.../manipulators/openyam/test_openyam.py'
        __loader__ = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffd815ea01a0>
        __name__   = 'dimos.robot.manipulators.openyam.test_openyam'
        __package__ = 'dimos.robot.manipulators.openyam'
        __spec__   = ModuleSpec(name='dimos.robot.manipulators.openyam.test_openyam', loader=<_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffd815ea01a0>, origin='.../work/dimos/dimos/.../manipulators/openyam/test_openyam.py')
        global_config = GlobalConfig(robot_ip=None, robot_ips=None, unitree_aes_128_key=None, xarm7_ip=None, xarm6_ip=None, can_port=None, dev...detection_model='moondream', listen_host='127.0.0.1', dimsim_scene='apartment', dimsim_port=8090, dimsim_headless=True)
.../openyam/blueprints/basic.py:27: in <module>
    _openyam_planner_hw = openyam_hardware("arm")
        ControlCoordinator = <class 'dimos.control.coordinator.ControlCoordinator'>
        __builtins__ = <builtins>
        __cached__ = '.../blueprints/__pycache__/basic.cpython-312.pyc'
        __doc__    = 'Basic OpenYAM coordinator blueprints.'
        __file__   = '.../work/dimos/dimos/.../openyam/blueprints/basic.py'
        __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0xffd71d43e030>
        __name__   = 'dimos.robot.manipulators.openyam.blueprints.basic'
        __package__ = 'dimos.robot.manipulators.openyam.blueprints'
        __spec__   = ModuleSpec(name='dimos.robot.manipulators.openyam.blueprints.basic', loader=<_frozen_importlib_external.SourceFileLoader object at 0xffd71d43e030>, origin='.../work/dimos/dimos/.../openyam/blueprints/basic.py')
        annotations = _Feature((3, 7, 0, 'beta', 1), None, 16777216)
        autoconnect = <function autoconnect at 0xffd7fd8bd580>
        coordinator = <function coordinator at 0xffd71d058860>
        make_openyam_model_config = <function make_openyam_model_config at 0xffd71d058cc0>
        openyam_hardware = <function openyam_hardware at 0xffd71d058c20>
        planner    = <function planner at 0xffd71d058900>
        trajectory_task = <function trajectory_task at 0xffd71d058540>
.../manipulators/openyam/config.py:74: in openyam_hardware
    if not Path(OPENYAM_GRAVITY_MODEL_PATH).is_file():
        home_joints = None
        hw_id      = 'arm'
....../usr/lib/python3.12/pathlib.py:1164: in __init__
    super().__init__(*args)
        __class__  = <class 'pathlib.Path'>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>,)
        kwargs     = {}
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xffd71d0ef4c0>
....../usr/lib/python3.12/pathlib.py:362: in __init__
    if arg._flavour is ntpath and self._flavour is posixpath:
        arg        = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>,)
        ntpath     = <module 'ntpath' (frozen)>
        paths      = []
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xffd71d0ef4c0>
dimos/utils/data.py:364: in __getattribute__
    resolved = object.__getattribute__(self, "_ensure_downloaded")()
        name       = '_flavour'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>
dimos/utils/data.py:347: in _ensure_downloaded
    cache = get_data(filename)
        cache      = None
        filename   = 'yam_description/urdf/yam_gripper_gravity.urdf'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>
dimos/utils/data.py:304: in get_data
    archive_path = _decompress_archive(_pull_lfs_archive(archive_name))
        archive_name = 'yam_description'
        data_dir   = PosixPath('.../dimos/dimos/data')
        file_path  = PosixPath('.../dimos/dimos/data/yam_description/urdf/yam_gripper_gravity.urdf')
        name       = 'yam_description/urdf/yam_gripper_gravity.urdf'
        nested_path = PosixPath('urdf/yam_gripper_gravity.urdf')
        path_parts = ('yam_description', 'urdf', 'yam_gripper_gravity.urdf')
dimos/utils/data.py:248: in _pull_lfs_archive
    _lfs_pull(file_path, repo_root)
        file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
        filename   = 'yam_description'
        repo_root  = PosixPath('.../work/dimos/dimos')
dimos/utils/data.py:216: in _lfs_pull
    raise RuntimeError(
E   RuntimeError: Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.
        attempt    = 3
        env        = {'ACCEPT_EULA': 'Y', 'ACTIONS_ID_TOKEN_REQUEST_TOKEN': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4ODI2YjE3LTZhMzAtNWY5Yi1iMTY5LT...-version=2.0', 'ACTIONS_ORCHESTRATION_ID': '4dabb6bb-0cb6-4ada-a18d-544eab718932.tests.ubuntu-24_04-arm_3_14_fal', ...}
        file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
        last_err   = CalledProcessError(1, ['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz'])
        relative_path = PosixPath('data/.lfs/yam_description.tar.gz')
        repo_root  = PosixPath('.../work/dimos/dimos')
        retries    = 2
::dimos.robot.manipulators.test_blueprints
Stack Traces | 0s run time
.../robot/manipulators/test_blueprints.py:32: in <module>
    from dimos.robot.manipulators.openyam.blueprints.teleop import (
        Any        = typing.Any
        Blueprint  = <class 'dimos.core.coordination.blueprints.Blueprint'>
        ControlCoordinator = <class 'dimos.control.coordinator.ControlCoordinator'>
        EEF_TWIST_TASK_NAME = 'eef_twist_arm'
        ManipulationModule = <class 'dimos.manipulation.manipulation_module.ManipulationModule'>
        ManipulationModuleConfig = <class 'dimos.manipulation.manipulation_module.ManipulationModuleConfig'>
        NoManipulationVisualizationConfig = <class 'dimos.manipulation.visualization.config.NoManipulationVisualizationConfig'>
        Path       = <class 'pathlib.Path'>
        TaskConfig = <class 'dimos.control.coordinator.TaskConfig'>
        __builtins__ = <builtins>
        __cached__ = '.../manipulators/__pycache__/test_blueprints.cpython-312.pyc'
        __doc__    = None
        __file__   = '.../work/dimos/dimos/.../robot/manipulators/test_blueprints.py'
        __loader__ = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffd815ea01a0>
        __name__   = 'dimos.robot.manipulators.test_blueprints'
        __package__ = 'dimos.robot.manipulators'
        __spec__   = ModuleSpec(name='dimos.robot.manipulators.test_blueprints', loader=<_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffd815ea01a0>, origin='.../work/dimos/dimos/.../robot/manipulators/test_blueprints.py')
        eef_twist_task = <function eef_twist_task at 0xffd71d0585e0>
        keyboard_teleop_a1z = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/a1z_description.tar.gz after 3 attempt....lfs/a1z_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] Blueprint object at 0xffd71cf95820>
        keyboard_teleop_a750 = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/a750_description.tar.gz after 3 attemp...lfs/a750_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] Blueprint object at 0xffd71cfa4680>
        keyboard_teleop_openarm = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/openarm_description.tar.gz after 3 att.../openarm_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] Blueprint object at 0xffd71cfa79b0>
        keyboard_teleop_openarm_mock = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/openarm_description.tar.gz after 3 att.../openarm_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] Blueprint object at 0xffd71cfa6d80>
        planner    = <function planner at 0xffd71d058900>
        pytest     = <module 'pytest' from '.../dimos/dimos/.venv/lib/python3.12.../site-packages/pytest/__init__.py'>
.../openyam/blueprints/teleop.py:31: in <module>
    _openyam_keyboard_hw = openyam_hardware("arm")
        ControlCoordinator = <class 'dimos.control.coordinator.ControlCoordinator'>
        KeyboardTeleopModule = <class 'dimos.teleop.keyboard.keyboard_teleop_module.KeyboardTeleopModule'>
        ManipulationModule = <class 'dimos.manipulation.manipulation_module.ManipulationModule'>
        OPENYAM_DOF = 6
        OPENYAM_MODEL_PATH = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac71d0>
        __builtins__ = <builtins>
        __cached__ = '.../blueprints/__pycache__/teleop.cpython-312.pyc'
        __doc__    = 'OpenYAM keyboard teleop blueprints.'
        __file__   = '.../work/dimos/dimos/.../openyam/blueprints/teleop.py'
        __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0xffd71cfa76e0>
        __name__   = 'dimos.robot.manipulators.openyam.blueprints.teleop'
        __package__ = 'dimos.robot.manipulators.openyam.blueprints'
        __spec__   = ModuleSpec(name='dimos.robot.manipulators.openyam.blueprints.teleop', loader=<_frozen_importlib_external.SourceFileLoa...bject at 0xffd71cfa76e0>, origin='.../work/dimos/dimos/.../openyam/blueprints/teleop.py')
        annotations = _Feature((3, 7, 0, 'beta', 1), None, 16777216)
        autoconnect = <function autoconnect at 0xffd7fd8bd580>
        eef_twist_task = <function eef_twist_task at 0xffd71d0585e0>
        make_openyam_model_config = <function make_openyam_model_config at 0xffd71d058cc0>
        openyam_hardware = <function openyam_hardware at 0xffd71d058c20>
.../manipulators/openyam/config.py:74: in openyam_hardware
    if not Path(OPENYAM_GRAVITY_MODEL_PATH).is_file():
        home_joints = None
        hw_id      = 'arm'
....../usr/lib/python3.12/pathlib.py:1164: in __init__
    super().__init__(*args)
        __class__  = <class 'pathlib.Path'>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>,)
        kwargs     = {}
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xffd71d082110>
....../usr/lib/python3.12/pathlib.py:362: in __init__
    if arg._flavour is ntpath and self._flavour is posixpath:
        arg        = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>,)
        ntpath     = <module 'ntpath' (frozen)>
        paths      = []
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xffd71d082110>
dimos/utils/data.py:364: in __getattribute__
    resolved = object.__getattribute__(self, "_ensure_downloaded")()
        name       = '_flavour'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>
dimos/utils/data.py:347: in _ensure_downloaded
    cache = get_data(filename)
        cache      = None
        filename   = 'yam_description/urdf/yam_gripper_gravity.urdf'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>
dimos/utils/data.py:304: in get_data
    archive_path = _decompress_archive(_pull_lfs_archive(archive_name))
        archive_name = 'yam_description'
        data_dir   = PosixPath('.../dimos/dimos/data')
        file_path  = PosixPath('.../dimos/dimos/data/yam_description/urdf/yam_gripper_gravity.urdf')
        name       = 'yam_description/urdf/yam_gripper_gravity.urdf'
        nested_path = PosixPath('urdf/yam_gripper_gravity.urdf')
        path_parts = ('yam_description', 'urdf', 'yam_gripper_gravity.urdf')
dimos/utils/data.py:248: in _pull_lfs_archive
    _lfs_pull(file_path, repo_root)
        file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
        filename   = 'yam_description'
        repo_root  = PosixPath('.../work/dimos/dimos')
dimos/utils/data.py:216: in _lfs_pull
    raise RuntimeError(
E   RuntimeError: Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.
        attempt    = 3
        env        = {'ACCEPT_EULA': 'Y', 'ACTIONS_ID_TOKEN_REQUEST_TOKEN': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4ODI2YjE3LTZhMzAtNWY5Yi1iMTY5LT...-version=2.0', 'ACTIONS_ORCHESTRATION_ID': '4dabb6bb-0cb6-4ada-a18d-544eab718932.tests.ubuntu-24_04-arm_3_14_fal', ...}
        file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
        last_err   = CalledProcessError(1, ['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz'])
        relative_path = PosixPath('data/.lfs/yam_description.tar.gz')
        repo_root  = PosixPath('.../work/dimos/dimos')
        retries    = 2
dimos.codebase_checks.test_no_init_files::test_no_init_files
Stack Traces | 0.019s run time
def test_no_init_files():
        dimos_dir = DIMOS_PROJECT_ROOT / "dimos"
        init_files = sorted(dimos_dir.rglob("__init__.py"))
        # The root dimos/__init__.py is allowed for the porcelain lazy import.
        init_files = [f for f in init_files if f != dimos_dir / "__init__.py"]
        if init_files:
            listing = "\n".join(f"  - {f.relative_to(dimos_dir)}" for f in init_files)
>           raise AssertionError(
                f"Found __init__.py files in dimos/:\n{listing}\n\n"
                "__init__.py files are not allowed because they lead to unnecessary "
                "extraneous imports. Everything should be imported straight from the "
                "source module."
            )
E           AssertionError: Found __init__.py files in dimos/:
E             - hardware/damiao/__init__.py
E             - .../manipulators/openyam_damiao/__init__.py
E           
E           __init__.py files are not allowed because they lead to unnecessary extraneous imports. Everything should be imported straight from the source module.

dimos_dir  = PosixPath('.../dimos/dimos/dimos')
init_files = [PosixPath('.../dimos/dimos/dimos/hardware/damiao/__init__.py'), PosixPath('.../dimos/dimos/dimos/.../manipulators/openyam_damiao/__init__.py')]
listing    = '  - hardware/damiao/__init__.py\n  - .../manipulators/openyam_damiao/__init__.py'

dimos/codebase_checks/test_no_init_files.py:25: AssertionError
dimos.hardware.test_adapter_registries::test_declared_factory_paths_resolve[manipulators]
Stack Traces | 3.1s run time
registry = <dimos.hardware.manipulators.registry.AdapterRegistry object at 0xff2a4fcdf380>
family = 'manipulators'

    @pytest.mark.parametrize(("registry", "family"), FAMILIES)
    def test_declared_factory_paths_resolve(registry, family) -> None:
        for name, factory_path in sorted(registry._factory_paths.items()):
            module_name, attr = factory_path.split(":", maxsplit=1)
            try:
>               module = importlib.import_module(module_name)

attr       = 'OpenYamDamiaoAdapter'
factory    = <class 'dimos.hardware.manipulators.openarm.adapter.OpenArmAdapter'>
factory_path = 'dimos.hardware.manipulators.openyam_damiao.adapter:OpenYamDamiaoAdapter'
family     = 'manipulators'
module     = <module 'dimos.hardware.manipulators.openarm.adapter' from '.../manipulators/openarm/adapter.py'>
module_name = 'dimos.hardware.manipulators.openyam_damiao.adapter'
name       = 'openyam_damiao'
registry   = <dimos.hardware.manipulators.registry.AdapterRegistry object at 0xff2a4fcdf380>

dimos/hardware/test_adapter_registries.py:147: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
........./usr/lib/python3.12/importlib/__init__.py:90: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
        level      = 0
        name       = 'dimos.hardware.manipulators.openyam_damiao.adapter'
        package    = None
<frozen importlib._bootstrap>:1387: in _gcd_import
    ???
        level      = 0
        name       = 'dimos.hardware.manipulators.openyam_damiao.adapter'
        package    = None
<frozen importlib._bootstrap>:1360: in _find_and_load
    ???
        import_    = <function _gcd_import at 0xff2b3914c0e0>
        module     = <object object at 0xff2b39120060>
        name       = 'dimos.hardware.manipulators.openyam_damiao.adapter'
<frozen importlib._bootstrap>:1331: in _find_and_load_unlocked
    ???
        child      = 'adapter'
        import_    = <function _gcd_import at 0xff2b3914c0e0>
        name       = 'dimos.hardware.manipulators.openyam_damiao.adapter'
        parent     = 'dimos.hardware.manipulators.openyam_damiao'
        parent_module = <module 'dimos.hardware.manipulators.openyam_damiao' from '.../manipulators/openyam_damiao/__init__.py'>
        parent_spec = ModuleSpec(name='dimos.hardware.manipulators.openyam_damiao', loader=<_frozen_importlib_external.SourceFileLoader obje.../__init__.py', submodule_search_locations=['.../hardware/manipulators/openyam_damiao'])
        path       = ['.../hardware/manipulators/openyam_damiao']
        spec       = ModuleSpec(name='dimos.hardware.manipulators.openyam_damiao.adapter', loader=<_frozen_importlib_external.SourceFileLoa...bject at 0xff2a3847a330>, origin='.../hardware/manipulators/openyam_damiao/adapter.py')
<frozen importlib._bootstrap>:935: in _load_unlocked
    ???
        module     = <module 'dimos.hardware.manipulators.openyam_damiao.adapter' from '.../hardware/manipulators/openyam_damiao/adapter.py'>
        spec       = ModuleSpec(name='dimos.hardware.manipulators.openyam_damiao.adapter', loader=<_frozen_importlib_external.SourceFileLoa...bject at 0xff2a3847a330>, origin='.../hardware/manipulators/openyam_damiao/adapter.py')
<frozen importlib._bootstrap_external>:995: in exec_module
    ???
        code       = <code object <module> at 0x3231d220, file ".../hardware/manipulators/openyam_damiao/adapter.py", line 1>
        module     = <module 'dimos.hardware.manipulators.openyam_damiao.adapter' from '.../hardware/manipulators/openyam_damiao/adapter.py'>
        self       = <_frozen_importlib_external.SourceFileLoader object at 0xff2a3847a330>
<frozen importlib._bootstrap>:488: in _call_with_frames_removed
    ???
        args       = (<code object <module> at 0x3231d220, file ".../hardware/manipulators/openyam_damiao/a...damiao.specs.DamiaoBusSpec'>, 'DamiaoJointGroupSpec': <class 'dimos.hardware.damiao.specs.DamiaoJointGroupSpec'>, ...})
        f          = <built-in function exec>
        kwds       = {}
.../manipulators/openyam_damiao/adapter.py:27: in <module>
    _OPENYAM_MODEL_PATH = Path(LfsPath("yam_description")) / "urdf/yam_gripper.urdf.xacro"
        Any        = typing.Any
        DamiaoArmAdapter = <class 'dimos.hardware.damiao.arm_adapter.DamiaoArmAdapter'>
        DamiaoBusSpec = <class 'dimos.hardware.damiao.specs.DamiaoBusSpec'>
        DamiaoJointGroupSpec = <class 'dimos.hardware.damiao.specs.DamiaoJointGroupSpec'>
        DamiaoMotorSpec = <class 'dimos.hardware.damiao.specs.DamiaoMotorSpec'>
        DamiaoRobotSpec = <class 'dimos.hardware.damiao.specs.DamiaoRobotSpec'>
        LfsPath    = <class 'dimos.utils.data.LfsPath'>
        OPENING_METRES = 0.096
        Path       = <class 'pathlib.Path'>
        _ARM_GROUP = 'arm'
        _BUS_NAME  = 'openyam_can'
        __builtins__ = <builtins>
        __cached__ = '.../hardware/manipulators/openyam_damiao/__pycache__/adapter.cpython-312.pyc'
        __doc__    = "OpenYAM's six-axis Damiao adapter."
        __file__   = '.../hardware/manipulators/openyam_damiao/adapter.py'
        __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0xff2a3847a330>
        __name__   = 'dimos.hardware.manipulators.openyam_damiao.adapter'
        __package__ = 'dimos.hardware.manipulators.openyam_damiao'
        __spec__   = ModuleSpec(name='dimos.hardware.manipulators.openyam_damiao.adapter', loader=<_frozen_importlib_external.SourceFileLoa...bject at 0xff2a3847a330>, origin='.../hardware/manipulators/openyam_damiao/adapter.py')
        annotations = _Feature((3, 7, 0, 'beta', 1), None, 16777216)
        cast       = <function cast at 0xff2b38f068e0>
        math       = <module 'math' (built-in)>
        parse_model = <function parse_model at 0xff2a4fb5ab60>
........./usr/lib/python3.12/pathlib.py:1164: in __init__
    super().__init__(*args)
        __class__  = <class 'pathlib.Path'>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3852a0d0>,)
        kwargs     = {}
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xff2a3f1b5bd0>
........./usr/lib/python3.12/pathlib.py:362: in __init__
    if arg._flavour is ntpath and self._flavour is posixpath:
        arg        = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3852a0d0>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3852a0d0>,)
        ntpath     = <module 'ntpath' (frozen)>
        paths      = []
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xff2a3f1b5bd0>
dimos/utils/data.py:364: in __getattribute__
    resolved = object.__getattribute__(self, "_ensure_downloaded")()
        name       = '_flavour'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3852a0d0>
dimos/utils/data.py:347: in _ensure_downloaded
    cache = get_data(filename)
        cache      = None
        filename   = 'yam_description'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3852a0d0>
dimos/utils/data.py:304: in get_data
    archive_path = _decompress_archive(_pull_lfs_archive(archive_name))
        archive_name = 'yam_description'
        data_dir   = PosixPath('.../dimos/dimos/data')
        file_path  = PosixPath('.../dimos/dimos/data/yam_description')
        name       = 'yam_description'
        nested_path = None
        path_parts = ('yam_description',)
dimos/utils/data.py:248: in _pull_lfs_archive
    _lfs_pull(file_path, repo_root)
        file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
        filename   = 'yam_description'
        repo_root  = PosixPath('.../work/dimos/dimos')
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

file_path = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
repo_root = PosixPath('.../work/dimos/dimos')

    def _lfs_pull(file_path: Path, repo_root: Path, *, retries: int = 2) -> None:
        relative_path = file_path.relative_to(repo_root)
    
        env = os.environ.copy()
        env["GIT_LFS_FORCE_PROGRESS"] = "1"
    
        last_err: subprocess.CalledProcessError | None = None
        for attempt in range(1, retries + 2):  # retries + 1 total attempts
            try:
                subprocess.run(
                    ["git", "lfs", "pull", "--include", str(relative_path)],
                    cwd=repo_root,
                    check=True,
                    env=env,
                )
                return
            except subprocess.CalledProcessError as e:
                last_err = e
                if attempt <= retries:
                    time.sleep(attempt)  # 1s, 2s backoff
    
>       raise RuntimeError(
            f"Failed to pull LFS file {file_path} after {retries + 1} attempts: {last_err}"
        )
E       RuntimeError: Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.

attempt    = 3
env        = {'ACCEPT_EULA': 'Y', 'ACTIONS_ID_TOKEN_REQUEST_TOKEN': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4ODI2YjE3LTZhMzAtNWY5Yi1iMTY5LT...-version=2.0', 'ACTIONS_ORCHESTRATION_ID': '4dabb6bb-0cb6-4ada-a18d-544eab718932.tests.ubuntu-24_04-arm_3_14_fal', ...}
file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
last_err   = CalledProcessError(1, ['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz'])
relative_path = PosixPath('data/.lfs/yam_description.tar.gz')
repo_root  = PosixPath('.../work/dimos/dimos')
retries    = 2

dimos/utils/data.py:216: RuntimeError
dimos.codebase_checks.test_blueprint_kwargs::test_blueprint_atom_kwargs_match_module_config[openyam-planner-coordinator]
Stack Traces | 3.12s run time
blueprint_name = 'openyam-planner-coordinator'

    @pytest.mark.parametrize("blueprint_name", _blueprint_params())
    def test_blueprint_atom_kwargs_match_module_config(blueprint_name: str) -> None:
        """Fail when blueprint kwargs cannot be consumed by their target module."""
>       blueprint = _get_blueprint_or_skip(blueprint_name)

blueprint_name = 'openyam-planner-coordinator'

dimos/codebase_checks/test_blueprint_kwargs.py:91: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/codebase_checks/test_blueprint_kwargs.py:36: in _get_blueprint_or_skip
    return get_blueprint_by_name(blueprint_name)
        blueprint_name = 'openyam-planner-coordinator'
        message    = "Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz']' returned non-zero exit status 1."
dimos/robot/get_all_blueprints.py:51: in get_blueprint_by_name
    module = __import__(module_path, fromlist=[attr])
        attr       = 'openyam_planner_coordinator'
        module_path = 'dimos.robot.manipulators.openyam.blueprints.basic'
        name       = 'openyam-planner-coordinator'
.../openyam/blueprints/basic.py:27: in <module>
    _openyam_planner_hw = openyam_hardware("arm")
        ControlCoordinator = <class 'dimos.control.coordinator.ControlCoordinator'>
        __builtins__ = <builtins>
        __cached__ = '.../blueprints/__pycache__/basic.cpython-312.pyc'
        __doc__    = 'Basic OpenYAM coordinator blueprints.'
        __file__   = '.../work/dimos/dimos/.../openyam/blueprints/basic.py'
        __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0xff2a3ae61730>
        __name__   = 'dimos.robot.manipulators.openyam.blueprints.basic'
        __package__ = 'dimos.robot.manipulators.openyam.blueprints'
        __spec__   = ModuleSpec(name='dimos.robot.manipulators.openyam.blueprints.basic', loader=<_frozen_importlib_external.SourceFileLoader object at 0xff2a3ae61730>, origin='.../work/dimos/dimos/.../openyam/blueprints/basic.py')
        annotations = _Feature((3, 7, 0, 'beta', 1), None, 16777216)
        autoconnect = <function autoconnect at 0xff2b1e591580>
        coordinator = <function coordinator at 0xff2a3e1c9440>
        make_openyam_model_config = <function make_openyam_model_config at 0xff2a3e1c98a0>
        openyam_hardware = <function openyam_hardware at 0xff2a3e1c9800>
        planner    = <function planner at 0xff2a3e1c94e0>
        trajectory_task = <function trajectory_task at 0xff2a3e1c9120>
.../manipulators/openyam/config.py:74: in openyam_hardware
    if not Path(OPENYAM_GRAVITY_MODEL_PATH).is_file():
        home_joints = None
        hw_id      = 'arm'
....../usr/lib/python3.12/pathlib.py:1164: in __init__
    super().__init__(*args)
        __class__  = <class 'pathlib.Path'>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3e23dbd0>,)
        kwargs     = {}
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xff2a3ac57a70>
....../usr/lib/python3.12/pathlib.py:362: in __init__
    if arg._flavour is ntpath and self._flavour is posixpath:
        arg        = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3e23dbd0>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3e23dbd0>,)
        ntpath     = <module 'ntpath' (frozen)>
        paths      = []
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xff2a3ac57a70>
dimos/utils/data.py:364: in __getattribute__
    resolved = object.__getattribute__(self, "_ensure_downloaded")()
        name       = '_flavour'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3e23dbd0>
dimos/utils/data.py:347: in _ensure_downloaded
    cache = get_data(filename)
        cache      = None
        filename   = 'yam_description/urdf/yam_gripper_gravity.urdf'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3e23dbd0>
dimos/utils/data.py:304: in get_data
    archive_path = _decompress_archive(_pull_lfs_archive(archive_name))
        archive_name = 'yam_description'
        data_dir   = PosixPath('.../dimos/dimos/data')
        file_path  = PosixPath('.../dimos/dimos/data/yam_description/urdf/yam_gripper_gravity.urdf')
        name       = 'yam_description/urdf/yam_gripper_gravity.urdf'
        nested_path = PosixPath('urdf/yam_gripper_gravity.urdf')
        path_parts = ('yam_description', 'urdf', 'yam_gripper_gravity.urdf')
dimos/utils/data.py:248: in _pull_lfs_archive
    _lfs_pull(file_path, repo_root)
        file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
        filename   = 'yam_description'
        repo_root  = PosixPath('.../work/dimos/dimos')
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

file_path = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
repo_root = PosixPath('.../work/dimos/dimos')

    def _lfs_pull(file_path: Path, repo_root: Path, *, retries: int = 2) -> None:
        relative_path = file_path.relative_to(repo_root)
    
        env = os.environ.copy()
        env["GIT_LFS_FORCE_PROGRESS"] = "1"
    
        last_err: subprocess.CalledProcessError | None = None
        for attempt in range(1, retries + 2):  # retries + 1 total attempts
            try:
                subprocess.run(
                    ["git", "lfs", "pull", "--include", str(relative_path)],
                    cwd=repo_root,
                    check=True,
                    env=env,
                )
                return
            except subprocess.CalledProcessError as e:
                last_err = e
                if attempt <= retries:
                    time.sleep(attempt)  # 1s, 2s backoff
    
>       raise RuntimeError(
            f"Failed to pull LFS file {file_path} after {retries + 1} attempts: {last_err}"
        )
E       RuntimeError: Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.

attempt    = 3
env        = {'ACCEPT_EULA': 'Y', 'ACTIONS_ID_TOKEN_REQUEST_TOKEN': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4ODI2YjE3LTZhMzAtNWY5Yi1iMTY5LT...-version=2.0', 'ACTIONS_ORCHESTRATION_ID': '4dabb6bb-0cb6-4ada-a18d-544eab718932.tests.ubuntu-24_04-arm_3_14_fal', ...}
file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
last_err   = CalledProcessError(1, ['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz'])
relative_path = PosixPath('data/.lfs/yam_description.tar.gz')
repo_root  = PosixPath('.../work/dimos/dimos')
retries    = 2

dimos/utils/data.py:216: RuntimeError
dimos.robot.test_all_blueprints::test_blueprint_is_valid[openyam-planner-coordinator]
Stack Traces | 3.12s run time
blueprint_name = 'openyam-planner-coordinator'

    @pytest.mark.parametrize("blueprint_name", UBUNTU_BLUEPRINTS)
    def test_blueprint_is_valid(blueprint_name: str) -> None:
        """Validate blueprints that should import on the ubuntu-latest runner."""
>       _check_blueprint(blueprint_name)

blueprint_name = 'openyam-planner-coordinator'

dimos/robot/test_all_blueprints.py:109: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/robot/test_all_blueprints.py:85: in _check_blueprint
    blueprint = get_blueprint_by_name(blueprint_name)
        blueprint_name = 'openyam-planner-coordinator'
        message    = "Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz']' returned non-zero exit status 1."
dimos/robot/get_all_blueprints.py:51: in get_blueprint_by_name
    module = __import__(module_path, fromlist=[attr])
        attr       = 'openyam_planner_coordinator'
        module_path = 'dimos.robot.manipulators.openyam.blueprints.basic'
        name       = 'openyam-planner-coordinator'
.../openyam/blueprints/basic.py:27: in <module>
    _openyam_planner_hw = openyam_hardware("arm")
        ControlCoordinator = <class 'dimos.control.coordinator.ControlCoordinator'>
        __builtins__ = <builtins>
        __cached__ = '.../blueprints/__pycache__/basic.cpython-312.pyc'
        __doc__    = 'Basic OpenYAM coordinator blueprints.'
        __file__   = '.../work/dimos/dimos/.../openyam/blueprints/basic.py'
        __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0xffd71d0ce000>
        __name__   = 'dimos.robot.manipulators.openyam.blueprints.basic'
        __package__ = 'dimos.robot.manipulators.openyam.blueprints'
        __spec__   = ModuleSpec(name='dimos.robot.manipulators.openyam.blueprints.basic', loader=<_frozen_importlib_external.SourceFileLoader object at 0xffd71d0ce000>, origin='.../work/dimos/dimos/.../openyam/blueprints/basic.py')
        annotations = _Feature((3, 7, 0, 'beta', 1), None, 16777216)
        autoconnect = <function autoconnect at 0xffd7fd8bd580>
        coordinator = <function coordinator at 0xffd71d058860>
        make_openyam_model_config = <function make_openyam_model_config at 0xffd71d058cc0>
        openyam_hardware = <function openyam_hardware at 0xffd71d058c20>
        planner    = <function planner at 0xffd71d058900>
        trajectory_task = <function trajectory_task at 0xffd71d058540>
.../manipulators/openyam/config.py:74: in openyam_hardware
    if not Path(OPENYAM_GRAVITY_MODEL_PATH).is_file():
        home_joints = None
        hw_id      = 'arm'
....../usr/lib/python3.12/pathlib.py:1164: in __init__
    super().__init__(*args)
        __class__  = <class 'pathlib.Path'>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>,)
        kwargs     = {}
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xffd71a4d0ac0>
....../usr/lib/python3.12/pathlib.py:362: in __init__
    if arg._flavour is ntpath and self._flavour is posixpath:
        arg        = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>,)
        ntpath     = <module 'ntpath' (frozen)>
        paths      = []
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xffd71a4d0ac0>
dimos/utils/data.py:364: in __getattribute__
    resolved = object.__getattribute__(self, "_ensure_downloaded")()
        name       = '_flavour'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>
dimos/utils/data.py:347: in _ensure_downloaded
    cache = get_data(filename)
        cache      = None
        filename   = 'yam_description/urdf/yam_gripper_gravity.urdf'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>
dimos/utils/data.py:304: in get_data
    archive_path = _decompress_archive(_pull_lfs_archive(archive_name))
        archive_name = 'yam_description'
        data_dir   = PosixPath('.../dimos/dimos/data')
        file_path  = PosixPath('.../dimos/dimos/data/yam_description/urdf/yam_gripper_gravity.urdf')
        name       = 'yam_description/urdf/yam_gripper_gravity.urdf'
        nested_path = PosixPath('urdf/yam_gripper_gravity.urdf')
        path_parts = ('yam_description', 'urdf', 'yam_gripper_gravity.urdf')
dimos/utils/data.py:248: in _pull_lfs_archive
    _lfs_pull(file_path, repo_root)
        file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
        filename   = 'yam_description'
        repo_root  = PosixPath('.../work/dimos/dimos')
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

file_path = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
repo_root = PosixPath('.../work/dimos/dimos')

    def _lfs_pull(file_path: Path, repo_root: Path, *, retries: int = 2) -> None:
        relative_path = file_path.relative_to(repo_root)
    
        env = os.environ.copy()
        env["GIT_LFS_FORCE_PROGRESS"] = "1"
    
        last_err: subprocess.CalledProcessError | None = None
        for attempt in range(1, retries + 2):  # retries + 1 total attempts
            try:
                subprocess.run(
                    ["git", "lfs", "pull", "--include", str(relative_path)],
                    cwd=repo_root,
                    check=True,
                    env=env,
                )
                return
            except subprocess.CalledProcessError as e:
                last_err = e
                if attempt <= retries:
                    time.sleep(attempt)  # 1s, 2s backoff
    
>       raise RuntimeError(
            f"Failed to pull LFS file {file_path} after {retries + 1} attempts: {last_err}"
        )
E       RuntimeError: Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.

attempt    = 3
env        = {'ACCEPT_EULA': 'Y', 'ACTIONS_ID_TOKEN_REQUEST_TOKEN': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4ODI2YjE3LTZhMzAtNWY5Yi1iMTY5LT...-version=2.0', 'ACTIONS_ORCHESTRATION_ID': '4dabb6bb-0cb6-4ada-a18d-544eab718932.tests.ubuntu-24_04-arm_3_14_fal', ...}
file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
last_err   = CalledProcessError(1, ['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz'])
relative_path = PosixPath('data/.lfs/yam_description.tar.gz')
repo_root  = PosixPath('.../work/dimos/dimos')
retries    = 2

dimos/utils/data.py:216: RuntimeError
dimos.codebase_checks.test_blueprint_kwargs::test_blueprint_atom_kwargs_match_module_config[keyboard-teleop-openyam]
Stack Traces | 3.15s run time
blueprint_name = 'keyboard-teleop-openyam'

    @pytest.mark.parametrize("blueprint_name", _blueprint_params())
    def test_blueprint_atom_kwargs_match_module_config(blueprint_name: str) -> None:
        """Fail when blueprint kwargs cannot be consumed by their target module."""
>       blueprint = _get_blueprint_or_skip(blueprint_name)

blueprint_name = 'keyboard-teleop-openyam'

dimos/codebase_checks/test_blueprint_kwargs.py:91: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/codebase_checks/test_blueprint_kwargs.py:36: in _get_blueprint_or_skip
    return get_blueprint_by_name(blueprint_name)
        blueprint_name = 'keyboard-teleop-openyam'
        message    = "Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz']' returned non-zero exit status 1."
dimos/robot/get_all_blueprints.py:51: in get_blueprint_by_name
    module = __import__(module_path, fromlist=[attr])
        attr       = 'keyboard_teleop_openyam'
        module_path = 'dimos.robot.manipulators.openyam.blueprints.teleop'
        name       = 'keyboard-teleop-openyam'
.../openyam/blueprints/teleop.py:31: in <module>
    _openyam_keyboard_hw = openyam_hardware("arm")
        ControlCoordinator = <class 'dimos.control.coordinator.ControlCoordinator'>
        KeyboardTeleopModule = <class 'dimos.teleop.keyboard.keyboard_teleop_module.KeyboardTeleopModule'>
        ManipulationModule = <class 'dimos.manipulation.manipulation_module.ManipulationModule'>
        OPENYAM_DOF = 6
        OPENYAM_MODEL_PATH = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3e23c5d0>
        __builtins__ = <builtins>
        __cached__ = '.../blueprints/__pycache__/teleop.cpython-312.pyc'
        __doc__    = 'OpenYAM keyboard teleop blueprints.'
        __file__   = '.../work/dimos/dimos/.../openyam/blueprints/teleop.py'
        __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0xff2a3ccc5970>
        __name__   = 'dimos.robot.manipulators.openyam.blueprints.teleop'
        __package__ = 'dimos.robot.manipulators.openyam.blueprints'
        __spec__   = ModuleSpec(name='dimos.robot.manipulators.openyam.blueprints.teleop', loader=<_frozen_importlib_external.SourceFileLoa...bject at 0xff2a3ccc5970>, origin='.../work/dimos/dimos/.../openyam/blueprints/teleop.py')
        annotations = _Feature((3, 7, 0, 'beta', 1), None, 16777216)
        autoconnect = <function autoconnect at 0xff2b1e591580>
        eef_twist_task = <function eef_twist_task at 0xff2a3e1c91c0>
        make_openyam_model_config = <function make_openyam_model_config at 0xff2a3e1c98a0>
        openyam_hardware = <function openyam_hardware at 0xff2a3e1c9800>
.../manipulators/openyam/config.py:74: in openyam_hardware
    if not Path(OPENYAM_GRAVITY_MODEL_PATH).is_file():
        home_joints = None
        hw_id      = 'arm'
....../usr/lib/python3.12/pathlib.py:1164: in __init__
    super().__init__(*args)
        __class__  = <class 'pathlib.Path'>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3e23dbd0>,)
        kwargs     = {}
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xff2a3ac54c80>
....../usr/lib/python3.12/pathlib.py:362: in __init__
    if arg._flavour is ntpath and self._flavour is posixpath:
        arg        = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3e23dbd0>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3e23dbd0>,)
        ntpath     = <module 'ntpath' (frozen)>
        paths      = []
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xff2a3ac54c80>
dimos/utils/data.py:364: in __getattribute__
    resolved = object.__getattribute__(self, "_ensure_downloaded")()
        name       = '_flavour'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3e23dbd0>
dimos/utils/data.py:347: in _ensure_downloaded
    cache = get_data(filename)
        cache      = None
        filename   = 'yam_description/urdf/yam_gripper_gravity.urdf'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3e23dbd0>
dimos/utils/data.py:304: in get_data
    archive_path = _decompress_archive(_pull_lfs_archive(archive_name))
        archive_name = 'yam_description'
        data_dir   = PosixPath('.../dimos/dimos/data')
        file_path  = PosixPath('.../dimos/dimos/data/yam_description/urdf/yam_gripper_gravity.urdf')
        name       = 'yam_description/urdf/yam_gripper_gravity.urdf'
        nested_path = PosixPath('urdf/yam_gripper_gravity.urdf')
        path_parts = ('yam_description', 'urdf', 'yam_gripper_gravity.urdf')
dimos/utils/data.py:248: in _pull_lfs_archive
    _lfs_pull(file_path, repo_root)
        file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
        filename   = 'yam_description'
        repo_root  = PosixPath('.../work/dimos/dimos')
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

file_path = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
repo_root = PosixPath('.../work/dimos/dimos')

    def _lfs_pull(file_path: Path, repo_root: Path, *, retries: int = 2) -> None:
        relative_path = file_path.relative_to(repo_root)
    
        env = os.environ.copy()
        env["GIT_LFS_FORCE_PROGRESS"] = "1"
    
        last_err: subprocess.CalledProcessError | None = None
        for attempt in range(1, retries + 2):  # retries + 1 total attempts
            try:
                subprocess.run(
                    ["git", "lfs", "pull", "--include", str(relative_path)],
                    cwd=repo_root,
                    check=True,
                    env=env,
                )
                return
            except subprocess.CalledProcessError as e:
                last_err = e
                if attempt <= retries:
                    time.sleep(attempt)  # 1s, 2s backoff
    
>       raise RuntimeError(
            f"Failed to pull LFS file {file_path} after {retries + 1} attempts: {last_err}"
        )
E       RuntimeError: Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.

attempt    = 3
env        = {'ACCEPT_EULA': 'Y', 'ACTIONS_ID_TOKEN_REQUEST_TOKEN': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4ODI2YjE3LTZhMzAtNWY5Yi1iMTY5LT...-version=2.0', 'ACTIONS_ORCHESTRATION_ID': '4dabb6bb-0cb6-4ada-a18d-544eab718932.tests.ubuntu-24_04-arm_3_14_fal', ...}
file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
last_err   = CalledProcessError(1, ['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz'])
relative_path = PosixPath('data/.lfs/yam_description.tar.gz')
repo_root  = PosixPath('.../work/dimos/dimos')
retries    = 2

dimos/utils/data.py:216: RuntimeError
dimos.robot.test_all_blueprints::test_blueprint_is_valid[coordinator-openyam]
Stack Traces | 3.15s run time
blueprint_name = 'coordinator-openyam'

    @pytest.mark.parametrize("blueprint_name", UBUNTU_BLUEPRINTS)
    def test_blueprint_is_valid(blueprint_name: str) -> None:
        """Validate blueprints that should import on the ubuntu-latest runner."""
>       _check_blueprint(blueprint_name)

blueprint_name = 'coordinator-openyam'

dimos/robot/test_all_blueprints.py:109: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/robot/test_all_blueprints.py:85: in _check_blueprint
    blueprint = get_blueprint_by_name(blueprint_name)
        blueprint_name = 'coordinator-openyam'
        message    = "Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz']' returned non-zero exit status 1."
dimos/robot/get_all_blueprints.py:51: in get_blueprint_by_name
    module = __import__(module_path, fromlist=[attr])
        attr       = 'coordinator_openyam'
        module_path = 'dimos.robot.manipulators.openyam.blueprints.basic'
        name       = 'coordinator-openyam'
.../openyam/blueprints/basic.py:27: in <module>
    _openyam_planner_hw = openyam_hardware("arm")
        ControlCoordinator = <class 'dimos.control.coordinator.ControlCoordinator'>
        __builtins__ = <builtins>
        __cached__ = '.../blueprints/__pycache__/basic.cpython-312.pyc'
        __doc__    = 'Basic OpenYAM coordinator blueprints.'
        __file__   = '.../work/dimos/dimos/.../openyam/blueprints/basic.py'
        __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0xffd7e23b53d0>
        __name__   = 'dimos.robot.manipulators.openyam.blueprints.basic'
        __package__ = 'dimos.robot.manipulators.openyam.blueprints'
        __spec__   = ModuleSpec(name='dimos.robot.manipulators.openyam.blueprints.basic', loader=<_frozen_importlib_external.SourceFileLoader object at 0xffd7e23b53d0>, origin='.../work/dimos/dimos/.../openyam/blueprints/basic.py')
        annotations = _Feature((3, 7, 0, 'beta', 1), None, 16777216)
        autoconnect = <function autoconnect at 0xffd7fd8bd580>
        coordinator = <function coordinator at 0xffd71d058860>
        make_openyam_model_config = <function make_openyam_model_config at 0xffd71d058cc0>
        openyam_hardware = <function openyam_hardware at 0xffd71d058c20>
        planner    = <function planner at 0xffd71d058900>
        trajectory_task = <function trajectory_task at 0xffd71d058540>
.../manipulators/openyam/config.py:74: in openyam_hardware
    if not Path(OPENYAM_GRAVITY_MODEL_PATH).is_file():
        home_joints = None
        hw_id      = 'arm'
....../usr/lib/python3.12/pathlib.py:1164: in __init__
    super().__init__(*args)
        __class__  = <class 'pathlib.Path'>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>,)
        kwargs     = {}
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xffd719fa35a0>
....../usr/lib/python3.12/pathlib.py:362: in __init__
    if arg._flavour is ntpath and self._flavour is posixpath:
        arg        = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>,)
        ntpath     = <module 'ntpath' (frozen)>
        paths      = []
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xffd719fa35a0>
dimos/utils/data.py:364: in __getattribute__
    resolved = object.__getattribute__(self, "_ensure_downloaded")()
        name       = '_flavour'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>
dimos/utils/data.py:347: in _ensure_downloaded
    cache = get_data(filename)
        cache      = None
        filename   = 'yam_description/urdf/yam_gripper_gravity.urdf'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>
dimos/utils/data.py:304: in get_data
    archive_path = _decompress_archive(_pull_lfs_archive(archive_name))
        archive_name = 'yam_description'
        data_dir   = PosixPath('.../dimos/dimos/data')
        file_path  = PosixPath('.../dimos/dimos/data/yam_description/urdf/yam_gripper_gravity.urdf')
        name       = 'yam_description/urdf/yam_gripper_gravity.urdf'
        nested_path = PosixPath('urdf/yam_gripper_gravity.urdf')
        path_parts = ('yam_description', 'urdf', 'yam_gripper_gravity.urdf')
dimos/utils/data.py:248: in _pull_lfs_archive
    _lfs_pull(file_path, repo_root)
        file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
        filename   = 'yam_description'
        repo_root  = PosixPath('.../work/dimos/dimos')
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

file_path = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
repo_root = PosixPath('.../work/dimos/dimos')

    def _lfs_pull(file_path: Path, repo_root: Path, *, retries: int = 2) -> None:
        relative_path = file_path.relative_to(repo_root)
    
        env = os.environ.copy()
        env["GIT_LFS_FORCE_PROGRESS"] = "1"
    
        last_err: subprocess.CalledProcessError | None = None
        for attempt in range(1, retries + 2):  # retries + 1 total attempts
            try:
                subprocess.run(
                    ["git", "lfs", "pull", "--include", str(relative_path)],
                    cwd=repo_root,
                    check=True,
                    env=env,
                )
                return
            except subprocess.CalledProcessError as e:
                last_err = e
                if attempt <= retries:
                    time.sleep(attempt)  # 1s, 2s backoff
    
>       raise RuntimeError(
            f"Failed to pull LFS file {file_path} after {retries + 1} attempts: {last_err}"
        )
E       RuntimeError: Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.

attempt    = 3
env        = {'ACCEPT_EULA': 'Y', 'ACTIONS_ID_TOKEN_REQUEST_TOKEN': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4ODI2YjE3LTZhMzAtNWY5Yi1iMTY5LT...-version=2.0', 'ACTIONS_ORCHESTRATION_ID': '4dabb6bb-0cb6-4ada-a18d-544eab718932.tests.ubuntu-24_04-arm_3_14_fal', ...}
file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
last_err   = CalledProcessError(1, ['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz'])
relative_path = PosixPath('data/.lfs/yam_description.tar.gz')
repo_root  = PosixPath('.../work/dimos/dimos')
retries    = 2

dimos/utils/data.py:216: RuntimeError
dimos.robot.test_all_blueprints::test_blueprint_is_valid[keyboard-teleop-openyam]
Stack Traces | 3.15s run time
blueprint_name = 'keyboard-teleop-openyam'

    @pytest.mark.parametrize("blueprint_name", UBUNTU_BLUEPRINTS)
    def test_blueprint_is_valid(blueprint_name: str) -> None:
        """Validate blueprints that should import on the ubuntu-latest runner."""
>       _check_blueprint(blueprint_name)

blueprint_name = 'keyboard-teleop-openyam'

dimos/robot/test_all_blueprints.py:109: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/robot/test_all_blueprints.py:85: in _check_blueprint
    blueprint = get_blueprint_by_name(blueprint_name)
        blueprint_name = 'keyboard-teleop-openyam'
        message    = "Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz']' returned non-zero exit status 1."
dimos/robot/get_all_blueprints.py:51: in get_blueprint_by_name
    module = __import__(module_path, fromlist=[attr])
        attr       = 'keyboard_teleop_openyam'
        module_path = 'dimos.robot.manipulators.openyam.blueprints.teleop'
        name       = 'keyboard-teleop-openyam'
.../openyam/blueprints/teleop.py:31: in <module>
    _openyam_keyboard_hw = openyam_hardware("arm")
        ControlCoordinator = <class 'dimos.control.coordinator.ControlCoordinator'>
        KeyboardTeleopModule = <class 'dimos.teleop.keyboard.keyboard_teleop_module.KeyboardTeleopModule'>
        ManipulationModule = <class 'dimos.manipulation.manipulation_module.ManipulationModule'>
        OPENYAM_DOF = 6
        OPENYAM_MODEL_PATH = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac71d0>
        __builtins__ = <builtins>
        __cached__ = '.../blueprints/__pycache__/teleop.cpython-312.pyc'
        __doc__    = 'OpenYAM keyboard teleop blueprints.'
        __file__   = '.../work/dimos/dimos/.../openyam/blueprints/teleop.py'
        __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0xffd71c236f30>
        __name__   = 'dimos.robot.manipulators.openyam.blueprints.teleop'
        __package__ = 'dimos.robot.manipulators.openyam.blueprints'
        __spec__   = ModuleSpec(name='dimos.robot.manipulators.openyam.blueprints.teleop', loader=<_frozen_importlib_external.SourceFileLoa...bject at 0xffd71c236f30>, origin='.../work/dimos/dimos/.../openyam/blueprints/teleop.py')
        annotations = _Feature((3, 7, 0, 'beta', 1), None, 16777216)
        autoconnect = <function autoconnect at 0xffd7fd8bd580>
        eef_twist_task = <function eef_twist_task at 0xffd71d0585e0>
        make_openyam_model_config = <function make_openyam_model_config at 0xffd71d058cc0>
        openyam_hardware = <function openyam_hardware at 0xffd71d058c20>
.../manipulators/openyam/config.py:74: in openyam_hardware
    if not Path(OPENYAM_GRAVITY_MODEL_PATH).is_file():
        home_joints = None
        hw_id      = 'arm'
....../usr/lib/python3.12/pathlib.py:1164: in __init__
    super().__init__(*args)
        __class__  = <class 'pathlib.Path'>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>,)
        kwargs     = {}
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xffd71a453450>
....../usr/lib/python3.12/pathlib.py:362: in __init__
    if arg._flavour is ntpath and self._flavour is posixpath:
        arg        = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>,)
        ntpath     = <module 'ntpath' (frozen)>
        paths      = []
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xffd71a453450>
dimos/utils/data.py:364: in __getattribute__
    resolved = object.__getattribute__(self, "_ensure_downloaded")()
        name       = '_flavour'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>
dimos/utils/data.py:347: in _ensure_downloaded
    cache = get_data(filename)
        cache      = None
        filename   = 'yam_description/urdf/yam_gripper_gravity.urdf'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffd71cac70d0>
dimos/utils/data.py:304: in get_data
    archive_path = _decompress_archive(_pull_lfs_archive(archive_name))
        archive_name = 'yam_description'
        data_dir   = PosixPath('.../dimos/dimos/data')
        file_path  = PosixPath('.../dimos/dimos/data/yam_description/urdf/yam_gripper_gravity.urdf')
        name       = 'yam_description/urdf/yam_gripper_gravity.urdf'
        nested_path = PosixPath('urdf/yam_gripper_gravity.urdf')
        path_parts = ('yam_description', 'urdf', 'yam_gripper_gravity.urdf')
dimos/utils/data.py:248: in _pull_lfs_archive
    _lfs_pull(file_path, repo_root)
        file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
        filename   = 'yam_description'
        repo_root  = PosixPath('.../work/dimos/dimos')
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

file_path = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
repo_root = PosixPath('.../work/dimos/dimos')

    def _lfs_pull(file_path: Path, repo_root: Path, *, retries: int = 2) -> None:
        relative_path = file_path.relative_to(repo_root)
    
        env = os.environ.copy()
        env["GIT_LFS_FORCE_PROGRESS"] = "1"
    
        last_err: subprocess.CalledProcessError | None = None
        for attempt in range(1, retries + 2):  # retries + 1 total attempts
            try:
                subprocess.run(
                    ["git", "lfs", "pull", "--include", str(relative_path)],
                    cwd=repo_root,
                    check=True,
                    env=env,
                )
                return
            except subprocess.CalledProcessError as e:
                last_err = e
                if attempt <= retries:
                    time.sleep(attempt)  # 1s, 2s backoff
    
>       raise RuntimeError(
            f"Failed to pull LFS file {file_path} after {retries + 1} attempts: {last_err}"
        )
E       RuntimeError: Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.

attempt    = 3
env        = {'ACCEPT_EULA': 'Y', 'ACTIONS_ID_TOKEN_REQUEST_TOKEN': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4ODI2YjE3LTZhMzAtNWY5Yi1iMTY5LT...-version=2.0', 'ACTIONS_ORCHESTRATION_ID': '4dabb6bb-0cb6-4ada-a18d-544eab718932.tests.ubuntu-24_04-arm_3_14_fal', ...}
file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
last_err   = CalledProcessError(1, ['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz'])
relative_path = PosixPath('data/.lfs/yam_description.tar.gz')
repo_root  = PosixPath('.../work/dimos/dimos')
retries    = 2

dimos/utils/data.py:216: RuntimeError
dimos.codebase_checks.test_blueprint_kwargs::test_blueprint_atom_kwargs_match_module_config[coordinator-openyam]
Stack Traces | 3.16s run time
blueprint_name = 'coordinator-openyam'

    @pytest.mark.parametrize("blueprint_name", _blueprint_params())
    def test_blueprint_atom_kwargs_match_module_config(blueprint_name: str) -> None:
        """Fail when blueprint kwargs cannot be consumed by their target module."""
>       blueprint = _get_blueprint_or_skip(blueprint_name)

blueprint_name = 'coordinator-openyam'

dimos/codebase_checks/test_blueprint_kwargs.py:91: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/codebase_checks/test_blueprint_kwargs.py:36: in _get_blueprint_or_skip
    return get_blueprint_by_name(blueprint_name)
        blueprint_name = 'coordinator-openyam'
        message    = "Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz']' returned non-zero exit status 1."
dimos/robot/get_all_blueprints.py:51: in get_blueprint_by_name
    module = __import__(module_path, fromlist=[attr])
        attr       = 'coordinator_openyam'
        module_path = 'dimos.robot.manipulators.openyam.blueprints.basic'
        name       = 'coordinator-openyam'
.../openyam/blueprints/basic.py:27: in <module>
    _openyam_planner_hw = openyam_hardware("arm")
        ControlCoordinator = <class 'dimos.control.coordinator.ControlCoordinator'>
        __builtins__ = <builtins>
        __cached__ = '.../blueprints/__pycache__/basic.cpython-312.pyc'
        __doc__    = 'Basic OpenYAM coordinator blueprints.'
        __file__   = '.../work/dimos/dimos/.../openyam/blueprints/basic.py'
        __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0xff2a3ce675f0>
        __name__   = 'dimos.robot.manipulators.openyam.blueprints.basic'
        __package__ = 'dimos.robot.manipulators.openyam.blueprints'
        __spec__   = ModuleSpec(name='dimos.robot.manipulators.openyam.blueprints.basic', loader=<_frozen_importlib_external.SourceFileLoader object at 0xff2a3ce675f0>, origin='.../work/dimos/dimos/.../openyam/blueprints/basic.py')
        annotations = _Feature((3, 7, 0, 'beta', 1), None, 16777216)
        autoconnect = <function autoconnect at 0xff2b1e591580>
        coordinator = <function coordinator at 0xff2a3e1c9440>
        make_openyam_model_config = <function make_openyam_model_config at 0xff2a3e1c98a0>
        openyam_hardware = <function openyam_hardware at 0xff2a3e1c9800>
        planner    = <function planner at 0xff2a3e1c94e0>
        trajectory_task = <function trajectory_task at 0xff2a3e1c9120>
.../manipulators/openyam/config.py:74: in openyam_hardware
    if not Path(OPENYAM_GRAVITY_MODEL_PATH).is_file():
        home_joints = None
        hw_id      = 'arm'
....../usr/lib/python3.12/pathlib.py:1164: in __init__
    super().__init__(*args)
        __class__  = <class 'pathlib.Path'>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3e23dbd0>,)
        kwargs     = {}
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xff2a3b280a50>
....../usr/lib/python3.12/pathlib.py:362: in __init__
    if arg._flavour is ntpath and self._flavour is posixpath:
        arg        = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3e23dbd0>
        args       = (<[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attemp....lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3e23dbd0>,)
        ntpath     = <module 'ntpath' (frozen)>
        paths      = []
        self       = <[AttributeError("'PosixPath' object has no attribute '_raw_paths'") raised in repr()] PosixPath object at 0xff2a3b280a50>
dimos/utils/data.py:364: in __getattribute__
    resolved = object.__getattribute__(self, "_ensure_downloaded")()
        name       = '_flavour'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3e23dbd0>
dimos/utils/data.py:347: in _ensure_downloaded
    cache = get_data(filename)
        cache      = None
        filename   = 'yam_description/urdf/yam_gripper_gravity.urdf'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempt...a/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff2a3e23dbd0>
dimos/utils/data.py:304: in get_data
    archive_path = _decompress_archive(_pull_lfs_archive(archive_name))
        archive_name = 'yam_description'
        data_dir   = PosixPath('.../dimos/dimos/data')
        file_path  = PosixPath('.../dimos/dimos/data/yam_description/urdf/yam_gripper_gravity.urdf')
        name       = 'yam_description/urdf/yam_gripper_gravity.urdf'
        nested_path = PosixPath('urdf/yam_gripper_gravity.urdf')
        path_parts = ('yam_description', 'urdf', 'yam_gripper_gravity.urdf')
dimos/utils/data.py:248: in _pull_lfs_archive
    _lfs_pull(file_path, repo_root)
        file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
        filename   = 'yam_description'
        repo_root  = PosixPath('.../work/dimos/dimos')
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

file_path = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
repo_root = PosixPath('.../work/dimos/dimos')

    def _lfs_pull(file_path: Path, repo_root: Path, *, retries: int = 2) -> None:
        relative_path = file_path.relative_to(repo_root)
    
        env = os.environ.copy()
        env["GIT_LFS_FORCE_PROGRESS"] = "1"
    
        last_err: subprocess.CalledProcessError | None = None
        for attempt in range(1, retries + 2):  # retries + 1 total attempts
            try:
                subprocess.run(
                    ["git", "lfs", "pull", "--include", str(relative_path)],
                    cwd=repo_root,
                    check=True,
                    env=env,
                )
                return
            except subprocess.CalledProcessError as e:
                last_err = e
                if attempt <= retries:
                    time.sleep(attempt)  # 1s, 2s backoff
    
>       raise RuntimeError(
            f"Failed to pull LFS file {file_path} after {retries + 1} attempts: {last_err}"
        )
E       RuntimeError: Failed to pull LFS file .../dimos/data/.lfs/yam_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz']' returned non-zero exit status 1.

attempt    = 3
env        = {'ACCEPT_EULA': 'Y', 'ACTIONS_ID_TOKEN_REQUEST_TOKEN': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4ODI2YjE3LTZhMzAtNWY5Yi1iMTY5LT...-version=2.0', 'ACTIONS_ORCHESTRATION_ID': '4dabb6bb-0cb6-4ada-a18d-544eab718932.tests.ubuntu-24_04-arm_3_14_fal', ...}
file_path  = PosixPath('.../dimos/data/.lfs/yam_description.tar.gz')
last_err   = CalledProcessError(1, ['git', 'lfs', 'pull', '--include', 'data/.lfs/yam_description.tar.gz'])
relative_path = PosixPath('data/.lfs/yam_description.tar.gz')
repo_root  = PosixPath('.../work/dimos/dimos')
retries    = 2

dimos/utils/data.py:216: RuntimeError
dimos.codebase_checks.test_no_all::test_no_all
Stack Traces | 5.88s run time
def test_no_all():
        """Fail if any file defines `__all__`."""
        dimos_dir = DIMOS_PROJECT_ROOT / "dimos"
        hits = find_all_definitions()
        if hits:
            listing = "\n".join(f"  - {p.relative_to(dimos_dir)}:{lineno}" for p, lineno in hits)
>           raise AssertionError(
                f"Found __all__ definition(s) in dimos/:\n{listing}\n\n"
                "__all__ is not allowed. We don't use `from x import *`, so __all__ "
                "lists serve no purpose and are tedious to maintain. Remove them. For "
                "an import that exists purely to be re-exported, use `# noqa: F401`."
            )
E           AssertionError: Found __all__ definition(s) in dimos/:
E             - hardware/damiao/__init__.py:27
E             - hardware/damiao/arm_adapter.py:557
E             - hardware/damiao/runtime.py:392
E             - hardware/damiao/specs.py:309
E             - .../manipulators/openyam_damiao/__init__.py:8
E           
E           __all__ is not allowed. We don't use `from x import *`, so __all__ lists serve no purpose and are tedious to maintain. Remove them. For an import that exists purely to be re-exported, use `# noqa: F401`.

dimos_dir  = PosixPath('.../dimos/dimos/dimos')
hits       = [(PosixPath('.../dimos/dimos/dimos/hardware/damiao/__init__.py'), 27), (PosixPath('.../runner/work/dim...ecs.py'), 309), (PosixPath('.../dimos/dimos/dimos/.../manipulators/openyam_damiao/__init__.py'), 8)]
listing    = '  - hardware/damiao/__init__.py:27\n  - hardware/damiao/arm_adapter.py:557\n  - hardware/damiao/runtime.py:392\n  - hardware/damiao/specs.py:309\n  - .../manipulators/openyam_damiao/__init__.py:8'

dimos/codebase_checks/test_no_all.py:51: AssertionError
dimos.codebase_checks.test_import_from_source::test_import_from_source
Stack Traces | 6.35s run time
def test_import_from_source() -> None:
        """Fail if any name is imported from a module that only re-imported it."""
        violations = find_reexport_imports()
        if violations:
            listing = "\n".join(
                f"  - {p.relative_to(DIMOS_PROJECT_ROOT)}:{line}: `{name}` imported from "
                f"{src}, but defined in {origin}"
                for p, line, name, src, origin in sorted(violations)
            )
>           raise AssertionError(
                f"Found import(s) that pull a name from a re-exporter:\n{listing}\n\n"
                "Import each name straight from the module that defines it (shown above). "
                "If a module re-exports a name on purpose, mark its import with "
                "`# noqa: F401` or the `from x import Y as Y` form, and that re-export "
                "will be allowed."
            )
E           AssertionError: Found import(s) that pull a name from a re-exporter:
E             - .../manipulators/openyam_damiao/adapter.py:14: `DamiaoArmAdapter` imported from dimos.hardware.damiao, but defined in dimos.hardware.damiao.arm_adapter
E             - .../manipulators/openyam_damiao/adapter.py:14: `DamiaoBusSpec` imported from dimos.hardware.damiao, but defined in dimos.hardware.damiao.specs
E             - .../manipulators/openyam_damiao/adapter.py:14: `DamiaoJointGroupSpec` imported from dimos.hardware.damiao, but defined in dimos.hardware.damiao.specs
E             - .../manipulators/openyam_damiao/adapter.py:14: `DamiaoMotorSpec` imported from dimos.hardware.damiao, but defined in dimos.hardware.damiao.specs
E             - .../manipulators/openyam_damiao/adapter.py:14: `DamiaoRobotSpec` imported from dimos.hardware.damiao, but defined in dimos.hardware.damiao.specs
E           
E           Import each name straight from the module that defines it (shown above). If a module re-exports a name on purpose, mark its import with `# noqa: F401` or the `from x import Y as Y` form, and that re-export will be allowed.

listing    = '  - .../manipulators/openyam_damiao/adapter.py:14: `DamiaoArmAdapter` imported from dimos.hardware.damiao,...amiao/adapter.py:14: `DamiaoRobotSpec` imported from dimos.hardware.damiao, but defined in dimos.hardware.damiao.specs'
violations = [(PosixPath('/home/runner/work/dimos/dimos/.../manipulators/openyam_damiao/adapter.py'), 14, 'DamiaoArmAdap...nipulators/openyam_damiao/adapter.py'), 14, 'DamiaoRobotSpec', 'dimos.hardware.damiao', 'dimos.hardware.damiao.specs')]

dimos/codebase_checks/test_import_from_source.py:148: AssertionError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@mintlify

mintlify Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
dimensional 🟡 Building Jul 21, 2026, 11:39 PM

💡 Tip: Enable Workflows to automatically generate PRs for you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant