devagent-physical-engine 1.6.2__tar.gz → 1.7.0__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 (233) hide show
  1. {devagent_physical_engine-1.6.2/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.7.0}/PKG-INFO +69 -13
  2. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/README.md +67 -11
  3. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/pyproject.toml +6 -3
  4. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/__init__.py +3 -1
  5. devagent_physical_engine-1.7.0/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +51 -0
  6. devagent_physical_engine-1.7.0/src/devagent_physical_engine/industrial_motion_v170.py +144 -0
  7. devagent_physical_engine-1.7.0/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +291 -0
  8. devagent_physical_engine-1.7.0/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +394 -0
  9. devagent_physical_engine-1.7.0/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +553 -0
  10. devagent_physical_engine-1.7.0/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +192 -0
  11. devagent_physical_engine-1.7.0/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +116 -0
  12. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0/src/devagent_physical_engine.egg-info}/PKG-INFO +69 -13
  13. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine.egg-info/SOURCES.txt +8 -0
  14. devagent_physical_engine-1.7.0/tests/test_industrial_motion_v170.py +124 -0
  15. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/NOTICE +0 -0
  16. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/setup.cfg +0 -0
  17. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/__init__.py +0 -0
  18. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/compiler.py +0 -0
  19. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/contracts.py +0 -0
  20. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/coordinator.py +0 -0
  21. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/critic.py +0 -0
  22. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/evidence.py +0 -0
  23. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  24. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/planner.py +0 -0
  25. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/recovery.py +0 -0
  26. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/routing.py +0 -0
  27. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/runtime.py +0 -0
  28. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/semantic.py +0 -0
  29. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/structured.py +0 -0
  30. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ai_cli.py +0 -0
  31. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/cli.py +0 -0
  32. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial.py +0 -0
  33. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_campaign.py +0 -0
  34. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_cli.py +0 -0
  35. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_importer.py +0 -0
  36. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
  37. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_readiness.py +0 -0
  38. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_repository.py +0 -0
  39. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/continuous_clearance.py +0 -0
  40. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/doctor.py +0 -0
  41. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/engineering_agent.py +0 -0
  42. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/engineering_request.py +0 -0
  43. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/evidence_replay.py +0 -0
  44. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/evidence_trust.py +0 -0
  45. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/execution.py +0 -0
  46. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/models.py +0 -0
  47. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/one_command.py +0 -0
  48. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/one_command_runtime.py +0 -0
  49. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/one_command_v15.py +0 -0
  50. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/one_command_v16.py +0 -0
  51. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/operating_envelope.py +0 -0
  52. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  53. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  54. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  55. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  56. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  57. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  58. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/experience.py +0 -0
  59. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/measured.py +0 -0
  60. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  61. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  62. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/physical_campaign.py +0 -0
  63. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/physical_evidence.py +0 -0
  64. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/physical_motion.py +0 -0
  65. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/planning.py +0 -0
  66. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/pose_math.py +0 -0
  67. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/preexecution_contract.py +0 -0
  68. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/production_authority.py +0 -0
  69. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/production_grade.py +0 -0
  70. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/project.py +0 -0
  71. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  72. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  73. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  74. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  75. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  76. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
  77. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_criterion.py +0 -0
  78. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_qualification.py +0 -0
  79. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/providers.py +0 -0
  80. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/qualification.py +0 -0
  81. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/qualification_cli.py +0 -0
  82. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/qualification_harness.py +0 -0
  83. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/reference_workcell.py +0 -0
  84. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/report_test_execution.py +0 -0
  85. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
  86. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/robot_platform.py +0 -0
  87. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/robots.py +0 -0
  88. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/__init__.py +0 -0
  89. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  90. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/commands.py +0 -0
  91. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
  92. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/doctor.py +0 -0
  93. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
  94. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
  95. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  96. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
  97. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
  98. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  99. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
  100. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
  101. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  102. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
  103. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
  104. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  105. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
  106. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
  107. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  108. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  109. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
  110. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
  111. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
  112. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  113. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
  114. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
  115. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
  116. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
  117. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
  118. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  119. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
  120. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
  121. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
  122. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
  123. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
  124. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  125. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  126. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
  127. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
  128. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
  129. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
  130. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
  131. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/selective_verification.py +0 -0
  132. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
  133. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/setup_profile.py +0 -0
  134. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
  135. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/simulation.py +0 -0
  136. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/simulation_platform.py +0 -0
  137. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
  138. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
  139. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/tool_collision.py +0 -0
  140. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  141. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/twin.py +0 -0
  142. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/twin_builder.py +0 -0
  143. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/twin_codec.py +0 -0
  144. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/twin_materialization.py +0 -0
  145. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/user_cli.py +0 -0
  146. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/user_cli_v15.py +0 -0
  147. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/user_cli_v16.py +0 -0
  148. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/verification.py +0 -0
  149. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
  150. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  151. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
  152. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
  153. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  154. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_agent_core.py +0 -0
  155. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_agent_semantic_hardening.py +0 -0
  156. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_ai_cli.py +0 -0
  157. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_ai_cli_v07.py +0 -0
  158. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_commercial_importer_v1.py +0 -0
  159. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_commercial_intelligence_v15.py +0 -0
  160. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_commercial_readiness_v1.py +0 -0
  161. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_commercial_v1.py +0 -0
  162. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_continuous_clearance_v011.py +0 -0
  163. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_core.py +0 -0
  164. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_engineering_request_v07.py +0 -0
  165. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_evidence_replay_v12.py +0 -0
  166. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_evidence_trust_coverage_v12.py +0 -0
  167. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_evidence_trust_transport_v12.py +0 -0
  168. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_evidence_trust_v12.py +0 -0
  169. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_evidence_viewer_palette_v130.py +0 -0
  170. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_gazebo_cli_v0122.py +0 -0
  171. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_golden_abb_showcase.py +0 -0
  172. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_interpreter_profiles_v08.py +0 -0
  173. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_joint_state_probe_v0125.py +0 -0
  174. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_live_provider_qualification.py +0 -0
  175. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_measured_motion_v10.py +0 -0
  176. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
  177. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_moveit_scene_v0123.py +0 -0
  178. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_natural_language_agent_v07.py +0 -0
  179. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_one_command_hardening_v13.py +0 -0
  180. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_one_command_pose_hardening_v15.py +0 -0
  181. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_one_command_regression_v141.py +0 -0
  182. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_one_command_v13.py +0 -0
  183. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_openai_strict_schema_v0113.py +0 -0
  184. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_optimization_v05.py +0 -0
  185. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_physical_campaign_v09.py +0 -0
  186. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_physical_evidence_v09.py +0 -0
  187. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_physical_motion_v09.py +0 -0
  188. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_planning_fallback_v012.py +0 -0
  189. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_pose_math_v0125.py +0 -0
  190. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_preexecution_contract_v10.py +0 -0
  191. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_production_authority_v11.py +0 -0
  192. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_production_grade_coverage_v11.py +0 -0
  193. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_production_grade_v11.py +0 -0
  194. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_project_spine_v013.py +0 -0
  195. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_provider_and_qualification.py +0 -0
  196. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_provider_criterion_v15.py +0 -0
  197. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  198. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_qualification_harness_v06.py +0 -0
  199. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_readme_pypi.py +0 -0
  200. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_real_provider_adapters.py +0 -0
  201. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
  202. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_reference_workcell_v012.py +0 -0
  203. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_report_test_contract_coverage_v16.py +0 -0
  204. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_report_test_lineage_v16.py +0 -0
  205. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_report_test_visual_execution_v16.py +0 -0
  206. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_robot_platform_v08.py +0 -0
  207. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_ros2_production_receipts_v011.py +0 -0
  208. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_ros2_simulation.py +0 -0
  209. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_ros_trajectory_v09.py +0 -0
  210. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_selective_verification_v14.py +0 -0
  211. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_setup_profile.py +0 -0
  212. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_sim_real_qualification_v011.py +0 -0
  213. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_simulation_platform_v08.py +0 -0
  214. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_smooth_motion_hotfix_v162.py +0 -0
  215. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_support_contact_hotfix_v161.py +0 -0
  216. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_tool_collision_v011.py +0 -0
  217. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_tool_scene_v0124.py +0 -0
  218. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_trajectory_action_probe_v0125.py +0 -0
  219. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_trajectory_qualification_v09.py +0 -0
  220. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_trajectory_tracking_v0125.py +0 -0
  221. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_twin_materialization_v10.py +0 -0
  222. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_twin_v08.py +0 -0
  223. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  224. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  225. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_user_cli_interactive_v131.py +0 -0
  226. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_user_cli_progress_v131.py +0 -0
  227. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_user_cli_report_visual_v16.py +0 -0
  228. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_user_cli_selective_v14.py +0 -0
  229. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_user_cli_v15.py +0 -0
  230. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
  231. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_v052_stabilization.py +0 -0
  232. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_v08_catalog_mapping_regression.py +0 -0
  233. {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_workpiece_lifecycle_v011.py +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devagent-physical-engine
3
- Version: 1.6.2
4
- Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, report-test Gazebo visualization, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
3
+ Version: 1.7.0
4
+ Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, 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.
5
5
  Author: Tom Ha
6
6
  License: All Rights Reserved
7
7
  Project-URL: Homepage, https://github.com/tomha85/devagent-physical-engine
8
8
  Project-URL: Repository, https://github.com/tomha85/devagent-physical-engine
9
9
  Project-URL: Issues, https://github.com/tomha85/devagent-physical-engine/issues
10
- Keywords: robotics,industrial-automation,agentic-ai,ros2,gazebo,verification,selective-testing,digital-twin,fat-testing,regression,evidence,replay
10
+ Keywords: robotics,industrial-automation,agentic-ai,ros2,gazebo,moveit,pilz,verification,selective-testing,digital-twin,fat-testing,regression,evidence,replay
11
11
  Classifier: Development Status :: 5 - Production/Stable
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: Operating System :: OS Independent
@@ -82,7 +82,7 @@ DevAgent is designed to answer: **What can be proven about this cell, what faile
82
82
  Python 3.11+ is required.
83
83
 
84
84
  ```bash
85
- python -m pip install --upgrade devagent-physical-engine==1.6.2
85
+ python -m pip install --upgrade devagent-physical-engine==1.7.0
86
86
  ```
87
87
 
88
88
  Verify the installed package:
@@ -94,7 +94,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
94
94
  Expected:
95
95
 
96
96
  ```text
97
- 1.6.2
97
+ 1.7.0
98
98
  ```
99
99
 
100
100
  Run the normal customer workflow:
@@ -232,9 +232,62 @@ The joint-state recorder also rejects duplicate/backward ROS source timestamps b
232
232
 
233
233
  Because the visual trajectory now executes more slowly, cycle-time requirements are evaluated against the actual slower simulation execution. DevAgent does not normalize the observed duration back to a faster value or claim performance that was not executed.
234
234
 
235
+ ## v1.7 industrial smooth motion execution
236
+
237
+ v1.7 replaces the packaged report-test stop/go joint-phase presentation with a bounded industrial motion sequence planned by the running MoveIt **Pilz Industrial Motion Planner**. DevAgent does not stitch trajectories by hand and does not manufacture interpolation points.
238
+
239
+ The qualified UR5e load sequence is grouped as:
240
+
241
+ ```text
242
+ HOME
243
+ ↓ PTP
244
+ PRE_PICK
245
+ ↓ LIN
246
+ PICK
247
+ ↓ grasp / hard boundary
248
+ LIFT
249
+ ↓ LIN support departure / hard boundary
250
+ TRANSFER
251
+ ↓ PTP with safe internal blend
252
+ PLACE
253
+ ↓ LIN / release hard boundary
254
+ RETRACT
255
+ ↓ LIN with safe internal blend
256
+ HOME
257
+ ↓ PTP
258
+ ```
259
+
260
+ Execution groups are intentionally bounded:
261
+
262
+ ```text
263
+ approach_pick PTP → LIN
264
+ lift_departure LIN
265
+ transfer_place PTP → LIN
266
+ retreat_home LIN → PTP
267
+ ```
268
+
269
+ Compatible motion inside a group can use a small Pilz blend radius. DevAgent never blends through grasp, the support-contact departure boundary, or release. The simulation profile is deliberately conservative:
270
+
271
+ ```text
272
+ PTP velocity scale: 10%
273
+ PTP acceleration scale: 6%
274
+ LIN velocity scale: 6%
275
+ LIN acceleration scale: 4%
276
+ safe blend radius: 12 mm
277
+ workpiece follow target: 60 Hz
278
+ ```
279
+
280
+ `LIN` means the Pilz planner owns a Cartesian linear tool path; `PTP` remains collision-aware point-to-point planning. MoveIt/Pilz owns geometry, timestamps, velocity/acceleration time parameterization, collision checking, and the returned blended `RobotTrajectory`.
281
+
282
+ The source-support exception is also bounded at runtime. During `lift_departure`, DevAgent snapshots the complete live MoveIt Allowed Collision Matrix, enables exactly the attached-workpiece ↔ source-support pair, verifies read-back, executes the lift, restores the exact original matrix, and verifies the restoration before transfer is allowed to continue. No global collision disable is used.
283
+
284
+ Slower industrial execution is real execution time in simulation, not cosmetic playback. Therefore cycle-time requirements are evaluated against the actual measured slower trajectory.
285
+
286
+ The v1.7 hosted qualification proves deterministic software contracts and fail-closed routing. Graphical ROS 2 Jazzy + Gazebo Harmonic + MoveIt/Pilz target-stack acceptance still has to run on the intended workstation; hosted Python CI does not pretend to execute that graphical stack.
287
+
235
288
  ## Exact lineage hardening
236
289
 
237
- A case ID such as `case-0001` is local to its verification plan. v1.6 therefore requires the complete lineage:
290
+ A case ID such as `case-0001` is local to its verification plan. v1.6+ therefore requires the complete lineage:
238
291
 
239
292
  ```text
240
293
  Requirement
@@ -449,7 +502,7 @@ Gazebo Harmonic
449
502
  gz_ros2_control
450
503
  Universal Robots ROS 2 driver
451
504
  ur_simulation_gz
452
- MoveIt 2
505
+ MoveIt 2 + Pilz Industrial Motion Planner
453
506
  ```
454
507
 
455
508
  Preview setup:
@@ -470,7 +523,7 @@ Check runtime:
470
523
  devagent-physical ros doctor
471
524
  ```
472
525
 
473
- Hosted Python CI validates software contracts and deterministic execution boundaries. It does not by itself prove a graphical Gazebo runtime, `move_group`, TF, controller actions, OEM drivers, or an arbitrary customer cell. Physical target-stack qualification must run on the intended workstation/adapter stack.
526
+ Hosted Python CI validates software contracts and deterministic execution boundaries. It does not by itself prove a graphical Gazebo runtime, `move_group`, `/sequence_move_group`, TF, controller actions, OEM drivers, or an arbitrary customer cell. Physical target-stack qualification must run on the intended workstation/adapter stack.
474
527
 
475
528
  ---
476
529
 
@@ -527,9 +580,9 @@ devagent-physical-ai optional provider-backed engineering front end
527
580
 
528
581
  # Project status
529
582
 
530
- **v1.6.2 — Production/Stable software workflow**
583
+ **v1.7.0 — Production/Stable software workflow**
531
584
 
532
- v1.6.2 slows the packaged UR5e task/report visual motion to conservative 12% velocity / 8% acceleration defaults and hardens JointState acquisition against duplicate/backward ROS timestamps. It retains the v1.6.1 lift support-contact fix, exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, and fail-closed authority boundaries.
585
+ v1.7.0 adds industrial smooth report-test execution for the qualified UR5e load profile using MoveIt Pilz `PTP` and `LIN` commands, bounded internal blend radii, conservative real simulation speed/acceleration, a 60 Hz workpiece-follow target, and an exact live-ACM support-contact lease scoped only to lift departure. It retains exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, deterministic verdicts, and fail-closed authority boundaries.
533
586
 
534
587
  Production-oriented software capabilities include:
535
588
 
@@ -542,6 +595,9 @@ requirement-driven nominal / boundary / fault case generation
542
595
  immutable project/Twin lineage
543
596
  exact Requirement → Case provenance
544
597
  qualified report-test visual execution contract
598
+ industrial Pilz PTP / LIN task planning
599
+ bounded safe trajectory blending
600
+ lift-only support-contact ACM lease + exact restore
545
601
  Gazebo/MoveIt selected-case visualization
546
602
  typed physical measurement binding
547
603
  deterministic full campaigns
@@ -557,9 +613,9 @@ change impact + regression
557
613
  provider-neutral optional AI front end
558
614
  ```
559
615
 
560
- Quality gates include Python 3.11/3.12/3.13 regression, compilation, Ruff correctness checks, package build/clean-install, runtime dependency audit, global branch coverage, One-Command coverage, Commercial Intelligence coverage, report-test visual execution qualification tests, Selective Verification coverage, Production Authority coverage, and Evidence Trust/Replay coverage.
616
+ Quality gates include Python 3.11/3.12/3.13 regression, compilation, Ruff correctness checks, package build/clean-install, runtime dependency audit, global branch coverage, One-Command coverage, Commercial Intelligence coverage, industrial-motion contract tests, report-test visual execution qualification tests, Selective Verification coverage, Production Authority coverage, and Evidence Trust/Replay coverage.
561
617
 
562
- Production/Stable describes the bounded software workflow. It does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, or authorized for autonomous real execution.
618
+ Production/Stable describes the bounded software workflow. It does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, or authorized for autonomous real execution. The new graphical Pilz execution path must additionally pass target-stack acceptance on the intended ROS/Gazebo/MoveIt workstation.
563
619
 
564
620
  ---
565
621
 
@@ -569,7 +625,7 @@ One-command verification:
569
625
 
570
626
  https://github.com/tomha85/devagent-physical-engine/blob/main/docs/ONE_COMMAND_VERIFY_V13.md
571
627
 
572
- v1.6 report-test visual execution:
628
+ v1.6 report-test visual execution (lineage and authority foundation retained in v1.7):
573
629
 
574
630
  https://github.com/tomha85/devagent-physical-engine/blob/main/docs/REPORT_TEST_VISUAL_EXECUTION_V16.md
575
631
 
@@ -41,7 +41,7 @@ DevAgent is designed to answer: **What can be proven about this cell, what faile
41
41
  Python 3.11+ is required.
42
42
 
43
43
  ```bash
44
- python -m pip install --upgrade devagent-physical-engine==1.6.2
44
+ python -m pip install --upgrade devagent-physical-engine==1.7.0
45
45
  ```
46
46
 
47
47
  Verify the installed package:
@@ -53,7 +53,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
53
53
  Expected:
54
54
 
55
55
  ```text
56
- 1.6.2
56
+ 1.7.0
57
57
  ```
58
58
 
59
59
  Run the normal customer workflow:
@@ -191,9 +191,62 @@ The joint-state recorder also rejects duplicate/backward ROS source timestamps b
191
191
 
192
192
  Because the visual trajectory now executes more slowly, cycle-time requirements are evaluated against the actual slower simulation execution. DevAgent does not normalize the observed duration back to a faster value or claim performance that was not executed.
193
193
 
194
+ ## v1.7 industrial smooth motion execution
195
+
196
+ v1.7 replaces the packaged report-test stop/go joint-phase presentation with a bounded industrial motion sequence planned by the running MoveIt **Pilz Industrial Motion Planner**. DevAgent does not stitch trajectories by hand and does not manufacture interpolation points.
197
+
198
+ The qualified UR5e load sequence is grouped as:
199
+
200
+ ```text
201
+ HOME
202
+ ↓ PTP
203
+ PRE_PICK
204
+ ↓ LIN
205
+ PICK
206
+ ↓ grasp / hard boundary
207
+ LIFT
208
+ ↓ LIN support departure / hard boundary
209
+ TRANSFER
210
+ ↓ PTP with safe internal blend
211
+ PLACE
212
+ ↓ LIN / release hard boundary
213
+ RETRACT
214
+ ↓ LIN with safe internal blend
215
+ HOME
216
+ ↓ PTP
217
+ ```
218
+
219
+ Execution groups are intentionally bounded:
220
+
221
+ ```text
222
+ approach_pick PTP → LIN
223
+ lift_departure LIN
224
+ transfer_place PTP → LIN
225
+ retreat_home LIN → PTP
226
+ ```
227
+
228
+ Compatible motion inside a group can use a small Pilz blend radius. DevAgent never blends through grasp, the support-contact departure boundary, or release. The simulation profile is deliberately conservative:
229
+
230
+ ```text
231
+ PTP velocity scale: 10%
232
+ PTP acceleration scale: 6%
233
+ LIN velocity scale: 6%
234
+ LIN acceleration scale: 4%
235
+ safe blend radius: 12 mm
236
+ workpiece follow target: 60 Hz
237
+ ```
238
+
239
+ `LIN` means the Pilz planner owns a Cartesian linear tool path; `PTP` remains collision-aware point-to-point planning. MoveIt/Pilz owns geometry, timestamps, velocity/acceleration time parameterization, collision checking, and the returned blended `RobotTrajectory`.
240
+
241
+ The source-support exception is also bounded at runtime. During `lift_departure`, DevAgent snapshots the complete live MoveIt Allowed Collision Matrix, enables exactly the attached-workpiece ↔ source-support pair, verifies read-back, executes the lift, restores the exact original matrix, and verifies the restoration before transfer is allowed to continue. No global collision disable is used.
242
+
243
+ Slower industrial execution is real execution time in simulation, not cosmetic playback. Therefore cycle-time requirements are evaluated against the actual measured slower trajectory.
244
+
245
+ The v1.7 hosted qualification proves deterministic software contracts and fail-closed routing. Graphical ROS 2 Jazzy + Gazebo Harmonic + MoveIt/Pilz target-stack acceptance still has to run on the intended workstation; hosted Python CI does not pretend to execute that graphical stack.
246
+
194
247
  ## Exact lineage hardening
195
248
 
196
- A case ID such as `case-0001` is local to its verification plan. v1.6 therefore requires the complete lineage:
249
+ A case ID such as `case-0001` is local to its verification plan. v1.6+ therefore requires the complete lineage:
197
250
 
198
251
  ```text
199
252
  Requirement
@@ -408,7 +461,7 @@ Gazebo Harmonic
408
461
  gz_ros2_control
409
462
  Universal Robots ROS 2 driver
410
463
  ur_simulation_gz
411
- MoveIt 2
464
+ MoveIt 2 + Pilz Industrial Motion Planner
412
465
  ```
413
466
 
414
467
  Preview setup:
@@ -429,7 +482,7 @@ Check runtime:
429
482
  devagent-physical ros doctor
430
483
  ```
431
484
 
432
- Hosted Python CI validates software contracts and deterministic execution boundaries. It does not by itself prove a graphical Gazebo runtime, `move_group`, TF, controller actions, OEM drivers, or an arbitrary customer cell. Physical target-stack qualification must run on the intended workstation/adapter stack.
485
+ Hosted Python CI validates software contracts and deterministic execution boundaries. It does not by itself prove a graphical Gazebo runtime, `move_group`, `/sequence_move_group`, TF, controller actions, OEM drivers, or an arbitrary customer cell. Physical target-stack qualification must run on the intended workstation/adapter stack.
433
486
 
434
487
  ---
435
488
 
@@ -486,9 +539,9 @@ devagent-physical-ai optional provider-backed engineering front end
486
539
 
487
540
  # Project status
488
541
 
489
- **v1.6.2 — Production/Stable software workflow**
542
+ **v1.7.0 — Production/Stable software workflow**
490
543
 
491
- v1.6.2 slows the packaged UR5e task/report visual motion to conservative 12% velocity / 8% acceleration defaults and hardens JointState acquisition against duplicate/backward ROS timestamps. It retains the v1.6.1 lift support-contact fix, exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, and fail-closed authority boundaries.
544
+ v1.7.0 adds industrial smooth report-test execution for the qualified UR5e load profile using MoveIt Pilz `PTP` and `LIN` commands, bounded internal blend radii, conservative real simulation speed/acceleration, a 60 Hz workpiece-follow target, and an exact live-ACM support-contact lease scoped only to lift departure. It retains exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, deterministic verdicts, and fail-closed authority boundaries.
492
545
 
493
546
  Production-oriented software capabilities include:
494
547
 
@@ -501,6 +554,9 @@ requirement-driven nominal / boundary / fault case generation
501
554
  immutable project/Twin lineage
502
555
  exact Requirement → Case provenance
503
556
  qualified report-test visual execution contract
557
+ industrial Pilz PTP / LIN task planning
558
+ bounded safe trajectory blending
559
+ lift-only support-contact ACM lease + exact restore
504
560
  Gazebo/MoveIt selected-case visualization
505
561
  typed physical measurement binding
506
562
  deterministic full campaigns
@@ -516,9 +572,9 @@ change impact + regression
516
572
  provider-neutral optional AI front end
517
573
  ```
518
574
 
519
- Quality gates include Python 3.11/3.12/3.13 regression, compilation, Ruff correctness checks, package build/clean-install, runtime dependency audit, global branch coverage, One-Command coverage, Commercial Intelligence coverage, report-test visual execution qualification tests, Selective Verification coverage, Production Authority coverage, and Evidence Trust/Replay coverage.
575
+ Quality gates include Python 3.11/3.12/3.13 regression, compilation, Ruff correctness checks, package build/clean-install, runtime dependency audit, global branch coverage, One-Command coverage, Commercial Intelligence coverage, industrial-motion contract tests, report-test visual execution qualification tests, Selective Verification coverage, Production Authority coverage, and Evidence Trust/Replay coverage.
520
576
 
521
- Production/Stable describes the bounded software workflow. It does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, or authorized for autonomous real execution.
577
+ Production/Stable describes the bounded software workflow. It does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, or authorized for autonomous real execution. The new graphical Pilz execution path must additionally pass target-stack acceptance on the intended ROS/Gazebo/MoveIt workstation.
522
578
 
523
579
  ---
524
580
 
@@ -528,7 +584,7 @@ One-command verification:
528
584
 
529
585
  https://github.com/tomha85/devagent-physical-engine/blob/main/docs/ONE_COMMAND_VERIFY_V13.md
530
586
 
531
- v1.6 report-test visual execution:
587
+ v1.6 report-test visual execution (lineage and authority foundation retained in v1.7):
532
588
 
533
589
  https://github.com/tomha85/devagent-physical-engine/blob/main/docs/REPORT_TEST_VISUAL_EXECUTION_V16.md
534
590
 
@@ -570,4 +626,4 @@ Original creator: Tom Ha
570
626
  Original project: https://github.com/tomha85/devagent-physical-engine
571
627
  All rights reserved.
572
628
 
573
- See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
629
+ See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
@@ -4,14 +4,14 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devagent-physical-engine"
7
- version = "1.6.2"
8
- description = "Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, report-test Gazebo visualization, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence."
7
+ version = "1.7.0"
8
+ description = "Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, 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."
9
9
  readme = { file = "README.md", content-type = "text/markdown" }
10
10
  requires-python = ">=3.11"
11
11
  dependencies = ["PyYAML>=6.0,<7"]
12
12
  authors = [{ name = "Tom Ha" }]
13
13
  license = { text = "All Rights Reserved" }
14
- keywords = ["robotics", "industrial-automation", "agentic-ai", "ros2", "gazebo", "verification", "selective-testing", "digital-twin", "fat-testing", "regression", "evidence", "replay"]
14
+ keywords = ["robotics", "industrial-automation", "agentic-ai", "ros2", "gazebo", "moveit", "pilz", "verification", "selective-testing", "digital-twin", "fat-testing", "regression", "evidence", "replay"]
15
15
  classifiers = [
16
16
  "Development Status :: 5 - Production/Stable",
17
17
  "Intended Audience :: Developers",
@@ -71,7 +71,10 @@ omit = [
71
71
  "src/devagent_physical_engine/ros2/ur5e_v10_adapter.py",
72
72
  "src/devagent_physical_engine/ros2/task_*.py",
73
73
  "src/devagent_physical_engine/ros2/report_test_visualization.py",
74
+ "src/devagent_physical_engine/ros2/report_test_visualization_v170.py",
74
75
  "src/devagent_physical_engine/ros2/moveit_task_planner.py",
76
+ "src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py",
77
+ "src/devagent_physical_engine/ros2/support_contact_lease_v170.py",
75
78
  "src/devagent_physical_engine/ros2/fk_pose.py",
76
79
  "src/devagent_physical_engine/ros2/gazebo_pose.py",
77
80
  "src/devagent_physical_engine/ros2/workpiece_follow.py",
@@ -34,6 +34,7 @@ from .evidence_trust import (
34
34
  EvidenceTrace,
35
35
  EvidenceViewer,
36
36
  )
37
+ from .industrial_motion_hotfix_v170 import install_industrial_motion_v170
37
38
  from .models import (
38
39
  ActionContract,
39
40
  Capability,
@@ -213,6 +214,7 @@ __all__ = [
213
214
 
214
215
  install_support_contact_hotfix_v161()
215
216
  install_smooth_motion_hotfix_v162()
217
+ install_industrial_motion_v170()
216
218
  install_one_command_runtime()
217
219
 
218
- __version__ = "1.6.2"
220
+ __version__ = "1.7.0"
@@ -0,0 +1,51 @@
1
+ from __future__ import annotations
2
+
3
+ from functools import wraps
4
+ from typing import Any
5
+
6
+ from .ros2.report_test_visualization_v170 import run_report_test_visualization_v170
7
+
8
+
9
+ _PATCH_MARKER = "_devagent_industrial_motion_v170"
10
+
11
+
12
+ def _patch_constructor(cls) -> None:
13
+ original = cls.__init__
14
+ if getattr(original, _PATCH_MARKER, False):
15
+ return
16
+
17
+ @wraps(original)
18
+ def patched(self, *args: Any, **kwargs: Any):
19
+ kwargs.setdefault("visual_runner", run_report_test_visualization_v170)
20
+ return original(self, *args, **kwargs)
21
+
22
+ setattr(patched, _PATCH_MARKER, True)
23
+ cls.__init__ = patched
24
+
25
+
26
+ def install_industrial_motion_v170() -> None:
27
+ """Route all report-test executor construction through the v1.7 visual runner.
28
+
29
+ v1.6 bound the old visual runner into constructor defaults at import time. Merely
30
+ replacing a module global would therefore leave existing executor classes on the
31
+ old path. This installer patches only those constructor defaults and preserves all
32
+ lineage, mapping, evidence, and authority classes unchanged.
33
+ """
34
+
35
+ from . import report_test_execution as base_exec
36
+ from . import report_test_execution_strict as strict_exec
37
+ from .ros2 import report_test_visualization as base_visual
38
+
39
+ base_exec.run_report_test_visualization = run_report_test_visualization_v170
40
+ strict_exec.run_report_test_visualization = run_report_test_visualization_v170
41
+ base_visual.run_report_test_visualization = run_report_test_visualization_v170
42
+
43
+ for cls in (
44
+ base_exec.ReportTestExecutionRuntime,
45
+ base_exec.ReportTestSelectiveExecutor,
46
+ base_exec.ReportTestFullExecutor,
47
+ strict_exec.ReportTestExecutionRuntime,
48
+ strict_exec.ReportTestSelectiveExecutor,
49
+ strict_exec.ReportTestFullExecutor,
50
+ ):
51
+ _patch_constructor(cls)
@@ -0,0 +1,144 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+
5
+
6
+ INDUSTRIAL_MOTION_PROFILE_V170 = "pilz_ptp_lin_blended_v1"
7
+ PILZ_PIPELINE_ID = "pilz_industrial_motion_planner"
8
+
9
+ # Conservative simulation profile. These are planning/execution limits, not a
10
+ # cosmetic playback multiplier; measured cycle time therefore remains truthful.
11
+ PTP_VELOCITY_SCALE = 0.10
12
+ PTP_ACCELERATION_SCALE = 0.06
13
+ LIN_VELOCITY_SCALE = 0.06
14
+ LIN_ACCELERATION_SCALE = 0.04
15
+ SAFE_BLEND_RADIUS_M = 0.012
16
+ WORKPIECE_FOLLOW_RATE_HZ = 60.0
17
+ WORKPIECE_MIN_EFFECTIVE_RATE_HZ = 30.0
18
+
19
+
20
+ @dataclass(frozen=True, slots=True)
21
+ class IndustrialSegmentSpec:
22
+ phase_name: str
23
+ planner_id: str
24
+ blend_radius_m: float
25
+ velocity_scale: float
26
+ acceleration_scale: float
27
+
28
+ def __post_init__(self) -> None:
29
+ if not self.phase_name.strip():
30
+ raise ValueError("industrial_phase_name_required")
31
+ if self.planner_id not in {"PTP", "LIN"}:
32
+ raise ValueError("industrial_planner_id_invalid")
33
+ if self.blend_radius_m < 0:
34
+ raise ValueError("industrial_blend_radius_invalid")
35
+ if not 0 < self.velocity_scale <= 1:
36
+ raise ValueError("industrial_velocity_scale_invalid")
37
+ if not 0 < self.acceleration_scale <= 1:
38
+ raise ValueError("industrial_acceleration_scale_invalid")
39
+
40
+
41
+ @dataclass(frozen=True, slots=True)
42
+ class IndustrialGroupSpec:
43
+ group_id: str
44
+ segments: tuple[IndustrialSegmentSpec, ...]
45
+ workpiece_loaded: bool
46
+ scene_state: str
47
+ support_contact_departure: bool = False
48
+
49
+ def __post_init__(self) -> None:
50
+ if not self.group_id.strip() or not self.segments:
51
+ raise ValueError("industrial_group_invalid")
52
+ if self.scene_state not in {"inherit", "attached", "world"}:
53
+ raise ValueError("industrial_scene_state_invalid")
54
+ if self.segments[-1].blend_radius_m != 0.0:
55
+ raise ValueError("industrial_group_final_blend_must_be_zero")
56
+ if self.support_contact_departure:
57
+ if self.scene_state != "attached" or not self.workpiece_loaded:
58
+ raise ValueError("industrial_support_departure_requires_loaded_attached_group")
59
+ if tuple(item.phase_name for item in self.segments) != ("lift",):
60
+ raise ValueError("industrial_support_departure_must_be_lift_only")
61
+
62
+ @property
63
+ def phase_names(self) -> tuple[str, ...]:
64
+ return tuple(item.phase_name for item in self.segments)
65
+
66
+ @property
67
+ def planner_chain(self) -> str:
68
+ return "->".join(item.planner_id for item in self.segments)
69
+
70
+
71
+ def reference_industrial_groups() -> tuple[IndustrialGroupSpec, ...]:
72
+ """Qualified UR5e report-test sequence with safe industrial motion boundaries.
73
+
74
+ Grasp/release and the support-contact departure remain explicit zero-blend
75
+ boundaries. Within approach, transfer/place, and retreat, Pilz blends compatible
76
+ PTP/LIN commands so the controller receives one continuous trajectory instead of
77
+ several stop/go FollowJointTrajectory commands.
78
+ """
79
+
80
+ groups = (
81
+ IndustrialGroupSpec(
82
+ "approach_pick",
83
+ (
84
+ IndustrialSegmentSpec(
85
+ "pre_pick", "PTP", SAFE_BLEND_RADIUS_M, PTP_VELOCITY_SCALE, PTP_ACCELERATION_SCALE
86
+ ),
87
+ IndustrialSegmentSpec(
88
+ "pick", "LIN", 0.0, LIN_VELOCITY_SCALE, LIN_ACCELERATION_SCALE
89
+ ),
90
+ ),
91
+ workpiece_loaded=False,
92
+ scene_state="inherit",
93
+ ),
94
+ IndustrialGroupSpec(
95
+ "lift_departure",
96
+ (
97
+ IndustrialSegmentSpec(
98
+ "lift", "LIN", 0.0, LIN_VELOCITY_SCALE, LIN_ACCELERATION_SCALE
99
+ ),
100
+ ),
101
+ workpiece_loaded=True,
102
+ scene_state="attached",
103
+ support_contact_departure=True,
104
+ ),
105
+ IndustrialGroupSpec(
106
+ "transfer_place",
107
+ (
108
+ IndustrialSegmentSpec(
109
+ "transfer", "PTP", SAFE_BLEND_RADIUS_M, PTP_VELOCITY_SCALE, PTP_ACCELERATION_SCALE
110
+ ),
111
+ IndustrialSegmentSpec(
112
+ "place", "LIN", 0.0, LIN_VELOCITY_SCALE, LIN_ACCELERATION_SCALE
113
+ ),
114
+ ),
115
+ workpiece_loaded=True,
116
+ scene_state="attached",
117
+ ),
118
+ IndustrialGroupSpec(
119
+ "retreat_home",
120
+ (
121
+ IndustrialSegmentSpec(
122
+ "retract", "LIN", SAFE_BLEND_RADIUS_M, LIN_VELOCITY_SCALE, LIN_ACCELERATION_SCALE
123
+ ),
124
+ IndustrialSegmentSpec(
125
+ "return_home", "PTP", 0.0, PTP_VELOCITY_SCALE, PTP_ACCELERATION_SCALE
126
+ ),
127
+ ),
128
+ workpiece_loaded=False,
129
+ scene_state="world",
130
+ ),
131
+ )
132
+ expected = (
133
+ "pre_pick",
134
+ "pick",
135
+ "lift",
136
+ "transfer",
137
+ "place",
138
+ "retract",
139
+ "return_home",
140
+ )
141
+ actual = tuple(phase for group in groups for phase in group.phase_names)
142
+ if actual != expected:
143
+ raise RuntimeError("industrial_reference_phase_coverage_invalid")
144
+ return groups