devagent-physical-engine 1.7.1__tar.gz → 1.7.2__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 (237) hide show
  1. {devagent_physical_engine-1.7.1/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.7.2}/PKG-INFO +30 -6
  2. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/README.md +28 -4
  3. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/pyproject.toml +3 -2
  4. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/__init__.py +1 -1
  5. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +9 -8
  6. devagent_physical_engine-1.7.2/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py +239 -0
  7. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2/src/devagent_physical_engine.egg-info}/PKG-INFO +30 -6
  8. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine.egg-info/SOURCES.txt +2 -0
  9. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_industrial_motion_v170.py +6 -6
  10. devagent_physical_engine-1.7.2/tests/test_transfer_place_diagnostic_v172.py +162 -0
  11. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/NOTICE +0 -0
  12. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/setup.cfg +0 -0
  13. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/__init__.py +0 -0
  14. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/compiler.py +0 -0
  15. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/contracts.py +0 -0
  16. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/coordinator.py +0 -0
  17. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/critic.py +0 -0
  18. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/evidence.py +0 -0
  19. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  20. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/planner.py +0 -0
  21. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/recovery.py +0 -0
  22. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/routing.py +0 -0
  23. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/runtime.py +0 -0
  24. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/semantic.py +0 -0
  25. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/structured.py +0 -0
  26. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ai_cli.py +0 -0
  27. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/cli.py +0 -0
  28. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/commercial.py +0 -0
  29. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/commercial_campaign.py +0 -0
  30. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/commercial_cli.py +0 -0
  31. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/commercial_importer.py +0 -0
  32. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
  33. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/commercial_readiness.py +0 -0
  34. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/commercial_repository.py +0 -0
  35. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/continuous_clearance.py +0 -0
  36. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/doctor.py +0 -0
  37. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/engineering_agent.py +0 -0
  38. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/engineering_request.py +0 -0
  39. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/evidence_replay.py +0 -0
  40. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/evidence_trust.py +0 -0
  41. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/execution.py +0 -0
  42. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/industrial_motion_v170.py +0 -0
  43. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/models.py +0 -0
  44. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/one_command.py +0 -0
  45. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/one_command_runtime.py +0 -0
  46. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/one_command_v15.py +0 -0
  47. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/one_command_v16.py +0 -0
  48. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/operating_envelope.py +0 -0
  49. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  50. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  51. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  52. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  53. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  54. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  55. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/experience.py +0 -0
  56. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/measured.py +0 -0
  57. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  58. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  59. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/physical_campaign.py +0 -0
  60. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/physical_evidence.py +0 -0
  61. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/physical_motion.py +0 -0
  62. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/planning.py +0 -0
  63. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/pose_math.py +0 -0
  64. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/preexecution_contract.py +0 -0
  65. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/production_authority.py +0 -0
  66. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/production_grade.py +0 -0
  67. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/project.py +0 -0
  68. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  69. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  70. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  71. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  72. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  73. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
  74. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/provider_criterion.py +0 -0
  75. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/provider_qualification.py +0 -0
  76. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/providers.py +0 -0
  77. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/qualification.py +0 -0
  78. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/qualification_cli.py +0 -0
  79. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/qualification_harness.py +0 -0
  80. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/reference_workcell.py +0 -0
  81. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/report_test_execution.py +0 -0
  82. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
  83. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/robot_platform.py +0 -0
  84. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/robots.py +0 -0
  85. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/__init__.py +0 -0
  86. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  87. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/commands.py +0 -0
  88. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
  89. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/doctor.py +0 -0
  90. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
  91. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
  92. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  93. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
  94. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
  95. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  96. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +0 -0
  97. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py +0 -0
  98. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
  99. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
  100. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  101. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
  102. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
  103. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  104. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
  105. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +0 -0
  106. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
  107. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  108. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  109. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
  110. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
  111. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
  112. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +0 -0
  113. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  114. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
  115. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +0 -0
  116. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +0 -0
  117. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
  118. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
  119. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
  120. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
  121. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  122. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
  123. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
  124. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
  125. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
  126. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
  127. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  128. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  129. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
  130. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
  131. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
  132. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
  133. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
  134. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/selective_verification.py +0 -0
  135. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
  136. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/setup_profile.py +0 -0
  137. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
  138. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/simulation.py +0 -0
  139. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/simulation_platform.py +0 -0
  140. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
  141. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
  142. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/tool_collision.py +0 -0
  143. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  144. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/twin.py +0 -0
  145. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/twin_builder.py +0 -0
  146. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/twin_codec.py +0 -0
  147. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/twin_materialization.py +0 -0
  148. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/user_cli.py +0 -0
  149. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/user_cli_v15.py +0 -0
  150. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/user_cli_v16.py +0 -0
  151. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/verification.py +0 -0
  152. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
  153. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  154. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
  155. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
  156. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  157. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_agent_core.py +0 -0
  158. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_agent_semantic_hardening.py +0 -0
  159. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_ai_cli.py +0 -0
  160. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_ai_cli_v07.py +0 -0
  161. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_commercial_importer_v1.py +0 -0
  162. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_commercial_intelligence_v15.py +0 -0
  163. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_commercial_readiness_v1.py +0 -0
  164. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_commercial_v1.py +0 -0
  165. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_continuous_clearance_v011.py +0 -0
  166. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_core.py +0 -0
  167. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_engineering_request_v07.py +0 -0
  168. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_evidence_replay_v12.py +0 -0
  169. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_evidence_trust_coverage_v12.py +0 -0
  170. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_evidence_trust_transport_v12.py +0 -0
  171. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_evidence_trust_v12.py +0 -0
  172. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_evidence_viewer_palette_v130.py +0 -0
  173. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_gazebo_cli_v0122.py +0 -0
  174. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_golden_abb_runner_v171.py +0 -0
  175. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_golden_abb_showcase.py +0 -0
  176. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_interpreter_profiles_v08.py +0 -0
  177. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_joint_state_probe_v0125.py +0 -0
  178. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_live_provider_qualification.py +0 -0
  179. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_measured_motion_v10.py +0 -0
  180. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
  181. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_moveit_scene_v0123.py +0 -0
  182. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_natural_language_agent_v07.py +0 -0
  183. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_one_command_hardening_v13.py +0 -0
  184. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_one_command_pose_hardening_v15.py +0 -0
  185. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_one_command_regression_v141.py +0 -0
  186. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_one_command_v13.py +0 -0
  187. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_openai_strict_schema_v0113.py +0 -0
  188. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_optimization_v05.py +0 -0
  189. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_physical_campaign_v09.py +0 -0
  190. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_physical_evidence_v09.py +0 -0
  191. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_physical_motion_v09.py +0 -0
  192. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_planning_fallback_v012.py +0 -0
  193. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_pose_math_v0125.py +0 -0
  194. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_preexecution_contract_v10.py +0 -0
  195. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_production_authority_v11.py +0 -0
  196. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_production_grade_coverage_v11.py +0 -0
  197. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_production_grade_v11.py +0 -0
  198. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_project_spine_v013.py +0 -0
  199. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_provider_and_qualification.py +0 -0
  200. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_provider_criterion_v15.py +0 -0
  201. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  202. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_qualification_harness_v06.py +0 -0
  203. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_readme_pypi.py +0 -0
  204. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_real_provider_adapters.py +0 -0
  205. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
  206. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_reference_workcell_v012.py +0 -0
  207. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_report_test_contract_coverage_v16.py +0 -0
  208. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_report_test_lineage_v16.py +0 -0
  209. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_report_test_visual_execution_v16.py +0 -0
  210. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_robot_platform_v08.py +0 -0
  211. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_ros2_production_receipts_v011.py +0 -0
  212. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_ros2_simulation.py +0 -0
  213. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_ros_trajectory_v09.py +0 -0
  214. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_selective_verification_v14.py +0 -0
  215. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_setup_profile.py +0 -0
  216. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_sim_real_qualification_v011.py +0 -0
  217. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_simulation_platform_v08.py +0 -0
  218. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_smooth_motion_hotfix_v162.py +0 -0
  219. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_support_contact_hotfix_v161.py +0 -0
  220. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_tool_collision_v011.py +0 -0
  221. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_tool_scene_v0124.py +0 -0
  222. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_trajectory_action_probe_v0125.py +0 -0
  223. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_trajectory_qualification_v09.py +0 -0
  224. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_trajectory_tracking_v0125.py +0 -0
  225. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_twin_materialization_v10.py +0 -0
  226. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_twin_v08.py +0 -0
  227. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  228. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  229. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_user_cli_interactive_v131.py +0 -0
  230. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_user_cli_progress_v131.py +0 -0
  231. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_user_cli_report_visual_v16.py +0 -0
  232. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_user_cli_selective_v14.py +0 -0
  233. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_user_cli_v15.py +0 -0
  234. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
  235. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_v052_stabilization.py +0 -0
  236. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_v08_catalog_mapping_regression.py +0 -0
  237. {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_workpiece_lifecycle_v011.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devagent-physical-engine
3
- Version: 1.7.1
4
- Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, adaptive industrial Pilz PTP/LIN report-test Gazebo execution, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
3
+ Version: 1.7.2
4
+ Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, adaptive industrial Pilz PTP/LIN report-test Gazebo execution, transfer/place segment diagnostics, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
5
5
  Author: Tom Ha
6
6
  License: All Rights Reserved
7
7
  Project-URL: Homepage, https://github.com/tomha85/devagent-physical-engine
@@ -76,7 +76,7 @@ regression + FAT report + Evidence Viewer
76
76
  Python 3.11+ is required.
77
77
 
78
78
  ```bash
79
- python -m pip install --upgrade devagent-physical-engine==1.7.1
79
+ python -m pip install --upgrade devagent-physical-engine==1.7.2
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.7.1
91
+ 1.7.2
92
92
  ```
93
93
 
94
94
  Run the normal customer workflow:
@@ -304,6 +304,29 @@ no fallback to an unqualified simulator or robot
304
304
 
305
305
  The selected blend radii and every planning attempt receipt remain attached to motion metadata for auditability.
306
306
 
307
+ ## v1.7.2 transfer/place diagnostic hotfix
308
+
309
+ A target-stack qualification run proved that `transfer_place` still returned Pilz `FAILURE(99999)` for every v1.7.1 blend candidate, including zero blend. v1.7.2 therefore does not keep guessing at blend values. When that exact bounded failure occurs, DevAgent remains fail-closed and runs two independent **plan-only** probes against the same attached-workpiece PlanningScene:
310
+
311
+ ```text
312
+ lift target
313
+
314
+ transfer PTP probe
315
+ ↓ independent start at transfer target
316
+ place LIN probe
317
+ ```
318
+
319
+ The result is classified deterministically as one of:
320
+
321
+ ```text
322
+ pilz_transfer_segment_planning_failed
323
+ pilz_place_segment_planning_failed
324
+ pilz_transfer_and_place_segment_planning_failed
325
+ pilz_transfer_place_sequence_composition_failed
326
+ ```
327
+
328
+ Each probe writes its own request/receipt plus a `transfer-place-diagnostic.json` summary. These probes never execute motion and never relax targets, planner types, collision policy, attached-workpiece scene state, velocity/acceleration limits, Twin lineage, or real-execution authority. Their purpose is to identify the exact target-stack defect before changing physical execution semantics.
329
+
307
330
  ## Qualified visual-execution scope
308
331
 
309
332
  The packaged visual executor remains intentionally narrow:
@@ -492,9 +515,9 @@ devagent-physical-ai optional provider-backed engineering front end
492
515
 
493
516
  # Project status
494
517
 
495
- **v1.7.1 — Production/Stable software workflow**
518
+ **v1.7.2 — Production/Stable software workflow**
496
519
 
497
- v1.7.1 retains the v1.7 industrial Pilz PTP/LIN execution architecture and adds fail-closed adaptive blend selection for geometry-specific Pilz sequence failures. It also retains the cross-vendor profile gate so non-UR5e customer Twins cannot enter the UR5e-only qualified visual executor.
520
+ v1.7.2 retains the v1.7 industrial Pilz PTP/LIN execution architecture and v1.7.1 bounded adaptive-blend fallback. If transfer/place still fails at zero blend, v1.7.2 now proves the transfer PTP and place LIN segments independently and records a deterministic diagnostic result while keeping execution blocked. It also retains the cross-vendor profile gate so non-UR5e customer Twins cannot enter the UR5e-only qualified visual executor.
498
521
 
499
522
  Production-oriented software capabilities include:
500
523
 
@@ -509,6 +532,7 @@ exact Requirement → Mapping → Verification Plan → Case provenance
509
532
  qualified report-test visual execution contract
510
533
  industrial Pilz PTP / LIN planning
511
534
  adaptive bounded blend selection
535
+ plan-only transfer/place segment diagnostics
512
536
  lift-only support-contact ACM lease + exact restore
513
537
  Gazebo/MoveIt selected-case visualization
514
538
  typed physical measurement binding
@@ -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.7.1
38
+ python -m pip install --upgrade devagent-physical-engine==1.7.2
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.7.1
50
+ 1.7.2
51
51
  ```
52
52
 
53
53
  Run the normal customer workflow:
@@ -263,6 +263,29 @@ no fallback to an unqualified simulator or robot
263
263
 
264
264
  The selected blend radii and every planning attempt receipt remain attached to motion metadata for auditability.
265
265
 
266
+ ## v1.7.2 transfer/place diagnostic hotfix
267
+
268
+ A target-stack qualification run proved that `transfer_place` still returned Pilz `FAILURE(99999)` for every v1.7.1 blend candidate, including zero blend. v1.7.2 therefore does not keep guessing at blend values. When that exact bounded failure occurs, DevAgent remains fail-closed and runs two independent **plan-only** probes against the same attached-workpiece PlanningScene:
269
+
270
+ ```text
271
+ lift target
272
+
273
+ transfer PTP probe
274
+ ↓ independent start at transfer target
275
+ place LIN probe
276
+ ```
277
+
278
+ The result is classified deterministically as one of:
279
+
280
+ ```text
281
+ pilz_transfer_segment_planning_failed
282
+ pilz_place_segment_planning_failed
283
+ pilz_transfer_and_place_segment_planning_failed
284
+ pilz_transfer_place_sequence_composition_failed
285
+ ```
286
+
287
+ Each probe writes its own request/receipt plus a `transfer-place-diagnostic.json` summary. These probes never execute motion and never relax targets, planner types, collision policy, attached-workpiece scene state, velocity/acceleration limits, Twin lineage, or real-execution authority. Their purpose is to identify the exact target-stack defect before changing physical execution semantics.
288
+
266
289
  ## Qualified visual-execution scope
267
290
 
268
291
  The packaged visual executor remains intentionally narrow:
@@ -451,9 +474,9 @@ devagent-physical-ai optional provider-backed engineering front end
451
474
 
452
475
  # Project status
453
476
 
454
- **v1.7.1 — Production/Stable software workflow**
477
+ **v1.7.2 — Production/Stable software workflow**
455
478
 
456
- v1.7.1 retains the v1.7 industrial Pilz PTP/LIN execution architecture and adds fail-closed adaptive blend selection for geometry-specific Pilz sequence failures. It also retains the cross-vendor profile gate so non-UR5e customer Twins cannot enter the UR5e-only qualified visual executor.
479
+ v1.7.2 retains the v1.7 industrial Pilz PTP/LIN execution architecture and v1.7.1 bounded adaptive-blend fallback. If transfer/place still fails at zero blend, v1.7.2 now proves the transfer PTP and place LIN segments independently and records a deterministic diagnostic result while keeping execution blocked. It also retains the cross-vendor profile gate so non-UR5e customer Twins cannot enter the UR5e-only qualified visual executor.
457
480
 
458
481
  Production-oriented software capabilities include:
459
482
 
@@ -468,6 +491,7 @@ exact Requirement → Mapping → Verification Plan → Case provenance
468
491
  qualified report-test visual execution contract
469
492
  industrial Pilz PTP / LIN planning
470
493
  adaptive bounded blend selection
494
+ plan-only transfer/place segment diagnostics
471
495
  lift-only support-contact ACM lease + exact restore
472
496
  Gazebo/MoveIt selected-case visualization
473
497
  typed physical measurement binding
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devagent-physical-engine"
7
- version = "1.7.1"
8
- description = "Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, adaptive industrial Pilz PTP/LIN report-test Gazebo execution, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence."
7
+ version = "1.7.2"
8
+ description = "Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, adaptive industrial Pilz PTP/LIN report-test Gazebo execution, transfer/place segment diagnostics, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence."
9
9
  readme = { file = "README.md", content-type = "text/markdown" }
10
10
  requires-python = ">=3.11"
11
11
  dependencies = ["PyYAML>=6.0,<7"]
@@ -75,6 +75,7 @@ omit = [
75
75
  "src/devagent_physical_engine/ros2/moveit_task_planner.py",
76
76
  "src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py",
77
77
  "src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py",
78
+ "src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py",
78
79
  "src/devagent_physical_engine/ros2/support_contact_lease_v170.py",
79
80
  "src/devagent_physical_engine/ros2/fk_pose.py",
80
81
  "src/devagent_physical_engine/ros2/gazebo_pose.py",
@@ -217,4 +217,4 @@ install_smooth_motion_hotfix_v162()
217
217
  install_industrial_motion_v170()
218
218
  install_one_command_runtime()
219
219
 
220
- __version__ = "1.7.1"
220
+ __version__ = "1.7.2"
@@ -24,23 +24,24 @@ def _patch_constructor(cls) -> None:
24
24
 
25
25
 
26
26
  def install_industrial_motion_v170() -> None:
27
- """Route report-test execution through v1.7 industrial motion runtime.
27
+ """Route report-test execution through the qualified v1.7 industrial runtime.
28
28
 
29
- v1.7.1 additionally swaps the target-stack planner symbol used by the visual
30
- runner for a fail-closed adaptive-blend planner. It retries only generic Pilz
31
- sequence planning failures with smaller internal blend radii; no geometry,
32
- collision, speed, scene, or execution-authority constraint is relaxed.
29
+ v1.7.1 retries only generic Pilz sequence-planning failures with smaller internal
30
+ blend radii. v1.7.2 retains that bounded fallback and, if transfer/place still
31
+ fails at zero blend, runs plan-only transfer PTP and place LIN probes against the
32
+ same attached-workpiece scene. The probes only improve diagnosis; they never grant
33
+ execution authority or relax geometry, collision, speed, scene, or Twin lineage.
33
34
  """
34
35
 
35
36
  from . import report_test_execution as base_exec
36
37
  from . import report_test_execution_strict as strict_exec
37
38
  from .ros2 import report_test_visualization as base_visual
38
39
  from .ros2 import report_test_visualization_v170 as visual_v170
39
- from .ros2.industrial_sequence_planner_v171 import (
40
- PilzIndustrialSequencePlannerV171,
40
+ from .ros2.industrial_sequence_planner_v172 import (
41
+ PilzIndustrialSequencePlannerV172,
41
42
  )
42
43
 
43
- visual_v170.PilzIndustrialSequencePlannerV170 = PilzIndustrialSequencePlannerV171
44
+ visual_v170.PilzIndustrialSequencePlannerV170 = PilzIndustrialSequencePlannerV172
44
45
 
45
46
  base_exec.run_report_test_visualization = run_report_test_visualization_v170
46
47
  strict_exec.run_report_test_visualization = run_report_test_visualization_v170
@@ -0,0 +1,239 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import replace
4
+ import json
5
+ from pathlib import Path
6
+ from typing import Any, Mapping
7
+
8
+ from ..industrial_motion_v170 import IndustrialGroupSpec
9
+ from ..physical_motion import PhysicalMotionPlan
10
+ from ..simulation_platform import SimulationPlatformError
11
+ from .industrial_sequence_planner_v170 import PilzIndustrialSequencePlannerV170
12
+ from .industrial_sequence_planner_v171 import PilzIndustrialSequencePlannerV171
13
+
14
+
15
+ def _error_code(exc: Exception) -> str:
16
+ return str(exc).split(":", 1)[0]
17
+
18
+
19
+ def transfer_place_diagnostic_code(results: Mapping[str, bool]) -> str:
20
+ transfer_ok = bool(results.get("transfer"))
21
+ place_ok = bool(results.get("place"))
22
+ if transfer_ok and place_ok:
23
+ return "pilz_transfer_place_sequence_composition_failed"
24
+ if not transfer_ok and not place_ok:
25
+ return "pilz_transfer_and_place_segment_planning_failed"
26
+ if not transfer_ok:
27
+ return "pilz_transfer_segment_planning_failed"
28
+ return "pilz_place_segment_planning_failed"
29
+
30
+
31
+ class PilzIndustrialSequencePlannerV172(PilzIndustrialSequencePlannerV171):
32
+ """Diagnose zero-blend transfer/place failures without relaxing execution safety.
33
+
34
+ v1.7.1 already proves that the requested transfer/place sequence fails for all
35
+ bounded blend radii down to zero. v1.7.2 therefore keeps execution blocked and
36
+ plans the transfer PTP and place LIN segments independently against the exact same
37
+ attached-workpiece PlanningScene. The diagnostic receipts distinguish an invalid
38
+ transfer, invalid place, both invalid, or a sequence-composition-only failure.
39
+
40
+ These probes are plan-only. They never execute robot motion and never modify the
41
+ targets, planner types, collision scene, velocity/acceleration limits, Twin
42
+ lineage, or execution authority.
43
+ """
44
+
45
+ def _probe_segment(
46
+ self,
47
+ *,
48
+ motion_id: str,
49
+ group: IndustrialGroupSpec,
50
+ segment_index: int,
51
+ robot_profile_key: str,
52
+ joint_names: tuple[str, ...],
53
+ start_positions_rad: tuple[float, ...],
54
+ phase_targets_rad: Mapping[str, tuple[float, ...]],
55
+ source_graph_hash: str,
56
+ twin_hash: str,
57
+ scene_contract: Mapping[str, Any] | None,
58
+ source_entity_id: str,
59
+ metadata: Mapping[str, Any] | None,
60
+ ) -> dict[str, Any]:
61
+ spec = group.segments[segment_index]
62
+ probe_spec = replace(spec, blend_radius_m=0.0)
63
+ probe_group = IndustrialGroupSpec(
64
+ group_id=f"{group.group_id}_segment_probe_{spec.phase_name}",
65
+ segments=(probe_spec,),
66
+ workpiece_loaded=group.workpiece_loaded,
67
+ scene_state=group.scene_state,
68
+ support_contact_departure=False,
69
+ )
70
+ probe_motion_id = f"{motion_id}-segment-probe-{spec.phase_name}"
71
+ expected_receipt = self.work_dir / f"{probe_motion_id}.industrial.receipt.json"
72
+ expected_request = self.work_dir / f"{probe_motion_id}.industrial.request.json"
73
+ try:
74
+ motion = PilzIndustrialSequencePlannerV170.plan(
75
+ self,
76
+ motion_id=probe_motion_id,
77
+ group=probe_group,
78
+ robot_profile_key=robot_profile_key,
79
+ joint_names=joint_names,
80
+ start_positions_rad=start_positions_rad,
81
+ phase_targets_rad=phase_targets_rad,
82
+ source_graph_hash=source_graph_hash,
83
+ twin_hash=twin_hash,
84
+ scene_contract=scene_contract,
85
+ source_entity_id=source_entity_id,
86
+ metadata=metadata,
87
+ )
88
+ except SimulationPlatformError as exc:
89
+ return {
90
+ "phase_name": spec.phase_name,
91
+ "planner_id": spec.planner_id,
92
+ "success": False,
93
+ "code": _error_code(exc),
94
+ "start_positions_rad": list(start_positions_rad),
95
+ "target_positions_rad": list(phase_targets_rad[spec.phase_name]),
96
+ "receipt": str(expected_receipt) if expected_receipt.is_file() else None,
97
+ "request": str(expected_request) if expected_request.is_file() else None,
98
+ }
99
+
100
+ return {
101
+ "phase_name": spec.phase_name,
102
+ "planner_id": spec.planner_id,
103
+ "success": True,
104
+ "code": "pilz_industrial_sequence_ready",
105
+ "start_positions_rad": list(start_positions_rad),
106
+ "target_positions_rad": list(phase_targets_rad[spec.phase_name]),
107
+ "receipt": str(motion.metadata["pilz_sequence_receipt"]),
108
+ "request": str(motion.metadata["pilz_sequence_request"]),
109
+ "motion_hash": motion.fingerprint,
110
+ "planned_duration_s": motion.planned_duration_s,
111
+ }
112
+
113
+ def _write_transfer_place_diagnostic(
114
+ self,
115
+ *,
116
+ motion_id: str,
117
+ group: IndustrialGroupSpec,
118
+ robot_profile_key: str,
119
+ joint_names: tuple[str, ...],
120
+ start_positions_rad: tuple[float, ...],
121
+ phase_targets_rad: Mapping[str, tuple[float, ...]],
122
+ source_graph_hash: str,
123
+ twin_hash: str,
124
+ scene_contract: Mapping[str, Any] | None,
125
+ source_entity_id: str,
126
+ metadata: Mapping[str, Any] | None,
127
+ ) -> tuple[str, Path]:
128
+ transfer_phase = group.segments[0].phase_name
129
+ transfer_target = tuple(phase_targets_rad[transfer_phase])
130
+ transfer = self._probe_segment(
131
+ motion_id=motion_id,
132
+ group=group,
133
+ segment_index=0,
134
+ robot_profile_key=robot_profile_key,
135
+ joint_names=joint_names,
136
+ start_positions_rad=start_positions_rad,
137
+ phase_targets_rad=phase_targets_rad,
138
+ source_graph_hash=source_graph_hash,
139
+ twin_hash=twin_hash,
140
+ scene_contract=scene_contract,
141
+ source_entity_id=source_entity_id,
142
+ metadata=metadata,
143
+ )
144
+ place = self._probe_segment(
145
+ motion_id=motion_id,
146
+ group=group,
147
+ segment_index=1,
148
+ robot_profile_key=robot_profile_key,
149
+ joint_names=joint_names,
150
+ start_positions_rad=transfer_target,
151
+ phase_targets_rad=phase_targets_rad,
152
+ source_graph_hash=source_graph_hash,
153
+ twin_hash=twin_hash,
154
+ scene_contract=scene_contract,
155
+ source_entity_id=source_entity_id,
156
+ metadata=metadata,
157
+ )
158
+ code = transfer_place_diagnostic_code(
159
+ {
160
+ "transfer": bool(transfer["success"]),
161
+ "place": bool(place["success"]),
162
+ }
163
+ )
164
+ summary = {
165
+ "schema_version": "1.0",
166
+ "diagnostic": "transfer_place_independent_pilz_segment_probe",
167
+ "group_id": group.group_id,
168
+ "original_failure": "pilz_sequence_planning_failed",
169
+ "result_code": code,
170
+ "plan_only": True,
171
+ "execution_performed": False,
172
+ "scene_state": group.scene_state,
173
+ "workpiece_loaded": group.workpiece_loaded,
174
+ "source_graph_hash": source_graph_hash,
175
+ "twin_hash": twin_hash,
176
+ "segments": [transfer, place],
177
+ }
178
+ self.work_dir.mkdir(parents=True, exist_ok=True)
179
+ path = self.work_dir / f"{motion_id}.transfer-place-diagnostic.json"
180
+ temp = path.with_suffix(path.suffix + ".tmp")
181
+ temp.write_text(
182
+ json.dumps(summary, indent=2, sort_keys=True, allow_nan=False) + "\n",
183
+ encoding="utf-8",
184
+ )
185
+ temp.replace(path)
186
+ return code, path
187
+
188
+ def plan(
189
+ self,
190
+ *,
191
+ motion_id: str,
192
+ group: IndustrialGroupSpec,
193
+ robot_profile_key: str,
194
+ joint_names: tuple[str, ...],
195
+ start_positions_rad: tuple[float, ...],
196
+ phase_targets_rad: Mapping[str, tuple[float, ...]],
197
+ source_graph_hash: str,
198
+ twin_hash: str,
199
+ scene_contract: Mapping[str, Any] | None,
200
+ source_entity_id: str,
201
+ metadata: Mapping[str, Any] | None = None,
202
+ ) -> PhysicalMotionPlan:
203
+ try:
204
+ return super().plan(
205
+ motion_id=motion_id,
206
+ group=group,
207
+ robot_profile_key=robot_profile_key,
208
+ joint_names=joint_names,
209
+ start_positions_rad=start_positions_rad,
210
+ phase_targets_rad=phase_targets_rad,
211
+ source_graph_hash=source_graph_hash,
212
+ twin_hash=twin_hash,
213
+ scene_contract=scene_contract,
214
+ source_entity_id=source_entity_id,
215
+ metadata=metadata,
216
+ )
217
+ except SimulationPlatformError as exc:
218
+ if (
219
+ _error_code(exc) != "pilz_sequence_planning_failed"
220
+ or group.group_id != "transfer_place"
221
+ or len(group.segments) != 2
222
+ or tuple(item.phase_name for item in group.segments)
223
+ != ("transfer", "place")
224
+ ):
225
+ raise
226
+ code, path = self._write_transfer_place_diagnostic(
227
+ motion_id=motion_id,
228
+ group=group,
229
+ robot_profile_key=robot_profile_key,
230
+ joint_names=joint_names,
231
+ start_positions_rad=start_positions_rad,
232
+ phase_targets_rad=phase_targets_rad,
233
+ source_graph_hash=source_graph_hash,
234
+ twin_hash=twin_hash,
235
+ scene_contract=scene_contract,
236
+ source_entity_id=source_entity_id,
237
+ metadata=metadata,
238
+ )
239
+ raise SimulationPlatformError(f"{code}:{path}") from exc
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devagent-physical-engine
3
- Version: 1.7.1
4
- Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, adaptive industrial Pilz PTP/LIN report-test Gazebo execution, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
3
+ Version: 1.7.2
4
+ Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, adaptive industrial Pilz PTP/LIN report-test Gazebo execution, transfer/place segment diagnostics, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
5
5
  Author: Tom Ha
6
6
  License: All Rights Reserved
7
7
  Project-URL: Homepage, https://github.com/tomha85/devagent-physical-engine
@@ -76,7 +76,7 @@ regression + FAT report + Evidence Viewer
76
76
  Python 3.11+ is required.
77
77
 
78
78
  ```bash
79
- python -m pip install --upgrade devagent-physical-engine==1.7.1
79
+ python -m pip install --upgrade devagent-physical-engine==1.7.2
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.7.1
91
+ 1.7.2
92
92
  ```
93
93
 
94
94
  Run the normal customer workflow:
@@ -304,6 +304,29 @@ no fallback to an unqualified simulator or robot
304
304
 
305
305
  The selected blend radii and every planning attempt receipt remain attached to motion metadata for auditability.
306
306
 
307
+ ## v1.7.2 transfer/place diagnostic hotfix
308
+
309
+ A target-stack qualification run proved that `transfer_place` still returned Pilz `FAILURE(99999)` for every v1.7.1 blend candidate, including zero blend. v1.7.2 therefore does not keep guessing at blend values. When that exact bounded failure occurs, DevAgent remains fail-closed and runs two independent **plan-only** probes against the same attached-workpiece PlanningScene:
310
+
311
+ ```text
312
+ lift target
313
+
314
+ transfer PTP probe
315
+ ↓ independent start at transfer target
316
+ place LIN probe
317
+ ```
318
+
319
+ The result is classified deterministically as one of:
320
+
321
+ ```text
322
+ pilz_transfer_segment_planning_failed
323
+ pilz_place_segment_planning_failed
324
+ pilz_transfer_and_place_segment_planning_failed
325
+ pilz_transfer_place_sequence_composition_failed
326
+ ```
327
+
328
+ Each probe writes its own request/receipt plus a `transfer-place-diagnostic.json` summary. These probes never execute motion and never relax targets, planner types, collision policy, attached-workpiece scene state, velocity/acceleration limits, Twin lineage, or real-execution authority. Their purpose is to identify the exact target-stack defect before changing physical execution semantics.
329
+
307
330
  ## Qualified visual-execution scope
308
331
 
309
332
  The packaged visual executor remains intentionally narrow:
@@ -492,9 +515,9 @@ devagent-physical-ai optional provider-backed engineering front end
492
515
 
493
516
  # Project status
494
517
 
495
- **v1.7.1 — Production/Stable software workflow**
518
+ **v1.7.2 — Production/Stable software workflow**
496
519
 
497
- v1.7.1 retains the v1.7 industrial Pilz PTP/LIN execution architecture and adds fail-closed adaptive blend selection for geometry-specific Pilz sequence failures. It also retains the cross-vendor profile gate so non-UR5e customer Twins cannot enter the UR5e-only qualified visual executor.
520
+ v1.7.2 retains the v1.7 industrial Pilz PTP/LIN execution architecture and v1.7.1 bounded adaptive-blend fallback. If transfer/place still fails at zero blend, v1.7.2 now proves the transfer PTP and place LIN segments independently and records a deterministic diagnostic result while keeping execution blocked. It also retains the cross-vendor profile gate so non-UR5e customer Twins cannot enter the UR5e-only qualified visual executor.
498
521
 
499
522
  Production-oriented software capabilities include:
500
523
 
@@ -509,6 +532,7 @@ exact Requirement → Mapping → Verification Plan → Case provenance
509
532
  qualified report-test visual execution contract
510
533
  industrial Pilz PTP / LIN planning
511
534
  adaptive bounded blend selection
535
+ plan-only transfer/place segment diagnostics
512
536
  lift-only support-contact ACM lease + exact restore
513
537
  Gazebo/MoveIt selected-case visualization
514
538
  typed physical measurement binding
@@ -113,6 +113,7 @@ src/devagent_physical_engine/ros2/gazebo_pose.py
113
113
  src/devagent_physical_engine/ros2/gazebo_world.py
114
114
  src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py
115
115
  src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py
116
+ src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py
116
117
  src/devagent_physical_engine/ros2/joint_state_probe.py
117
118
  src/devagent_physical_engine/ros2/joint_state_recorder.py
118
119
  src/devagent_physical_engine/ros2/measured_motion.py
@@ -218,6 +219,7 @@ tests/test_tool_scene_v0124.py
218
219
  tests/test_trajectory_action_probe_v0125.py
219
220
  tests/test_trajectory_qualification_v09.py
220
221
  tests/test_trajectory_tracking_v0125.py
222
+ tests/test_transfer_place_diagnostic_v172.py
221
223
  tests/test_twin_materialization_v10.py
222
224
  tests/test_twin_v08.py
223
225
  tests/test_ur5e_adapter_scopes_v09.py
@@ -22,8 +22,8 @@ from devagent_physical_engine.industrial_motion_v170 import (
22
22
  from devagent_physical_engine import report_test_execution as base_exec
23
23
  from devagent_physical_engine import report_test_execution_strict as strict_exec
24
24
  from devagent_physical_engine.ros2 import report_test_visualization_v170 as visual_v170
25
- from devagent_physical_engine.ros2.industrial_sequence_planner_v171 import (
26
- PilzIndustrialSequencePlannerV171,
25
+ from devagent_physical_engine.ros2.industrial_sequence_planner_v172 import (
26
+ PilzIndustrialSequencePlannerV172,
27
27
  )
28
28
  from devagent_physical_engine.ros2.report_test_visualization_v170 import (
29
29
  run_report_test_visualization_v170,
@@ -31,8 +31,8 @@ from devagent_physical_engine.ros2.report_test_visualization_v170 import (
31
31
 
32
32
 
33
33
  class IndustrialMotionV170Tests(unittest.TestCase):
34
- def test_release_version_is_v171(self) -> None:
35
- self.assertEqual(package.__version__, "1.7.1")
34
+ def test_release_version_is_v172(self) -> None:
35
+ self.assertEqual(package.__version__, "1.7.2")
36
36
 
37
37
  def test_reference_groups_cover_every_task_phase_once_in_order(self) -> None:
38
38
  groups = reference_industrial_groups()
@@ -132,12 +132,12 @@ class IndustrialMotionV170Tests(unittest.TestCase):
132
132
  self.assertLessEqual(LIN_ACCELERATION_SCALE, 0.04)
133
133
  self.assertGreaterEqual(WORKPIECE_FOLLOW_RATE_HZ, 60.0)
134
134
 
135
- def test_all_report_executor_defaults_route_to_v170_runner_and_v171_planner(self) -> None:
135
+ def test_all_report_executor_defaults_route_to_v170_runner_and_v172_planner(self) -> None:
136
136
  install_industrial_motion_v170()
137
137
  install_industrial_motion_v170()
138
138
  self.assertIs(
139
139
  visual_v170.PilzIndustrialSequencePlannerV170,
140
- PilzIndustrialSequencePlannerV171,
140
+ PilzIndustrialSequencePlannerV172,
141
141
  )
142
142
 
143
143
  runtime = base_exec.ReportTestExecutionRuntime(