devagent-physical-engine 1.7.2__tar.gz → 1.8.1__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 (245) hide show
  1. {devagent_physical_engine-1.7.2/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.8.1}/PKG-INFO +71 -15
  2. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/README.md +70 -14
  3. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/pyproject.toml +5 -3
  4. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/__init__.py +3 -1
  5. devagent_physical_engine-1.8.1/src/devagent_physical_engine/controller_runtime_hotfix_v181.py +93 -0
  6. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/one_command_v16.py +8 -0
  7. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/qualification.py +28 -3
  8. devagent_physical_engine-1.8.1/src/devagent_physical_engine/robot_support_v18.py +97 -0
  9. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/robots.py +6 -0
  10. devagent_physical_engine-1.8.1/src/devagent_physical_engine/ros2/abb_irb1200.py +441 -0
  11. devagent_physical_engine-1.8.1/src/devagent_physical_engine/ros2/abb_irb1200_preview.py +203 -0
  12. devagent_physical_engine-1.8.1/src/devagent_physical_engine/ros2/controller_action_probe.py +165 -0
  13. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/doctor.py +9 -1
  14. devagent_physical_engine-1.8.1/src/devagent_physical_engine/user_cli_v18.py +283 -0
  15. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1/src/devagent_physical_engine.egg-info}/PKG-INFO +71 -15
  16. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine.egg-info/SOURCES.txt +8 -0
  17. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine.egg-info/entry_points.txt +1 -1
  18. devagent_physical_engine-1.8.1/tests/test_abb_irb1200_visual_v18.py +180 -0
  19. devagent_physical_engine-1.8.1/tests/test_controller_runtime_hotfix_v181.py +194 -0
  20. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_golden_abb_showcase.py +6 -2
  21. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_industrial_motion_v170.py +2 -2
  22. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_robot_platform_v08.py +26 -1
  23. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_ros_trajectory_v09.py +82 -43
  24. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_transfer_place_diagnostic_v172.py +1 -1
  25. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/NOTICE +0 -0
  26. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/setup.cfg +0 -0
  27. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/agent/__init__.py +0 -0
  28. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/agent/compiler.py +0 -0
  29. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/agent/contracts.py +0 -0
  30. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/agent/coordinator.py +0 -0
  31. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/agent/critic.py +0 -0
  32. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/agent/evidence.py +0 -0
  33. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  34. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/agent/planner.py +0 -0
  35. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/agent/recovery.py +0 -0
  36. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/agent/routing.py +0 -0
  37. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/agent/runtime.py +0 -0
  38. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/agent/semantic.py +0 -0
  39. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/agent/structured.py +0 -0
  40. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ai_cli.py +0 -0
  41. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/cli.py +0 -0
  42. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/commercial.py +0 -0
  43. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/commercial_campaign.py +0 -0
  44. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/commercial_cli.py +0 -0
  45. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/commercial_importer.py +0 -0
  46. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
  47. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/commercial_readiness.py +0 -0
  48. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/commercial_repository.py +0 -0
  49. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/continuous_clearance.py +0 -0
  50. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/doctor.py +0 -0
  51. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/engineering_agent.py +0 -0
  52. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/engineering_request.py +0 -0
  53. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/evidence_replay.py +0 -0
  54. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/evidence_trust.py +0 -0
  55. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/execution.py +0 -0
  56. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +0 -0
  57. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/industrial_motion_v170.py +0 -0
  58. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/models.py +0 -0
  59. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/one_command.py +0 -0
  60. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/one_command_runtime.py +0 -0
  61. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/one_command_v15.py +0 -0
  62. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/operating_envelope.py +0 -0
  63. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  64. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  65. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  66. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  67. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  68. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  69. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/optimization/experience.py +0 -0
  70. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/optimization/measured.py +0 -0
  71. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  72. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  73. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/physical_campaign.py +0 -0
  74. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/physical_evidence.py +0 -0
  75. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/physical_motion.py +0 -0
  76. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/planning.py +0 -0
  77. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/pose_math.py +0 -0
  78. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/preexecution_contract.py +0 -0
  79. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/production_authority.py +0 -0
  80. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/production_grade.py +0 -0
  81. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/project.py +0 -0
  82. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  83. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  84. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  85. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  86. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  87. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
  88. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/provider_criterion.py +0 -0
  89. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/provider_qualification.py +0 -0
  90. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/providers.py +0 -0
  91. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/qualification_cli.py +0 -0
  92. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/qualification_harness.py +0 -0
  93. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/reference_workcell.py +0 -0
  94. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/report_test_execution.py +0 -0
  95. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
  96. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/robot_platform.py +0 -0
  97. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/__init__.py +0 -0
  98. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  99. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/commands.py +0 -0
  100. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
  101. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
  102. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
  103. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  104. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
  105. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
  106. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  107. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +0 -0
  108. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py +0 -0
  109. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py +0 -0
  110. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
  111. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
  112. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  113. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
  114. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
  115. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  116. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
  117. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +0 -0
  118. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
  119. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  120. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  121. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
  122. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
  123. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
  124. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +0 -0
  125. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  126. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
  127. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +0 -0
  128. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +0 -0
  129. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
  130. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
  131. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
  132. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
  133. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  134. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
  135. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
  136. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
  137. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
  138. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
  139. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  140. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  141. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
  142. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
  143. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
  144. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
  145. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
  146. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/selective_verification.py +0 -0
  147. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
  148. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/setup_profile.py +0 -0
  149. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
  150. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/simulation.py +0 -0
  151. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/simulation_platform.py +0 -0
  152. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
  153. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
  154. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/tool_collision.py +0 -0
  155. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  156. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/twin.py +0 -0
  157. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/twin_builder.py +0 -0
  158. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/twin_codec.py +0 -0
  159. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/twin_materialization.py +0 -0
  160. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/user_cli.py +0 -0
  161. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/user_cli_v15.py +0 -0
  162. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/user_cli_v16.py +0 -0
  163. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/verification.py +0 -0
  164. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
  165. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  166. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
  167. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  168. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_agent_core.py +0 -0
  169. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_agent_semantic_hardening.py +0 -0
  170. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_ai_cli.py +0 -0
  171. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_ai_cli_v07.py +0 -0
  172. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_commercial_importer_v1.py +0 -0
  173. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_commercial_intelligence_v15.py +0 -0
  174. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_commercial_readiness_v1.py +0 -0
  175. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_commercial_v1.py +0 -0
  176. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_continuous_clearance_v011.py +0 -0
  177. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_core.py +0 -0
  178. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_engineering_request_v07.py +0 -0
  179. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_evidence_replay_v12.py +0 -0
  180. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_evidence_trust_coverage_v12.py +0 -0
  181. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_evidence_trust_transport_v12.py +0 -0
  182. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_evidence_trust_v12.py +0 -0
  183. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_evidence_viewer_palette_v130.py +0 -0
  184. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_gazebo_cli_v0122.py +0 -0
  185. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_golden_abb_runner_v171.py +0 -0
  186. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_interpreter_profiles_v08.py +0 -0
  187. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_joint_state_probe_v0125.py +0 -0
  188. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_live_provider_qualification.py +0 -0
  189. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_measured_motion_v10.py +0 -0
  190. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
  191. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_moveit_scene_v0123.py +0 -0
  192. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_natural_language_agent_v07.py +0 -0
  193. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_one_command_hardening_v13.py +0 -0
  194. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_one_command_pose_hardening_v15.py +0 -0
  195. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_one_command_regression_v141.py +0 -0
  196. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_one_command_v13.py +0 -0
  197. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_openai_strict_schema_v0113.py +0 -0
  198. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_optimization_v05.py +0 -0
  199. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_physical_campaign_v09.py +0 -0
  200. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_physical_evidence_v09.py +0 -0
  201. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_physical_motion_v09.py +0 -0
  202. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_planning_fallback_v012.py +0 -0
  203. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_pose_math_v0125.py +0 -0
  204. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_preexecution_contract_v10.py +0 -0
  205. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_production_authority_v11.py +0 -0
  206. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_production_grade_coverage_v11.py +0 -0
  207. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_production_grade_v11.py +0 -0
  208. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_project_spine_v013.py +0 -0
  209. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_provider_and_qualification.py +0 -0
  210. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_provider_criterion_v15.py +0 -0
  211. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  212. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_qualification_harness_v06.py +0 -0
  213. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_readme_pypi.py +0 -0
  214. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_real_provider_adapters.py +0 -0
  215. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
  216. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_reference_workcell_v012.py +0 -0
  217. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_report_test_contract_coverage_v16.py +0 -0
  218. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_report_test_lineage_v16.py +0 -0
  219. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_report_test_visual_execution_v16.py +0 -0
  220. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_ros2_production_receipts_v011.py +0 -0
  221. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_ros2_simulation.py +0 -0
  222. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_selective_verification_v14.py +0 -0
  223. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_setup_profile.py +0 -0
  224. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_sim_real_qualification_v011.py +0 -0
  225. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_simulation_platform_v08.py +0 -0
  226. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_smooth_motion_hotfix_v162.py +0 -0
  227. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_support_contact_hotfix_v161.py +0 -0
  228. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_tool_collision_v011.py +0 -0
  229. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_tool_scene_v0124.py +0 -0
  230. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_trajectory_action_probe_v0125.py +0 -0
  231. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_trajectory_qualification_v09.py +0 -0
  232. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_trajectory_tracking_v0125.py +0 -0
  233. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_twin_materialization_v10.py +0 -0
  234. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_twin_v08.py +0 -0
  235. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  236. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  237. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_user_cli_interactive_v131.py +0 -0
  238. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_user_cli_progress_v131.py +0 -0
  239. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_user_cli_report_visual_v16.py +0 -0
  240. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_user_cli_selective_v14.py +0 -0
  241. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_user_cli_v15.py +0 -0
  242. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
  243. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_v052_stabilization.py +0 -0
  244. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_v08_catalog_mapping_regression.py +0 -0
  245. {devagent_physical_engine-1.7.2 → devagent_physical_engine-1.8.1}/tests/test_workpiece_lifecycle_v011.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devagent-physical-engine
3
- Version: 1.7.2
4
- Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, adaptive industrial Pilz PTP/LIN report-test Gazebo execution, transfer/place segment diagnostics, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
3
+ Version: 1.8.1
4
+ Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, truthful robot support tiers, qualified UR5e report-test Gazebo execution, direct ROS controller/action readiness, experimental ABB IRB1200 Gazebo/MoveIt/RViz visualization, transfer/place diagnostics, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
5
5
  Author: Tom Ha
6
6
  License: All Rights Reserved
7
7
  Project-URL: Homepage, https://github.com/tomha85/devagent-physical-engine
@@ -76,7 +76,7 @@ regression + FAT report + Evidence Viewer
76
76
  Python 3.11+ is required.
77
77
 
78
78
  ```bash
79
- python -m pip install --upgrade devagent-physical-engine==1.7.2
79
+ python -m pip install --upgrade devagent-physical-engine==1.8.1
80
80
  ```
81
81
 
82
82
  Verify the installed package:
@@ -88,7 +88,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
88
88
  Expected:
89
89
 
90
90
  ```text
91
- 1.7.2
91
+ 1.8.1
92
92
  ```
93
93
 
94
94
  Run the normal customer workflow:
@@ -115,6 +115,19 @@ For machine-readable CI output:
115
115
  devagent verify ./customer-project --json
116
116
  ```
117
117
 
118
+ Inspect truthful robot support tiers:
119
+
120
+ ```bash
121
+ devagent robots
122
+ ```
123
+
124
+ For the exact ABB IRB1200 experimental visual runtime:
125
+
126
+ ```bash
127
+ devagent robot doctor abb_irb1200
128
+ devagent robot visualize abb_irb1200
129
+ ```
130
+
118
131
  Default locations:
119
132
 
120
133
  ```text
@@ -327,9 +340,37 @@ pilz_transfer_place_sequence_composition_failed
327
340
 
328
341
  Each probe writes its own request/receipt plus a `transfer-place-diagnostic.json` summary. These probes never execute motion and never relax targets, planner types, collision policy, attached-workpiece scene state, velocity/acceleration limits, Twin lineage, or real-execution authority. Their purpose is to identify the exact target-stack defect before changing physical execution semantics.
329
342
 
343
+ ## v1.8 truthful robot support + ABB IRB1200 visual runtime
344
+
345
+ v1.8 makes robot support explicit instead of implying that every built-in robot profile has the same simulator authority.
346
+
347
+ Support is exposed through:
348
+
349
+ ```bash
350
+ devagent robots
351
+ devagent robot doctor <robot>
352
+ devagent robot visualize <robot>
353
+ ```
354
+
355
+ The exact `abb_irb1200` profile adds an experimental visual runtime using Ubuntu 24.04, ROS 2 Jazzy, Gazebo Harmonic, `gz_ros2_control`, upstream ABB IRB1200 geometry, MoveIt, and RViz. Runtime readiness is bounded on controller state, `/joint_states`, FollowJointTrajectory, `move_group`, and RViz availability.
356
+
357
+ For the Golden ABB cell, DevAgent can load the waypoint seed, pre-plan every phase through MoveIt before sending any simulated trajectory, then execute the preview while Gazebo/RViz remain open for inspection.
358
+
359
+ This is intentionally **visual simulation availability**, not measured FAT qualification. ABB preview evidence is not promoted to a qualified physical measurement, and `real_execution_allowed` remains false. The normal One-Command ABB FAT path continues to fail closed until an exact-Twin measured ABB execution adapter is separately qualified.
360
+
361
+ Generic `abb_irb`, FANUC CRX, and KUKA KR profiles remain model-only until equivalent vendor/model visual runtimes are implemented and qualified.
362
+
363
+ ## v1.8.1 direct UR5e controller/action readiness hotfix
364
+
365
+ A real UR5e target-stack run proved that Gazebo, `gz_ros2_control`, the controller manager, joint-state broadcaster, and `scaled_joint_trajectory_controller` could all initialize successfully while DevAgent remained stuck in startup readiness until the 120-second timeout. The old UR5e readiness gate depended on ROS CLI graph commands and expected the unscaled `/joint_trajectory_controller/follow_joint_trajectory` action even when the active controller was the scaled UR controller.
366
+
367
+ v1.8.1 makes UR5e readiness and trajectory execution use one controller-binding contract. A short-lived direct `rclpy` probe calls `/controller_manager/list_controllers`, deterministically selects the active trajectory controller, verifies its exact `FollowJointTrajectory` action server, and returns the bound action name. Required UR5e joint-state readiness continues to use the direct machine joint-state probe.
368
+
369
+ The readiness gate therefore no longer depends on a long-lived `ros2 daemon`, `ros2 node list`, `ros2 topic list`, or `ros2 action list`. It remains fail-closed on missing controller-manager service, no active trajectory controller, ambiguous active controllers, a missing trajectory action server, or missing required UR5e joint state. No collision rule, Pilz target, motion speed, Twin lineage, site-qualification boundary, or real-execution authority is relaxed.
370
+
330
371
  ## Qualified visual-execution scope
331
372
 
332
- The packaged visual executor remains intentionally narrow:
373
+ Measured report-test execution remains intentionally narrow:
333
374
 
334
375
  ```text
335
376
  robot: UR5e
@@ -340,7 +381,7 @@ runtime: Ubuntu 24.04 + ROS 2 Jazzy + Gazebo Harmonic + MoveIt/Pilz
340
381
 
341
382
  Unsupported customer Twins, unqualified robot profiles, boundary/fault cases outside the qualified scope, ambiguous case mappings, or incomplete lineage fail closed.
342
383
 
343
- Cross-vendor projects such as ABB may still be imported, normalized, structurally evaluated, and reported, but they do not silently enter the UR5e-only physical executor.
384
+ ABB IRB1200 is separately exposed as `SIMULATION_AVAILABLE_EXPERIMENTAL`: Gazebo/MoveIt/RViz preview is available, but it does not silently enter the UR5e measured FAT executor and cannot promote physical evidence.
344
385
 
345
386
  ## Interactive engineering session
346
387
 
@@ -448,12 +489,12 @@ Ubuntu 24.04
448
489
  ROS 2 Jazzy
449
490
  Gazebo Harmonic
450
491
  gz_ros2_control
451
- Universal Robots ROS 2 driver
452
- ur_simulation_gz
453
- MoveIt 2 + Pilz Industrial Motion Planner
492
+ MoveIt 2
454
493
  ```
455
494
 
456
- Preview setup:
495
+ UR5e measured report-test execution additionally uses the Universal Robots ROS 2 driver, `ur_simulation_gz`, and Pilz Industrial Motion Planner.
496
+
497
+ Preview UR5e setup:
457
498
 
458
499
  ```bash
459
500
  devagent-physical setup --profile ur5e-sim --dry-run
@@ -465,12 +506,24 @@ Apply explicitly:
465
506
  devagent-physical setup --profile ur5e-sim --yes
466
507
  ```
467
508
 
468
- Check runtime:
509
+ Check the UR5e runtime:
469
510
 
470
511
  ```bash
471
512
  devagent-physical ros doctor
472
513
  ```
473
514
 
515
+ Check ABB IRB1200 visual runtime prerequisites:
516
+
517
+ ```bash
518
+ devagent robot doctor abb_irb1200
519
+ ```
520
+
521
+ Launch ABB IRB1200 Gazebo + MoveIt + RViz preview:
522
+
523
+ ```bash
524
+ devagent robot visualize abb_irb1200
525
+ ```
526
+
474
527
  Hosted CI validates deterministic software contracts. It does not pretend to execute a graphical ROS/Gazebo/MoveIt target stack. Target-stack acceptance must run on the intended workstation.
475
528
 
476
529
  ## Optional AI providers
@@ -497,7 +550,7 @@ Provider-backed interpretation cannot grant physical truth, site qualification,
497
550
  ## Installed CLIs
498
551
 
499
552
  ```text
500
- devagent one-command customer verification + interactive report testing
553
+ devagent one-command verification, interactive report testing, robot support/visualization
501
554
  devagent-commercial commercial/evidence workflow
502
555
  devagent-physical deterministic core + ROS/qualification tools
503
556
  devagent-physical-ai optional provider-backed engineering front end
@@ -515,9 +568,9 @@ devagent-physical-ai optional provider-backed engineering front end
515
568
 
516
569
  # Project status
517
570
 
518
- **v1.7.2 — Production/Stable software workflow**
571
+ **v1.8.1 — Production/Stable software workflow**
519
572
 
520
- v1.7.2 retains the v1.7 industrial Pilz PTP/LIN execution architecture and v1.7.1 bounded adaptive-blend fallback. If transfer/place still fails at zero blend, v1.7.2 now proves the transfer PTP and place LIN segments independently and records a deterministic diagnostic result while keeping execution blocked. It also retains the cross-vendor profile gate so non-UR5e customer Twins cannot enter the UR5e-only qualified visual executor.
573
+ v1.8.1 retains the v1.8.0 truthful robot support tiers and ABB IRB1200 experimental visual runtime, while fixing the UR5e target-stack readiness gate so it directly binds the active controller manager trajectory controller and exact `FollowJointTrajectory` server instead of depending on ROS CLI graph discovery or an unscaled-controller naming assumption.
521
574
 
522
575
  Production-oriented software capabilities include:
523
576
 
@@ -529,7 +582,10 @@ optional provider-backed advisory criterion proposals
529
582
  requirement-driven nominal / boundary / fault case generation
530
583
  immutable project/Twin lineage
531
584
  exact Requirement → Mapping → Verification Plan → Case provenance
532
- qualified report-test visual execution contract
585
+ truthful robot support tiers
586
+ qualified UR5e report-test visual execution contract
587
+ direct UR5e controller-manager/action readiness binding
588
+ experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
533
589
  industrial Pilz PTP / LIN planning
534
590
  adaptive bounded blend selection
535
591
  plan-only transfer/place segment diagnostics
@@ -35,7 +35,7 @@ regression + FAT report + Evidence Viewer
35
35
  Python 3.11+ is required.
36
36
 
37
37
  ```bash
38
- python -m pip install --upgrade devagent-physical-engine==1.7.2
38
+ python -m pip install --upgrade devagent-physical-engine==1.8.1
39
39
  ```
40
40
 
41
41
  Verify the installed package:
@@ -47,7 +47,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
47
47
  Expected:
48
48
 
49
49
  ```text
50
- 1.7.2
50
+ 1.8.1
51
51
  ```
52
52
 
53
53
  Run the normal customer workflow:
@@ -74,6 +74,19 @@ For machine-readable CI output:
74
74
  devagent verify ./customer-project --json
75
75
  ```
76
76
 
77
+ Inspect truthful robot support tiers:
78
+
79
+ ```bash
80
+ devagent robots
81
+ ```
82
+
83
+ For the exact ABB IRB1200 experimental visual runtime:
84
+
85
+ ```bash
86
+ devagent robot doctor abb_irb1200
87
+ devagent robot visualize abb_irb1200
88
+ ```
89
+
77
90
  Default locations:
78
91
 
79
92
  ```text
@@ -286,9 +299,37 @@ pilz_transfer_place_sequence_composition_failed
286
299
 
287
300
  Each probe writes its own request/receipt plus a `transfer-place-diagnostic.json` summary. These probes never execute motion and never relax targets, planner types, collision policy, attached-workpiece scene state, velocity/acceleration limits, Twin lineage, or real-execution authority. Their purpose is to identify the exact target-stack defect before changing physical execution semantics.
288
301
 
302
+ ## v1.8 truthful robot support + ABB IRB1200 visual runtime
303
+
304
+ v1.8 makes robot support explicit instead of implying that every built-in robot profile has the same simulator authority.
305
+
306
+ Support is exposed through:
307
+
308
+ ```bash
309
+ devagent robots
310
+ devagent robot doctor <robot>
311
+ devagent robot visualize <robot>
312
+ ```
313
+
314
+ The exact `abb_irb1200` profile adds an experimental visual runtime using Ubuntu 24.04, ROS 2 Jazzy, Gazebo Harmonic, `gz_ros2_control`, upstream ABB IRB1200 geometry, MoveIt, and RViz. Runtime readiness is bounded on controller state, `/joint_states`, FollowJointTrajectory, `move_group`, and RViz availability.
315
+
316
+ For the Golden ABB cell, DevAgent can load the waypoint seed, pre-plan every phase through MoveIt before sending any simulated trajectory, then execute the preview while Gazebo/RViz remain open for inspection.
317
+
318
+ This is intentionally **visual simulation availability**, not measured FAT qualification. ABB preview evidence is not promoted to a qualified physical measurement, and `real_execution_allowed` remains false. The normal One-Command ABB FAT path continues to fail closed until an exact-Twin measured ABB execution adapter is separately qualified.
319
+
320
+ Generic `abb_irb`, FANUC CRX, and KUKA KR profiles remain model-only until equivalent vendor/model visual runtimes are implemented and qualified.
321
+
322
+ ## v1.8.1 direct UR5e controller/action readiness hotfix
323
+
324
+ A real UR5e target-stack run proved that Gazebo, `gz_ros2_control`, the controller manager, joint-state broadcaster, and `scaled_joint_trajectory_controller` could all initialize successfully while DevAgent remained stuck in startup readiness until the 120-second timeout. The old UR5e readiness gate depended on ROS CLI graph commands and expected the unscaled `/joint_trajectory_controller/follow_joint_trajectory` action even when the active controller was the scaled UR controller.
325
+
326
+ v1.8.1 makes UR5e readiness and trajectory execution use one controller-binding contract. A short-lived direct `rclpy` probe calls `/controller_manager/list_controllers`, deterministically selects the active trajectory controller, verifies its exact `FollowJointTrajectory` action server, and returns the bound action name. Required UR5e joint-state readiness continues to use the direct machine joint-state probe.
327
+
328
+ The readiness gate therefore no longer depends on a long-lived `ros2 daemon`, `ros2 node list`, `ros2 topic list`, or `ros2 action list`. It remains fail-closed on missing controller-manager service, no active trajectory controller, ambiguous active controllers, a missing trajectory action server, or missing required UR5e joint state. No collision rule, Pilz target, motion speed, Twin lineage, site-qualification boundary, or real-execution authority is relaxed.
329
+
289
330
  ## Qualified visual-execution scope
290
331
 
291
- The packaged visual executor remains intentionally narrow:
332
+ Measured report-test execution remains intentionally narrow:
292
333
 
293
334
  ```text
294
335
  robot: UR5e
@@ -299,7 +340,7 @@ runtime: Ubuntu 24.04 + ROS 2 Jazzy + Gazebo Harmonic + MoveIt/Pilz
299
340
 
300
341
  Unsupported customer Twins, unqualified robot profiles, boundary/fault cases outside the qualified scope, ambiguous case mappings, or incomplete lineage fail closed.
301
342
 
302
- Cross-vendor projects such as ABB may still be imported, normalized, structurally evaluated, and reported, but they do not silently enter the UR5e-only physical executor.
343
+ ABB IRB1200 is separately exposed as `SIMULATION_AVAILABLE_EXPERIMENTAL`: Gazebo/MoveIt/RViz preview is available, but it does not silently enter the UR5e measured FAT executor and cannot promote physical evidence.
303
344
 
304
345
  ## Interactive engineering session
305
346
 
@@ -407,12 +448,12 @@ Ubuntu 24.04
407
448
  ROS 2 Jazzy
408
449
  Gazebo Harmonic
409
450
  gz_ros2_control
410
- Universal Robots ROS 2 driver
411
- ur_simulation_gz
412
- MoveIt 2 + Pilz Industrial Motion Planner
451
+ MoveIt 2
413
452
  ```
414
453
 
415
- Preview setup:
454
+ UR5e measured report-test execution additionally uses the Universal Robots ROS 2 driver, `ur_simulation_gz`, and Pilz Industrial Motion Planner.
455
+
456
+ Preview UR5e setup:
416
457
 
417
458
  ```bash
418
459
  devagent-physical setup --profile ur5e-sim --dry-run
@@ -424,12 +465,24 @@ Apply explicitly:
424
465
  devagent-physical setup --profile ur5e-sim --yes
425
466
  ```
426
467
 
427
- Check runtime:
468
+ Check the UR5e runtime:
428
469
 
429
470
  ```bash
430
471
  devagent-physical ros doctor
431
472
  ```
432
473
 
474
+ Check ABB IRB1200 visual runtime prerequisites:
475
+
476
+ ```bash
477
+ devagent robot doctor abb_irb1200
478
+ ```
479
+
480
+ Launch ABB IRB1200 Gazebo + MoveIt + RViz preview:
481
+
482
+ ```bash
483
+ devagent robot visualize abb_irb1200
484
+ ```
485
+
433
486
  Hosted CI validates deterministic software contracts. It does not pretend to execute a graphical ROS/Gazebo/MoveIt target stack. Target-stack acceptance must run on the intended workstation.
434
487
 
435
488
  ## Optional AI providers
@@ -456,7 +509,7 @@ Provider-backed interpretation cannot grant physical truth, site qualification,
456
509
  ## Installed CLIs
457
510
 
458
511
  ```text
459
- devagent one-command customer verification + interactive report testing
512
+ devagent one-command verification, interactive report testing, robot support/visualization
460
513
  devagent-commercial commercial/evidence workflow
461
514
  devagent-physical deterministic core + ROS/qualification tools
462
515
  devagent-physical-ai optional provider-backed engineering front end
@@ -474,9 +527,9 @@ devagent-physical-ai optional provider-backed engineering front end
474
527
 
475
528
  # Project status
476
529
 
477
- **v1.7.2 — Production/Stable software workflow**
530
+ **v1.8.1 — Production/Stable software workflow**
478
531
 
479
- v1.7.2 retains the v1.7 industrial Pilz PTP/LIN execution architecture and v1.7.1 bounded adaptive-blend fallback. If transfer/place still fails at zero blend, v1.7.2 now proves the transfer PTP and place LIN segments independently and records a deterministic diagnostic result while keeping execution blocked. It also retains the cross-vendor profile gate so non-UR5e customer Twins cannot enter the UR5e-only qualified visual executor.
532
+ v1.8.1 retains the v1.8.0 truthful robot support tiers and ABB IRB1200 experimental visual runtime, while fixing the UR5e target-stack readiness gate so it directly binds the active controller manager trajectory controller and exact `FollowJointTrajectory` server instead of depending on ROS CLI graph discovery or an unscaled-controller naming assumption.
480
533
 
481
534
  Production-oriented software capabilities include:
482
535
 
@@ -488,7 +541,10 @@ optional provider-backed advisory criterion proposals
488
541
  requirement-driven nominal / boundary / fault case generation
489
542
  immutable project/Twin lineage
490
543
  exact Requirement → Mapping → Verification Plan → Case provenance
491
- qualified report-test visual execution contract
544
+ truthful robot support tiers
545
+ qualified UR5e report-test visual execution contract
546
+ direct UR5e controller-manager/action readiness binding
547
+ experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
492
548
  industrial Pilz PTP / LIN planning
493
549
  adaptive bounded blend selection
494
550
  plan-only transfer/place segment diagnostics
@@ -540,4 +596,4 @@ Original creator: Tom Ha
540
596
  Original project: https://github.com/tomha85/devagent-physical-engine
541
597
  All rights reserved.
542
598
 
543
- See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
599
+ See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devagent-physical-engine"
7
- version = "1.7.2"
8
- description = "Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, adaptive industrial Pilz PTP/LIN report-test Gazebo execution, transfer/place segment diagnostics, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence."
7
+ version = "1.8.1"
8
+ description = "Production-grade verification-first robotics evidence runtime with one-command customer intake, truthful robot support tiers, qualified UR5e report-test Gazebo execution, direct ROS controller/action readiness, experimental ABB IRB1200 Gazebo/MoveIt/RViz visualization, transfer/place diagnostics, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence."
9
9
  readme = { file = "README.md", content-type = "text/markdown" }
10
10
  requires-python = ">=3.11"
11
11
  dependencies = ["PyYAML>=6.0,<7"]
@@ -47,7 +47,7 @@ Repository = "https://github.com/tomha85/devagent-physical-engine"
47
47
  Issues = "https://github.com/tomha85/devagent-physical-engine/issues"
48
48
 
49
49
  [project.scripts]
50
- devagent = "devagent_physical_engine.user_cli_v16:main"
50
+ devagent = "devagent_physical_engine.user_cli_v18:main"
51
51
  devagent-physical = "devagent_physical_engine.cli:main"
52
52
  devagent-physical-ai = "devagent_physical_engine.ai_cli:main"
53
53
  devagent-commercial = "devagent_physical_engine.commercial_cli:main"
@@ -81,6 +81,8 @@ omit = [
81
81
  "src/devagent_physical_engine/ros2/gazebo_pose.py",
82
82
  "src/devagent_physical_engine/ros2/workpiece_follow.py",
83
83
  "src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py",
84
+ "src/devagent_physical_engine/ros2/abb_irb1200.py",
85
+ "src/devagent_physical_engine/ros2/abb_irb1200_preview.py",
84
86
  ]
85
87
 
86
88
  [tool.coverage.report]
@@ -26,6 +26,7 @@ from .commercial_intelligence import (
26
26
  )
27
27
  from .commercial_readiness import CommercialProjectStatus, FATReportBuilder
28
28
  from .commercial_repository import CommercialProjectRepository
29
+ from .controller_runtime_hotfix_v181 import install_controller_runtime_hotfix_v181
29
30
  from .evidence_replay import ReplayInspectionService
30
31
  from .evidence_trust import (
31
32
  EVIDENCE_TRUST_SCHEMA_VERSION,
@@ -215,6 +216,7 @@ __all__ = [
215
216
  install_support_contact_hotfix_v161()
216
217
  install_smooth_motion_hotfix_v162()
217
218
  install_industrial_motion_v170()
219
+ install_controller_runtime_hotfix_v181()
218
220
  install_one_command_runtime()
219
221
 
220
- __version__ = "1.7.2"
222
+ __version__ = "1.8.1"
@@ -0,0 +1,93 @@
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ from pathlib import Path
5
+ from typing import Mapping
6
+
7
+ from .ros2 import trajectory as _trajectory
8
+ from .ros2.commands import CommandExecutionError, RosCommandRunner
9
+ from .ros2.trajectory import RosTrajectoryError
10
+ from .ros2.ur5e_adapter import UR5E_JOINTS, UR5eGazeboAdapter
11
+
12
+
13
+ _DEFAULT_TRAJECTORY_ACTION = "/joint_trajectory_controller/follow_joint_trajectory"
14
+
15
+
16
+ def _last_json_mapping(stdout: str, *, code: str) -> Mapping[str, object]:
17
+ lines = [line.strip() for line in stdout.splitlines() if line.strip()]
18
+ if not lines:
19
+ raise RosTrajectoryError(code)
20
+ try:
21
+ payload = json.loads(lines[-1])
22
+ except json.JSONDecodeError as exc:
23
+ raise RosTrajectoryError(code) from exc
24
+ if not isinstance(payload, Mapping):
25
+ raise RosTrajectoryError(code)
26
+ return payload
27
+
28
+
29
+ def resolve_active_trajectory_action_v181(
30
+ runner: RosCommandRunner,
31
+ *,
32
+ preferred_action: str = _DEFAULT_TRAJECTORY_ACTION,
33
+ ) -> str:
34
+ if not preferred_action.startswith("/") or any(
35
+ character.isspace() for character in preferred_action
36
+ ):
37
+ raise RosTrajectoryError("trajectory_action_must_be_absolute")
38
+
39
+ service_timeout = 3.0
40
+ action_timeout = 3.0
41
+ helper = Path(_trajectory.__file__).with_name("controller_action_probe.py").resolve()
42
+ command = (
43
+ "python3",
44
+ str(helper),
45
+ "--preferred-action",
46
+ preferred_action,
47
+ "--service-timeout",
48
+ format(service_timeout, ".6g"),
49
+ "--action-timeout",
50
+ format(action_timeout, ".6g"),
51
+ )
52
+ try:
53
+ result = runner.run(
54
+ command,
55
+ timeout_s=service_timeout * 2.0 + action_timeout + 4.0,
56
+ )
57
+ except CommandExecutionError as exc:
58
+ raise RosTrajectoryError("trajectory_controller_discovery_timeout") from exc
59
+
60
+ payload = _last_json_mapping(
61
+ result.stdout,
62
+ code="trajectory_controller_probe_output_invalid",
63
+ )
64
+ code = str(payload.get("code") or "trajectory_controller_probe_failed")
65
+ if payload.get("success") is not True:
66
+ raise RosTrajectoryError(code)
67
+ if not result.ok:
68
+ raise RosTrajectoryError("trajectory_controller_probe_exit_nonzero")
69
+
70
+ action_name = str(payload.get("action_name") or "").strip()
71
+ if not action_name.startswith("/") or not action_name.endswith(
72
+ "/follow_joint_trajectory"
73
+ ):
74
+ raise RosTrajectoryError("trajectory_controller_probe_output_invalid")
75
+ return action_name
76
+
77
+
78
+ def ur5e_ready_probe_v181(self: UR5eGazeboAdapter) -> tuple[bool, str]:
79
+ try:
80
+ action_name = resolve_active_trajectory_action_v181(self.runner)
81
+ _trajectory.read_joint_state(
82
+ self.runner,
83
+ timeout_s=4.0,
84
+ required_joint_names=UR5E_JOINTS,
85
+ )
86
+ except RosTrajectoryError as exc:
87
+ return False, str(exc)
88
+ return True, f"controller/action/joint-state ready:{action_name}"
89
+
90
+
91
+ def install_controller_runtime_hotfix_v181() -> None:
92
+ _trajectory.resolve_active_trajectory_action = resolve_active_trajectory_action_v181
93
+ UR5eGazeboAdapter._ready_probe = ur5e_ready_probe_v181
@@ -13,6 +13,10 @@ from .commercial_repository import CommercialProjectRepository
13
13
  from .one_command_v15 import OneCommandVerifier as OneCommandVerifierV15
14
14
  from .one_command_v15 import SimpleVerifyResult
15
15
  from .report_test_execution_strict import ReportTestFullExecutor
16
+ from .robot_support_v18 import ensure_v18_robot_profiles
17
+
18
+
19
+ ensure_v18_robot_profiles()
16
20
 
17
21
 
18
22
  class ProfileGatedReportTestFullExecutor(ReportTestFullExecutor):
@@ -23,6 +27,10 @@ class ProfileGatedReportTestFullExecutor(ReportTestFullExecutor):
23
27
  entering UR5e-specific request materialization so that One-Command can continue
24
28
  producing bounded campaign/FAT evidence instead of surfacing an executor
25
29
  traceback.
30
+
31
+ Exact profiles may expose an experimental visual runtime (for example ABB
32
+ IRB1200) while remaining blocked here until that runtime passes measured FAT
33
+ qualification. Availability is deliberately not treated as evidence authority.
26
34
  """
27
35
 
28
36
  def execute(
@@ -9,6 +9,17 @@ from .robots import CATALOG
9
9
  from .simulation import DeterministicSimulationBackend
10
10
 
11
11
 
12
+ # This is the original v1 cross-vendor *family* corpus. Exact model profiles added
13
+ # later (for example abb_irb1200) must not silently change the historical smoke
14
+ # baseline or turn a family-level qualification into a count of registry entries.
15
+ V1_ROBOT_FAMILIES = (
16
+ "ur5e",
17
+ "fanuc_crx",
18
+ "kuka_kr",
19
+ "abb_irb",
20
+ )
21
+
22
+
12
23
  @dataclass(frozen=True, slots=True)
13
24
  class QualificationCaseResult:
14
25
  robot: str
@@ -35,10 +46,24 @@ def run_cross_vendor_smoke() -> QualificationSummary:
35
46
  supervisor = ExecutionSupervisor()
36
47
  goal = Goal("G1", "load", "P17", "conveyor_a", "cnc_04")
37
48
  results: list[QualificationCaseResult] = []
38
- for robot_name, factory in CATALOG.items():
49
+ for robot_name in V1_ROBOT_FAMILIES:
50
+ factory = CATALOG[robot_name]
39
51
  resource = factory()
40
52
  graph = planner.plan(goal, [resource])
41
53
  world = WorldState(facts={"robot_ready", "object_available"})
42
- report = supervisor.execute(graph, [resource], world, DeterministicSimulationBackend(), ExecutionMode.SIMULATION)
43
- results.append(QualificationCaseResult(robot_name, report.completed, len(report.executed_tasks), len(report.issues)))
54
+ report = supervisor.execute(
55
+ graph,
56
+ [resource],
57
+ world,
58
+ DeterministicSimulationBackend(),
59
+ ExecutionMode.SIMULATION,
60
+ )
61
+ results.append(
62
+ QualificationCaseResult(
63
+ robot_name,
64
+ report.completed,
65
+ len(report.executed_tasks),
66
+ len(report.issues),
67
+ )
68
+ )
44
69
  return QualificationSummary(tuple(results))
@@ -0,0 +1,97 @@
1
+ from __future__ import annotations
2
+
3
+ from .robot_platform import (
4
+ ARM_CAPABILITIES,
5
+ BUILTIN_ROBOT_PROFILES,
6
+ QualificationState,
7
+ RobotProfile,
8
+ RobotQualification,
9
+ RosIntegration,
10
+ SimulationTier,
11
+ )
12
+
13
+ ABB_IRB1200_PROFILE_KEY = "abb_irb1200"
14
+
15
+
16
+ def _abb_irb1200_profile() -> RobotProfile:
17
+ """Exact ABB IRB 1200-5/0.9 profile.
18
+
19
+ The visual/physics runtime remains EXPERIMENTAL until target-workstation
20
+ acceptance proves the exact Gazebo/MoveIt integration. This makes the runtime
21
+ available without prematurely upgrading FAT evidence authority.
22
+ """
23
+
24
+ return RobotProfile(
25
+ key=ABB_IRB1200_PROFILE_KEY,
26
+ vendor="abb",
27
+ model="irb1200_5_90",
28
+ capabilities=ARM_CAPABILITIES,
29
+ qualification=RobotQualification(
30
+ {
31
+ SimulationTier.DETERMINISTIC: QualificationState.QUALIFIED,
32
+ SimulationTier.KINEMATIC: QualificationState.EXPERIMENTAL,
33
+ SimulationTier.PHYSICS: QualificationState.EXPERIMENTAL,
34
+ SimulationTier.VISUAL: QualificationState.EXPERIMENTAL,
35
+ }
36
+ ),
37
+ ros=RosIntegration(
38
+ ros2_compatible=True,
39
+ joint_state_interface="/joint_states",
40
+ trajectory_interface="joint_trajectory_controller/follow_joint_trajectory",
41
+ robot_description="abb_irb1200_support",
42
+ moveit_config="abb_irb1200_5_90_moveit_config",
43
+ hardware_driver="abb_ros2",
44
+ ),
45
+ aliases=(
46
+ "abb irb1200",
47
+ "abb irb 1200",
48
+ "abb irb 1200-5/0.9",
49
+ "abb irb1200-5/0.9",
50
+ "irb1200",
51
+ "irb1200 5 90",
52
+ ),
53
+ legacy_qualification="experimental",
54
+ notes=(
55
+ "Exact ABB IRB 1200-5/0.9 ROS2 profile.",
56
+ "Gazebo Harmonic + gz_ros2_control + MoveIt/RViz runtime is available "
57
+ "as an experimental visual path until laptop acceptance is recorded.",
58
+ "Visual preview motion is not FAT measurement evidence and real execution "
59
+ "remains locked.",
60
+ ),
61
+ )
62
+
63
+
64
+ def ensure_v18_robot_profiles() -> None:
65
+ """Idempotently extend the built-in registry with exact v1.8 profiles."""
66
+
67
+ try:
68
+ BUILTIN_ROBOT_PROFILES.get(ABB_IRB1200_PROFILE_KEY)
69
+ except Exception:
70
+ BUILTIN_ROBOT_PROFILES.register(_abb_irb1200_profile())
71
+
72
+
73
+ def robot_support_level(profile: RobotProfile) -> str:
74
+ """Return a user-facing support label that never overstates qualification."""
75
+
76
+ physics = profile.qualification.state_for(SimulationTier.PHYSICS)
77
+ visual = profile.qualification.state_for(SimulationTier.VISUAL)
78
+ kinematic = profile.qualification.state_for(SimulationTier.KINEMATIC)
79
+
80
+ if physics is QualificationState.QUALIFIED and visual is QualificationState.QUALIFIED:
81
+ return "SIMULATION_SUPPORTED"
82
+ if physics is QualificationState.EXPERIMENTAL and visual is QualificationState.EXPERIMENTAL:
83
+ return "SIMULATION_AVAILABLE_EXPERIMENTAL"
84
+ if visual is QualificationState.QUALIFIED or kinematic is QualificationState.QUALIFIED:
85
+ return "VISUAL_SUPPORTED"
86
+ if visual is QualificationState.EXPERIMENTAL or kinematic is QualificationState.EXPERIMENTAL:
87
+ return "VISUAL_AVAILABLE_EXPERIMENTAL"
88
+ return "MODEL_ONLY"
89
+
90
+
91
+ ensure_v18_robot_profiles()
92
+
93
+ __all__ = [
94
+ "ABB_IRB1200_PROFILE_KEY",
95
+ "ensure_v18_robot_profiles",
96
+ "robot_support_level",
97
+ ]
@@ -9,8 +9,10 @@ from .robot_platform import (
9
9
  RobotPlatformError,
10
10
  RobotProfileRegistry,
11
11
  )
12
+ from .robot_support_v18 import ensure_v18_robot_profiles
12
13
 
13
14
 
15
+ ensure_v18_robot_profiles()
14
16
  PROFILE_REGISTRY: RobotProfileRegistry = BUILTIN_ROBOT_PROFILES
15
17
 
16
18
 
@@ -34,6 +36,10 @@ def abb_irb(resource_id: str = "robot_01") -> Resource:
34
36
  return _resource("abb_irb", resource_id)
35
37
 
36
38
 
39
+ def abb_irb1200(resource_id: str = "robot_01") -> Resource:
40
+ return _resource("abb_irb1200", resource_id)
41
+
42
+
37
43
  class _RegistryBackedCatalog(Mapping[str, Callable[..., Resource]]):
38
44
  """Compatibility view for older core code that expects CATALOG[key]().
39
45