devagent-physical-engine 1.8.5__tar.gz → 1.8.6__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 (256) hide show
  1. {devagent_physical_engine-1.8.5/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.8.6}/PKG-INFO +19 -7
  2. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/README.md +19 -7
  3. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/pyproject.toml +2 -1
  4. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/__init__.py +1 -1
  5. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/workpiece_scene.py +106 -15
  6. devagent_physical_engine-1.8.6/src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py +523 -0
  7. devagent_physical_engine-1.8.6/src/devagent_physical_engine/workpiece_lifecycle.py +116 -0
  8. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6/src/devagent_physical_engine.egg-info}/PKG-INFO +19 -7
  9. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine.egg-info/SOURCES.txt +3 -1
  10. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_industrial_motion_v170.py +2 -2
  11. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_package_metadata_v184.py +2 -2
  12. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_transfer_place_diagnostic_v172.py +2 -2
  13. devagent_physical_engine-1.8.6/tests/test_workpiece_semantic_lifecycle_v186.py +208 -0
  14. devagent_physical_engine-1.8.5/src/devagent_physical_engine/workpiece_lifecycle.py +0 -66
  15. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/NOTICE +0 -0
  16. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/setup.cfg +0 -0
  17. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/__init__.py +0 -0
  18. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/compiler.py +0 -0
  19. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/contracts.py +0 -0
  20. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/coordinator.py +0 -0
  21. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/critic.py +0 -0
  22. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/evidence.py +0 -0
  23. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  24. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/planner.py +0 -0
  25. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/recovery.py +0 -0
  26. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/routing.py +0 -0
  27. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/runtime.py +0 -0
  28. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/semantic.py +0 -0
  29. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/structured.py +0 -0
  30. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ai_cli.py +0 -0
  31. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/cli.py +0 -0
  32. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/commercial.py +0 -0
  33. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/commercial_campaign.py +0 -0
  34. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/commercial_cli.py +0 -0
  35. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/commercial_importer.py +0 -0
  36. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
  37. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/commercial_readiness.py +0 -0
  38. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/commercial_repository.py +0 -0
  39. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/continuous_clearance.py +0 -0
  40. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/controller_runtime_hotfix_v181.py +0 -0
  41. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/doctor.py +0 -0
  42. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/engineering_agent.py +0 -0
  43. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/engineering_request.py +0 -0
  44. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/evidence_replay.py +0 -0
  45. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/evidence_trust.py +0 -0
  46. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/execution.py +0 -0
  47. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +0 -0
  48. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/industrial_motion_v170.py +0 -0
  49. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/industrial_motion_v182.py +0 -0
  50. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/models.py +0 -0
  51. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/one_command.py +0 -0
  52. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/one_command_runtime.py +0 -0
  53. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/one_command_v15.py +0 -0
  54. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/one_command_v16.py +0 -0
  55. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/operating_envelope.py +0 -0
  56. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  57. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  58. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  59. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  60. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  61. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  62. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/experience.py +0 -0
  63. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/measured.py +0 -0
  64. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  65. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  66. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/physical_campaign.py +0 -0
  67. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/physical_evidence.py +0 -0
  68. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/physical_motion.py +0 -0
  69. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/planning.py +0 -0
  70. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/pose_math.py +0 -0
  71. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/preexecution_contract.py +0 -0
  72. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/production_authority.py +0 -0
  73. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/production_grade.py +0 -0
  74. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/project.py +0 -0
  75. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  76. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  77. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  78. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  79. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  80. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
  81. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/provider_criterion.py +0 -0
  82. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/provider_qualification.py +0 -0
  83. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/providers.py +0 -0
  84. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/qualification.py +0 -0
  85. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/qualification_cli.py +0 -0
  86. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/qualification_harness.py +0 -0
  87. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/reference_workcell.py +0 -0
  88. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/report_test_execution.py +0 -0
  89. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
  90. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/robot_platform.py +0 -0
  91. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/robot_support_v18.py +0 -0
  92. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/robots.py +0 -0
  93. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/__init__.py +0 -0
  94. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/abb_irb1200.py +0 -0
  95. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/abb_irb1200_preview.py +0 -0
  96. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  97. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/commands.py +0 -0
  98. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
  99. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/controller_action_probe.py +0 -0
  100. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/destination_support_contact_v182.py +0 -0
  101. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/doctor.py +0 -0
  102. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
  103. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
  104. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  105. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
  106. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
  107. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  108. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +0 -0
  109. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py +0 -0
  110. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py +0 -0
  111. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v182.py +0 -0
  112. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
  113. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
  114. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  115. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
  116. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
  117. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  118. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
  119. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +0 -0
  120. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe_v182.py +0 -0
  121. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
  122. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  123. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  124. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
  125. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
  126. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
  127. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +0 -0
  128. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  129. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
  130. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +0 -0
  131. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +0 -0
  132. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
  133. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
  134. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
  135. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
  136. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  137. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
  138. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
  139. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
  140. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
  141. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
  142. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  143. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  144. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
  145. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
  146. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
  147. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
  148. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/selective_verification.py +0 -0
  149. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
  150. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/setup_profile.py +0 -0
  151. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
  152. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/simulation.py +0 -0
  153. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/simulation_platform.py +0 -0
  154. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
  155. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
  156. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/tool_collision.py +0 -0
  157. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  158. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/twin.py +0 -0
  159. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/twin_builder.py +0 -0
  160. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/twin_codec.py +0 -0
  161. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/twin_materialization.py +0 -0
  162. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/user_cli.py +0 -0
  163. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/user_cli_v15.py +0 -0
  164. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/user_cli_v16.py +0 -0
  165. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/user_cli_v18.py +0 -0
  166. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/verification.py +0 -0
  167. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  168. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
  169. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
  170. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  171. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_abb_irb1200_visual_v18.py +0 -0
  172. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_agent_core.py +0 -0
  173. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_agent_semantic_hardening.py +0 -0
  174. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_ai_cli.py +0 -0
  175. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_ai_cli_v07.py +0 -0
  176. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_commercial_importer_v1.py +0 -0
  177. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_commercial_intelligence_v15.py +0 -0
  178. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_commercial_readiness_v1.py +0 -0
  179. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_commercial_v1.py +0 -0
  180. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_continuous_clearance_v011.py +0 -0
  181. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_controller_runtime_hotfix_v181.py +0 -0
  182. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_core.py +0 -0
  183. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_destination_support_contact_v182.py +0 -0
  184. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_engineering_request_v07.py +0 -0
  185. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_evidence_replay_v12.py +0 -0
  186. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_evidence_trust_coverage_v12.py +0 -0
  187. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_evidence_trust_transport_v12.py +0 -0
  188. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_evidence_trust_v12.py +0 -0
  189. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_evidence_viewer_palette_v130.py +0 -0
  190. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_gazebo_cli_v0122.py +0 -0
  191. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_golden_abb_runner_v171.py +0 -0
  192. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_golden_abb_showcase.py +0 -0
  193. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_interpreter_profiles_v08.py +0 -0
  194. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_joint_state_probe_v0125.py +0 -0
  195. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_live_provider_qualification.py +0 -0
  196. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_measured_motion_v10.py +0 -0
  197. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
  198. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_moveit_scene_v0123.py +0 -0
  199. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_natural_language_agent_v07.py +0 -0
  200. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_one_command_hardening_v13.py +0 -0
  201. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_one_command_pose_hardening_v15.py +0 -0
  202. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_one_command_regression_v141.py +0 -0
  203. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_one_command_v13.py +0 -0
  204. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_openai_strict_schema_v0113.py +0 -0
  205. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_optimization_v05.py +0 -0
  206. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_physical_campaign_v09.py +0 -0
  207. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_physical_evidence_v09.py +0 -0
  208. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_physical_motion_v09.py +0 -0
  209. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_planning_fallback_v012.py +0 -0
  210. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_pose_math_v0125.py +0 -0
  211. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_preexecution_contract_v10.py +0 -0
  212. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_production_authority_v11.py +0 -0
  213. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_production_grade_coverage_v11.py +0 -0
  214. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_production_grade_v11.py +0 -0
  215. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_project_spine_v013.py +0 -0
  216. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_provider_and_qualification.py +0 -0
  217. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_provider_criterion_v15.py +0 -0
  218. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  219. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_qualification_harness_v06.py +0 -0
  220. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_readme_pypi.py +0 -0
  221. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_real_provider_adapters.py +0 -0
  222. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
  223. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_reference_workcell_v012.py +0 -0
  224. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_report_test_contract_coverage_v16.py +0 -0
  225. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_report_test_lineage_v16.py +0 -0
  226. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_report_test_visual_execution_v16.py +0 -0
  227. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_robot_platform_v08.py +0 -0
  228. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_ros2_production_receipts_v011.py +0 -0
  229. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_ros2_simulation.py +0 -0
  230. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_ros_trajectory_v09.py +0 -0
  231. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_selective_verification_v14.py +0 -0
  232. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_setup_profile.py +0 -0
  233. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_sim_real_qualification_v011.py +0 -0
  234. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_simulation_platform_v08.py +0 -0
  235. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_smooth_motion_hotfix_v162.py +0 -0
  236. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_support_contact_hotfix_v161.py +0 -0
  237. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_tool_collision_v011.py +0 -0
  238. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_tool_scene_v0124.py +0 -0
  239. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_trajectory_action_probe_v0125.py +0 -0
  240. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_trajectory_qualification_v09.py +0 -0
  241. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_trajectory_tracking_v0125.py +0 -0
  242. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_twin_materialization_v10.py +0 -0
  243. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_twin_v08.py +0 -0
  244. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  245. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  246. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_user_cli_interactive_v131.py +0 -0
  247. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_user_cli_progress_v131.py +0 -0
  248. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_user_cli_report_visual_v16.py +0 -0
  249. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_user_cli_selective_v14.py +0 -0
  250. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_user_cli_v15.py +0 -0
  251. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
  252. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_v052_stabilization.py +0 -0
  253. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_v08_catalog_mapping_regression.py +0 -0
  254. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_workpiece_attach_semantics_v183.py +0 -0
  255. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_workpiece_lifecycle_v011.py +0 -0
  256. {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/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.5
3
+ Version: 1.8.6
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.5
79
+ python -m pip install --upgrade devagent-physical-engine==1.8.6
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.5
91
+ 1.8.6
92
92
  ```
93
93
 
94
94
  Run the normal customer workflow:
@@ -426,6 +426,18 @@ MoveIt round-trips attached-object rotations through Eigen. Unit quaternions `q`
426
426
 
427
427
  Verification remains strict for attachment identity, link, geometry contract, position, and physical rotation. This is not a tolerance-based PASS and does not change target geometry, TCP, collision policy, planner types, motion speeds, controller binding, Twin lineage, site qualification, or real-execution authority. If a hash mismatch remains, DevAgent records expected and observed hashes plus canonical expected/object/primitive/effective attachment poses for target diagnosis.
428
428
 
429
+ ## v1.8.6 canonical semantic workpiece lifecycle
430
+
431
+ A clean v1.8.5 UR5e target-stack run again reached all five industrial preflight groups and executed `approach_pick`, while GRASP still failed with `workpiece_attachment_hash_mismatch`. That target evidence proved raw SHA equality of floating pose representations was too brittle to remain physical PASS authority.
432
+
433
+ v1.8.6 uses MoveIt's canonical existing-object lifecycle. Before GRASP, DevAgent reads back and semantically verifies the exact world workpiece. Attach then sends an ID-only `AttachedCollisionObject.ADD`; MoveIt transfers the already-verified world object's geometry and pose into the AttachedBody on the verified tool link. Release sends an ID-only attached-object REMOVE; MoveIt restores that same AttachedBody to the world at its current global pose.
434
+
435
+ The lifecycle remains fail-closed. Attach requires exact object identity, exact attached link, exact touch-link set, exact geometry kind, dimensions within `1e-9 m`, position error no greater than `0.1 mm`, and orientation error no greater than `1e-4 rad`. Detach similarly verifies restored world identity, geometry, destination frame, position, and orientation. Representation hashes remain recorded for audit diagnostics but do not override the explicit physical-semantic checks.
436
+
437
+ Every lifecycle transition persists a deterministic receipt containing probe stdout/stderr plus expected/observed semantic diagnostics. Any failure includes the receipt path so the next target-stack blocker can be diagnosed directly instead of being collapsed to a generic lifecycle code.
438
+
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
+
429
441
  ## Qualified visual-execution scope
430
442
 
431
443
  Measured report-test execution remains intentionally narrow:
@@ -626,9 +638,9 @@ devagent-physical-ai optional provider-backed engineering front end
626
638
 
627
639
  # Project status
628
640
 
629
- **v1.8.5 — Production/Stable software workflow**
641
+ **v1.8.6 — Production/Stable software workflow**
630
642
 
631
- v1.8.5 retains v1.8.4 PyPI metadata compliance, v1.8.3 synchronous service-safe workpiece attachment, v1.8.2 scoped destination-support place contact, v1.8.1 direct UR5e controller/action binding, truthful robot support tiers, and the ABB IRB1200 experimental visual runtime. It makes strict workpiece attachment verification invariant to the mathematically equivalent quaternion representations `q` and `-q` and persists exact pose/hash diagnostics for any remaining mismatch.
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.
632
644
 
633
645
  Production-oriented software capabilities include:
634
646
 
@@ -643,8 +655,8 @@ exact Requirement → Mapping → Verification Plan → Case provenance
643
655
  truthful robot support tiers
644
656
  qualified UR5e report-test visual execution contract
645
657
  direct UR5e controller-manager/action readiness binding
646
- synchronous verified workpiece attach/detach lifecycle
647
- quaternion-invariant strict attachment hashing
658
+ canonical MoveIt existing-object workpiece attach/detach
659
+ semantic workpiece pose/geometry verification with persistent diagnostics
648
660
  scoped destination-support place contact
649
661
  experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
650
662
  industrial Pilz PTP / LIN planning
@@ -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.5
38
+ python -m pip install --upgrade devagent-physical-engine==1.8.6
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.5
50
+ 1.8.6
51
51
  ```
52
52
 
53
53
  Run the normal customer workflow:
@@ -385,6 +385,18 @@ MoveIt round-trips attached-object rotations through Eigen. Unit quaternions `q`
385
385
 
386
386
  Verification remains strict for attachment identity, link, geometry contract, position, and physical rotation. This is not a tolerance-based PASS and does not change target geometry, TCP, collision policy, planner types, motion speeds, controller binding, Twin lineage, site qualification, or real-execution authority. If a hash mismatch remains, DevAgent records expected and observed hashes plus canonical expected/object/primitive/effective attachment poses for target diagnosis.
387
387
 
388
+ ## v1.8.6 canonical semantic workpiece lifecycle
389
+
390
+ A clean v1.8.5 UR5e target-stack run again reached all five industrial preflight groups and executed `approach_pick`, while GRASP still failed with `workpiece_attachment_hash_mismatch`. That target evidence proved raw SHA equality of floating pose representations was too brittle to remain physical PASS authority.
391
+
392
+ v1.8.6 uses MoveIt's canonical existing-object lifecycle. Before GRASP, DevAgent reads back and semantically verifies the exact world workpiece. Attach then sends an ID-only `AttachedCollisionObject.ADD`; MoveIt transfers the already-verified world object's geometry and pose into the AttachedBody on the verified tool link. Release sends an ID-only attached-object REMOVE; MoveIt restores that same AttachedBody to the world at its current global pose.
393
+
394
+ The lifecycle remains fail-closed. Attach requires exact object identity, exact attached link, exact touch-link set, exact geometry kind, dimensions within `1e-9 m`, position error no greater than `0.1 mm`, and orientation error no greater than `1e-4 rad`. Detach similarly verifies restored world identity, geometry, destination frame, position, and orientation. Representation hashes remain recorded for audit diagnostics but do not override the explicit physical-semantic checks.
395
+
396
+ Every lifecycle transition persists a deterministic receipt containing probe stdout/stderr plus expected/observed semantic diagnostics. Any failure includes the receipt path so the next target-stack blocker can be diagnosed directly instead of being collapsed to a generic lifecycle code.
397
+
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
+
388
400
  ## Qualified visual-execution scope
389
401
 
390
402
  Measured report-test execution remains intentionally narrow:
@@ -585,9 +597,9 @@ devagent-physical-ai optional provider-backed engineering front end
585
597
 
586
598
  # Project status
587
599
 
588
- **v1.8.5 — Production/Stable software workflow**
600
+ **v1.8.6 — Production/Stable software workflow**
589
601
 
590
- v1.8.5 retains v1.8.4 PyPI metadata compliance, v1.8.3 synchronous service-safe workpiece attachment, v1.8.2 scoped destination-support place contact, v1.8.1 direct UR5e controller/action binding, truthful robot support tiers, and the ABB IRB1200 experimental visual runtime. It makes strict workpiece attachment verification invariant to the mathematically equivalent quaternion representations `q` and `-q` and persists exact pose/hash diagnostics for any remaining mismatch.
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.
591
603
 
592
604
  Production-oriented software capabilities include:
593
605
 
@@ -602,8 +614,8 @@ exact Requirement → Mapping → Verification Plan → Case provenance
602
614
  truthful robot support tiers
603
615
  qualified UR5e report-test visual execution contract
604
616
  direct UR5e controller-manager/action readiness binding
605
- synchronous verified workpiece attach/detach lifecycle
606
- quaternion-invariant strict attachment hashing
617
+ canonical MoveIt existing-object workpiece attach/detach
618
+ semantic workpiece pose/geometry verification with persistent diagnostics
607
619
  scoped destination-support place contact
608
620
  experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
609
621
  industrial Pilz PTP / LIN planning
@@ -657,4 +669,4 @@ Original creator: Tom Ha
657
669
  Original project: https://github.com/tomha85/devagent-physical-engine
658
670
  All rights reserved.
659
671
 
660
- See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
672
+ 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.5"
7
+ version = "1.8.6"
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"
@@ -65,6 +65,7 @@ omit = [
65
65
  # simulator, move_group, TF, controller actions, or gz services.
66
66
  # Pure contracts/reference-workcell logic remains inside the hosted coverage gate.
67
67
  "src/devagent_physical_engine/ros2/*_probe.py",
68
+ "src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py",
68
69
  "src/devagent_physical_engine/ros2/qualification*.py",
69
70
  "src/devagent_physical_engine/ros2/joint_state_recorder.py",
70
71
  "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.5"
222
+ __version__ = "1.8.6"
@@ -38,6 +38,30 @@ class MoveItWorkpieceLifecycleBridge:
38
38
  raise SimulationPlatformError("workpiece_materialization_missing_or_ambiguous")
39
39
  return matches[0]
40
40
 
41
+ @staticmethod
42
+ def _persist_probe_receipt(
43
+ path: Path,
44
+ *,
45
+ operation: WorkpieceOperation,
46
+ result,
47
+ output: dict[str, object] | None,
48
+ ) -> None:
49
+ record = {
50
+ "operation": operation.value,
51
+ "command_ok": bool(result.ok),
52
+ "returncode": int(getattr(result, "returncode", 0 if result.ok else 1)),
53
+ "duration_s": float(getattr(result, "duration_s", 0.0)),
54
+ "stdout": str(getattr(result, "stdout", "")),
55
+ "stderr": str(getattr(result, "stderr", "")),
56
+ "probe_output": output,
57
+ }
58
+ temporary = path.with_suffix(path.suffix + ".tmp")
59
+ temporary.write_text(
60
+ json.dumps(record, indent=2, sort_keys=True, allow_nan=False) + "\n",
61
+ encoding="utf-8",
62
+ )
63
+ temporary.replace(path)
64
+
41
65
  def _transition(
42
66
  self,
43
67
  *,
@@ -63,7 +87,11 @@ class MoveItWorkpieceLifecycleBridge:
63
87
  raise SimulationPlatformError("workpiece_world_pose_override_non_finite")
64
88
 
65
89
  workpiece = self._workpiece(materialization, workpiece_entity_id)
66
- position = tuple(world_position_m) if world_position_m is not None else workpiece.position_m
90
+ position = (
91
+ tuple(world_position_m)
92
+ if world_position_m is not None
93
+ else workpiece.position_m
94
+ )
67
95
  quaternion = (
68
96
  tuple(world_quaternion_xyzw)
69
97
  if world_quaternion_xyzw is not None
@@ -86,7 +114,9 @@ class MoveItWorkpieceLifecycleBridge:
86
114
  },
87
115
  },
88
116
  }
89
- payload_path = self.work_dir / f"{materialization.fingerprint}.{operation.value}.{workpiece.backend_id}.json"
117
+ payload_path = self.work_dir / (
118
+ f"{materialization.fingerprint}.{operation.value}.{workpiece.backend_id}.json"
119
+ )
90
120
  temporary = payload_path.with_suffix(payload_path.suffix + ".tmp")
91
121
  temporary.write_text(
92
122
  json.dumps(payload, sort_keys=True, separators=(",", ":"), allow_nan=False),
@@ -94,7 +124,7 @@ class MoveItWorkpieceLifecycleBridge:
94
124
  )
95
125
  temporary.replace(payload_path)
96
126
 
97
- helper = Path(__file__).with_name("workpiece_scene_probe.py").resolve()
127
+ helper = Path(__file__).with_name("workpiece_scene_probe_v186.py").resolve()
98
128
  result = self.runner.run(
99
129
  (
100
130
  "python3",
@@ -107,14 +137,43 @@ class MoveItWorkpieceLifecycleBridge:
107
137
  ),
108
138
  timeout_s=self.timeout_s + 10.0,
109
139
  )
140
+ probe_receipt_path = payload_path.with_name(payload_path.name + ".receipt.json")
141
+ output: dict[str, object] | None = None
110
142
  try:
111
- output = json.loads(result.stdout.strip().splitlines()[-1])
112
- except (IndexError, json.JSONDecodeError) as exc:
113
- raise SimulationPlatformError("workpiece_scene_probe_output_invalid") from exc
114
- if not isinstance(output, dict):
115
- raise SimulationPlatformError("workpiece_scene_probe_output_invalid")
143
+ decoded = json.loads(result.stdout.strip().splitlines()[-1])
144
+ if isinstance(decoded, dict):
145
+ output = decoded
146
+ except (IndexError, json.JSONDecodeError):
147
+ output = None
148
+ self._persist_probe_receipt(
149
+ probe_receipt_path,
150
+ operation=operation,
151
+ result=result,
152
+ output=output,
153
+ )
154
+ if output is None:
155
+ raise SimulationPlatformError(
156
+ f"workpiece_scene_probe_output_invalid:evidence={probe_receipt_path}"
157
+ )
116
158
 
117
159
  verified = bool(output.get("success")) and result.ok
160
+ semantic_key = (
161
+ "attachment_semantics"
162
+ if operation is WorkpieceOperation.ATTACH
163
+ else "world_semantics"
164
+ )
165
+ semantic = output.get(semantic_key)
166
+ semantic_payload = semantic if isinstance(semantic, dict) else {}
167
+ observed_world_present = (
168
+ bool(output["observed_world_present"])
169
+ if "observed_world_present" in output
170
+ else int(output.get("observed_world_count") or 0) > 0
171
+ )
172
+ observed_attached_link = (
173
+ str(output["observed_attached_link"])
174
+ if output.get("observed_attached_link") is not None
175
+ else None
176
+ )
118
177
  receipt = WorkpieceLifecycleReceipt(
119
178
  operation=operation,
120
179
  verified=verified,
@@ -133,20 +192,52 @@ class MoveItWorkpieceLifecycleBridge:
133
192
  if operation is WorkpieceOperation.ATTACH
134
193
  else WorkpieceState.WORLD
135
194
  ),
136
- observed_world_present=bool(output.get("observed_world_present")),
137
- observed_attached_link=(
138
- str(output["observed_attached_link"])
139
- if output.get("observed_attached_link") is not None
140
- else None
141
- ),
195
+ observed_world_present=observed_world_present,
196
+ observed_attached_link=observed_attached_link,
142
197
  attachment_hash=(
143
198
  str(output["attachment_hash"])
144
199
  if output.get("attachment_hash") is not None
145
200
  else None
146
201
  ),
202
+ observed_attachment_hash=(
203
+ str(output["observed_attachment_hash"])
204
+ if output.get("observed_attachment_hash") is not None
205
+ else None
206
+ ),
207
+ representation_hash_match=(
208
+ bool(output["representation_hash_match"])
209
+ if output.get("representation_hash_match") is not None
210
+ else None
211
+ ),
212
+ semantic_verified=(
213
+ bool(semantic_payload.get("success")) if semantic_payload else None
214
+ ),
215
+ position_error_m=(
216
+ float(semantic_payload["position_error_m"])
217
+ if semantic_payload.get("position_error_m") is not None
218
+ else None
219
+ ),
220
+ orientation_error_rad=(
221
+ float(semantic_payload["orientation_error_rad"])
222
+ if semantic_payload.get("orientation_error_rad") is not None
223
+ else None
224
+ ),
225
+ position_tolerance_m=(
226
+ float(semantic_payload["position_tolerance_m"])
227
+ if semantic_payload.get("position_tolerance_m") is not None
228
+ else None
229
+ ),
230
+ orientation_tolerance_rad=(
231
+ float(semantic_payload["orientation_tolerance_rad"])
232
+ if semantic_payload.get("orientation_tolerance_rad") is not None
233
+ else None
234
+ ),
235
+ diagnostic_path=str(probe_receipt_path),
147
236
  )
148
237
  if not receipt.verified:
149
- raise SimulationPlatformError(f"workpiece_lifecycle_failed:{receipt.code}")
238
+ raise SimulationPlatformError(
239
+ f"workpiece_lifecycle_failed:{receipt.code}:evidence={probe_receipt_path}"
240
+ )
150
241
  return receipt
151
242
 
152
243
  def attach(