devagent-physical-engine 1.8.8__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.8/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.8.9}/PKG-INFO +40 -7
  2. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/README.md +40 -7
  3. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/pyproject.toml +2 -1
  4. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/__init__.py +1 -1
  5. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +15 -2
  6. {devagent_physical_engine-1.8.8 → 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.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/preexecution.py +171 -39
  9. {devagent_physical_engine-1.8.8 → 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.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/state_validity_probe.py +76 -8
  12. {devagent_physical_engine-1.8.8 → 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.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/trajectory.py +25 -1
  16. {devagent_physical_engine-1.8.8 → 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.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_follow.py +71 -26
  19. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +110 -109
  20. {devagent_physical_engine-1.8.8 → 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_v189.py +371 -0
  22. devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/workpiece_transport.py +143 -0
  23. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/setup_profile.py +5 -5
  24. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9/src/devagent_physical_engine.egg-info}/PKG-INFO +40 -7
  25. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/SOURCES.txt +15 -1
  26. devagent_physical_engine-1.8.9/tests/test_explicit_detach_world_reassert_v189.py +113 -0
  27. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_industrial_motion_v170.py +2 -2
  28. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_package_metadata_v184.py +2 -2
  29. devagent_physical_engine-1.8.9/tests/test_place_preexecution_acm_v189.py +228 -0
  30. devagent_physical_engine-1.8.9/tests/test_release_resting_pose_v189.py +143 -0
  31. devagent_physical_engine-1.8.9/tests/test_release_transaction_v189.py +68 -0
  32. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_ros2_production_receipts_v011.py +14 -1
  33. devagent_physical_engine-1.8.9/tests/test_support_contact_acm_semantics_v189.py +138 -0
  34. devagent_physical_engine-1.8.9/tests/test_trajectory_action_contract_v189.py +80 -0
  35. devagent_physical_engine-1.8.9/tests/test_trajectory_feedback_tracking_v189.py +222 -0
  36. devagent_physical_engine-1.8.9/tests/test_transfer_controller_policy_v189.py +83 -0
  37. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_transfer_place_diagnostic_v172.py +2 -2
  38. devagent_physical_engine-1.8.9/tests/test_workpiece_semantic_lifecycle_v186.py +469 -0
  39. devagent_physical_engine-1.8.9/tests/test_workpiece_transport_v189.py +195 -0
  40. devagent_physical_engine-1.8.8/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -104
  41. devagent_physical_engine-1.8.8/src/devagent_physical_engine/ros2/task_adapter.py +0 -160
  42. devagent_physical_engine-1.8.8/tests/test_workpiece_semantic_lifecycle_v186.py +0 -220
  43. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/NOTICE +0 -0
  44. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/setup.cfg +0 -0
  45. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/__init__.py +0 -0
  46. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/compiler.py +0 -0
  47. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/contracts.py +0 -0
  48. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/coordinator.py +0 -0
  49. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/critic.py +0 -0
  50. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/evidence.py +0 -0
  51. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  52. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/planner.py +0 -0
  53. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/recovery.py +0 -0
  54. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/routing.py +0 -0
  55. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/runtime.py +0 -0
  56. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/semantic.py +0 -0
  57. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/structured.py +0 -0
  58. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ai_cli.py +0 -0
  59. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/cli.py +0 -0
  60. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial.py +0 -0
  61. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_campaign.py +0 -0
  62. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_cli.py +0 -0
  63. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_importer.py +0 -0
  64. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
  65. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_readiness.py +0 -0
  66. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_repository.py +0 -0
  67. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/continuous_clearance.py +0 -0
  68. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/controller_runtime_hotfix_v181.py +0 -0
  69. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/doctor.py +0 -0
  70. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/engineering_agent.py +0 -0
  71. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/engineering_request.py +0 -0
  72. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/evidence_replay.py +0 -0
  73. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/evidence_trust.py +0 -0
  74. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/execution.py +0 -0
  75. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/industrial_motion_v170.py +0 -0
  76. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/industrial_motion_v182.py +0 -0
  77. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/models.py +0 -0
  78. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/one_command.py +0 -0
  79. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/one_command_runtime.py +0 -0
  80. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/one_command_v15.py +0 -0
  81. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/one_command_v16.py +0 -0
  82. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/operating_envelope.py +0 -0
  83. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  84. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  85. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  86. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  87. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  88. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  89. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/experience.py +0 -0
  90. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/measured.py +0 -0
  91. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  92. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  93. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/physical_campaign.py +0 -0
  94. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/physical_evidence.py +0 -0
  95. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/physical_motion.py +0 -0
  96. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/planning.py +0 -0
  97. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/pose_math.py +0 -0
  98. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/preexecution_contract.py +0 -0
  99. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/production_authority.py +0 -0
  100. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/production_grade.py +0 -0
  101. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/project.py +0 -0
  102. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  103. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  104. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  105. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  106. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  107. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
  108. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_criterion.py +0 -0
  109. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_qualification.py +0 -0
  110. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/providers.py +0 -0
  111. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/qualification.py +0 -0
  112. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/qualification_cli.py +0 -0
  113. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/qualification_harness.py +0 -0
  114. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/reference_workcell.py +0 -0
  115. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/report_test_execution.py +0 -0
  116. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
  117. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/robot_platform.py +0 -0
  118. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/robot_support_v18.py +0 -0
  119. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/robots.py +0 -0
  120. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/__init__.py +0 -0
  121. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/abb_irb1200.py +0 -0
  122. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/abb_irb1200_preview.py +0 -0
  123. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  124. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/commands.py +0 -0
  125. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
  126. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/controller_action_probe.py +0 -0
  127. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/destination_support_contact_v182.py +0 -0
  128. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
  129. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
  130. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  131. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
  132. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  133. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +0 -0
  134. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py +0 -0
  135. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py +0 -0
  136. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v182.py +0 -0
  137. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
  138. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
  139. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  140. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
  141. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
  142. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  143. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
  144. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +0 -0
  145. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe_v182.py +0 -0
  146. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  147. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  148. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
  149. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
  150. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
  151. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  152. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +0 -0
  153. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
  154. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
  155. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
  156. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  157. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
  158. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
  159. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
  160. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  161. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  162. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
  163. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
  164. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py +0 -0
  165. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v187.py +0 -0
  166. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v188.py +0 -0
  167. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/selective_verification.py +0 -0
  168. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
  169. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
  170. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/simulation.py +0 -0
  171. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/simulation_platform.py +0 -0
  172. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
  173. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
  174. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/tool_collision.py +0 -0
  175. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  176. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/twin.py +0 -0
  177. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/twin_builder.py +0 -0
  178. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/twin_codec.py +0 -0
  179. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/twin_materialization.py +0 -0
  180. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/user_cli.py +0 -0
  181. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/user_cli_v15.py +0 -0
  182. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/user_cli_v16.py +0 -0
  183. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/user_cli_v18.py +0 -0
  184. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/verification.py +0 -0
  185. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
  186. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  187. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
  188. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
  189. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  190. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_abb_irb1200_visual_v18.py +0 -0
  191. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_agent_core.py +0 -0
  192. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_agent_semantic_hardening.py +0 -0
  193. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_ai_cli.py +0 -0
  194. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_ai_cli_v07.py +0 -0
  195. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_commercial_importer_v1.py +0 -0
  196. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_commercial_intelligence_v15.py +0 -0
  197. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_commercial_readiness_v1.py +0 -0
  198. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_commercial_v1.py +0 -0
  199. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_continuous_clearance_v011.py +0 -0
  200. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_controller_runtime_hotfix_v181.py +0 -0
  201. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_core.py +0 -0
  202. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_destination_support_contact_v182.py +0 -0
  203. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_engineering_request_v07.py +0 -0
  204. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_evidence_replay_v12.py +0 -0
  205. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_evidence_trust_coverage_v12.py +0 -0
  206. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_evidence_trust_transport_v12.py +0 -0
  207. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_evidence_trust_v12.py +0 -0
  208. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_evidence_viewer_palette_v130.py +0 -0
  209. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_gazebo_cli_v0122.py +0 -0
  210. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_golden_abb_runner_v171.py +0 -0
  211. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_golden_abb_showcase.py +0 -0
  212. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_interpreter_profiles_v08.py +0 -0
  213. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_joint_state_probe_v0125.py +0 -0
  214. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_live_provider_qualification.py +0 -0
  215. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_measured_motion_v10.py +0 -0
  216. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
  217. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_moveit_scene_v0123.py +0 -0
  218. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_natural_language_agent_v07.py +0 -0
  219. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_one_command_hardening_v13.py +0 -0
  220. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_one_command_pose_hardening_v15.py +0 -0
  221. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_one_command_regression_v141.py +0 -0
  222. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_one_command_v13.py +0 -0
  223. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_openai_strict_schema_v0113.py +0 -0
  224. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_optimization_v05.py +0 -0
  225. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_physical_campaign_v09.py +0 -0
  226. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_physical_evidence_v09.py +0 -0
  227. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_physical_motion_v09.py +0 -0
  228. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_planning_fallback_v012.py +0 -0
  229. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_pose_math_v0125.py +0 -0
  230. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_preexecution_contract_v10.py +0 -0
  231. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_production_authority_v11.py +0 -0
  232. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_production_grade_coverage_v11.py +0 -0
  233. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_production_grade_v11.py +0 -0
  234. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_project_spine_v013.py +0 -0
  235. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_provider_and_qualification.py +0 -0
  236. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_provider_criterion_v15.py +0 -0
  237. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  238. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_qualification_harness_v06.py +0 -0
  239. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_readme_pypi.py +0 -0
  240. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_real_provider_adapters.py +0 -0
  241. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
  242. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_reference_workcell_v012.py +0 -0
  243. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_report_test_contract_coverage_v16.py +0 -0
  244. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_report_test_lineage_v16.py +0 -0
  245. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_report_test_visual_execution_v16.py +0 -0
  246. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_robot_platform_v08.py +0 -0
  247. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_ros2_simulation.py +0 -0
  248. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_ros_trajectory_v09.py +0 -0
  249. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_selective_verification_v14.py +0 -0
  250. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_setup_profile.py +0 -0
  251. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_sim_real_qualification_v011.py +0 -0
  252. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_simulation_platform_v08.py +0 -0
  253. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_smooth_motion_hotfix_v162.py +0 -0
  254. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_support_contact_hotfix_v161.py +0 -0
  255. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_tool_collision_v011.py +0 -0
  256. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_tool_scene_v0124.py +0 -0
  257. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_trajectory_action_probe_v0125.py +0 -0
  258. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_trajectory_qualification_v09.py +0 -0
  259. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_trajectory_tracking_v0125.py +0 -0
  260. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_twin_materialization_v10.py +0 -0
  261. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_twin_v08.py +0 -0
  262. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  263. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  264. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_user_cli_interactive_v131.py +0 -0
  265. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_user_cli_progress_v131.py +0 -0
  266. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_user_cli_report_visual_v16.py +0 -0
  267. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_user_cli_selective_v14.py +0 -0
  268. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_user_cli_v15.py +0 -0
  269. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
  270. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_v052_stabilization.py +0 -0
  271. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_v08_catalog_mapping_regression.py +0 -0
  272. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_workpiece_attach_semantics_v183.py +0 -0
  273. {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_workpiece_lifecycle_v011.py +0 -0
  274. {devagent_physical_engine-1.8.8 → 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.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.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.8
91
+ 1.8.9
92
92
  ```
93
93
 
94
94
  Run the normal customer workflow:
@@ -448,6 +448,33 @@ The lifecycle receipt records the pre/post primitive type representation, canoni
448
448
 
449
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
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
+
451
478
  ## Qualified visual-execution scope
452
479
 
453
480
  Measured report-test execution remains intentionally narrow:
@@ -648,9 +675,9 @@ devagent-physical-ai optional provider-backed engineering front end
648
675
 
649
676
  # Project status
650
677
 
651
- **v1.8.8 — Production/Stable software workflow**
678
+ **v1.8.9 — Production/Stable software workflow; target-proven qualified UR5e nominal Pick–Transport–Place report path**
652
679
 
653
- v1.8.8 retains the v1.8.6 semantic lifecycle and the target-candidate improvements layered after it, while making the package/version identity explicit. The current GRASP path adds ROS-octet-safe diagnostics and a synchronous canonical-world reassert/readback gate before attachment. This release is intended to make the next workstation qualification run reproducible and attributable to one exact installable artifact.
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.
654
681
 
655
682
  Production-oriented software capabilities include:
656
683
 
@@ -665,9 +692,15 @@ exact Requirement → Mapping → Verification Plan → Case provenance
665
692
  truthful robot support tiers
666
693
  qualified UR5e report-test visual execution contract
667
694
  direct UR5e controller-manager/action readiness binding
695
+ controller-native execution tolerance + independent DevAgent tracking evidence
668
696
  canonical MoveIt workpiece lifecycle with world-integrity gate
669
697
  semantic workpiece pose/geometry verification with persistent diagnostics
670
- 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
671
704
  experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
672
705
  industrial Pilz PTP / LIN planning
673
706
  adaptive bounded blend selection
@@ -684,7 +717,7 @@ change impact + regression
684
717
  provider-neutral optional AI front end
685
718
  ```
686
719
 
687
- 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.
688
721
 
689
722
  ## Documentation
690
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.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.8
50
+ 1.8.9
51
51
  ```
52
52
 
53
53
  Run the normal customer workflow:
@@ -407,6 +407,33 @@ The lifecycle receipt records the pre/post primitive type representation, canoni
407
407
 
408
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
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
+
410
437
  ## Qualified visual-execution scope
411
438
 
412
439
  Measured report-test execution remains intentionally narrow:
@@ -607,9 +634,9 @@ devagent-physical-ai optional provider-backed engineering front end
607
634
 
608
635
  # Project status
609
636
 
610
- **v1.8.8 — Production/Stable software workflow**
637
+ **v1.8.9 — Production/Stable software workflow; target-proven qualified UR5e nominal Pick–Transport–Place report path**
611
638
 
612
- v1.8.8 retains the v1.8.6 semantic lifecycle and the target-candidate improvements layered after it, while making the package/version identity explicit. The current GRASP path adds ROS-octet-safe diagnostics and a synchronous canonical-world reassert/readback gate before attachment. This release is intended to make the next workstation qualification run reproducible and attributable to one exact installable artifact.
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.
613
640
 
614
641
  Production-oriented software capabilities include:
615
642
 
@@ -624,9 +651,15 @@ exact Requirement → Mapping → Verification Plan → Case provenance
624
651
  truthful robot support tiers
625
652
  qualified UR5e report-test visual execution contract
626
653
  direct UR5e controller-manager/action readiness binding
654
+ controller-native execution tolerance + independent DevAgent tracking evidence
627
655
  canonical MoveIt workpiece lifecycle with world-integrity gate
628
656
  semantic workpiece pose/geometry verification with persistent diagnostics
629
- 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
630
663
  experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
631
664
  industrial Pilz PTP / LIN planning
632
665
  adaptive bounded blend selection
@@ -643,7 +676,7 @@ change impact + regression
643
676
  provider-neutral optional AI front end
644
677
  ```
645
678
 
646
- 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.
647
680
 
648
681
  ## Documentation
649
682
 
@@ -679,4 +712,4 @@ Original creator: Tom Ha
679
712
  Original project: https://github.com/tomha85/devagent-physical-engine
680
713
  All rights reserved.
681
714
 
682
- 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.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"
@@ -68,6 +68,7 @@ omit = [
68
68
  "src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py",
69
69
  "src/devagent_physical_engine/ros2/workpiece_scene_probe_v187.py",
70
70
  "src/devagent_physical_engine/ros2/workpiece_scene_probe_v188.py",
71
+ "src/devagent_physical_engine/ros2/workpiece_scene_probe_v189.py",
71
72
  "src/devagent_physical_engine/ros2/qualification*.py",
72
73
  "src/devagent_physical_engine/ros2/joint_state_recorder.py",
73
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.8"
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
+ )