devagent-physical-engine 1.8.1__tar.gz → 1.8.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {devagent_physical_engine-1.8.1/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.8.4}/PKG-INFO +60 -8
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/README.md +59 -7
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/pyproject.toml +3 -2
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/__init__.py +1 -1
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +15 -9
- devagent_physical_engine-1.8.4/src/devagent_physical_engine/industrial_motion_v182.py +127 -0
- devagent_physical_engine-1.8.4/src/devagent_physical_engine/ros2/destination_support_contact_v182.py +56 -0
- devagent_physical_engine-1.8.4/src/devagent_physical_engine/ros2/industrial_sequence_planner_v182.py +208 -0
- devagent_physical_engine-1.8.4/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe_v182.py +101 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +93 -30
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4/src/devagent_physical_engine.egg-info}/PKG-INFO +60 -8
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine.egg-info/SOURCES.txt +7 -0
- devagent_physical_engine-1.8.4/tests/test_destination_support_contact_v182.py +234 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_industrial_motion_v170.py +13 -6
- devagent_physical_engine-1.8.4/tests/test_package_metadata_v184.py +23 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_transfer_place_diagnostic_v172.py +9 -3
- devagent_physical_engine-1.8.4/tests/test_workpiece_attach_semantics_v183.py +38 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/NOTICE +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/setup.cfg +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/agent/__init__.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/agent/compiler.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/agent/contracts.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/agent/coordinator.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/agent/critic.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/agent/evidence.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/agent/interpreter.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/agent/planner.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/agent/recovery.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/agent/routing.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/agent/runtime.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/agent/semantic.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/agent/structured.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ai_cli.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/cli.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/commercial.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/commercial_campaign.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/commercial_cli.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/commercial_importer.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/commercial_readiness.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/commercial_repository.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/continuous_clearance.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/controller_runtime_hotfix_v181.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/doctor.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/engineering_agent.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/engineering_request.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/evidence_replay.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/evidence_trust.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/execution.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/industrial_motion_v170.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/models.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/one_command.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/one_command_runtime.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/one_command_v15.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/one_command_v16.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/operating_envelope.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/optimization/__init__.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/optimization/candidates.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/optimization/contracts.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/optimization/evidence.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/optimization/experience.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/optimization/measured.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/physical_campaign.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/physical_evidence.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/physical_motion.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/planning.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/pose_math.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/preexecution_contract.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/production_authority.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/production_grade.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/project.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/provider_criterion.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/provider_qualification.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/providers.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/qualification.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/qualification_cli.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/qualification_harness.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/reference_workcell.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/report_test_execution.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/robot_platform.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/robot_support_v18.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/robots.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/__init__.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/abb_irb1200.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/abb_irb1200_preview.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/commands.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/controller_action_probe.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/doctor.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/qualification.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/selective_verification.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/setup_profile.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/simulation.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/simulation_platform.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/tool_collision.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/twin.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/twin_builder.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/twin_codec.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/twin_materialization.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/user_cli.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/user_cli_v15.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/user_cli_v16.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/user_cli_v18.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/verification.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_abb_irb1200_visual_v18.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_agent_core.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_agent_semantic_hardening.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_ai_cli.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_ai_cli_v07.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_commercial_importer_v1.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_commercial_intelligence_v15.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_commercial_readiness_v1.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_commercial_v1.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_continuous_clearance_v011.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_controller_runtime_hotfix_v181.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_core.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_engineering_request_v07.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_evidence_replay_v12.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_evidence_trust_coverage_v12.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_evidence_trust_transport_v12.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_evidence_trust_v12.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_evidence_viewer_palette_v130.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_gazebo_cli_v0122.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_golden_abb_runner_v171.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_golden_abb_showcase.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_interpreter_profiles_v08.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_joint_state_probe_v0125.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_live_provider_qualification.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_measured_motion_v10.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_moveit_scene_v0123.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_natural_language_agent_v07.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_one_command_hardening_v13.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_one_command_pose_hardening_v15.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_one_command_regression_v141.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_one_command_v13.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_openai_strict_schema_v0113.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_optimization_v05.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_physical_campaign_v09.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_physical_evidence_v09.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_physical_motion_v09.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_planning_fallback_v012.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_pose_math_v0125.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_preexecution_contract_v10.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_production_authority_v11.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_production_grade_coverage_v11.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_production_grade_v11.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_project_spine_v013.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_provider_and_qualification.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_provider_criterion_v15.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_qualification_harness_v06.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_readme_pypi.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_real_provider_adapters.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_reference_workcell_v012.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_report_test_contract_coverage_v16.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_report_test_lineage_v16.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_report_test_visual_execution_v16.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_robot_platform_v08.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_ros2_production_receipts_v011.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_ros2_simulation.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_ros_trajectory_v09.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_selective_verification_v14.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_setup_profile.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_sim_real_qualification_v011.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_simulation_platform_v08.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_tool_collision_v011.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_tool_scene_v0124.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_trajectory_action_probe_v0125.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_trajectory_qualification_v09.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_trajectory_tracking_v0125.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_twin_materialization_v10.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_twin_v08.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_user_cli_interactive_v131.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_user_cli_progress_v131.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_user_cli_report_visual_v16.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_user_cli_selective_v14.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_user_cli_v15.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_v052_stabilization.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_v08_catalog_mapping_regression.py +0 -0
- {devagent_physical_engine-1.8.1 → devagent_physical_engine-1.8.4}/tests/test_workpiece_lifecycle_v011.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devagent-physical-engine
|
|
3
|
-
Version: 1.8.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 1.8.4
|
|
4
|
+
Summary: Verification-first robotics commissioning runtime with exact-Twin evidence, qualified UR5e Gazebo/MoveIt report execution, truthful robot support tiers, selective verification, replay, regression, and FAT reporting.
|
|
5
5
|
Author: Tom Ha
|
|
6
6
|
License: All Rights Reserved
|
|
7
7
|
Project-URL: Homepage, https://github.com/tomha85/devagent-physical-engine
|
|
@@ -76,7 +76,7 @@ regression + FAT report + Evidence Viewer
|
|
|
76
76
|
Python 3.11+ is required.
|
|
77
77
|
|
|
78
78
|
```bash
|
|
79
|
-
python -m pip install --upgrade devagent-physical-engine==1.8.
|
|
79
|
+
python -m pip install --upgrade devagent-physical-engine==1.8.4
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
Verify the installed package:
|
|
@@ -88,7 +88,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
|
|
|
88
88
|
Expected:
|
|
89
89
|
|
|
90
90
|
```text
|
|
91
|
-
1.8.
|
|
91
|
+
1.8.4
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
Run the normal customer workflow:
|
|
@@ -256,7 +256,7 @@ HOME
|
|
|
256
256
|
↓ PTP
|
|
257
257
|
```
|
|
258
258
|
|
|
259
|
-
|
|
259
|
+
Original v1.7 execution groups:
|
|
260
260
|
|
|
261
261
|
```text
|
|
262
262
|
approach_pick PTP → LIN
|
|
@@ -368,6 +368,56 @@ v1.8.1 makes UR5e readiness and trajectory execution use one controller-binding
|
|
|
368
368
|
|
|
369
369
|
The readiness gate therefore no longer depends on a long-lived `ros2 daemon`, `ros2 node list`, `ros2 topic list`, or `ros2 action list`. It remains fail-closed on missing controller-manager service, no active trajectory controller, ambiguous active controllers, a missing trajectory action server, or missing required UR5e joint state. No collision rule, Pilz target, motion speed, Twin lineage, site-qualification boundary, or real-execution authority is relaxed.
|
|
370
370
|
|
|
371
|
+
## v1.8.2 scoped destination-support place contact
|
|
372
|
+
|
|
373
|
+
A clean v1.8.1 UR5e target-stack run reached exact-Twin read-back and independently proved that transfer PTP planning succeeds while the attached-workpiece place LIN segment fails. v1.8.2 converts that evidence into a narrow placement contract rather than disabling collision checking.
|
|
374
|
+
|
|
375
|
+
The qualified report runtime now uses hard transfer/place boundaries:
|
|
376
|
+
|
|
377
|
+
```text
|
|
378
|
+
approach_pick PTP → LIN
|
|
379
|
+
lift_departure LIN
|
|
380
|
+
transfer_departure PTP
|
|
381
|
+
transfer_place LIN # place only
|
|
382
|
+
retreat_home LIN → PTP
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
`transfer_departure` remains normally collision checked. Only the single zero-blend `place` LIN planning request may add one request-local Allowed Collision Matrix pair:
|
|
386
|
+
|
|
387
|
+
```text
|
|
388
|
+
attached workpiece ↔ declared destination support
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
The place probe starts from the complete live MoveIt ACM, preserves every existing entry, enables only that symmetric pair, and applies the matrix only to the request-local PlanningScene diff. The transfer path cannot inherit the allowance. No global/live destination-contact lease remains active after planning.
|
|
392
|
+
|
|
393
|
+
The v1.8.2 place receipt records the exact destination support id, workpiece id, phase, and contact scope. Missing destination identity, a non-attached scene, a non-LIN place planner, nonzero place blending, malformed support identity, or mismatched receipt fails closed.
|
|
394
|
+
|
|
395
|
+
The release does **not** change real-execution authority, site qualification, target poses, conservative motion scales, or the rule that every motion group must preflight successfully before execution begins.
|
|
396
|
+
|
|
397
|
+
## v1.8.3 synchronous verified workpiece attach
|
|
398
|
+
|
|
399
|
+
A clean v1.8.2 target-stack run proved all five industrial preflight groups and actual `approach_pick` execution, then failed closed at GRASP with `workpiece_lifecycle_failed:apply_planning_scene_rejected`.
|
|
400
|
+
|
|
401
|
+
The attach request previously combined an `AttachedCollisionObject.ADD` with a redundant same-ID world `CollisionObject.REMOVE`. MoveIt applies attached-object state first, which already transitions the same-ID object out of the world. Processing the later redundant world REMOVE can therefore make synchronous `/apply_planning_scene` report failure even though the attachment transition was already attempted.
|
|
402
|
+
|
|
403
|
+
v1.8.3 makes the attach transition service-safe and deterministic: the request contains only the authoritative attached-object ADD. DevAgent then synchronously reads the PlanningScene back and requires all of the following before motion may continue:
|
|
404
|
+
|
|
405
|
+
```text
|
|
406
|
+
workpiece absent from world
|
|
407
|
+
exactly one attached object with the expected id
|
|
408
|
+
attached link == verified tool mount link
|
|
409
|
+
attached primitive geometry is valid
|
|
410
|
+
attachment pose/geometry hash matches the expected attachment hash
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
Detach semantics remain explicit attached-object REMOVE plus world-object ADD at the verified placement pose. No collision rule, tool/workpiece geometry, TCP, touch link, target pose, motion speed, planner, site-qualification boundary, or real-execution authority is relaxed.
|
|
414
|
+
|
|
415
|
+
## v1.8.4 PyPI metadata compliance hotfix
|
|
416
|
+
|
|
417
|
+
v1.8.4 carries the exact v1.8.3 runtime semantics and shortens only the package Core Metadata `Summary` so it satisfies PyPI's 512-character limit. A regression test now parses `pyproject.toml` and rejects an empty or over-limit project description before release.
|
|
418
|
+
|
|
419
|
+
This metadata hotfix does not change the UR5e attach/detach lifecycle, collision policy, motion planning, Twin lineage, site-qualification boundary, or real-execution authority.
|
|
420
|
+
|
|
371
421
|
## Qualified visual-execution scope
|
|
372
422
|
|
|
373
423
|
Measured report-test execution remains intentionally narrow:
|
|
@@ -568,9 +618,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
568
618
|
|
|
569
619
|
# Project status
|
|
570
620
|
|
|
571
|
-
**v1.8.
|
|
621
|
+
**v1.8.4 — Production/Stable software workflow**
|
|
572
622
|
|
|
573
|
-
v1.8.
|
|
623
|
+
v1.8.4 retains the v1.8.3 synchronous verified workpiece-attach fix, the v1.8.2 scoped destination-support place contract, v1.8.1 direct UR5e controller/action binding, truthful robot support tiers, and ABB IRB1200 experimental visual runtime. The only v1.8.4 behavior change is packaging metadata compliance for PyPI; physical runtime semantics are unchanged from v1.8.3.
|
|
574
624
|
|
|
575
625
|
Production-oriented software capabilities include:
|
|
576
626
|
|
|
@@ -585,11 +635,13 @@ exact Requirement → Mapping → Verification Plan → Case provenance
|
|
|
585
635
|
truthful robot support tiers
|
|
586
636
|
qualified UR5e report-test visual execution contract
|
|
587
637
|
direct UR5e controller-manager/action readiness binding
|
|
638
|
+
synchronous verified workpiece attach/detach lifecycle
|
|
639
|
+
scoped destination-support place contact
|
|
588
640
|
experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
|
|
589
641
|
industrial Pilz PTP / LIN planning
|
|
590
642
|
adaptive bounded blend selection
|
|
591
643
|
plan-only transfer/place segment diagnostics
|
|
592
|
-
lift-only support
|
|
644
|
+
lift-only source-support contact lease + exact restore
|
|
593
645
|
Gazebo/MoveIt selected-case visualization
|
|
594
646
|
typed physical measurement binding
|
|
595
647
|
deterministic campaigns
|
|
@@ -35,7 +35,7 @@ regression + FAT report + Evidence Viewer
|
|
|
35
35
|
Python 3.11+ is required.
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
python -m pip install --upgrade devagent-physical-engine==1.8.
|
|
38
|
+
python -m pip install --upgrade devagent-physical-engine==1.8.4
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
Verify the installed package:
|
|
@@ -47,7 +47,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
|
|
|
47
47
|
Expected:
|
|
48
48
|
|
|
49
49
|
```text
|
|
50
|
-
1.8.
|
|
50
|
+
1.8.4
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
Run the normal customer workflow:
|
|
@@ -215,7 +215,7 @@ HOME
|
|
|
215
215
|
↓ PTP
|
|
216
216
|
```
|
|
217
217
|
|
|
218
|
-
|
|
218
|
+
Original v1.7 execution groups:
|
|
219
219
|
|
|
220
220
|
```text
|
|
221
221
|
approach_pick PTP → LIN
|
|
@@ -327,6 +327,56 @@ v1.8.1 makes UR5e readiness and trajectory execution use one controller-binding
|
|
|
327
327
|
|
|
328
328
|
The readiness gate therefore no longer depends on a long-lived `ros2 daemon`, `ros2 node list`, `ros2 topic list`, or `ros2 action list`. It remains fail-closed on missing controller-manager service, no active trajectory controller, ambiguous active controllers, a missing trajectory action server, or missing required UR5e joint state. No collision rule, Pilz target, motion speed, Twin lineage, site-qualification boundary, or real-execution authority is relaxed.
|
|
329
329
|
|
|
330
|
+
## v1.8.2 scoped destination-support place contact
|
|
331
|
+
|
|
332
|
+
A clean v1.8.1 UR5e target-stack run reached exact-Twin read-back and independently proved that transfer PTP planning succeeds while the attached-workpiece place LIN segment fails. v1.8.2 converts that evidence into a narrow placement contract rather than disabling collision checking.
|
|
333
|
+
|
|
334
|
+
The qualified report runtime now uses hard transfer/place boundaries:
|
|
335
|
+
|
|
336
|
+
```text
|
|
337
|
+
approach_pick PTP → LIN
|
|
338
|
+
lift_departure LIN
|
|
339
|
+
transfer_departure PTP
|
|
340
|
+
transfer_place LIN # place only
|
|
341
|
+
retreat_home LIN → PTP
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
`transfer_departure` remains normally collision checked. Only the single zero-blend `place` LIN planning request may add one request-local Allowed Collision Matrix pair:
|
|
345
|
+
|
|
346
|
+
```text
|
|
347
|
+
attached workpiece ↔ declared destination support
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
The place probe starts from the complete live MoveIt ACM, preserves every existing entry, enables only that symmetric pair, and applies the matrix only to the request-local PlanningScene diff. The transfer path cannot inherit the allowance. No global/live destination-contact lease remains active after planning.
|
|
351
|
+
|
|
352
|
+
The v1.8.2 place receipt records the exact destination support id, workpiece id, phase, and contact scope. Missing destination identity, a non-attached scene, a non-LIN place planner, nonzero place blending, malformed support identity, or mismatched receipt fails closed.
|
|
353
|
+
|
|
354
|
+
The release does **not** change real-execution authority, site qualification, target poses, conservative motion scales, or the rule that every motion group must preflight successfully before execution begins.
|
|
355
|
+
|
|
356
|
+
## v1.8.3 synchronous verified workpiece attach
|
|
357
|
+
|
|
358
|
+
A clean v1.8.2 target-stack run proved all five industrial preflight groups and actual `approach_pick` execution, then failed closed at GRASP with `workpiece_lifecycle_failed:apply_planning_scene_rejected`.
|
|
359
|
+
|
|
360
|
+
The attach request previously combined an `AttachedCollisionObject.ADD` with a redundant same-ID world `CollisionObject.REMOVE`. MoveIt applies attached-object state first, which already transitions the same-ID object out of the world. Processing the later redundant world REMOVE can therefore make synchronous `/apply_planning_scene` report failure even though the attachment transition was already attempted.
|
|
361
|
+
|
|
362
|
+
v1.8.3 makes the attach transition service-safe and deterministic: the request contains only the authoritative attached-object ADD. DevAgent then synchronously reads the PlanningScene back and requires all of the following before motion may continue:
|
|
363
|
+
|
|
364
|
+
```text
|
|
365
|
+
workpiece absent from world
|
|
366
|
+
exactly one attached object with the expected id
|
|
367
|
+
attached link == verified tool mount link
|
|
368
|
+
attached primitive geometry is valid
|
|
369
|
+
attachment pose/geometry hash matches the expected attachment hash
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
Detach semantics remain explicit attached-object REMOVE plus world-object ADD at the verified placement pose. No collision rule, tool/workpiece geometry, TCP, touch link, target pose, motion speed, planner, site-qualification boundary, or real-execution authority is relaxed.
|
|
373
|
+
|
|
374
|
+
## v1.8.4 PyPI metadata compliance hotfix
|
|
375
|
+
|
|
376
|
+
v1.8.4 carries the exact v1.8.3 runtime semantics and shortens only the package Core Metadata `Summary` so it satisfies PyPI's 512-character limit. A regression test now parses `pyproject.toml` and rejects an empty or over-limit project description before release.
|
|
377
|
+
|
|
378
|
+
This metadata hotfix does not change the UR5e attach/detach lifecycle, collision policy, motion planning, Twin lineage, site-qualification boundary, or real-execution authority.
|
|
379
|
+
|
|
330
380
|
## Qualified visual-execution scope
|
|
331
381
|
|
|
332
382
|
Measured report-test execution remains intentionally narrow:
|
|
@@ -527,9 +577,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
527
577
|
|
|
528
578
|
# Project status
|
|
529
579
|
|
|
530
|
-
**v1.8.
|
|
580
|
+
**v1.8.4 — Production/Stable software workflow**
|
|
531
581
|
|
|
532
|
-
v1.8.
|
|
582
|
+
v1.8.4 retains the v1.8.3 synchronous verified workpiece-attach fix, the v1.8.2 scoped destination-support place contract, v1.8.1 direct UR5e controller/action binding, truthful robot support tiers, and ABB IRB1200 experimental visual runtime. The only v1.8.4 behavior change is packaging metadata compliance for PyPI; physical runtime semantics are unchanged from v1.8.3.
|
|
533
583
|
|
|
534
584
|
Production-oriented software capabilities include:
|
|
535
585
|
|
|
@@ -544,11 +594,13 @@ exact Requirement → Mapping → Verification Plan → Case provenance
|
|
|
544
594
|
truthful robot support tiers
|
|
545
595
|
qualified UR5e report-test visual execution contract
|
|
546
596
|
direct UR5e controller-manager/action readiness binding
|
|
597
|
+
synchronous verified workpiece attach/detach lifecycle
|
|
598
|
+
scoped destination-support place contact
|
|
547
599
|
experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
|
|
548
600
|
industrial Pilz PTP / LIN planning
|
|
549
601
|
adaptive bounded blend selection
|
|
550
602
|
plan-only transfer/place segment diagnostics
|
|
551
|
-
lift-only support
|
|
603
|
+
lift-only source-support contact lease + exact restore
|
|
552
604
|
Gazebo/MoveIt selected-case visualization
|
|
553
605
|
typed physical measurement binding
|
|
554
606
|
deterministic campaigns
|
|
@@ -596,4 +648,4 @@ Original creator: Tom Ha
|
|
|
596
648
|
Original project: https://github.com/tomha85/devagent-physical-engine
|
|
597
649
|
All rights reserved.
|
|
598
650
|
|
|
599
|
-
See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
|
|
651
|
+
See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
|
|
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "devagent-physical-engine"
|
|
7
|
-
version = "1.8.
|
|
8
|
-
description = "
|
|
7
|
+
version = "1.8.4"
|
|
8
|
+
description = "Verification-first robotics commissioning runtime with exact-Twin evidence, qualified UR5e Gazebo/MoveIt report execution, truthful robot support tiers, selective verification, replay, regression, and FAT reporting."
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.11"
|
|
11
11
|
dependencies = ["PyYAML>=6.0,<7"]
|
|
@@ -76,6 +76,7 @@ omit = [
|
|
|
76
76
|
"src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py",
|
|
77
77
|
"src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py",
|
|
78
78
|
"src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py",
|
|
79
|
+
"src/devagent_physical_engine/ros2/industrial_sequence_planner_v182.py",
|
|
79
80
|
"src/devagent_physical_engine/ros2/support_contact_lease_v170.py",
|
|
80
81
|
"src/devagent_physical_engine/ros2/fk_pose.py",
|
|
81
82
|
"src/devagent_physical_engine/ros2/gazebo_pose.py",
|
|
@@ -24,24 +24,30 @@ def _patch_constructor(cls) -> None:
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def install_industrial_motion_v170() -> None:
|
|
27
|
-
"""Route report-test execution through the qualified
|
|
27
|
+
"""Route report-test execution through the latest qualified industrial runtime.
|
|
28
28
|
|
|
29
|
-
v1.7.1
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
execution
|
|
29
|
+
v1.7.1 retains bounded blend fallback and v1.7.2 retains independent transfer/
|
|
30
|
+
place diagnostics for the legacy two-segment group. v1.8.2 introduces a stricter
|
|
31
|
+
destination-contact boundary for the qualified report runtime: transfer is a
|
|
32
|
+
separate normally collision-checked PTP group, while the existing
|
|
33
|
+
``transfer_place`` execution/release boundary becomes one zero-blend LIN place
|
|
34
|
+
group. Only that single place request may allow the attached workpiece to contact
|
|
35
|
+
the declared destination support, and only through a request-local full-ACM diff.
|
|
36
|
+
No real-execution authority, geometry, speed, Twin lineage, or other collision
|
|
37
|
+
relationship is relaxed.
|
|
34
38
|
"""
|
|
35
39
|
|
|
36
40
|
from . import report_test_execution as base_exec
|
|
37
41
|
from . import report_test_execution_strict as strict_exec
|
|
42
|
+
from .industrial_motion_v182 import reference_industrial_groups_v182
|
|
38
43
|
from .ros2 import report_test_visualization as base_visual
|
|
39
44
|
from .ros2 import report_test_visualization_v170 as visual_v170
|
|
40
|
-
from .ros2.
|
|
41
|
-
|
|
45
|
+
from .ros2.industrial_sequence_planner_v182 import (
|
|
46
|
+
PilzIndustrialSequencePlannerV182,
|
|
42
47
|
)
|
|
43
48
|
|
|
44
|
-
visual_v170.PilzIndustrialSequencePlannerV170 =
|
|
49
|
+
visual_v170.PilzIndustrialSequencePlannerV170 = PilzIndustrialSequencePlannerV182
|
|
50
|
+
visual_v170.reference_industrial_groups = reference_industrial_groups_v182
|
|
45
51
|
|
|
46
52
|
base_exec.run_report_test_visualization = run_report_test_visualization_v170
|
|
47
53
|
strict_exec.run_report_test_visualization = run_report_test_visualization_v170
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from .industrial_motion_v170 import (
|
|
4
|
+
LIN_ACCELERATION_SCALE,
|
|
5
|
+
LIN_VELOCITY_SCALE,
|
|
6
|
+
PTP_ACCELERATION_SCALE,
|
|
7
|
+
PTP_VELOCITY_SCALE,
|
|
8
|
+
SAFE_BLEND_RADIUS_M,
|
|
9
|
+
IndustrialGroupSpec,
|
|
10
|
+
IndustrialSegmentSpec,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
INDUSTRIAL_MOTION_PROFILE_V182 = "pilz_ptp_lin_destination_contact_v2"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def reference_industrial_groups_v182() -> tuple[IndustrialGroupSpec, ...]:
|
|
18
|
+
"""Qualified UR5e motion boundaries for destination-support placement.
|
|
19
|
+
|
|
20
|
+
v1.8.2 makes destination contact a hard motion boundary. Transfer is planned as
|
|
21
|
+
one collision-normal PTP group. Place is then planned as one zero-blend LIN group
|
|
22
|
+
whose request-local PlanningScene may allow exactly the attached workpiece and
|
|
23
|
+
the declared destination support to contact. This keeps the contact allowance out
|
|
24
|
+
of transfer geometry while preserving the existing execution/release boundary at
|
|
25
|
+
the ``transfer_place`` group id.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
groups = (
|
|
29
|
+
IndustrialGroupSpec(
|
|
30
|
+
"approach_pick",
|
|
31
|
+
(
|
|
32
|
+
IndustrialSegmentSpec(
|
|
33
|
+
"pre_pick",
|
|
34
|
+
"PTP",
|
|
35
|
+
SAFE_BLEND_RADIUS_M,
|
|
36
|
+
PTP_VELOCITY_SCALE,
|
|
37
|
+
PTP_ACCELERATION_SCALE,
|
|
38
|
+
),
|
|
39
|
+
IndustrialSegmentSpec(
|
|
40
|
+
"pick",
|
|
41
|
+
"LIN",
|
|
42
|
+
0.0,
|
|
43
|
+
LIN_VELOCITY_SCALE,
|
|
44
|
+
LIN_ACCELERATION_SCALE,
|
|
45
|
+
),
|
|
46
|
+
),
|
|
47
|
+
workpiece_loaded=False,
|
|
48
|
+
scene_state="inherit",
|
|
49
|
+
),
|
|
50
|
+
IndustrialGroupSpec(
|
|
51
|
+
"lift_departure",
|
|
52
|
+
(
|
|
53
|
+
IndustrialSegmentSpec(
|
|
54
|
+
"lift",
|
|
55
|
+
"LIN",
|
|
56
|
+
0.0,
|
|
57
|
+
LIN_VELOCITY_SCALE,
|
|
58
|
+
LIN_ACCELERATION_SCALE,
|
|
59
|
+
),
|
|
60
|
+
),
|
|
61
|
+
workpiece_loaded=True,
|
|
62
|
+
scene_state="attached",
|
|
63
|
+
support_contact_departure=True,
|
|
64
|
+
),
|
|
65
|
+
IndustrialGroupSpec(
|
|
66
|
+
"transfer_departure",
|
|
67
|
+
(
|
|
68
|
+
IndustrialSegmentSpec(
|
|
69
|
+
"transfer",
|
|
70
|
+
"PTP",
|
|
71
|
+
0.0,
|
|
72
|
+
PTP_VELOCITY_SCALE,
|
|
73
|
+
PTP_ACCELERATION_SCALE,
|
|
74
|
+
),
|
|
75
|
+
),
|
|
76
|
+
workpiece_loaded=True,
|
|
77
|
+
scene_state="attached",
|
|
78
|
+
),
|
|
79
|
+
IndustrialGroupSpec(
|
|
80
|
+
"transfer_place",
|
|
81
|
+
(
|
|
82
|
+
IndustrialSegmentSpec(
|
|
83
|
+
"place",
|
|
84
|
+
"LIN",
|
|
85
|
+
0.0,
|
|
86
|
+
LIN_VELOCITY_SCALE,
|
|
87
|
+
LIN_ACCELERATION_SCALE,
|
|
88
|
+
),
|
|
89
|
+
),
|
|
90
|
+
workpiece_loaded=True,
|
|
91
|
+
scene_state="attached",
|
|
92
|
+
),
|
|
93
|
+
IndustrialGroupSpec(
|
|
94
|
+
"retreat_home",
|
|
95
|
+
(
|
|
96
|
+
IndustrialSegmentSpec(
|
|
97
|
+
"retract",
|
|
98
|
+
"LIN",
|
|
99
|
+
SAFE_BLEND_RADIUS_M,
|
|
100
|
+
LIN_VELOCITY_SCALE,
|
|
101
|
+
LIN_ACCELERATION_SCALE,
|
|
102
|
+
),
|
|
103
|
+
IndustrialSegmentSpec(
|
|
104
|
+
"return_home",
|
|
105
|
+
"PTP",
|
|
106
|
+
0.0,
|
|
107
|
+
PTP_VELOCITY_SCALE,
|
|
108
|
+
PTP_ACCELERATION_SCALE,
|
|
109
|
+
),
|
|
110
|
+
),
|
|
111
|
+
workpiece_loaded=False,
|
|
112
|
+
scene_state="world",
|
|
113
|
+
),
|
|
114
|
+
)
|
|
115
|
+
expected = (
|
|
116
|
+
"pre_pick",
|
|
117
|
+
"pick",
|
|
118
|
+
"lift",
|
|
119
|
+
"transfer",
|
|
120
|
+
"place",
|
|
121
|
+
"retract",
|
|
122
|
+
"return_home",
|
|
123
|
+
)
|
|
124
|
+
actual = tuple(phase for group in groups for phase in group.phase_names)
|
|
125
|
+
if actual != expected:
|
|
126
|
+
raise RuntimeError("industrial_v182_reference_phase_coverage_invalid")
|
|
127
|
+
return groups
|
devagent_physical_engine-1.8.4/src/devagent_physical_engine/ros2/destination_support_contact_v182.py
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from copy import deepcopy
|
|
4
|
+
from typing import Any, Mapping
|
|
5
|
+
|
|
6
|
+
from ..simulation_platform import SimulationPlatformError
|
|
7
|
+
from .support_contact_v161 import support_surface_backend_id
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
DESTINATION_SUPPORT_CONTACT_SCOPE = "place_arrival_only"
|
|
11
|
+
DESTINATION_SUPPORT_CONTACT_PHASE = "place"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def destination_support_backend_id(destination_entity_id: str) -> str:
|
|
15
|
+
destination = str(destination_entity_id).strip()
|
|
16
|
+
if not destination:
|
|
17
|
+
raise SimulationPlatformError("destination_support_entity_id_missing")
|
|
18
|
+
return support_surface_backend_id(destination)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def prepare_destination_support_scene(
|
|
22
|
+
scene_contract: Mapping[str, Any] | None,
|
|
23
|
+
*,
|
|
24
|
+
destination_entity_id: str,
|
|
25
|
+
) -> tuple[dict[str, Any], str, str]:
|
|
26
|
+
"""Allow exactly attached-workpiece ↔ declared destination support for place.
|
|
27
|
+
|
|
28
|
+
The returned scene is a request-local copy. No live/global ACM state is mutated.
|
|
29
|
+
The caller must use it only for a single zero-blend LIN ``place`` request.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
if not isinstance(scene_contract, Mapping):
|
|
33
|
+
raise SimulationPlatformError("destination_support_scene_required")
|
|
34
|
+
if str(scene_contract.get("state") or "") != "attached":
|
|
35
|
+
raise SimulationPlatformError("destination_support_requires_attached_scene")
|
|
36
|
+
raw_workpiece = scene_contract.get("workpiece")
|
|
37
|
+
if not isinstance(raw_workpiece, Mapping):
|
|
38
|
+
raise SimulationPlatformError("destination_support_workpiece_missing")
|
|
39
|
+
workpiece_id = str(raw_workpiece.get("id") or "").strip()
|
|
40
|
+
if not workpiece_id:
|
|
41
|
+
raise SimulationPlatformError("destination_support_workpiece_missing")
|
|
42
|
+
|
|
43
|
+
support_id = destination_support_backend_id(destination_entity_id)
|
|
44
|
+
if workpiece_id == support_id:
|
|
45
|
+
raise SimulationPlatformError("destination_support_pair_invalid")
|
|
46
|
+
|
|
47
|
+
scene = deepcopy(dict(scene_contract))
|
|
48
|
+
scene.update(
|
|
49
|
+
{
|
|
50
|
+
"allow_support_contact": True,
|
|
51
|
+
"support_contact_scope": DESTINATION_SUPPORT_CONTACT_SCOPE,
|
|
52
|
+
"support_contact_phase": DESTINATION_SUPPORT_CONTACT_PHASE,
|
|
53
|
+
"support_surface_id": support_id,
|
|
54
|
+
}
|
|
55
|
+
)
|
|
56
|
+
return scene, workpiece_id, support_id
|