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.
Files changed (274) hide show
  1. {devagent_physical_engine-1.8.6/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.8.9}/PKG-INFO +51 -8
  2. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/README.md +51 -8
  3. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/pyproject.toml +4 -1
  4. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/__init__.py +1 -1
  5. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +15 -2
  6. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/doctor.py +2 -0
  7. devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/gazebo_pose.py +169 -0
  8. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/preexecution.py +171 -39
  9. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +262 -35
  10. devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/ros_gz_pose_service_probe.py +42 -0
  11. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/state_validity_probe.py +76 -8
  12. {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
  13. devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/support_contact_acm_semantics_v189.py +195 -0
  14. devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/task_adapter.py +284 -0
  15. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/trajectory.py +25 -1
  16. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +83 -23
  17. devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/trajectory_feedback_tracking_v189.py +174 -0
  18. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_follow.py +71 -26
  19. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +110 -109
  20. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_scene.py +153 -26
  21. devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/workpiece_scene_probe_v187.py +408 -0
  22. devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/workpiece_scene_probe_v188.py +283 -0
  23. devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/workpiece_scene_probe_v189.py +371 -0
  24. devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/workpiece_transport.py +143 -0
  25. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/setup_profile.py +5 -5
  26. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9/src/devagent_physical_engine.egg-info}/PKG-INFO +51 -8
  27. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/SOURCES.txt +17 -1
  28. devagent_physical_engine-1.8.9/tests/test_explicit_detach_world_reassert_v189.py +113 -0
  29. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_industrial_motion_v170.py +2 -2
  30. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_package_metadata_v184.py +2 -2
  31. devagent_physical_engine-1.8.9/tests/test_place_preexecution_acm_v189.py +228 -0
  32. devagent_physical_engine-1.8.9/tests/test_release_resting_pose_v189.py +143 -0
  33. devagent_physical_engine-1.8.9/tests/test_release_transaction_v189.py +68 -0
  34. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_ros2_production_receipts_v011.py +14 -1
  35. devagent_physical_engine-1.8.9/tests/test_support_contact_acm_semantics_v189.py +138 -0
  36. devagent_physical_engine-1.8.9/tests/test_trajectory_action_contract_v189.py +80 -0
  37. devagent_physical_engine-1.8.9/tests/test_trajectory_feedback_tracking_v189.py +222 -0
  38. devagent_physical_engine-1.8.9/tests/test_transfer_controller_policy_v189.py +83 -0
  39. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_transfer_place_diagnostic_v172.py +2 -2
  40. devagent_physical_engine-1.8.9/tests/test_workpiece_semantic_lifecycle_v186.py +469 -0
  41. devagent_physical_engine-1.8.9/tests/test_workpiece_transport_v189.py +195 -0
  42. devagent_physical_engine-1.8.6/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -104
  43. devagent_physical_engine-1.8.6/src/devagent_physical_engine/ros2/task_adapter.py +0 -160
  44. devagent_physical_engine-1.8.6/tests/test_workpiece_semantic_lifecycle_v186.py +0 -208
  45. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/NOTICE +0 -0
  46. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/setup.cfg +0 -0
  47. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/__init__.py +0 -0
  48. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/compiler.py +0 -0
  49. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/contracts.py +0 -0
  50. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/coordinator.py +0 -0
  51. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/critic.py +0 -0
  52. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/evidence.py +0 -0
  53. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  54. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/planner.py +0 -0
  55. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/recovery.py +0 -0
  56. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/routing.py +0 -0
  57. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/runtime.py +0 -0
  58. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/semantic.py +0 -0
  59. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/structured.py +0 -0
  60. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ai_cli.py +0 -0
  61. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/cli.py +0 -0
  62. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial.py +0 -0
  63. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_campaign.py +0 -0
  64. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_cli.py +0 -0
  65. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_importer.py +0 -0
  66. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
  67. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_readiness.py +0 -0
  68. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_repository.py +0 -0
  69. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/continuous_clearance.py +0 -0
  70. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/controller_runtime_hotfix_v181.py +0 -0
  71. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/doctor.py +0 -0
  72. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/engineering_agent.py +0 -0
  73. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/engineering_request.py +0 -0
  74. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/evidence_replay.py +0 -0
  75. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/evidence_trust.py +0 -0
  76. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/execution.py +0 -0
  77. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/industrial_motion_v170.py +0 -0
  78. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/industrial_motion_v182.py +0 -0
  79. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/models.py +0 -0
  80. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/one_command.py +0 -0
  81. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/one_command_runtime.py +0 -0
  82. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/one_command_v15.py +0 -0
  83. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/one_command_v16.py +0 -0
  84. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/operating_envelope.py +0 -0
  85. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  86. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  87. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  88. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  89. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  90. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  91. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/experience.py +0 -0
  92. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/measured.py +0 -0
  93. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  94. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  95. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/physical_campaign.py +0 -0
  96. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/physical_evidence.py +0 -0
  97. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/physical_motion.py +0 -0
  98. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/planning.py +0 -0
  99. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/pose_math.py +0 -0
  100. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/preexecution_contract.py +0 -0
  101. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/production_authority.py +0 -0
  102. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/production_grade.py +0 -0
  103. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/project.py +0 -0
  104. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  105. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  106. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  107. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  108. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  109. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
  110. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_criterion.py +0 -0
  111. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_qualification.py +0 -0
  112. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/providers.py +0 -0
  113. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/qualification.py +0 -0
  114. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/qualification_cli.py +0 -0
  115. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/qualification_harness.py +0 -0
  116. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/reference_workcell.py +0 -0
  117. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/report_test_execution.py +0 -0
  118. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
  119. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/robot_platform.py +0 -0
  120. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/robot_support_v18.py +0 -0
  121. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/robots.py +0 -0
  122. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/__init__.py +0 -0
  123. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/abb_irb1200.py +0 -0
  124. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/abb_irb1200_preview.py +0 -0
  125. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  126. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/commands.py +0 -0
  127. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
  128. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/controller_action_probe.py +0 -0
  129. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/destination_support_contact_v182.py +0 -0
  130. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
  131. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
  132. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  133. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
  134. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  135. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +0 -0
  136. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py +0 -0
  137. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py +0 -0
  138. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v182.py +0 -0
  139. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
  140. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
  141. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  142. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
  143. {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
  144. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  145. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
  146. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +0 -0
  147. {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
  148. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  149. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  150. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
  151. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
  152. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
  153. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  154. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +0 -0
  155. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
  156. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
  157. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
  158. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  159. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
  160. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
  161. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
  162. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  163. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  164. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
  165. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
  166. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py +0 -0
  167. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/selective_verification.py +0 -0
  168. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
  169. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
  170. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/simulation.py +0 -0
  171. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/simulation_platform.py +0 -0
  172. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
  173. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
  174. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/tool_collision.py +0 -0
  175. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  176. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/twin.py +0 -0
  177. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/twin_builder.py +0 -0
  178. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/twin_codec.py +0 -0
  179. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/twin_materialization.py +0 -0
  180. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/user_cli.py +0 -0
  181. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/user_cli_v15.py +0 -0
  182. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/user_cli_v16.py +0 -0
  183. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/user_cli_v18.py +0 -0
  184. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/verification.py +0 -0
  185. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
  186. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  187. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
  188. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
  189. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  190. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_abb_irb1200_visual_v18.py +0 -0
  191. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_agent_core.py +0 -0
  192. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_agent_semantic_hardening.py +0 -0
  193. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_ai_cli.py +0 -0
  194. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_ai_cli_v07.py +0 -0
  195. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_commercial_importer_v1.py +0 -0
  196. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_commercial_intelligence_v15.py +0 -0
  197. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_commercial_readiness_v1.py +0 -0
  198. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_commercial_v1.py +0 -0
  199. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_continuous_clearance_v011.py +0 -0
  200. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_controller_runtime_hotfix_v181.py +0 -0
  201. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_core.py +0 -0
  202. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_destination_support_contact_v182.py +0 -0
  203. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_engineering_request_v07.py +0 -0
  204. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_evidence_replay_v12.py +0 -0
  205. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_evidence_trust_coverage_v12.py +0 -0
  206. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_evidence_trust_transport_v12.py +0 -0
  207. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_evidence_trust_v12.py +0 -0
  208. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_evidence_viewer_palette_v130.py +0 -0
  209. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_gazebo_cli_v0122.py +0 -0
  210. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_golden_abb_runner_v171.py +0 -0
  211. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_golden_abb_showcase.py +0 -0
  212. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_interpreter_profiles_v08.py +0 -0
  213. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_joint_state_probe_v0125.py +0 -0
  214. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_live_provider_qualification.py +0 -0
  215. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_measured_motion_v10.py +0 -0
  216. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
  217. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_moveit_scene_v0123.py +0 -0
  218. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_natural_language_agent_v07.py +0 -0
  219. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_one_command_hardening_v13.py +0 -0
  220. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_one_command_pose_hardening_v15.py +0 -0
  221. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_one_command_regression_v141.py +0 -0
  222. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_one_command_v13.py +0 -0
  223. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_openai_strict_schema_v0113.py +0 -0
  224. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_optimization_v05.py +0 -0
  225. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_physical_campaign_v09.py +0 -0
  226. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_physical_evidence_v09.py +0 -0
  227. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_physical_motion_v09.py +0 -0
  228. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_planning_fallback_v012.py +0 -0
  229. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_pose_math_v0125.py +0 -0
  230. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_preexecution_contract_v10.py +0 -0
  231. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_production_authority_v11.py +0 -0
  232. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_production_grade_coverage_v11.py +0 -0
  233. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_production_grade_v11.py +0 -0
  234. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_project_spine_v013.py +0 -0
  235. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_provider_and_qualification.py +0 -0
  236. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_provider_criterion_v15.py +0 -0
  237. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  238. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_qualification_harness_v06.py +0 -0
  239. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_readme_pypi.py +0 -0
  240. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_real_provider_adapters.py +0 -0
  241. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
  242. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_reference_workcell_v012.py +0 -0
  243. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_report_test_contract_coverage_v16.py +0 -0
  244. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_report_test_lineage_v16.py +0 -0
  245. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_report_test_visual_execution_v16.py +0 -0
  246. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_robot_platform_v08.py +0 -0
  247. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_ros2_simulation.py +0 -0
  248. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_ros_trajectory_v09.py +0 -0
  249. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_selective_verification_v14.py +0 -0
  250. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_setup_profile.py +0 -0
  251. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_sim_real_qualification_v011.py +0 -0
  252. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_simulation_platform_v08.py +0 -0
  253. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_smooth_motion_hotfix_v162.py +0 -0
  254. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_support_contact_hotfix_v161.py +0 -0
  255. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_tool_collision_v011.py +0 -0
  256. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_tool_scene_v0124.py +0 -0
  257. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_trajectory_action_probe_v0125.py +0 -0
  258. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_trajectory_qualification_v09.py +0 -0
  259. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_trajectory_tracking_v0125.py +0 -0
  260. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_twin_materialization_v10.py +0 -0
  261. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_twin_v08.py +0 -0
  262. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  263. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  264. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_user_cli_interactive_v131.py +0 -0
  265. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_user_cli_progress_v131.py +0 -0
  266. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_user_cli_report_visual_v16.py +0 -0
  267. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_user_cli_selective_v14.py +0 -0
  268. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_user_cli_v15.py +0 -0
  269. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
  270. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_v052_stabilization.py +0 -0
  271. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_v08_catalog_mapping_regression.py +0 -0
  272. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_workpiece_attach_semantics_v183.py +0 -0
  273. {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.9}/tests/test_workpiece_lifecycle_v011.py +0 -0
  274. {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.6
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.6
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.6
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.6 — Production/Stable software workflow**
678
+ **v1.8.9 — Production/Stable software workflow; target-proven qualified UR5e nominal Pick–Transport–Place report path**
642
679
 
643
- v1.8.6 retains v1.8.5 quaternion canonicalization, v1.8.4 PyPI metadata compliance, v1.8.3 synchronous service-safe attachment, v1.8.2 scoped destination-support place contact, and v1.8.1 direct UR5e controller/action binding. It upgrades the workpiece lifecycle to canonical MoveIt existing-object world↔attached transitions, strict physical-semantic pose/geometry verification, and persistent expected/observed lifecycle diagnostics instead of using floating representation SHA equality as PASS authority.
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
- canonical MoveIt existing-object workpiece attach/detach
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.6
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.6
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.6 — Production/Stable software workflow**
637
+ **v1.8.9 — Production/Stable software workflow; target-proven qualified UR5e nominal Pick–Transport–Place report path**
601
638
 
602
- v1.8.6 retains v1.8.5 quaternion canonicalization, v1.8.4 PyPI metadata compliance, v1.8.3 synchronous service-safe attachment, v1.8.2 scoped destination-support place contact, and v1.8.1 direct UR5e controller/action binding. It upgrades the workpiece lifecycle to canonical MoveIt existing-object world↔attached transitions, strict physical-semantic pose/geometry verification, and persistent expected/observed lifecycle diagnostics instead of using floating representation SHA equality as PASS authority.
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
- canonical MoveIt existing-object workpiece attach/detach
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.6"
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",
@@ -219,4 +219,4 @@ install_industrial_motion_v170()
219
219
  install_controller_runtime_hotfix_v181()
220
220
  install_one_command_runtime()
221
221
 
222
- __version__ = "1.8.6"
222
+ __version__ = "1.8.9"
@@ -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
- No real-execution authority, geometry, speed, Twin lineage, or other collision
37
- relationship is relaxed.
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
@@ -34,6 +34,8 @@ REQUIRED_PACKAGES = (
34
34
  "ur_robot_driver",
35
35
  "ur_moveit_config",
36
36
  "controller_manager",
37
+ "ros_gz_bridge",
38
+ "ros_gz_interfaces",
37
39
  )
38
40
 
39
41
 
@@ -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
+ )