devagent-physical-engine 1.8.6__tar.gz → 1.8.9__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.6/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.8.9}/PKG-INFO +51 -8
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/README.md +51 -8
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/pyproject.toml +4 -1
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/__init__.py +1 -1
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +15 -2
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/doctor.py +2 -0
- devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/gazebo_pose.py +169 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/preexecution.py +171 -39
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +262 -35
- devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/ros_gz_pose_service_probe.py +42 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/state_validity_probe.py +76 -8
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +71 -14
- devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/support_contact_acm_semantics_v189.py +195 -0
- devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/task_adapter.py +284 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/trajectory.py +25 -1
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +83 -23
- devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/trajectory_feedback_tracking_v189.py +174 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_follow.py +71 -26
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +110 -109
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_scene.py +153 -26
- devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/workpiece_scene_probe_v187.py +408 -0
- devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/workpiece_scene_probe_v188.py +283 -0
- devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/workpiece_scene_probe_v189.py +371 -0
- devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/workpiece_transport.py +143 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/setup_profile.py +5 -5
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9/src/devagent_physical_engine.egg-info}/PKG-INFO +51 -8
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/SOURCES.txt +17 -1
- devagent_physical_engine-1.8.9/tests/test_explicit_detach_world_reassert_v189.py +113 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_industrial_motion_v170.py +2 -2
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_package_metadata_v184.py +2 -2
- devagent_physical_engine-1.8.9/tests/test_place_preexecution_acm_v189.py +228 -0
- devagent_physical_engine-1.8.9/tests/test_release_resting_pose_v189.py +143 -0
- devagent_physical_engine-1.8.9/tests/test_release_transaction_v189.py +68 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_ros2_production_receipts_v011.py +14 -1
- devagent_physical_engine-1.8.9/tests/test_support_contact_acm_semantics_v189.py +138 -0
- devagent_physical_engine-1.8.9/tests/test_trajectory_action_contract_v189.py +80 -0
- devagent_physical_engine-1.8.9/tests/test_trajectory_feedback_tracking_v189.py +222 -0
- devagent_physical_engine-1.8.9/tests/test_transfer_controller_policy_v189.py +83 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_transfer_place_diagnostic_v172.py +2 -2
- devagent_physical_engine-1.8.9/tests/test_workpiece_semantic_lifecycle_v186.py +469 -0
- devagent_physical_engine-1.8.9/tests/test_workpiece_transport_v189.py +195 -0
- devagent_physical_engine-1.8.6/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -104
- devagent_physical_engine-1.8.6/src/devagent_physical_engine/ros2/task_adapter.py +0 -160
- devagent_physical_engine-1.8.6/tests/test_workpiece_semantic_lifecycle_v186.py +0 -208
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/NOTICE +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/setup.cfg +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/__init__.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/compiler.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/contracts.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/coordinator.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/critic.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/evidence.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/interpreter.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/planner.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/recovery.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/routing.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/runtime.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/semantic.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/structured.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ai_cli.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/cli.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_campaign.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_cli.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_importer.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_readiness.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_repository.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/continuous_clearance.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/controller_runtime_hotfix_v181.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/doctor.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/engineering_agent.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/engineering_request.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/evidence_replay.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/evidence_trust.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/execution.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/industrial_motion_v170.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/industrial_motion_v182.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/models.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/one_command.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/one_command_runtime.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/one_command_v15.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/one_command_v16.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/operating_envelope.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/__init__.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/candidates.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/contracts.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/evidence.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/experience.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/measured.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/physical_campaign.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/physical_evidence.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/physical_motion.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/planning.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/pose_math.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/preexecution_contract.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/production_authority.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/production_grade.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/project.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_criterion.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_qualification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/providers.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/qualification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/qualification_cli.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/qualification_harness.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/reference_workcell.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/report_test_execution.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/robot_platform.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/robot_support_v18.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/robots.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/__init__.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/abb_irb1200.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/abb_irb1200_preview.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/commands.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/controller_action_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/destination_support_contact_v182.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v182.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe_v182.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/qualification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/selective_verification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/simulation.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/simulation_platform.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/tool_collision.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/twin.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/twin_builder.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/twin_codec.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/twin_materialization.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/user_cli.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/user_cli_v15.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/user_cli_v16.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/user_cli_v18.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/verification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_abb_irb1200_visual_v18.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_agent_core.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_agent_semantic_hardening.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_ai_cli.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_ai_cli_v07.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_commercial_importer_v1.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_commercial_intelligence_v15.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_commercial_readiness_v1.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_commercial_v1.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_continuous_clearance_v011.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_controller_runtime_hotfix_v181.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_core.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_destination_support_contact_v182.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_engineering_request_v07.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_evidence_replay_v12.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_evidence_trust_coverage_v12.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_evidence_trust_transport_v12.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_evidence_trust_v12.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_evidence_viewer_palette_v130.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_gazebo_cli_v0122.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_golden_abb_runner_v171.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_golden_abb_showcase.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_interpreter_profiles_v08.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_joint_state_probe_v0125.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_live_provider_qualification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_measured_motion_v10.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_moveit_scene_v0123.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_natural_language_agent_v07.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_one_command_hardening_v13.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_one_command_pose_hardening_v15.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_one_command_regression_v141.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_one_command_v13.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_openai_strict_schema_v0113.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_optimization_v05.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_physical_campaign_v09.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_physical_evidence_v09.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_physical_motion_v09.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_planning_fallback_v012.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_pose_math_v0125.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_preexecution_contract_v10.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_production_authority_v11.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_production_grade_coverage_v11.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_production_grade_v11.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_project_spine_v013.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_provider_and_qualification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_provider_criterion_v15.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_qualification_harness_v06.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_readme_pypi.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_real_provider_adapters.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_reference_workcell_v012.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_report_test_contract_coverage_v16.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_report_test_lineage_v16.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_report_test_visual_execution_v16.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_robot_platform_v08.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_ros2_simulation.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_ros_trajectory_v09.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_selective_verification_v14.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_setup_profile.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_sim_real_qualification_v011.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_simulation_platform_v08.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_tool_collision_v011.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_tool_scene_v0124.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_trajectory_action_probe_v0125.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_trajectory_qualification_v09.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_trajectory_tracking_v0125.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_twin_materialization_v10.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_twin_v08.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_user_cli_interactive_v131.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_user_cli_progress_v131.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_user_cli_report_visual_v16.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_user_cli_selective_v14.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_user_cli_v15.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_v052_stabilization.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_v08_catalog_mapping_regression.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_workpiece_attach_semantics_v183.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_workpiece_lifecycle_v011.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_workpiece_scene_probe_v185.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devagent-physical-engine
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.9
|
|
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
|
|
@@ -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.9
|
|
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.9
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
Run the normal customer workflow:
|
|
@@ -438,6 +438,43 @@ Every lifecycle transition persists a deterministic receipt containing probe std
|
|
|
438
438
|
|
|
439
439
|
This release does not disable collision checking, change the verified tool/workpiece geometry, modify motion targets, planner types or speeds, detach early, grant site qualification, or expand real-execution authority.
|
|
440
440
|
|
|
441
|
+
## v1.8.8 canonical world integrity gate before GRASP
|
|
442
|
+
|
|
443
|
+
v1.8.8 packages the latest workpiece-lifecycle diagnostics as an unambiguous release version so target acceptance no longer runs newer code while reporting `1.8.6`.
|
|
444
|
+
|
|
445
|
+
Before ATTACH, DevAgent now reasserts the exact canonical Twin workpiece into the live MoveIt world, synchronously reads the object back, normalizes ROS `uint8/octet` primitive representations safely, and requires exact identity/frame/geometry plus bounded pose agreement before attachment is attempted. Primitive type `0` remains invalid; DevAgent does not infer BOX/CYLINDER from dimensions or weaken collision checking.
|
|
446
|
+
|
|
447
|
+
The lifecycle receipt records the pre/post primitive type representation, canonical-world reassert result, semantic verification, and the exact inner failure code. Existing target poses, conservative Pilz motion limits, tool/workpiece geometry, site-qualification boundaries, and `real_execution_allowed = false` remain unchanged.
|
|
448
|
+
|
|
449
|
+
Hosted CI qualifies the software/build/install contract. The ROS/Gazebo/MoveIt workstation still requires a fresh target acceptance run of the released 1.8.8 artifact before this specific workpiece path can be called physically qualified.
|
|
450
|
+
|
|
451
|
+
## v1.8.9 target-proven complete Pick–Transport–Place lifecycle
|
|
452
|
+
|
|
453
|
+
v1.8.9 completes and target-proves the qualified UR5e nominal `pick_transport_place` report path on the intended ROS 2 Jazzy + Gazebo Harmonic + MoveIt/Pilz workstation. The acceptance run completed `approach_pick → grasp → lift_departure → transfer_departure → transfer_place → release → retreat_home → verify` and returned `SELECTIVE PASSED` for `TEST-PERF-001`.
|
|
454
|
+
|
|
455
|
+
The release fixes the lifecycle by separating engineering authorities instead of weakening checks:
|
|
456
|
+
|
|
457
|
+
```text
|
|
458
|
+
OEM / ros2_control controller
|
|
459
|
+
→ owns its configured FollowJointTrajectory execution tolerance
|
|
460
|
+
|
|
461
|
+
DevAgent
|
|
462
|
+
→ independently records desired-vs-actual controller feedback
|
|
463
|
+
→ preserves the 0.03 rad commissioning tracking gate
|
|
464
|
+
→ verifies exact Twin/MoveIt scene semantics
|
|
465
|
+
→ verifies carried workpiece pose before release
|
|
466
|
+
→ verifies Gazebo post-release resting pose within 5 mm / 1°
|
|
467
|
+
→ synchronizes MoveIt to the actual Gazebo-released pose before retreat
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
The qualified place verifier now evaluates the same exact workpiece↔destination-support contact contract used by the planner instead of checking the place path against inconsistent global ACM semantics. Controller feedback cadence is diagnostic evidence rather than an invented minimum-rate execution contract.
|
|
471
|
+
|
|
472
|
+
Release is a measured two-authority handoff: while the carrier owns the object, the tool/grasp-derived carried pose is authoritative; after the carrier stops, Gazebo physics owns the released object and the Twin resting pose is the verification target. DevAgent records every settle sample in `release-settle-trace.json` and does not teleport the object into tolerance.
|
|
473
|
+
|
|
474
|
+
MoveIt DETACH is deterministic. DevAgent removes attachment ownership while the robot is stationary, explicitly ADD/overwrites the world collision object with exact verified geometry at the actual Gazebo-settled pose, then requires full scene readback and semantic verification before retreat is permitted. A stale implicit MoveIt detach pose remains a hard failure.
|
|
475
|
+
|
|
476
|
+
This qualification is intentionally bounded to the packaged UR5e nominal report-test scope. It does not grant arbitrary customer-cell qualification, site qualification, functional-safety certification, or autonomous real-robot execution authority.
|
|
477
|
+
|
|
441
478
|
## Qualified visual-execution scope
|
|
442
479
|
|
|
443
480
|
Measured report-test execution remains intentionally narrow:
|
|
@@ -638,9 +675,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
638
675
|
|
|
639
676
|
# Project status
|
|
640
677
|
|
|
641
|
-
**v1.8.
|
|
678
|
+
**v1.8.9 — Production/Stable software workflow; target-proven qualified UR5e nominal Pick–Transport–Place report path**
|
|
642
679
|
|
|
643
|
-
v1.8.
|
|
680
|
+
v1.8.9 is the first release in this line whose exact candidate completed the entire bounded UR5e nominal report lifecycle on the intended workstation: exact Twin readback, five-group Pilz preflight, approach, verified MoveIt GRASP, lift with scoped source-support contact, Gazebo carry, transfer, place, physical release/settle, explicit MoveIt detach/world reassert, retreat, and final verification. The selected target test returned `PASSED` with measured evidence recorded.
|
|
644
681
|
|
|
645
682
|
Production-oriented software capabilities include:
|
|
646
683
|
|
|
@@ -655,9 +692,15 @@ exact Requirement → Mapping → Verification Plan → Case provenance
|
|
|
655
692
|
truthful robot support tiers
|
|
656
693
|
qualified UR5e report-test visual execution contract
|
|
657
694
|
direct UR5e controller-manager/action readiness binding
|
|
658
|
-
|
|
695
|
+
controller-native execution tolerance + independent DevAgent tracking evidence
|
|
696
|
+
canonical MoveIt workpiece lifecycle with world-integrity gate
|
|
659
697
|
semantic workpiece pose/geometry verification with persistent diagnostics
|
|
660
|
-
scoped destination-support place contact
|
|
698
|
+
scoped destination-support place contact with matching preexecution semantics
|
|
699
|
+
persistent ROS↔Gazebo workpiece carrier
|
|
700
|
+
separate carried-pose and released-resting-pose authorities
|
|
701
|
+
read-only Gazebo post-release settle verification at 5 mm / 1°
|
|
702
|
+
deterministic two-phase MoveIt detach/world reassert at measured Gazebo pose
|
|
703
|
+
release-settle trace evidence
|
|
661
704
|
experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
|
|
662
705
|
industrial Pilz PTP / LIN planning
|
|
663
706
|
adaptive bounded blend selection
|
|
@@ -674,7 +717,7 @@ change impact + regression
|
|
|
674
717
|
provider-neutral optional AI front end
|
|
675
718
|
```
|
|
676
719
|
|
|
677
|
-
Production/Stable describes the bounded software workflow. It does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, or authorized for autonomous real execution.
|
|
720
|
+
Production/Stable describes the bounded software workflow. The target-proven UR5e claim is limited to the qualified packaged nominal report path and exact acceptance environment. It does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, or authorized for autonomous real execution.
|
|
678
721
|
|
|
679
722
|
## Documentation
|
|
680
723
|
|
|
@@ -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.9
|
|
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.9
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
Run the normal customer workflow:
|
|
@@ -397,6 +397,43 @@ Every lifecycle transition persists a deterministic receipt containing probe std
|
|
|
397
397
|
|
|
398
398
|
This release does not disable collision checking, change the verified tool/workpiece geometry, modify motion targets, planner types or speeds, detach early, grant site qualification, or expand real-execution authority.
|
|
399
399
|
|
|
400
|
+
## v1.8.8 canonical world integrity gate before GRASP
|
|
401
|
+
|
|
402
|
+
v1.8.8 packages the latest workpiece-lifecycle diagnostics as an unambiguous release version so target acceptance no longer runs newer code while reporting `1.8.6`.
|
|
403
|
+
|
|
404
|
+
Before ATTACH, DevAgent now reasserts the exact canonical Twin workpiece into the live MoveIt world, synchronously reads the object back, normalizes ROS `uint8/octet` primitive representations safely, and requires exact identity/frame/geometry plus bounded pose agreement before attachment is attempted. Primitive type `0` remains invalid; DevAgent does not infer BOX/CYLINDER from dimensions or weaken collision checking.
|
|
405
|
+
|
|
406
|
+
The lifecycle receipt records the pre/post primitive type representation, canonical-world reassert result, semantic verification, and the exact inner failure code. Existing target poses, conservative Pilz motion limits, tool/workpiece geometry, site-qualification boundaries, and `real_execution_allowed = false` remain unchanged.
|
|
407
|
+
|
|
408
|
+
Hosted CI qualifies the software/build/install contract. The ROS/Gazebo/MoveIt workstation still requires a fresh target acceptance run of the released 1.8.8 artifact before this specific workpiece path can be called physically qualified.
|
|
409
|
+
|
|
410
|
+
## v1.8.9 target-proven complete Pick–Transport–Place lifecycle
|
|
411
|
+
|
|
412
|
+
v1.8.9 completes and target-proves the qualified UR5e nominal `pick_transport_place` report path on the intended ROS 2 Jazzy + Gazebo Harmonic + MoveIt/Pilz workstation. The acceptance run completed `approach_pick → grasp → lift_departure → transfer_departure → transfer_place → release → retreat_home → verify` and returned `SELECTIVE PASSED` for `TEST-PERF-001`.
|
|
413
|
+
|
|
414
|
+
The release fixes the lifecycle by separating engineering authorities instead of weakening checks:
|
|
415
|
+
|
|
416
|
+
```text
|
|
417
|
+
OEM / ros2_control controller
|
|
418
|
+
→ owns its configured FollowJointTrajectory execution tolerance
|
|
419
|
+
|
|
420
|
+
DevAgent
|
|
421
|
+
→ independently records desired-vs-actual controller feedback
|
|
422
|
+
→ preserves the 0.03 rad commissioning tracking gate
|
|
423
|
+
→ verifies exact Twin/MoveIt scene semantics
|
|
424
|
+
→ verifies carried workpiece pose before release
|
|
425
|
+
→ verifies Gazebo post-release resting pose within 5 mm / 1°
|
|
426
|
+
→ synchronizes MoveIt to the actual Gazebo-released pose before retreat
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
The qualified place verifier now evaluates the same exact workpiece↔destination-support contact contract used by the planner instead of checking the place path against inconsistent global ACM semantics. Controller feedback cadence is diagnostic evidence rather than an invented minimum-rate execution contract.
|
|
430
|
+
|
|
431
|
+
Release is a measured two-authority handoff: while the carrier owns the object, the tool/grasp-derived carried pose is authoritative; after the carrier stops, Gazebo physics owns the released object and the Twin resting pose is the verification target. DevAgent records every settle sample in `release-settle-trace.json` and does not teleport the object into tolerance.
|
|
432
|
+
|
|
433
|
+
MoveIt DETACH is deterministic. DevAgent removes attachment ownership while the robot is stationary, explicitly ADD/overwrites the world collision object with exact verified geometry at the actual Gazebo-settled pose, then requires full scene readback and semantic verification before retreat is permitted. A stale implicit MoveIt detach pose remains a hard failure.
|
|
434
|
+
|
|
435
|
+
This qualification is intentionally bounded to the packaged UR5e nominal report-test scope. It does not grant arbitrary customer-cell qualification, site qualification, functional-safety certification, or autonomous real-robot execution authority.
|
|
436
|
+
|
|
400
437
|
## Qualified visual-execution scope
|
|
401
438
|
|
|
402
439
|
Measured report-test execution remains intentionally narrow:
|
|
@@ -597,9 +634,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
597
634
|
|
|
598
635
|
# Project status
|
|
599
636
|
|
|
600
|
-
**v1.8.
|
|
637
|
+
**v1.8.9 — Production/Stable software workflow; target-proven qualified UR5e nominal Pick–Transport–Place report path**
|
|
601
638
|
|
|
602
|
-
v1.8.
|
|
639
|
+
v1.8.9 is the first release in this line whose exact candidate completed the entire bounded UR5e nominal report lifecycle on the intended workstation: exact Twin readback, five-group Pilz preflight, approach, verified MoveIt GRASP, lift with scoped source-support contact, Gazebo carry, transfer, place, physical release/settle, explicit MoveIt detach/world reassert, retreat, and final verification. The selected target test returned `PASSED` with measured evidence recorded.
|
|
603
640
|
|
|
604
641
|
Production-oriented software capabilities include:
|
|
605
642
|
|
|
@@ -614,9 +651,15 @@ exact Requirement → Mapping → Verification Plan → Case provenance
|
|
|
614
651
|
truthful robot support tiers
|
|
615
652
|
qualified UR5e report-test visual execution contract
|
|
616
653
|
direct UR5e controller-manager/action readiness binding
|
|
617
|
-
|
|
654
|
+
controller-native execution tolerance + independent DevAgent tracking evidence
|
|
655
|
+
canonical MoveIt workpiece lifecycle with world-integrity gate
|
|
618
656
|
semantic workpiece pose/geometry verification with persistent diagnostics
|
|
619
|
-
scoped destination-support place contact
|
|
657
|
+
scoped destination-support place contact with matching preexecution semantics
|
|
658
|
+
persistent ROS↔Gazebo workpiece carrier
|
|
659
|
+
separate carried-pose and released-resting-pose authorities
|
|
660
|
+
read-only Gazebo post-release settle verification at 5 mm / 1°
|
|
661
|
+
deterministic two-phase MoveIt detach/world reassert at measured Gazebo pose
|
|
662
|
+
release-settle trace evidence
|
|
620
663
|
experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
|
|
621
664
|
industrial Pilz PTP / LIN planning
|
|
622
665
|
adaptive bounded blend selection
|
|
@@ -633,7 +676,7 @@ change impact + regression
|
|
|
633
676
|
provider-neutral optional AI front end
|
|
634
677
|
```
|
|
635
678
|
|
|
636
|
-
Production/Stable describes the bounded software workflow. It does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, or authorized for autonomous real execution.
|
|
679
|
+
Production/Stable describes the bounded software workflow. The target-proven UR5e claim is limited to the qualified packaged nominal report path and exact acceptance environment. It does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, or authorized for autonomous real execution.
|
|
637
680
|
|
|
638
681
|
## Documentation
|
|
639
682
|
|
|
@@ -669,4 +712,4 @@ Original creator: Tom Ha
|
|
|
669
712
|
Original project: https://github.com/tomha85/devagent-physical-engine
|
|
670
713
|
All rights reserved.
|
|
671
714
|
|
|
672
|
-
See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
|
|
715
|
+
See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "devagent-physical-engine"
|
|
7
|
-
version = "1.8.
|
|
7
|
+
version = "1.8.9"
|
|
8
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"
|
|
@@ -66,6 +66,9 @@ omit = [
|
|
|
66
66
|
# Pure contracts/reference-workcell logic remains inside the hosted coverage gate.
|
|
67
67
|
"src/devagent_physical_engine/ros2/*_probe.py",
|
|
68
68
|
"src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py",
|
|
69
|
+
"src/devagent_physical_engine/ros2/workpiece_scene_probe_v187.py",
|
|
70
|
+
"src/devagent_physical_engine/ros2/workpiece_scene_probe_v188.py",
|
|
71
|
+
"src/devagent_physical_engine/ros2/workpiece_scene_probe_v189.py",
|
|
69
72
|
"src/devagent_physical_engine/ros2/qualification*.py",
|
|
70
73
|
"src/devagent_physical_engine/ros2/joint_state_recorder.py",
|
|
71
74
|
"src/devagent_physical_engine/ros2/ur5e_adapter.py",
|
|
@@ -33,8 +33,17 @@ def install_industrial_motion_v170() -> None:
|
|
|
33
33
|
``transfer_place`` execution/release boundary becomes one zero-blend LIN place
|
|
34
34
|
group. Only that single place request may allow the attached workpiece to contact
|
|
35
35
|
the declared destination support, and only through a request-local full-ACM diff.
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
|
|
37
|
+
v1.8.9 deliberately does *not* override the active robot controller's configured
|
|
38
|
+
FollowJointTrajectory path tolerances for this qualified task. The UR controller
|
|
39
|
+
owns its control-loop stability contract; DevAgent independently verifies observed
|
|
40
|
+
desired-vs-actual tracking against its stricter commissioning accuracy gate and
|
|
41
|
+
verifies the released workpiece pose in Gazebo. This prevents a DevAgent-authored
|
|
42
|
+
action tolerance from aborting an otherwise valid OEM/controller trajectory while
|
|
43
|
+
preserving independent fail-closed verification.
|
|
44
|
+
|
|
45
|
+
No real-execution authority, geometry, speed, Twin lineage, collision relationship,
|
|
46
|
+
or DevAgent verification tolerance is relaxed.
|
|
38
47
|
"""
|
|
39
48
|
|
|
40
49
|
from . import report_test_execution as base_exec
|
|
@@ -48,6 +57,10 @@ def install_industrial_motion_v170() -> None:
|
|
|
48
57
|
|
|
49
58
|
visual_v170.PilzIndustrialSequencePlannerV170 = PilzIndustrialSequencePlannerV182
|
|
50
59
|
visual_v170.reference_industrial_groups = reference_industrial_groups_v182
|
|
60
|
+
# Controller-native policy: absence of an explicit positive tolerance in the
|
|
61
|
+
# FollowJointTrajectory goal means joint_trajectory_controller resolves its own
|
|
62
|
+
# configured defaults. DevAgent still evaluates observed tracking independently.
|
|
63
|
+
visual_v170._CONTROLLER_PATH_TOLERANCE_RAD = None
|
|
51
64
|
|
|
52
65
|
base_exec.run_report_test_visualization = run_report_test_visualization_v170
|
|
53
66
|
strict_exec.run_report_test_visualization = run_report_test_visualization_v170
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import asdict, dataclass
|
|
4
|
+
from math import cos, isfinite, sin
|
|
5
|
+
|
|
6
|
+
from ..pose_math import RigidPose
|
|
7
|
+
from ..simulation_platform import SimulationPlatformError
|
|
8
|
+
from .commands import RosCommandRunner
|
|
9
|
+
from .gazebo_cli import parse_gz_model_pose
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass(frozen=True, slots=True)
|
|
13
|
+
class GazeboPoseUpdateReceipt:
|
|
14
|
+
verified: bool
|
|
15
|
+
model_name: str
|
|
16
|
+
requested_position_m: tuple[float, float, float]
|
|
17
|
+
observed_position_m: tuple[float, float, float]
|
|
18
|
+
max_position_error_m: float
|
|
19
|
+
requested_quaternion_xyzw: tuple[float, float, float, float]
|
|
20
|
+
observed_quaternion_xyzw: tuple[float, float, float, float]
|
|
21
|
+
orientation_error_rad: float
|
|
22
|
+
|
|
23
|
+
def to_dict(self) -> dict[str, object]:
|
|
24
|
+
return asdict(self)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _quaternion_from_rpy(
|
|
28
|
+
rpy: tuple[float, float, float],
|
|
29
|
+
) -> tuple[float, float, float, float]:
|
|
30
|
+
roll, pitch, yaw = (float(value) for value in rpy)
|
|
31
|
+
cr, sr = cos(roll / 2.0), sin(roll / 2.0)
|
|
32
|
+
cp, sp = cos(pitch / 2.0), sin(pitch / 2.0)
|
|
33
|
+
cy, sy = cos(yaw / 2.0), sin(yaw / 2.0)
|
|
34
|
+
return (
|
|
35
|
+
sr * cp * cy - cr * sp * sy,
|
|
36
|
+
cr * sp * cy + sr * cp * sy,
|
|
37
|
+
cr * cp * sy - sr * sp * cy,
|
|
38
|
+
cr * cp * cy + sr * sp * sy,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _parse_pose(
|
|
43
|
+
text: str,
|
|
44
|
+
) -> tuple[
|
|
45
|
+
tuple[float, float, float],
|
|
46
|
+
tuple[float, float, float, float],
|
|
47
|
+
]:
|
|
48
|
+
try:
|
|
49
|
+
position, rpy = parse_gz_model_pose(text)
|
|
50
|
+
quaternion = _quaternion_from_rpy(rpy)
|
|
51
|
+
pose = RigidPose(position, quaternion)
|
|
52
|
+
except (SimulationPlatformError, ValueError) as exc:
|
|
53
|
+
raise SimulationPlatformError("gazebo_pose_readback_invalid") from exc
|
|
54
|
+
return pose.position_m, pose.quaternion_xyzw
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _parse_position(text: str) -> tuple[float, float, float]:
|
|
58
|
+
"""Backward-compatible position-only view over the stricter full-pose parser."""
|
|
59
|
+
|
|
60
|
+
position, _quaternion = _parse_pose(text)
|
|
61
|
+
return position
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class GazeboPoseBridge:
|
|
65
|
+
"""Read/update a dynamic model pose and require full Gazebo pose evidence."""
|
|
66
|
+
|
|
67
|
+
def __init__(
|
|
68
|
+
self,
|
|
69
|
+
runner: RosCommandRunner,
|
|
70
|
+
*,
|
|
71
|
+
world_name: str = "default",
|
|
72
|
+
timeout_s: float = 5.0,
|
|
73
|
+
position_tolerance_m: float = 0.005,
|
|
74
|
+
orientation_tolerance_rad: float = 0.017453292519943295,
|
|
75
|
+
) -> None:
|
|
76
|
+
if timeout_s <= 0 or position_tolerance_m <= 0 or orientation_tolerance_rad <= 0:
|
|
77
|
+
raise ValueError("gazebo_pose_bridge_limits_invalid")
|
|
78
|
+
if not world_name.strip():
|
|
79
|
+
raise ValueError("gazebo_world_name_required")
|
|
80
|
+
self.runner = runner
|
|
81
|
+
self.world_name = world_name
|
|
82
|
+
self.timeout_s = float(timeout_s)
|
|
83
|
+
self.position_tolerance_m = float(position_tolerance_m)
|
|
84
|
+
self.orientation_tolerance_rad = float(orientation_tolerance_rad)
|
|
85
|
+
|
|
86
|
+
def read_pose(self, *, model_name: str) -> RigidPose:
|
|
87
|
+
"""Return the model's current Gazebo pose without mutating simulation state."""
|
|
88
|
+
|
|
89
|
+
if not model_name.strip():
|
|
90
|
+
raise SimulationPlatformError("gazebo_pose_model_required")
|
|
91
|
+
readback = self.runner.run(
|
|
92
|
+
("gz", "model", "-m", model_name, "--pose"),
|
|
93
|
+
timeout_s=self.timeout_s,
|
|
94
|
+
)
|
|
95
|
+
if not readback.ok:
|
|
96
|
+
raise SimulationPlatformError("gazebo_pose_readback_failed")
|
|
97
|
+
observed_position, observed_quaternion = _parse_pose(
|
|
98
|
+
readback.stdout + "\n" + readback.stderr
|
|
99
|
+
)
|
|
100
|
+
return RigidPose(observed_position, observed_quaternion)
|
|
101
|
+
|
|
102
|
+
def set_pose(
|
|
103
|
+
self,
|
|
104
|
+
*,
|
|
105
|
+
model_name: str,
|
|
106
|
+
position_m: tuple[float, float, float],
|
|
107
|
+
quaternion_xyzw: tuple[float, float, float, float],
|
|
108
|
+
) -> GazeboPoseUpdateReceipt:
|
|
109
|
+
if not model_name.strip():
|
|
110
|
+
raise SimulationPlatformError("gazebo_pose_model_required")
|
|
111
|
+
if any(not isfinite(float(value)) for value in (*position_m, *quaternion_xyzw)):
|
|
112
|
+
raise SimulationPlatformError("gazebo_pose_non_finite")
|
|
113
|
+
requested = RigidPose(tuple(position_m), tuple(quaternion_xyzw))
|
|
114
|
+
service = f"/world/{self.world_name}/set_pose"
|
|
115
|
+
services = self.runner.run(("gz", "service", "-l"), timeout_s=self.timeout_s)
|
|
116
|
+
if not services.ok or service not in {line.strip() for line in services.stdout.splitlines()}:
|
|
117
|
+
raise SimulationPlatformError("gazebo_set_pose_service_unavailable")
|
|
118
|
+
|
|
119
|
+
x, y, z = requested.position_m
|
|
120
|
+
qx, qy, qz, qw = requested.quaternion_xyzw
|
|
121
|
+
request = (
|
|
122
|
+
f'name: "{model_name}", '
|
|
123
|
+
f'position: {{x: {x:.12g}, y: {y:.12g}, z: {z:.12g}}}, '
|
|
124
|
+
f'orientation: {{x: {qx:.12g}, y: {qy:.12g}, z: {qz:.12g}, w: {qw:.12g}}}'
|
|
125
|
+
)
|
|
126
|
+
command = self.runner.run(
|
|
127
|
+
(
|
|
128
|
+
"gz",
|
|
129
|
+
"service",
|
|
130
|
+
"-s",
|
|
131
|
+
service,
|
|
132
|
+
"--reqtype",
|
|
133
|
+
"gz.msgs.Pose",
|
|
134
|
+
"--reptype",
|
|
135
|
+
"gz.msgs.Boolean",
|
|
136
|
+
"--timeout",
|
|
137
|
+
str(max(1000, int(self.timeout_s * 1000))),
|
|
138
|
+
"--req",
|
|
139
|
+
request,
|
|
140
|
+
),
|
|
141
|
+
timeout_s=self.timeout_s + 2.0,
|
|
142
|
+
)
|
|
143
|
+
if not command.ok:
|
|
144
|
+
raise SimulationPlatformError("gazebo_set_pose_failed")
|
|
145
|
+
|
|
146
|
+
observed = self.read_pose(model_name=model_name)
|
|
147
|
+
position_error = max(
|
|
148
|
+
abs(first - second)
|
|
149
|
+
for first, second in zip(requested.position_m, observed.position_m)
|
|
150
|
+
)
|
|
151
|
+
orientation_error = requested.orientation_error_rad(observed)
|
|
152
|
+
if position_error > self.position_tolerance_m:
|
|
153
|
+
raise SimulationPlatformError(
|
|
154
|
+
f"gazebo_pose_readback_mismatch:{position_error:.6f}"
|
|
155
|
+
)
|
|
156
|
+
if orientation_error > self.orientation_tolerance_rad:
|
|
157
|
+
raise SimulationPlatformError(
|
|
158
|
+
f"gazebo_orientation_readback_mismatch:{orientation_error:.6f}"
|
|
159
|
+
)
|
|
160
|
+
return GazeboPoseUpdateReceipt(
|
|
161
|
+
True,
|
|
162
|
+
model_name,
|
|
163
|
+
requested.position_m,
|
|
164
|
+
observed.position_m,
|
|
165
|
+
position_error,
|
|
166
|
+
requested.quaternion_xyzw,
|
|
167
|
+
observed.quaternion_xyzw,
|
|
168
|
+
orientation_error,
|
|
169
|
+
)
|