devagent-physical-engine 2.0.0__tar.gz → 2.1.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 (354) hide show
  1. {devagent_physical_engine-2.0.0/src/devagent_physical_engine.egg-info → devagent_physical_engine-2.1.1}/PKG-INFO +17 -10
  2. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/README.md +16 -9
  3. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/pyproject.toml +7 -2
  4. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/__init__.py +1 -1
  5. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/controller_runtime_hotfix_v181.py +19 -0
  6. devagent_physical_engine-2.1.1/src/devagent_physical_engine/robot_exercise_cli.py +167 -0
  7. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/robot_platform.py +20 -0
  8. devagent_physical_engine-2.1.1/src/devagent_physical_engine/robot_qualification_acceptance.py +341 -0
  9. devagent_physical_engine-2.1.1/src/devagent_physical_engine/robot_qualification_acceptance_cli.py +71 -0
  10. devagent_physical_engine-2.1.1/src/devagent_physical_engine/robot_qualification_cli.py +219 -0
  11. devagent_physical_engine-2.1.1/src/devagent_physical_engine/robot_qualification_report_store.py +49 -0
  12. devagent_physical_engine-2.1.1/src/devagent_physical_engine/robot_simulation_promotion_v211.py +26 -0
  13. devagent_physical_engine-2.1.1/src/devagent_physical_engine/robot_support_contract.py +322 -0
  14. devagent_physical_engine-2.1.1/src/devagent_physical_engine/robot_support_industrial_v2.py +137 -0
  15. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/robot_support_v18.py +18 -14
  16. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/robots.py +10 -0
  17. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/abb_irb1200.py +108 -6
  18. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/abb_irb1200_verified.py +434 -0
  19. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/abb_runtime_probe.py +195 -0
  20. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/commands.py +125 -19
  21. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/direct_controller_discovery_runner.py +85 -0
  22. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/doctor.py +44 -1
  23. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/fanuc_crx10ia.py +211 -0
  24. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/fanuc_crx10ia_physics.py +515 -0
  25. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/gazebo_overlay_support.py +315 -0
  26. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/industrial_arm_runtime_gate.py +161 -0
  27. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/industrial_arm_runtime_probe.py +324 -0
  28. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/industrial_arm_task_adapters.py +291 -0
  29. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/industrial_arm_task_runtime.py +699 -0
  30. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/kuka_kr6_r900_2.py +239 -0
  31. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/kuka_kr6_r900_2_verified.py +632 -0
  32. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/qualification_multivendor.py +588 -0
  33. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/qualification_provenance.py +333 -0
  34. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/robot_description_probe.py +115 -0
  35. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/ros_python_runtime.py +100 -0
  36. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/runtime_quiescence.py +118 -0
  37. devagent_physical_engine-2.1.1/src/devagent_physical_engine/ros2/runtime_quiescence_probe.py +145 -0
  38. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +29 -6
  39. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/user_cli_v18.py +145 -16
  40. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/user_cli_v191.py +13 -1
  41. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1/src/devagent_physical_engine.egg-info}/PKG-INFO +17 -10
  42. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine.egg-info/SOURCES.txt +45 -0
  43. devagent_physical_engine-2.1.1/tests/test_abb_clock_provenance_v2.py +16 -0
  44. devagent_physical_engine-2.1.1/tests/test_abb_gazebo_resource_path_v2.py +140 -0
  45. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_abb_irb1200_visual_v18.py +5 -5
  46. devagent_physical_engine-2.1.1/tests/test_abb_robot_description_bootstrap_v2.py +218 -0
  47. devagent_physical_engine-2.1.1/tests/test_abb_robot_description_payload_gate_v2.py +106 -0
  48. devagent_physical_engine-2.1.1/tests/test_abb_runtime_direct_probe_v2.py +126 -0
  49. devagent_physical_engine-2.1.1/tests/test_abb_sim_clock_v2.py +92 -0
  50. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_controller_runtime_hotfix_v181.py +28 -0
  51. devagent_physical_engine-2.1.1/tests/test_fanuc_physics_tolerance_v2.py +82 -0
  52. devagent_physical_engine-2.1.1/tests/test_industrial_arm_functional_parity_v192.py +326 -0
  53. devagent_physical_engine-2.1.1/tests/test_industrial_arm_replay_authority_v192.py +115 -0
  54. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_industrial_motion_v170.py +3 -3
  55. devagent_physical_engine-2.1.1/tests/test_industrial_robot_simulation_v2.py +415 -0
  56. devagent_physical_engine-2.1.1/tests/test_kuka_verified_runtime_v2.py +362 -0
  57. devagent_physical_engine-2.1.1/tests/test_multivendor_runtime_hardening_v2.py +319 -0
  58. devagent_physical_engine-2.1.1/tests/test_multivendor_sim_promotion_v211.py +46 -0
  59. devagent_physical_engine-2.1.1/tests/test_multivendor_sim_qualification_v2.py +428 -0
  60. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_package_metadata_v184.py +2 -2
  61. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_robot_platform_v08.py +77 -23
  62. devagent_physical_engine-2.1.1/tests/test_robot_qualification_acceptance_v2.py +234 -0
  63. devagent_physical_engine-2.1.1/tests/test_robot_qualification_review_fixes_v2.py +179 -0
  64. devagent_physical_engine-2.1.1/tests/test_robot_support_contract_v2.py +134 -0
  65. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_ros2_simulation.py +39 -0
  66. devagent_physical_engine-2.1.1/tests/test_ros_process_group_cleanup_v2.py +130 -0
  67. devagent_physical_engine-2.1.1/tests/test_runtime_quiescence_v2.py +134 -0
  68. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_trajectory_action_probe_v0125.py +27 -0
  69. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_transfer_place_diagnostic_v172.py +3 -3
  70. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/NOTICE +0 -0
  71. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/setup.cfg +0 -0
  72. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/__init__.py +0 -0
  73. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/compiler.py +0 -0
  74. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/contracts.py +0 -0
  75. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/coordinator.py +0 -0
  76. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/critic.py +0 -0
  77. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/evidence.py +0 -0
  78. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  79. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/planner.py +0 -0
  80. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/recovery.py +0 -0
  81. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/routing.py +0 -0
  82. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/runtime.py +0 -0
  83. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/semantic.py +0 -0
  84. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/structured.py +0 -0
  85. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ai_cli.py +0 -0
  86. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/cli.py +0 -0
  87. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commercial.py +0 -0
  88. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commercial_campaign.py +0 -0
  89. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commercial_cli.py +0 -0
  90. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commercial_importer.py +0 -0
  91. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
  92. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commercial_readiness.py +0 -0
  93. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commercial_repository.py +0 -0
  94. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commissioning_evidence.py +0 -0
  95. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commissioning_readiness.py +0 -0
  96. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/continuous_clearance.py +0 -0
  97. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/doctor.py +0 -0
  98. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/dynamic_verification_runtime_v190.py +0 -0
  99. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/engineering_agent.py +0 -0
  100. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/engineering_findings.py +0 -0
  101. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/engineering_request.py +0 -0
  102. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/evidence_provider_cli.py +0 -0
  103. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/evidence_provider_gateway.py +0 -0
  104. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/evidence_provider_policy.py +0 -0
  105. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/evidence_replay.py +0 -0
  106. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/evidence_trust.py +0 -0
  107. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/execution.py +0 -0
  108. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +0 -0
  109. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/industrial_motion_v170.py +0 -0
  110. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/industrial_motion_v182.py +0 -0
  111. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/models.py +0 -0
  112. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/one_command.py +0 -0
  113. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/one_command_runtime.py +0 -0
  114. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/one_command_v15.py +0 -0
  115. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/one_command_v16.py +0 -0
  116. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/operating_envelope.py +0 -0
  117. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  118. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  119. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  120. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  121. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  122. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  123. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/experience.py +0 -0
  124. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/measured.py +0 -0
  125. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  126. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  127. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/physical_campaign.py +0 -0
  128. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/physical_evidence.py +0 -0
  129. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/physical_evidence_v190.py +0 -0
  130. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/physical_motion.py +0 -0
  131. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/planning.py +0 -0
  132. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/pose_math.py +0 -0
  133. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/preexecution_contract.py +0 -0
  134. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/production_authority.py +0 -0
  135. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/production_grade.py +0 -0
  136. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/project.py +0 -0
  137. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  138. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  139. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  140. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  141. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  142. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
  143. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/provider_criterion.py +0 -0
  144. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/provider_qualification.py +0 -0
  145. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/providers.py +0 -0
  146. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/qualification.py +0 -0
  147. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/qualification_cli.py +0 -0
  148. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/qualification_harness.py +0 -0
  149. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/reference_workcell.py +0 -0
  150. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/report_requirements_v190.py +0 -0
  151. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/report_test_execution.py +0 -0
  152. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
  153. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/__init__.py +0 -0
  154. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/abb_irb1200_preview.py +0 -0
  155. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  156. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
  157. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/controller_action_probe.py +0 -0
  158. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/destination_support_contact_v182.py +0 -0
  159. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
  160. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
  161. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  162. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
  163. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
  164. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  165. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +0 -0
  166. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py +0 -0
  167. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py +0 -0
  168. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v182.py +0 -0
  169. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
  170. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
  171. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  172. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
  173. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
  174. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  175. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
  176. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +0 -0
  177. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe_v182.py +0 -0
  178. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
  179. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  180. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  181. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
  182. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
  183. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
  184. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +0 -0
  185. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/ros_gz_pose_service_probe.py +0 -0
  186. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  187. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
  188. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +0 -0
  189. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/support_contact_acm_semantics_v189.py +0 -0
  190. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +0 -0
  191. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
  192. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
  193. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
  194. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/task_adapter_v190.py +0 -0
  195. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/task_motion_diagnostics_v190.py +0 -0
  196. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
  197. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  198. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
  199. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
  200. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
  201. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/trajectory_feedback_tracking_v189.py +0 -0
  202. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/trajectory_runtime_v190.py +0 -0
  203. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
  204. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  205. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  206. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
  207. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_carrier_v190.py +0 -0
  208. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_entity_replace_probe_v190.py +0 -0
  209. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
  210. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
  211. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
  212. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
  213. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py +0 -0
  214. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v187.py +0 -0
  215. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v188.py +0 -0
  216. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v189.py +0 -0
  217. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_transport.py +0 -0
  218. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/selective_verification.py +0 -0
  219. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
  220. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/selective_verification_v190.py +0 -0
  221. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/setup_profile.py +0 -0
  222. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
  223. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/simulation.py +0 -0
  224. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/simulation_platform.py +0 -0
  225. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
  226. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
  227. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/tool_collision.py +0 -0
  228. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  229. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/twin.py +0 -0
  230. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/twin_builder.py +0 -0
  231. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/twin_codec.py +0 -0
  232. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/twin_materialization.py +0 -0
  233. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/user_cli.py +0 -0
  234. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/user_cli_v15.py +0 -0
  235. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/user_cli_v16.py +0 -0
  236. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/verification.py +0 -0
  237. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/verification_capabilities_v190.py +0 -0
  238. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/verification_scope_authority.py +0 -0
  239. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
  240. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  241. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
  242. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
  243. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  244. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_agent_core.py +0 -0
  245. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_agent_semantic_hardening.py +0 -0
  246. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_ai_cli.py +0 -0
  247. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_ai_cli_v07.py +0 -0
  248. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_commercial_importer_v1.py +0 -0
  249. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_commercial_intelligence_v15.py +0 -0
  250. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_commercial_readiness_v1.py +0 -0
  251. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_commercial_v1.py +0 -0
  252. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_commissioning_core_v20.py +0 -0
  253. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_commissioning_evidence_graph_v20.py +0 -0
  254. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_continuous_clearance_v011.py +0 -0
  255. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_controller_failure_diagnostics_v190.py +0 -0
  256. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_core.py +0 -0
  257. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_destination_support_contact_v182.py +0 -0
  258. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_dynamic_report_batch_v190.py +0 -0
  259. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_dynamic_report_contract_end_to_end_v190.py +0 -0
  260. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_dynamic_verification_capabilities_v190.py +0 -0
  261. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_engineering_request_v07.py +0 -0
  262. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_evidence_provider_gateway_v2.py +0 -0
  263. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_evidence_replay_v12.py +0 -0
  264. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_evidence_trust_coverage_v12.py +0 -0
  265. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_evidence_trust_transport_v12.py +0 -0
  266. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_evidence_trust_v12.py +0 -0
  267. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_evidence_viewer_palette_v130.py +0 -0
  268. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_explicit_detach_world_reassert_v189.py +0 -0
  269. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_external_evidence_campaign_authority_v2.py +0 -0
  270. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_fresh_simulation_cli_v191.py +0 -0
  271. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_fresh_simulation_service_v191.py +0 -0
  272. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_gazebo_cli_v0122.py +0 -0
  273. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_golden_abb_runner_v171.py +0 -0
  274. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_golden_abb_showcase.py +0 -0
  275. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_handoff_authority_v190.py +0 -0
  276. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_interpreter_profiles_v08.py +0 -0
  277. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_joint_state_metric_authority_v190.py +0 -0
  278. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_joint_state_probe_v0125.py +0 -0
  279. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_live_provider_qualification.py +0 -0
  280. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_loaded_place_stability_v190.py +0 -0
  281. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_measured_motion_v10.py +0 -0
  282. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_metric_authority_surface_v190.py +0 -0
  283. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_motion_handoff_stability_v190.py +0 -0
  284. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
  285. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_moveit_scene_v0123.py +0 -0
  286. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_natural_language_agent_v07.py +0 -0
  287. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_one_command_hardening_v13.py +0 -0
  288. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_one_command_pose_hardening_v15.py +0 -0
  289. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_one_command_regression_v141.py +0 -0
  290. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_one_command_v13.py +0 -0
  291. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_one_command_v190_injection.py +0 -0
  292. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_openai_strict_schema_v0113.py +0 -0
  293. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_optimization_v05.py +0 -0
  294. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_physical_campaign_v09.py +0 -0
  295. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_physical_evidence_v09.py +0 -0
  296. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_physical_motion_v09.py +0 -0
  297. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_place_preexecution_acm_v189.py +0 -0
  298. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_planning_fallback_v012.py +0 -0
  299. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_pose_math_v0125.py +0 -0
  300. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_preexecution_contract_v10.py +0 -0
  301. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_production_authority_v11.py +0 -0
  302. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_production_external_evidence_v11.py +0 -0
  303. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_production_grade_coverage_v11.py +0 -0
  304. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_production_grade_v11.py +0 -0
  305. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_project_spine_v013.py +0 -0
  306. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_provider_and_qualification.py +0 -0
  307. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_provider_criterion_v15.py +0 -0
  308. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  309. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_qualification_harness_v06.py +0 -0
  310. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_readme_pypi.py +0 -0
  311. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_real_provider_adapters.py +0 -0
  312. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
  313. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_reference_workcell_v012.py +0 -0
  314. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_release_resting_pose_v189.py +0 -0
  315. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_release_transaction_v189.py +0 -0
  316. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_report_orchestration_v190.py +0 -0
  317. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_report_test_contract_coverage_v16.py +0 -0
  318. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_report_test_lineage_v16.py +0 -0
  319. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_report_test_visual_execution_v16.py +0 -0
  320. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_ros2_production_receipts_v011.py +0 -0
  321. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_ros_trajectory_v09.py +0 -0
  322. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_selective_verification_v14.py +0 -0
  323. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_setup_profile.py +0 -0
  324. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_sim_real_qualification_v011.py +0 -0
  325. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_simulation_platform_v08.py +0 -0
  326. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_smooth_motion_hotfix_v162.py +0 -0
  327. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_support_contact_acm_semantics_v189.py +0 -0
  328. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_support_contact_hotfix_v161.py +0 -0
  329. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_tool_collision_v011.py +0 -0
  330. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_tool_scene_v0124.py +0 -0
  331. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_trajectory_action_contract_v189.py +0 -0
  332. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_trajectory_feedback_tracking_v189.py +0 -0
  333. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_trajectory_qualification_v09.py +0 -0
  334. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_trajectory_tracking_v0125.py +0 -0
  335. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_transfer_controller_policy_v189.py +0 -0
  336. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_twin_materialization_v10.py +0 -0
  337. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_twin_v08.py +0 -0
  338. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  339. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  340. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_user_cli_interactive_v131.py +0 -0
  341. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_user_cli_progress_v131.py +0 -0
  342. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_user_cli_report_visual_v16.py +0 -0
  343. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_user_cli_selective_v14.py +0 -0
  344. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_user_cli_v15.py +0 -0
  345. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
  346. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_v052_stabilization.py +0 -0
  347. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_v08_catalog_mapping_regression.py +0 -0
  348. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_verification_scope_authority_v20.py +0 -0
  349. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_workpiece_attach_semantics_v183.py +0 -0
  350. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_workpiece_carrier_v190.py +0 -0
  351. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_workpiece_lifecycle_v011.py +0 -0
  352. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_workpiece_scene_probe_v185.py +0 -0
  353. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_workpiece_semantic_lifecycle_v186.py +0 -0
  354. {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.1}/tests/test_workpiece_transport_v189.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devagent-physical-engine
3
- Version: 2.0.0
3
+ Version: 2.1.1
4
4
  Summary: Verification-first robotics commissioning control plane with immutable engineering findings, deterministic pre-site readiness, evidence authority, exact-Twin lineage, selective simulation, regression, replay, and FAT reporting.
5
5
  Author: Tom Ha
6
6
  License: All Rights Reserved
@@ -81,7 +81,7 @@ DevAgent turns customer engineering inputs into a bounded, evidence-driven pre-s
81
81
 
82
82
  <p align="center"><sub><b>Real engine screenshots — not product renders.</b> ROS 2 Jazzy · Gazebo Harmonic · MoveIt 2 · Pilz · UR5e exact-Twin verification.</sub></p>
83
83
 
84
- ## v2.0 commissioning verification flow
84
+ ## v2.1 commissioning verification flow
85
85
 
86
86
  ```text
87
87
  Customer engineering files
@@ -125,7 +125,7 @@ That decision means the declared pre-site engineering scope has complete, curren
125
125
  Python 3.11+ is required.
126
126
 
127
127
  ```bash
128
- python -m pip install --upgrade devagent-physical-engine==2.0.0
128
+ python -m pip install --upgrade devagent-physical-engine==2.1.1
129
129
  ```
130
130
 
131
131
  Verify the installed package:
@@ -137,7 +137,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
137
137
  Expected:
138
138
 
139
139
  ```text
140
- 2.0.0
140
+ 2.1.1
141
141
  ```
142
142
 
143
143
  Run the normal customer workflow:
@@ -235,7 +235,7 @@ A generated plan is not physical proof. A replay is not a new execution. An AI r
235
235
 
236
236
  ## Engineering findings and risk authority
237
237
 
238
- v2.0 records first-class immutable artifacts for:
238
+ The v2 commissioning line records first-class immutable artifacts for:
239
239
 
240
240
  ```text
241
241
  engineering_finding
@@ -377,14 +377,15 @@ The target-proven UR5e path retains controller-manager/action readiness binding,
377
377
 
378
378
  Unsupported customer Twins, unqualified robot profiles, boundary/fault cases outside the qualified scope, ambiguous case mappings, or incomplete lineage fail closed.
379
379
 
380
- ABB IRB1200 remains a separate experimental visual simulation path. FANUC/KUKA and other robot/vendor paths retain their truthful support tiers until separately qualified.
380
+ Exact ABB IRB1200, FANUC CRX-10iA, and KUKA KR6 R900-2 are `SIMULATION_SUPPORTED` in v2.1.1 after accepted 10× target-workstation qualification and a separate code-reviewed authority promotion. Generic ABB/FANUC/KUKA family profiles remain `MODEL_ONLY`; measured FAT, hardware/site, and real-execution authority remain locked.
381
381
 
382
382
  Inspect robot support:
383
383
 
384
384
  ```bash
385
385
  devagent robots
386
386
  devagent robot doctor abb_irb1200
387
- devagent robot visualize abb_irb1200
387
+ devagent robot doctor fanuc_crx10ia
388
+ devagent robot doctor kuka_kr6_r900_2
388
389
  ```
389
390
 
390
391
  ## Customer input
@@ -520,9 +521,9 @@ devagent-physical-ai optional provider-backed engineering front end
520
521
 
521
522
  # Project status
522
523
 
523
- **v2.0.0 — Production/Stable software workflow; commissioning verification control plane with fail-closed pre-site readiness**
524
+ **v2.1.1 — Production/Stable software workflow; accepted ABB/FANUC/KUKA simulation authority promotion**
524
525
 
525
- v2.0.0 adds immutable engineering findings/dispositions, deterministic verification-scope authority, stronger internal/external evidence authority, commissioning-aware Evidence Graph lineage, whole-project staleness detection, and an immutable pre-site commissioning readiness decision.
526
+ v2.1.1 promotes exact ABB IRB1200, FANUC CRX-10iA, and KUKA KR6 R900-2 kinematic/physics/visual simulation authority from the accepted v2.1 evidence. The promotion is bound to immutable report hashes and does not grant measured FAT, hardware-shadow, sim-real, site, safety, or real-execution authority.
526
527
 
527
528
  Production-oriented software capabilities include:
528
529
 
@@ -553,7 +554,7 @@ immutable READY / NOT_READY pre-site commissioning decision
553
554
  provider-neutral optional AI front end
554
555
  ```
555
556
 
556
- Production/Stable describes the bounded software workflow. The target-proven UR5e claim remains limited to the qualified packaged scope and acceptance environment. v2.0.0 does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, commissioned, or authorized for autonomous real execution.
557
+ Production/Stable describes the bounded software workflow. The target-proven UR5e claim remains limited to the qualified packaged scope and acceptance environment. v2.1.1 does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, commissioned, or authorized for autonomous real execution.
557
558
 
558
559
  Current hard authority boundaries remain:
559
560
 
@@ -568,6 +569,12 @@ unless separately proven by an appropriate qualified process.
568
569
 
569
570
  ## Documentation
570
571
 
572
+ v2.1.1 release notes:
573
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V2_1_1.md
574
+
575
+ v2.1.0 release notes:
576
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V2_1_0.md
577
+
571
578
  v2.0.0 release notes:
572
579
  https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V2_0_0.md
573
580
 
@@ -39,7 +39,7 @@ DevAgent turns customer engineering inputs into a bounded, evidence-driven pre-s
39
39
 
40
40
  <p align="center"><sub><b>Real engine screenshots — not product renders.</b> ROS 2 Jazzy · Gazebo Harmonic · MoveIt 2 · Pilz · UR5e exact-Twin verification.</sub></p>
41
41
 
42
- ## v2.0 commissioning verification flow
42
+ ## v2.1 commissioning verification flow
43
43
 
44
44
  ```text
45
45
  Customer engineering files
@@ -83,7 +83,7 @@ That decision means the declared pre-site engineering scope has complete, curren
83
83
  Python 3.11+ is required.
84
84
 
85
85
  ```bash
86
- python -m pip install --upgrade devagent-physical-engine==2.0.0
86
+ python -m pip install --upgrade devagent-physical-engine==2.1.1
87
87
  ```
88
88
 
89
89
  Verify the installed package:
@@ -95,7 +95,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
95
95
  Expected:
96
96
 
97
97
  ```text
98
- 2.0.0
98
+ 2.1.1
99
99
  ```
100
100
 
101
101
  Run the normal customer workflow:
@@ -193,7 +193,7 @@ A generated plan is not physical proof. A replay is not a new execution. An AI r
193
193
 
194
194
  ## Engineering findings and risk authority
195
195
 
196
- v2.0 records first-class immutable artifacts for:
196
+ The v2 commissioning line records first-class immutable artifacts for:
197
197
 
198
198
  ```text
199
199
  engineering_finding
@@ -335,14 +335,15 @@ The target-proven UR5e path retains controller-manager/action readiness binding,
335
335
 
336
336
  Unsupported customer Twins, unqualified robot profiles, boundary/fault cases outside the qualified scope, ambiguous case mappings, or incomplete lineage fail closed.
337
337
 
338
- ABB IRB1200 remains a separate experimental visual simulation path. FANUC/KUKA and other robot/vendor paths retain their truthful support tiers until separately qualified.
338
+ Exact ABB IRB1200, FANUC CRX-10iA, and KUKA KR6 R900-2 are `SIMULATION_SUPPORTED` in v2.1.1 after accepted 10× target-workstation qualification and a separate code-reviewed authority promotion. Generic ABB/FANUC/KUKA family profiles remain `MODEL_ONLY`; measured FAT, hardware/site, and real-execution authority remain locked.
339
339
 
340
340
  Inspect robot support:
341
341
 
342
342
  ```bash
343
343
  devagent robots
344
344
  devagent robot doctor abb_irb1200
345
- devagent robot visualize abb_irb1200
345
+ devagent robot doctor fanuc_crx10ia
346
+ devagent robot doctor kuka_kr6_r900_2
346
347
  ```
347
348
 
348
349
  ## Customer input
@@ -478,9 +479,9 @@ devagent-physical-ai optional provider-backed engineering front end
478
479
 
479
480
  # Project status
480
481
 
481
- **v2.0.0 — Production/Stable software workflow; commissioning verification control plane with fail-closed pre-site readiness**
482
+ **v2.1.1 — Production/Stable software workflow; accepted ABB/FANUC/KUKA simulation authority promotion**
482
483
 
483
- v2.0.0 adds immutable engineering findings/dispositions, deterministic verification-scope authority, stronger internal/external evidence authority, commissioning-aware Evidence Graph lineage, whole-project staleness detection, and an immutable pre-site commissioning readiness decision.
484
+ v2.1.1 promotes exact ABB IRB1200, FANUC CRX-10iA, and KUKA KR6 R900-2 kinematic/physics/visual simulation authority from the accepted v2.1 evidence. The promotion is bound to immutable report hashes and does not grant measured FAT, hardware-shadow, sim-real, site, safety, or real-execution authority.
484
485
 
485
486
  Production-oriented software capabilities include:
486
487
 
@@ -511,7 +512,7 @@ immutable READY / NOT_READY pre-site commissioning decision
511
512
  provider-neutral optional AI front end
512
513
  ```
513
514
 
514
- Production/Stable describes the bounded software workflow. The target-proven UR5e claim remains limited to the qualified packaged scope and acceptance environment. v2.0.0 does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, commissioned, or authorized for autonomous real execution.
515
+ Production/Stable describes the bounded software workflow. The target-proven UR5e claim remains limited to the qualified packaged scope and acceptance environment. v2.1.1 does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, commissioned, or authorized for autonomous real execution.
515
516
 
516
517
  Current hard authority boundaries remain:
517
518
 
@@ -526,6 +527,12 @@ unless separately proven by an appropriate qualified process.
526
527
 
527
528
  ## Documentation
528
529
 
530
+ v2.1.1 release notes:
531
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V2_1_1.md
532
+
533
+ v2.1.0 release notes:
534
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V2_1_0.md
535
+
529
536
  v2.0.0 release notes:
530
537
  https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V2_0_0.md
531
538
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devagent-physical-engine"
7
- version = "2.0.0"
7
+ version = "2.1.1"
8
8
  description = "Verification-first robotics commissioning control plane with immutable engineering findings, deterministic pre-site readiness, evidence authority, exact-Twin lineage, selective simulation, regression, replay, and FAT reporting."
9
9
  readme = { file = "README.md", content-type = "text/markdown" }
10
10
  requires-python = ">=3.11"
@@ -89,9 +89,14 @@ omit = [
89
89
  "src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py",
90
90
  "src/devagent_physical_engine/ros2/abb_irb1200.py",
91
91
  "src/devagent_physical_engine/ros2/abb_irb1200_preview.py",
92
+ "src/devagent_physical_engine/ros2/fanuc_crx10ia.py",
93
+ "src/devagent_physical_engine/ros2/fanuc_crx10ia_physics.py",
94
+ "src/devagent_physical_engine/ros2/kuka_kr6_r900_2.py",
95
+ "src/devagent_physical_engine/ros2/industrial_arm_task_runtime.py",
96
+ "src/devagent_physical_engine/ros2/industrial_arm_task_adapters.py",
92
97
  ]
93
98
 
94
99
  [tool.coverage.report]
95
100
  fail_under = 75
96
101
  show_missing = true
97
- skip_covered = false
102
+ skip_covered = false
@@ -249,4 +249,4 @@ install_industrial_motion_v170()
249
249
  install_controller_runtime_hotfix_v181()
250
250
  install_one_command_runtime()
251
251
 
252
- __version__ = "2.0.0"
252
+ __version__ = "2.1.1"
@@ -6,11 +6,13 @@ from typing import Mapping
6
6
 
7
7
  from .ros2 import trajectory as _trajectory
8
8
  from .ros2.commands import CommandExecutionError, RosCommandRunner
9
+ from .ros2.direct_controller_discovery_runner import DirectControllerDiscoveryRunner
9
10
  from .ros2.trajectory import RosTrajectoryError
10
11
  from .ros2.ur5e_adapter import UR5E_JOINTS, UR5eGazeboAdapter
11
12
 
12
13
 
13
14
  _DEFAULT_TRAJECTORY_ACTION = "/joint_trajectory_controller/follow_joint_trajectory"
15
+ _ORIGINAL_RESOLVE_ACTIVE_TRAJECTORY_ACTION = _trajectory.resolve_active_trajectory_action
14
16
 
15
17
 
16
18
  def _last_json_mapping(stdout: str, *, code: str) -> Mapping[str, object]:
@@ -36,6 +38,23 @@ def resolve_active_trajectory_action_v181(
36
38
  ):
37
39
  raise RosTrajectoryError("trajectory_action_must_be_absolute")
38
40
 
41
+ # Exact multivendor qualification adapters wrap their runner with
42
+ # DirectControllerDiscoveryRunner. Keep execution-time controller selection
43
+ # on the same direct-rclpy authority path already used by readiness instead
44
+ # of bypassing it through the legacy one-shot v1.8.1 helper.
45
+ #
46
+ # The original resolver asks the runner for ros2 control list_controllers.
47
+ # DirectControllerDiscoveryRunner intercepts exactly that read-only command
48
+ # and synthesizes its result from controller_manager/ListControllers through
49
+ # direct rclpy discovery. No ros2cli daemon is involved.
50
+ if isinstance(runner, DirectControllerDiscoveryRunner):
51
+ return _ORIGINAL_RESOLVE_ACTIVE_TRAJECTORY_ACTION(
52
+ runner,
53
+ preferred_action=preferred_action,
54
+ )
55
+
56
+ # Preserve the existing direct machine probe for mature runtimes such as
57
+ # UR5e that are not wrapped by the multivendor controller-discovery runner.
39
58
  service_timeout = 3.0
40
59
  action_timeout = 3.0
41
60
  helper = Path(_trajectory.__file__).with_name("controller_action_probe.py").resolve()
@@ -0,0 +1,167 @@
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ import json
5
+ from pathlib import Path
6
+ import sys
7
+
8
+ from .robots import PROFILE_REGISTRY
9
+ from .ros2.commands import CommandExecutionError, SubprocessRosRunner
10
+ from .ros2.industrial_arm_task_adapters import TASK_ADAPTERS, TASK_SPECS
11
+ from .ros2.industrial_arm_task_runtime import run_commissioning_exercise
12
+ from .simulation_platform import SimulationPlatformError
13
+
14
+
15
+ def _parser() -> argparse.ArgumentParser:
16
+ parser = argparse.ArgumentParser(
17
+ prog="devagent robot exercise",
18
+ description=(
19
+ "Run the bounded MoveIt/controller commissioning exercise for an exact "
20
+ "experimental industrial-robot runtime. This never promotes FAT evidence."
21
+ ),
22
+ )
23
+ parser.add_argument("robot")
24
+ parser.add_argument("--ros-setup", default="/opt/ros/jazzy/setup.bash")
25
+ parser.add_argument("--workspace-setup")
26
+ parser.add_argument("--log-dir", default="~/.devagent/robot-exercise")
27
+ parser.add_argument("--startup-timeout", type=float, default=120.0)
28
+ parser.add_argument(
29
+ "--no-replay",
30
+ action="store_true",
31
+ help="skip the deterministic replay leg (not recommended for qualification)",
32
+ )
33
+ parser.add_argument("--json", action="store_true")
34
+ parser.add_argument(
35
+ "--dry-run",
36
+ action="store_true",
37
+ help="show the exact bounded exercise contract without starting ROS",
38
+ )
39
+ return parser
40
+
41
+
42
+ def _print_dry_run(profile_key: str, *, json_output: bool) -> int:
43
+ spec = TASK_SPECS[profile_key]
44
+ payload = {
45
+ "profile_key": spec.profile_key,
46
+ "joint_names": list(spec.joint_names),
47
+ "planning_group": spec.planning_group,
48
+ "planning_frame": spec.planning_frame,
49
+ "fk_link_name": spec.fk_link_name,
50
+ "home_positions_rad": list(spec.home_positions_rad),
51
+ "exercise_positions_rad": list(spec.exercise_positions_rad),
52
+ "runtime_kind": spec.runtime_kind,
53
+ "physics_simulation": spec.physics_simulation,
54
+ "moveit_preplan_required": True,
55
+ "follow_joint_trajectory_required": True,
56
+ "joint_state_measurement_required": True,
57
+ "controller_feedback_verification_required": True,
58
+ "fk_metric_collection_required": True,
59
+ "replay_supported": True,
60
+ "fat_evidence_qualified": False,
61
+ "real_execution_allowed": False,
62
+ }
63
+ if json_output:
64
+ print(json.dumps(payload, indent=2, sort_keys=True))
65
+ else:
66
+ print(f"Robot exercise dry-run: {spec.profile_key}")
67
+ print(f"Runtime: {spec.runtime_kind}")
68
+ print(f"Physics simulation: {spec.physics_simulation}")
69
+ print("MoveIt preplan: REQUIRED")
70
+ print("FollowJointTrajectory execution: REQUIRED")
71
+ print("Controller feedback verification: REQUIRED")
72
+ print("Persistent /joint_states measurement: REQUIRED")
73
+ print("MoveIt FK endpoint/path metrics: REQUIRED")
74
+ print("Replay: SUPPORTED")
75
+ print("FAT evidence qualified: False")
76
+ print("Real execution allowed: False")
77
+ print("Home: " + ", ".join(f"{value:.4f}" for value in spec.home_positions_rad))
78
+ print(
79
+ "Exercise: "
80
+ + ", ".join(f"{value:.4f}" for value in spec.exercise_positions_rad)
81
+ )
82
+ return 0
83
+
84
+
85
+ def main(argv: list[str] | None = None) -> int:
86
+ args = _parser().parse_args(argv)
87
+ try:
88
+ profile = PROFILE_REGISTRY.resolve(args.robot)
89
+ except Exception as exc:
90
+ print(f"Robot exercise blocked: {exc}", file=sys.stderr)
91
+ return 41
92
+
93
+ if profile.key not in TASK_ADAPTERS:
94
+ print(
95
+ f"Robot exercise blocked: no experimental task adapter registered for {profile.key}",
96
+ file=sys.stderr,
97
+ )
98
+ return 41
99
+ if args.startup_timeout <= 0:
100
+ print("Robot exercise blocked: startup timeout must be positive", file=sys.stderr)
101
+ return 2
102
+ if args.dry_run:
103
+ return _print_dry_run(profile.key, json_output=args.json)
104
+
105
+ workspace = Path(args.workspace_setup).expanduser() if args.workspace_setup else None
106
+ runner = SubprocessRosRunner(
107
+ ros_setup=Path(args.ros_setup).expanduser(),
108
+ workspace_setup=workspace,
109
+ )
110
+ adapter_type = TASK_ADAPTERS[profile.key]
111
+ log_root = Path(args.log_dir).expanduser() / profile.key
112
+ adapter = adapter_type(
113
+ runner,
114
+ ros_setup=args.ros_setup,
115
+ log_dir=log_root,
116
+ startup_timeout_s=args.startup_timeout,
117
+ )
118
+ if not args.json:
119
+ print(
120
+ f"[DevAgent] START robot={profile.key} runtime={TASK_SPECS[profile.key].runtime_kind}",
121
+ flush=True,
122
+ )
123
+ print(f"[DevAgent] LOGS {log_root.resolve()}", flush=True)
124
+ print(
125
+ "[DevAgent] PREPARE launching exact simulator/controller/MoveIt stack; "
126
+ "no FAT evidence can be promoted by this command",
127
+ flush=True,
128
+ )
129
+ try:
130
+ report = run_commissioning_exercise(
131
+ adapter,
132
+ work_dir=log_root / "exercise",
133
+ replay=not args.no_replay,
134
+ )
135
+ except (
136
+ CommandExecutionError,
137
+ SimulationPlatformError,
138
+ OSError,
139
+ ValueError,
140
+ ) as exc:
141
+ print(f"Robot exercise blocked: {exc}", file=sys.stderr)
142
+ print(f"Diagnostic logs: {log_root.resolve()}", file=sys.stderr)
143
+ print("No FAT evidence was promoted and real robot execution remains locked.")
144
+ return 41
145
+
146
+ if args.json:
147
+ print(json.dumps(report.to_dict(), indent=2, sort_keys=True))
148
+ else:
149
+ print(f"Robot: {report.profile_key}")
150
+ print(f"Runtime: {report.runtime_kind}")
151
+ print(f"Physics simulation: {report.physics_simulation}")
152
+ print("Phases: " + ", ".join(report.phases))
153
+ print(f"Replay verified: {report.replay_verified}")
154
+ print(f"Result: {'PASS' if report.passed else 'FAIL'}")
155
+ print("FAT evidence qualified: False")
156
+ print("Real execution allowed: False")
157
+ for index, metrics in enumerate(report.motion_metrics, start=1):
158
+ print(
159
+ f"Motion {index}: duration={metrics.get('observed_duration_s')} "
160
+ f"tracking={metrics.get('max_tracking_error_rad')} "
161
+ f"tcp_error={metrics.get('final_tcp_error_m')}"
162
+ )
163
+ return 0 if report.passed else 41
164
+
165
+
166
+ if __name__ == "__main__":
167
+ raise SystemExit(main())
@@ -129,6 +129,10 @@ class RobotProfile:
129
129
  controller_family: str | None = None
130
130
  legacy_qualification: str | None = None
131
131
  notes: tuple[str, ...] = ()
132
+ # Independent authority bit for the packaged DevAgent runtime. A robot may be
133
+ # fully simulation-qualified while still being forbidden from producing measured
134
+ # customer FAT evidence. Never infer this authority from simulation tier badges.
135
+ measured_fat_authority: bool = False
132
136
 
133
137
  def __post_init__(self) -> None:
134
138
  key = self.key.strip().lower()
@@ -148,6 +152,19 @@ class RobotProfile:
148
152
  raise RobotPlatformError("empty_legacy_qualification")
149
153
  if any(not note.strip() for note in self.notes):
150
154
  raise RobotPlatformError("empty_robot_note")
155
+ if self.measured_fat_authority:
156
+ required = (
157
+ SimulationTier.KINEMATIC,
158
+ SimulationTier.PHYSICS,
159
+ SimulationTier.VISUAL,
160
+ )
161
+ if any(
162
+ self.qualification.state_for(tier) is not QualificationState.QUALIFIED
163
+ for tier in required
164
+ ):
165
+ raise RobotPlatformError(
166
+ "measured_fat_authority_requires_qualified_kinematic_physics_visual"
167
+ )
151
168
  object.__setattr__(self, "key", key)
152
169
  object.__setattr__(self, "vendor", vendor)
153
170
  object.__setattr__(self, "model", model)
@@ -205,6 +222,7 @@ class RobotProfile:
205
222
  "site_qualification": self.qualification.site_qualification.value,
206
223
  "lifecycle_level": int(self.lifecycle_level),
207
224
  "lifecycle_name": self.lifecycle_level.name.lower(),
225
+ "measured_fat_authority": self.measured_fat_authority,
208
226
  "real_execution_locked": True,
209
227
  }
210
228
  if self.controller_family:
@@ -294,6 +312,7 @@ class RobotProfileRegistry:
294
312
  "hardware_shadow": profile.qualification.hardware_shadow.value,
295
313
  "sim_real": profile.qualification.sim_real_correlation.value,
296
314
  "site": profile.qualification.site_qualification.value,
315
+ "measured_fat_authority": profile.measured_fat_authority,
297
316
  }
298
317
  )
299
318
  return tuple(rows)
@@ -355,6 +374,7 @@ BUILTIN_ROBOT_PROFILES = RobotProfileRegistry(
355
374
  notes=(
356
375
  "DevAgent visual Gazebo/MoveIt workstation qualification exists; real execution remains locked.",
357
376
  ),
377
+ measured_fat_authority=True,
358
378
  ),
359
379
  RobotProfile(
360
380
  key="fanuc_crx",