devagent-physical-engine 1.6.1__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.1/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.7.0}/PKG-INFO +84 -13
  2. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/README.md +82 -11
  3. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/pyproject.toml +7 -4
  4. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/__init__.py +5 -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.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/joint_state_recorder.py +40 -4
  9. devagent_physical_engine-1.7.0/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +394 -0
  10. devagent_physical_engine-1.7.0/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +553 -0
  11. devagent_physical_engine-1.7.0/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +192 -0
  12. devagent_physical_engine-1.7.0/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +116 -0
  13. devagent_physical_engine-1.7.0/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +39 -0
  14. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0/src/devagent_physical_engine.egg-info}/PKG-INFO +84 -13
  15. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine.egg-info/SOURCES.txt +10 -0
  16. devagent_physical_engine-1.7.0/tests/test_industrial_motion_v170.py +124 -0
  17. devagent_physical_engine-1.7.0/tests/test_smooth_motion_hotfix_v162.py +81 -0
  18. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/NOTICE +0 -0
  19. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/setup.cfg +0 -0
  20. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/__init__.py +0 -0
  21. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/compiler.py +0 -0
  22. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/contracts.py +0 -0
  23. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/coordinator.py +0 -0
  24. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/critic.py +0 -0
  25. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/evidence.py +0 -0
  26. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  27. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/planner.py +0 -0
  28. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/recovery.py +0 -0
  29. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/routing.py +0 -0
  30. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/runtime.py +0 -0
  31. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/semantic.py +0 -0
  32. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/structured.py +0 -0
  33. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ai_cli.py +0 -0
  34. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/cli.py +0 -0
  35. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial.py +0 -0
  36. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_campaign.py +0 -0
  37. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_cli.py +0 -0
  38. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_importer.py +0 -0
  39. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
  40. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_readiness.py +0 -0
  41. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_repository.py +0 -0
  42. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/continuous_clearance.py +0 -0
  43. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/doctor.py +0 -0
  44. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/engineering_agent.py +0 -0
  45. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/engineering_request.py +0 -0
  46. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/evidence_replay.py +0 -0
  47. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/evidence_trust.py +0 -0
  48. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/execution.py +0 -0
  49. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/models.py +0 -0
  50. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/one_command.py +0 -0
  51. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/one_command_runtime.py +0 -0
  52. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/one_command_v15.py +0 -0
  53. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/one_command_v16.py +0 -0
  54. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/operating_envelope.py +0 -0
  55. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  56. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  57. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  58. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  59. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  60. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  61. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/experience.py +0 -0
  62. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/measured.py +0 -0
  63. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  64. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  65. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/physical_campaign.py +0 -0
  66. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/physical_evidence.py +0 -0
  67. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/physical_motion.py +0 -0
  68. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/planning.py +0 -0
  69. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/pose_math.py +0 -0
  70. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/preexecution_contract.py +0 -0
  71. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/production_authority.py +0 -0
  72. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/production_grade.py +0 -0
  73. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/project.py +0 -0
  74. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  75. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  76. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  77. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  78. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  79. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
  80. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_criterion.py +0 -0
  81. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_qualification.py +0 -0
  82. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/providers.py +0 -0
  83. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/qualification.py +0 -0
  84. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/qualification_cli.py +0 -0
  85. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/qualification_harness.py +0 -0
  86. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/reference_workcell.py +0 -0
  87. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/report_test_execution.py +0 -0
  88. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
  89. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/robot_platform.py +0 -0
  90. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/robots.py +0 -0
  91. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/__init__.py +0 -0
  92. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  93. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/commands.py +0 -0
  94. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
  95. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/doctor.py +0 -0
  96. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
  97. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
  98. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  99. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
  100. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
  101. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  102. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
  103. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  104. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
  105. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
  106. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  107. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
  108. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
  109. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  110. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  111. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
  112. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
  113. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
  114. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  115. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
  116. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
  117. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
  118. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
  119. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
  120. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  121. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
  122. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
  123. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
  124. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
  125. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
  126. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  127. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  128. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
  129. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
  130. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
  131. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
  132. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
  133. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/selective_verification.py +0 -0
  134. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
  135. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/setup_profile.py +0 -0
  136. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
  137. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/simulation.py +0 -0
  138. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/simulation_platform.py +0 -0
  139. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
  140. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/tool_collision.py +0 -0
  141. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  142. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/twin.py +0 -0
  143. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/twin_builder.py +0 -0
  144. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/twin_codec.py +0 -0
  145. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/twin_materialization.py +0 -0
  146. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/user_cli.py +0 -0
  147. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/user_cli_v15.py +0 -0
  148. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/user_cli_v16.py +0 -0
  149. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/verification.py +0 -0
  150. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
  151. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  152. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
  153. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
  154. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  155. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_agent_core.py +0 -0
  156. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_agent_semantic_hardening.py +0 -0
  157. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_ai_cli.py +0 -0
  158. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_ai_cli_v07.py +0 -0
  159. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_commercial_importer_v1.py +0 -0
  160. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_commercial_intelligence_v15.py +0 -0
  161. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_commercial_readiness_v1.py +0 -0
  162. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_commercial_v1.py +0 -0
  163. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_continuous_clearance_v011.py +0 -0
  164. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_core.py +0 -0
  165. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_engineering_request_v07.py +0 -0
  166. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_evidence_replay_v12.py +0 -0
  167. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_evidence_trust_coverage_v12.py +0 -0
  168. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_evidence_trust_transport_v12.py +0 -0
  169. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_evidence_trust_v12.py +0 -0
  170. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_evidence_viewer_palette_v130.py +0 -0
  171. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_gazebo_cli_v0122.py +0 -0
  172. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_golden_abb_showcase.py +0 -0
  173. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_interpreter_profiles_v08.py +0 -0
  174. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_joint_state_probe_v0125.py +0 -0
  175. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_live_provider_qualification.py +0 -0
  176. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_measured_motion_v10.py +0 -0
  177. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
  178. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_moveit_scene_v0123.py +0 -0
  179. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_natural_language_agent_v07.py +0 -0
  180. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_one_command_hardening_v13.py +0 -0
  181. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_one_command_pose_hardening_v15.py +0 -0
  182. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_one_command_regression_v141.py +0 -0
  183. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_one_command_v13.py +0 -0
  184. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_openai_strict_schema_v0113.py +0 -0
  185. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_optimization_v05.py +0 -0
  186. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_physical_campaign_v09.py +0 -0
  187. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_physical_evidence_v09.py +0 -0
  188. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_physical_motion_v09.py +0 -0
  189. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_planning_fallback_v012.py +0 -0
  190. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_pose_math_v0125.py +0 -0
  191. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_preexecution_contract_v10.py +0 -0
  192. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_production_authority_v11.py +0 -0
  193. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_production_grade_coverage_v11.py +0 -0
  194. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_production_grade_v11.py +0 -0
  195. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_project_spine_v013.py +0 -0
  196. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_provider_and_qualification.py +0 -0
  197. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_provider_criterion_v15.py +0 -0
  198. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  199. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_qualification_harness_v06.py +0 -0
  200. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_readme_pypi.py +0 -0
  201. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_real_provider_adapters.py +0 -0
  202. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
  203. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_reference_workcell_v012.py +0 -0
  204. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_report_test_contract_coverage_v16.py +0 -0
  205. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_report_test_lineage_v16.py +0 -0
  206. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_report_test_visual_execution_v16.py +0 -0
  207. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_robot_platform_v08.py +0 -0
  208. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_ros2_production_receipts_v011.py +0 -0
  209. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_ros2_simulation.py +0 -0
  210. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_ros_trajectory_v09.py +0 -0
  211. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_selective_verification_v14.py +0 -0
  212. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_setup_profile.py +0 -0
  213. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_sim_real_qualification_v011.py +0 -0
  214. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_simulation_platform_v08.py +0 -0
  215. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_support_contact_hotfix_v161.py +0 -0
  216. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_tool_collision_v011.py +0 -0
  217. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_tool_scene_v0124.py +0 -0
  218. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_trajectory_action_probe_v0125.py +0 -0
  219. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_trajectory_qualification_v09.py +0 -0
  220. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_trajectory_tracking_v0125.py +0 -0
  221. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_twin_materialization_v10.py +0 -0
  222. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_twin_v08.py +0 -0
  223. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  224. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  225. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_user_cli_interactive_v131.py +0 -0
  226. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_user_cli_progress_v131.py +0 -0
  227. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_user_cli_report_visual_v16.py +0 -0
  228. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_user_cli_selective_v14.py +0 -0
  229. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_user_cli_v15.py +0 -0
  230. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
  231. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_v052_stabilization.py +0 -0
  232. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.7.0}/tests/test_v08_catalog_mapping_regression.py +0 -0
  233. {devagent_physical_engine-1.6.1 → 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.1
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.1
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.1
97
+ 1.7.0
98
98
  ```
99
99
 
100
100
  Run the normal customer workflow:
@@ -217,9 +217,77 @@ attached workpiece ↔ conveyor_a support surface
217
217
 
218
218
  That allowance is scoped to lift departure only. Transfer/place keep normal collision checking, no global PlanningScene collision policy is disabled, and the live ACM is never replaced by a sparse two-object matrix.
219
219
 
220
+ ## v1.6.2 smooth visual motion hotfix
221
+
222
+ v1.6.2 makes the packaged UR5e visual task deliberately slower and easier to inspect. The task-specific MoveIt planner defaults are reduced from 25% velocity / 25% acceleration to:
223
+
224
+ ```text
225
+ velocity scale: 12%
226
+ acceleration scale: 8%
227
+ ```
228
+
229
+ This is real trajectory time parameterization through MoveIt and `FollowJointTrajectory`; DevAgent does not fake smoothness with teleports or sleeps. Explicit planner scales remain authoritative. Collision checks, endpoint tolerances, tracking tolerances, Twin lineage, and real-execution authority are unchanged.
230
+
231
+ The joint-state recorder also rejects duplicate/backward ROS source timestamps before trajectory interpolation while recording the number of dropped samples. This removes the false `trajectory_tracking_time_not_increasing` failure caused by duplicate Gazebo/ros2_control JointState stamps without manufacturing synthetic timestamps.
232
+
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
+
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
+
220
288
  ## Exact lineage hardening
221
289
 
222
- 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:
223
291
 
224
292
  ```text
225
293
  Requirement
@@ -434,7 +502,7 @@ Gazebo Harmonic
434
502
  gz_ros2_control
435
503
  Universal Robots ROS 2 driver
436
504
  ur_simulation_gz
437
- MoveIt 2
505
+ MoveIt 2 + Pilz Industrial Motion Planner
438
506
  ```
439
507
 
440
508
  Preview setup:
@@ -455,7 +523,7 @@ Check runtime:
455
523
  devagent-physical ros doctor
456
524
  ```
457
525
 
458
- 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.
459
527
 
460
528
  ---
461
529
 
@@ -512,9 +580,9 @@ devagent-physical-ai optional provider-backed engineering front end
512
580
 
513
581
  # Project status
514
582
 
515
- **v1.6.1 — Production/Stable software workflow**
583
+ **v1.7.0 — Production/Stable software workflow**
516
584
 
517
- v1.6.1 hotfixes the qualified UR5e report-test lift preflight by preserving the complete live MoveIt Allowed Collision Matrix and allowing only the attached workpiece/source-support contact during lift departure. It retains v1.6 exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, interactive report-case visualization, and fail-closed unsupported scopes.
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.
518
586
 
519
587
  Production-oriented software capabilities include:
520
588
 
@@ -527,6 +595,9 @@ requirement-driven nominal / boundary / fault case generation
527
595
  immutable project/Twin lineage
528
596
  exact Requirement → Case provenance
529
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
530
601
  Gazebo/MoveIt selected-case visualization
531
602
  typed physical measurement binding
532
603
  deterministic full campaigns
@@ -542,9 +613,9 @@ change impact + regression
542
613
  provider-neutral optional AI front end
543
614
  ```
544
615
 
545
- 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.
546
617
 
547
- 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.
548
619
 
549
620
  ---
550
621
 
@@ -554,7 +625,7 @@ One-command verification:
554
625
 
555
626
  https://github.com/tomha85/devagent-physical-engine/blob/main/docs/ONE_COMMAND_VERIFY_V13.md
556
627
 
557
- v1.6 report-test visual execution:
628
+ v1.6 report-test visual execution (lineage and authority foundation retained in v1.7):
558
629
 
559
630
  https://github.com/tomha85/devagent-physical-engine/blob/main/docs/REPORT_TEST_VISUAL_EXECUTION_V16.md
560
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.1
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.1
56
+ 1.7.0
57
57
  ```
58
58
 
59
59
  Run the normal customer workflow:
@@ -176,9 +176,77 @@ attached workpiece ↔ conveyor_a support surface
176
176
 
177
177
  That allowance is scoped to lift departure only. Transfer/place keep normal collision checking, no global PlanningScene collision policy is disabled, and the live ACM is never replaced by a sparse two-object matrix.
178
178
 
179
+ ## v1.6.2 smooth visual motion hotfix
180
+
181
+ v1.6.2 makes the packaged UR5e visual task deliberately slower and easier to inspect. The task-specific MoveIt planner defaults are reduced from 25% velocity / 25% acceleration to:
182
+
183
+ ```text
184
+ velocity scale: 12%
185
+ acceleration scale: 8%
186
+ ```
187
+
188
+ This is real trajectory time parameterization through MoveIt and `FollowJointTrajectory`; DevAgent does not fake smoothness with teleports or sleeps. Explicit planner scales remain authoritative. Collision checks, endpoint tolerances, tracking tolerances, Twin lineage, and real-execution authority are unchanged.
189
+
190
+ The joint-state recorder also rejects duplicate/backward ROS source timestamps before trajectory interpolation while recording the number of dropped samples. This removes the false `trajectory_tracking_time_not_increasing` failure caused by duplicate Gazebo/ros2_control JointState stamps without manufacturing synthetic timestamps.
191
+
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
+
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
+
179
247
  ## Exact lineage hardening
180
248
 
181
- 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:
182
250
 
183
251
  ```text
184
252
  Requirement
@@ -393,7 +461,7 @@ Gazebo Harmonic
393
461
  gz_ros2_control
394
462
  Universal Robots ROS 2 driver
395
463
  ur_simulation_gz
396
- MoveIt 2
464
+ MoveIt 2 + Pilz Industrial Motion Planner
397
465
  ```
398
466
 
399
467
  Preview setup:
@@ -414,7 +482,7 @@ Check runtime:
414
482
  devagent-physical ros doctor
415
483
  ```
416
484
 
417
- 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.
418
486
 
419
487
  ---
420
488
 
@@ -471,9 +539,9 @@ devagent-physical-ai optional provider-backed engineering front end
471
539
 
472
540
  # Project status
473
541
 
474
- **v1.6.1 — Production/Stable software workflow**
542
+ **v1.7.0 — Production/Stable software workflow**
475
543
 
476
- v1.6.1 hotfixes the qualified UR5e report-test lift preflight by preserving the complete live MoveIt Allowed Collision Matrix and allowing only the attached workpiece/source-support contact during lift departure. It retains v1.6 exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, interactive report-case visualization, and fail-closed unsupported scopes.
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.
477
545
 
478
546
  Production-oriented software capabilities include:
479
547
 
@@ -486,6 +554,9 @@ requirement-driven nominal / boundary / fault case generation
486
554
  immutable project/Twin lineage
487
555
  exact Requirement → Case provenance
488
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
489
560
  Gazebo/MoveIt selected-case visualization
490
561
  typed physical measurement binding
491
562
  deterministic full campaigns
@@ -501,9 +572,9 @@ change impact + regression
501
572
  provider-neutral optional AI front end
502
573
  ```
503
574
 
504
- 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.
505
576
 
506
- 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.
507
578
 
508
579
  ---
509
580
 
@@ -513,7 +584,7 @@ One-command verification:
513
584
 
514
585
  https://github.com/tomha85/devagent-physical-engine/blob/main/docs/ONE_COMMAND_VERIFY_V13.md
515
586
 
516
- v1.6 report-test visual execution:
587
+ v1.6 report-test visual execution (lineage and authority foundation retained in v1.7):
517
588
 
518
589
  https://github.com/tomha85/devagent-physical-engine/blob/main/docs/REPORT_TEST_VISUAL_EXECUTION_V16.md
519
590
 
@@ -555,4 +626,4 @@ Original creator: Tom Ha
555
626
  Original project: https://github.com/tomha85/devagent-physical-engine
556
627
  All rights reserved.
557
628
 
558
- 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.1"
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",
@@ -81,4 +84,4 @@ omit = [
81
84
  [tool.coverage.report]
82
85
  fail_under = 75
83
86
  show_missing = true
84
- skip_covered = false
87
+ skip_covered = false
@@ -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,
@@ -108,6 +109,7 @@ from .selective_verification import (
108
109
  VerificationTestMappingRecorder,
109
110
  )
110
111
  from .selective_verification_v16 import SelectiveVerificationServiceV16
112
+ from .smooth_motion_hotfix_v162 import install_smooth_motion_hotfix_v162
111
113
  from .support_contact_hotfix_v161 import install_support_contact_hotfix_v161
112
114
  from .twin import TwinConfidenceLevel, TwinSpec, TwinValidationReport, TwinValidator
113
115
  from .twin_codec import twin_from_dict, twin_from_revision
@@ -211,6 +213,8 @@ __all__ = [
211
213
  ]
212
214
 
213
215
  install_support_contact_hotfix_v161()
216
+ install_smooth_motion_hotfix_v162()
217
+ install_industrial_motion_v170()
214
218
  install_one_command_runtime()
215
219
 
216
- __version__ = "1.6.1"
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