devagent-physical-engine 2.1.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.1.0/src/devagent_physical_engine.egg-info → devagent_physical_engine-2.1.1}/PKG-INFO +10 -7
  2. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/README.md +9 -6
  3. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/pyproject.toml +1 -1
  4. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/__init__.py +1 -1
  5. devagent_physical_engine-2.1.1/src/devagent_physical_engine/robot_simulation_promotion_v211.py +26 -0
  6. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/robot_support_industrial_v2.py +18 -12
  7. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/robot_support_v18.py +16 -13
  8. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/user_cli_v18.py +3 -3
  9. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1/src/devagent_physical_engine.egg-info}/PKG-INFO +10 -7
  10. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine.egg-info/SOURCES.txt +2 -0
  11. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_abb_irb1200_visual_v18.py +5 -5
  12. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_industrial_motion_v170.py +1 -1
  13. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_industrial_robot_simulation_v2.py +9 -9
  14. devagent_physical_engine-2.1.1/tests/test_multivendor_sim_promotion_v211.py +46 -0
  15. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_package_metadata_v184.py +2 -2
  16. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_robot_platform_v08.py +8 -8
  17. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_transfer_place_diagnostic_v172.py +2 -2
  18. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/NOTICE +0 -0
  19. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/setup.cfg +0 -0
  20. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/__init__.py +0 -0
  21. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/compiler.py +0 -0
  22. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/contracts.py +0 -0
  23. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/coordinator.py +0 -0
  24. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/critic.py +0 -0
  25. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/evidence.py +0 -0
  26. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  27. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/planner.py +0 -0
  28. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/recovery.py +0 -0
  29. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/routing.py +0 -0
  30. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/runtime.py +0 -0
  31. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/semantic.py +0 -0
  32. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/agent/structured.py +0 -0
  33. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ai_cli.py +0 -0
  34. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/cli.py +0 -0
  35. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commercial.py +0 -0
  36. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commercial_campaign.py +0 -0
  37. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commercial_cli.py +0 -0
  38. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commercial_importer.py +0 -0
  39. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
  40. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commercial_readiness.py +0 -0
  41. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commercial_repository.py +0 -0
  42. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commissioning_evidence.py +0 -0
  43. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/commissioning_readiness.py +0 -0
  44. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/continuous_clearance.py +0 -0
  45. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/controller_runtime_hotfix_v181.py +0 -0
  46. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/doctor.py +0 -0
  47. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/dynamic_verification_runtime_v190.py +0 -0
  48. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/engineering_agent.py +0 -0
  49. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/engineering_findings.py +0 -0
  50. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/engineering_request.py +0 -0
  51. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/evidence_provider_cli.py +0 -0
  52. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/evidence_provider_gateway.py +0 -0
  53. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/evidence_provider_policy.py +0 -0
  54. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/evidence_replay.py +0 -0
  55. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/evidence_trust.py +0 -0
  56. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/execution.py +0 -0
  57. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +0 -0
  58. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/industrial_motion_v170.py +0 -0
  59. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/industrial_motion_v182.py +0 -0
  60. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/models.py +0 -0
  61. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/one_command.py +0 -0
  62. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/one_command_runtime.py +0 -0
  63. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/one_command_v15.py +0 -0
  64. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/one_command_v16.py +0 -0
  65. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/operating_envelope.py +0 -0
  66. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  67. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  68. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  69. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  70. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  71. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  72. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/experience.py +0 -0
  73. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/measured.py +0 -0
  74. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  75. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  76. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/physical_campaign.py +0 -0
  77. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/physical_evidence.py +0 -0
  78. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/physical_evidence_v190.py +0 -0
  79. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/physical_motion.py +0 -0
  80. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/planning.py +0 -0
  81. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/pose_math.py +0 -0
  82. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/preexecution_contract.py +0 -0
  83. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/production_authority.py +0 -0
  84. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/production_grade.py +0 -0
  85. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/project.py +0 -0
  86. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  87. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  88. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  89. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  90. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  91. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
  92. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/provider_criterion.py +0 -0
  93. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/provider_qualification.py +0 -0
  94. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/providers.py +0 -0
  95. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/qualification.py +0 -0
  96. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/qualification_cli.py +0 -0
  97. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/qualification_harness.py +0 -0
  98. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/reference_workcell.py +0 -0
  99. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/report_requirements_v190.py +0 -0
  100. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/report_test_execution.py +0 -0
  101. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
  102. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/robot_exercise_cli.py +0 -0
  103. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/robot_platform.py +0 -0
  104. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/robot_qualification_acceptance.py +0 -0
  105. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/robot_qualification_acceptance_cli.py +0 -0
  106. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/robot_qualification_cli.py +0 -0
  107. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/robot_qualification_report_store.py +0 -0
  108. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/robot_support_contract.py +0 -0
  109. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/robots.py +0 -0
  110. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/__init__.py +0 -0
  111. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/abb_irb1200.py +0 -0
  112. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/abb_irb1200_preview.py +0 -0
  113. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/abb_irb1200_verified.py +0 -0
  114. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/abb_runtime_probe.py +0 -0
  115. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  116. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/commands.py +0 -0
  117. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
  118. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/controller_action_probe.py +0 -0
  119. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/destination_support_contact_v182.py +0 -0
  120. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/direct_controller_discovery_runner.py +0 -0
  121. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/doctor.py +0 -0
  122. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/fanuc_crx10ia.py +0 -0
  123. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/fanuc_crx10ia_physics.py +0 -0
  124. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
  125. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
  126. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  127. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
  128. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/gazebo_overlay_support.py +0 -0
  129. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
  130. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  131. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/industrial_arm_runtime_gate.py +0 -0
  132. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/industrial_arm_runtime_probe.py +0 -0
  133. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/industrial_arm_task_adapters.py +0 -0
  134. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/industrial_arm_task_runtime.py +0 -0
  135. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +0 -0
  136. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py +0 -0
  137. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py +0 -0
  138. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v182.py +0 -0
  139. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
  140. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
  141. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/kuka_kr6_r900_2.py +0 -0
  142. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/kuka_kr6_r900_2_verified.py +0 -0
  143. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  144. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
  145. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
  146. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  147. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
  148. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +0 -0
  149. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe_v182.py +0 -0
  150. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
  151. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  152. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/qualification_multivendor.py +0 -0
  153. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/qualification_provenance.py +0 -0
  154. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  155. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
  156. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
  157. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
  158. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +0 -0
  159. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/robot_description_probe.py +0 -0
  160. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/ros_gz_pose_service_probe.py +0 -0
  161. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/ros_python_runtime.py +0 -0
  162. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/runtime_quiescence.py +0 -0
  163. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/runtime_quiescence_probe.py +0 -0
  164. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  165. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
  166. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +0 -0
  167. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/support_contact_acm_semantics_v189.py +0 -0
  168. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +0 -0
  169. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
  170. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
  171. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
  172. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/task_adapter_v190.py +0 -0
  173. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/task_motion_diagnostics_v190.py +0 -0
  174. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
  175. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  176. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
  177. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
  178. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
  179. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
  180. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/trajectory_feedback_tracking_v189.py +0 -0
  181. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/trajectory_runtime_v190.py +0 -0
  182. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
  183. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  184. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  185. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
  186. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_carrier_v190.py +0 -0
  187. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_entity_replace_probe_v190.py +0 -0
  188. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
  189. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
  190. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
  191. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
  192. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py +0 -0
  193. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v187.py +0 -0
  194. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v188.py +0 -0
  195. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v189.py +0 -0
  196. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/ros2/workpiece_transport.py +0 -0
  197. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/selective_verification.py +0 -0
  198. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
  199. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/selective_verification_v190.py +0 -0
  200. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/setup_profile.py +0 -0
  201. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
  202. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/simulation.py +0 -0
  203. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/simulation_platform.py +0 -0
  204. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
  205. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
  206. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/tool_collision.py +0 -0
  207. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  208. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/twin.py +0 -0
  209. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/twin_builder.py +0 -0
  210. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/twin_codec.py +0 -0
  211. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/twin_materialization.py +0 -0
  212. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/user_cli.py +0 -0
  213. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/user_cli_v15.py +0 -0
  214. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/user_cli_v16.py +0 -0
  215. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/user_cli_v191.py +0 -0
  216. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/verification.py +0 -0
  217. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/verification_capabilities_v190.py +0 -0
  218. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/verification_scope_authority.py +0 -0
  219. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
  220. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  221. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
  222. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
  223. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  224. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_abb_clock_provenance_v2.py +0 -0
  225. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_abb_gazebo_resource_path_v2.py +0 -0
  226. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_abb_robot_description_bootstrap_v2.py +0 -0
  227. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_abb_robot_description_payload_gate_v2.py +0 -0
  228. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_abb_runtime_direct_probe_v2.py +0 -0
  229. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_abb_sim_clock_v2.py +0 -0
  230. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_agent_core.py +0 -0
  231. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_agent_semantic_hardening.py +0 -0
  232. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_ai_cli.py +0 -0
  233. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_ai_cli_v07.py +0 -0
  234. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_commercial_importer_v1.py +0 -0
  235. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_commercial_intelligence_v15.py +0 -0
  236. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_commercial_readiness_v1.py +0 -0
  237. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_commercial_v1.py +0 -0
  238. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_commissioning_core_v20.py +0 -0
  239. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_commissioning_evidence_graph_v20.py +0 -0
  240. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_continuous_clearance_v011.py +0 -0
  241. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_controller_failure_diagnostics_v190.py +0 -0
  242. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_controller_runtime_hotfix_v181.py +0 -0
  243. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_core.py +0 -0
  244. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_destination_support_contact_v182.py +0 -0
  245. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_dynamic_report_batch_v190.py +0 -0
  246. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_dynamic_report_contract_end_to_end_v190.py +0 -0
  247. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_dynamic_verification_capabilities_v190.py +0 -0
  248. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_engineering_request_v07.py +0 -0
  249. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_evidence_provider_gateway_v2.py +0 -0
  250. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_evidence_replay_v12.py +0 -0
  251. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_evidence_trust_coverage_v12.py +0 -0
  252. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_evidence_trust_transport_v12.py +0 -0
  253. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_evidence_trust_v12.py +0 -0
  254. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_evidence_viewer_palette_v130.py +0 -0
  255. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_explicit_detach_world_reassert_v189.py +0 -0
  256. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_external_evidence_campaign_authority_v2.py +0 -0
  257. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_fanuc_physics_tolerance_v2.py +0 -0
  258. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_fresh_simulation_cli_v191.py +0 -0
  259. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_fresh_simulation_service_v191.py +0 -0
  260. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_gazebo_cli_v0122.py +0 -0
  261. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_golden_abb_runner_v171.py +0 -0
  262. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_golden_abb_showcase.py +0 -0
  263. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_handoff_authority_v190.py +0 -0
  264. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_industrial_arm_functional_parity_v192.py +0 -0
  265. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_industrial_arm_replay_authority_v192.py +0 -0
  266. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_interpreter_profiles_v08.py +0 -0
  267. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_joint_state_metric_authority_v190.py +0 -0
  268. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_joint_state_probe_v0125.py +0 -0
  269. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_kuka_verified_runtime_v2.py +0 -0
  270. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_live_provider_qualification.py +0 -0
  271. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_loaded_place_stability_v190.py +0 -0
  272. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_measured_motion_v10.py +0 -0
  273. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_metric_authority_surface_v190.py +0 -0
  274. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_motion_handoff_stability_v190.py +0 -0
  275. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
  276. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_moveit_scene_v0123.py +0 -0
  277. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_multivendor_runtime_hardening_v2.py +0 -0
  278. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_multivendor_sim_qualification_v2.py +0 -0
  279. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_natural_language_agent_v07.py +0 -0
  280. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_one_command_hardening_v13.py +0 -0
  281. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_one_command_pose_hardening_v15.py +0 -0
  282. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_one_command_regression_v141.py +0 -0
  283. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_one_command_v13.py +0 -0
  284. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_one_command_v190_injection.py +0 -0
  285. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_openai_strict_schema_v0113.py +0 -0
  286. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_optimization_v05.py +0 -0
  287. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_physical_campaign_v09.py +0 -0
  288. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_physical_evidence_v09.py +0 -0
  289. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_physical_motion_v09.py +0 -0
  290. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_place_preexecution_acm_v189.py +0 -0
  291. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_planning_fallback_v012.py +0 -0
  292. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_pose_math_v0125.py +0 -0
  293. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_preexecution_contract_v10.py +0 -0
  294. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_production_authority_v11.py +0 -0
  295. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_production_external_evidence_v11.py +0 -0
  296. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_production_grade_coverage_v11.py +0 -0
  297. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_production_grade_v11.py +0 -0
  298. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_project_spine_v013.py +0 -0
  299. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_provider_and_qualification.py +0 -0
  300. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_provider_criterion_v15.py +0 -0
  301. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  302. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_qualification_harness_v06.py +0 -0
  303. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_readme_pypi.py +0 -0
  304. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_real_provider_adapters.py +0 -0
  305. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
  306. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_reference_workcell_v012.py +0 -0
  307. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_release_resting_pose_v189.py +0 -0
  308. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_release_transaction_v189.py +0 -0
  309. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_report_orchestration_v190.py +0 -0
  310. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_report_test_contract_coverage_v16.py +0 -0
  311. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_report_test_lineage_v16.py +0 -0
  312. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_report_test_visual_execution_v16.py +0 -0
  313. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_robot_qualification_acceptance_v2.py +0 -0
  314. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_robot_qualification_review_fixes_v2.py +0 -0
  315. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_robot_support_contract_v2.py +0 -0
  316. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_ros2_production_receipts_v011.py +0 -0
  317. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_ros2_simulation.py +0 -0
  318. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_ros_process_group_cleanup_v2.py +0 -0
  319. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_ros_trajectory_v09.py +0 -0
  320. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_runtime_quiescence_v2.py +0 -0
  321. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_selective_verification_v14.py +0 -0
  322. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_setup_profile.py +0 -0
  323. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_sim_real_qualification_v011.py +0 -0
  324. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_simulation_platform_v08.py +0 -0
  325. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_smooth_motion_hotfix_v162.py +0 -0
  326. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_support_contact_acm_semantics_v189.py +0 -0
  327. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_support_contact_hotfix_v161.py +0 -0
  328. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_tool_collision_v011.py +0 -0
  329. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_tool_scene_v0124.py +0 -0
  330. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_trajectory_action_contract_v189.py +0 -0
  331. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_trajectory_action_probe_v0125.py +0 -0
  332. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_trajectory_feedback_tracking_v189.py +0 -0
  333. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_trajectory_qualification_v09.py +0 -0
  334. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_trajectory_tracking_v0125.py +0 -0
  335. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_transfer_controller_policy_v189.py +0 -0
  336. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_twin_materialization_v10.py +0 -0
  337. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_twin_v08.py +0 -0
  338. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  339. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  340. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_user_cli_interactive_v131.py +0 -0
  341. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_user_cli_progress_v131.py +0 -0
  342. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_user_cli_report_visual_v16.py +0 -0
  343. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_user_cli_selective_v14.py +0 -0
  344. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_user_cli_v15.py +0 -0
  345. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
  346. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_v052_stabilization.py +0 -0
  347. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_v08_catalog_mapping_regression.py +0 -0
  348. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_verification_scope_authority_v20.py +0 -0
  349. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_workpiece_attach_semantics_v183.py +0 -0
  350. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_workpiece_carrier_v190.py +0 -0
  351. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_workpiece_lifecycle_v011.py +0 -0
  352. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_workpiece_scene_probe_v185.py +0 -0
  353. {devagent_physical_engine-2.1.0 → devagent_physical_engine-2.1.1}/tests/test_workpiece_semantic_lifecycle_v186.py +0 -0
  354. {devagent_physical_engine-2.1.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.1.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
@@ -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.1.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.1.0
140
+ 2.1.1
141
141
  ```
142
142
 
143
143
  Run the normal customer workflow:
@@ -377,7 +377,7 @@ 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
- Exact ABB IRB1200, FANUC CRX-10iA, and KUKA KR6 R900-2 simulation qualification infrastructure is included in v2.1.0. Their packaged simulation tiers remain `EXPERIMENTAL` until accepted target-workstation reports are reviewed and a separate authority-promotion change is merged. Generic ABB/FANUC/KUKA family profiles remain `MODEL_ONLY`.
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
 
@@ -521,9 +521,9 @@ devagent-physical-ai optional provider-backed engineering front end
521
521
 
522
522
  # Project status
523
523
 
524
- **v2.1.0 — Production/Stable software workflow; commissioning verification control plane with fail-closed multivendor simulation qualification**
524
+ **v2.1.1 — Production/Stable software workflow; accepted ABB/FANUC/KUKA simulation authority promotion**
525
525
 
526
- v2.1.0 preserves the v2.0 commissioning-verification authority model and adds exact-model ABB/FANUC/KUKA qualification infrastructure with direct runtime readiness probes, verified simulation-clock and robot-description contracts, authoritative joint-state measurement, controller-feedback tracking, immutable qualification reports, software-provenance hashing, and a three-report multivendor acceptance gate. Exact ABB/FANUC/KUKA simulation tiers are promoted only after accepted target-workstation evidence and a code-reviewed authority change.
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.
527
527
 
528
528
  Production-oriented software capabilities include:
529
529
 
@@ -554,7 +554,7 @@ immutable READY / NOT_READY pre-site commissioning decision
554
554
  provider-neutral optional AI front end
555
555
  ```
556
556
 
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.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.
558
558
 
559
559
  Current hard authority boundaries remain:
560
560
 
@@ -569,6 +569,9 @@ unless separately proven by an appropriate qualified process.
569
569
 
570
570
  ## Documentation
571
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
+
572
575
  v2.1.0 release notes:
573
576
  https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V2_1_0.md
574
577
 
@@ -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.1.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.1.0
98
+ 2.1.1
99
99
  ```
100
100
 
101
101
  Run the normal customer workflow:
@@ -335,7 +335,7 @@ 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
- Exact ABB IRB1200, FANUC CRX-10iA, and KUKA KR6 R900-2 simulation qualification infrastructure is included in v2.1.0. Their packaged simulation tiers remain `EXPERIMENTAL` until accepted target-workstation reports are reviewed and a separate authority-promotion change is merged. Generic ABB/FANUC/KUKA family profiles remain `MODEL_ONLY`.
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
 
@@ -479,9 +479,9 @@ devagent-physical-ai optional provider-backed engineering front end
479
479
 
480
480
  # Project status
481
481
 
482
- **v2.1.0 — Production/Stable software workflow; commissioning verification control plane with fail-closed multivendor simulation qualification**
482
+ **v2.1.1 — Production/Stable software workflow; accepted ABB/FANUC/KUKA simulation authority promotion**
483
483
 
484
- v2.1.0 preserves the v2.0 commissioning-verification authority model and adds exact-model ABB/FANUC/KUKA qualification infrastructure with direct runtime readiness probes, verified simulation-clock and robot-description contracts, authoritative joint-state measurement, controller-feedback tracking, immutable qualification reports, software-provenance hashing, and a three-report multivendor acceptance gate. Exact ABB/FANUC/KUKA simulation tiers are promoted only after accepted target-workstation evidence and a code-reviewed authority change.
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.
485
485
 
486
486
  Production-oriented software capabilities include:
487
487
 
@@ -512,7 +512,7 @@ immutable READY / NOT_READY pre-site commissioning decision
512
512
  provider-neutral optional AI front end
513
513
  ```
514
514
 
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.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.
516
516
 
517
517
  Current hard authority boundaries remain:
518
518
 
@@ -527,6 +527,9 @@ unless separately proven by an appropriate qualified process.
527
527
 
528
528
  ## Documentation
529
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
+
530
533
  v2.1.0 release notes:
531
534
  https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V2_1_0.md
532
535
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devagent-physical-engine"
7
- version = "2.1.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"
@@ -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.1.0"
252
+ __version__ = "2.1.1"
@@ -0,0 +1,26 @@
1
+ from __future__ import annotations
2
+
3
+ from types import MappingProxyType
4
+ from typing import Final
5
+
6
+ SIMULATION_PROMOTION_SCHEMA: Final = "devagent_multivendor_sim_promotion_v1"
7
+ ACCEPTANCE_CANDIDATE_SHA: Final = "4da8c8899320e18580198b347fb9c1b1fe513ea7"
8
+ ACCEPTANCE_MANIFEST_HASH: Final = "1dd139747506371ca762ced91334eb86b628776ebb03d6aed7e44a6dbcb867d5"
9
+ PROMOTED_SIMULATION_TIERS: Final = ("kinematic", "physics", "visual")
10
+ QUALIFICATION_REPORT_HASHES = MappingProxyType({
11
+ "abb_irb1200": "29cdec994c45de549efd849db7f91af980870b44c2169dc46227628df74b9a18",
12
+ "fanuc_crx10ia": "346ea41cbb53af449f20071afa6261a0683158231ae9dea42dcf72e51f7817b7",
13
+ "kuka_kr6_r900_2": "692c6b1b9a990f3391099630a0d124359c991134cc887f28325026ff94574446",
14
+ })
15
+ PROMOTED_PROFILE_KEYS: Final = tuple(QUALIFICATION_REPORT_HASHES)
16
+ MEASURED_FAT_AUTHORITY_PROMOTED: Final = False
17
+ HARDWARE_SHADOW_PROMOTED: Final = False
18
+ SIM_REAL_PROMOTED: Final = False
19
+ SITE_QUALIFICATION_PROMOTED: Final = False
20
+ REAL_EXECUTION_ALLOWED: Final = False
21
+
22
+ def qualification_report_hash(profile_key: str) -> str:
23
+ try:
24
+ return QUALIFICATION_REPORT_HASHES[profile_key]
25
+ except KeyError as exc:
26
+ raise ValueError(f"simulation_promotion_profile_not_bound:{profile_key}") from exc
@@ -10,6 +10,10 @@ from .robot_platform import (
10
10
  RosIntegration,
11
11
  SimulationTier,
12
12
  )
13
+ from .robot_simulation_promotion_v211 import (
14
+ ACCEPTANCE_MANIFEST_HASH,
15
+ qualification_report_hash,
16
+ )
13
17
 
14
18
  FANUC_CRX10IA_PROFILE_KEY = "fanuc_crx10ia"
15
19
  KUKA_KR6_R900_2_PROFILE_KEY = "kuka_kr6_r900_2"
@@ -47,9 +51,9 @@ def _fanuc_crx10ia_profile() -> RobotProfile:
47
51
  model="crx10ia",
48
52
  capabilities=ARM_CAPABILITIES,
49
53
  qualification=_qualification(
50
- kinematic=QualificationState.EXPERIMENTAL,
51
- physics=QualificationState.EXPERIMENTAL,
52
- visual=QualificationState.EXPERIMENTAL,
54
+ kinematic=QualificationState.QUALIFIED,
55
+ physics=QualificationState.QUALIFIED,
56
+ visual=QualificationState.QUALIFIED,
53
57
  ),
54
58
  ros=RosIntegration(
55
59
  ros2_compatible=True,
@@ -65,12 +69,13 @@ def _fanuc_crx10ia_profile() -> RobotProfile:
65
69
  "crx10ia",
66
70
  "crx-10ia",
67
71
  ),
68
- legacy_qualification="experimental",
72
+ legacy_qualification="simulation",
69
73
  notes=(
70
74
  "Exact FANUC CRX-10iA official ROS 2 description and MoveIt/mock-control path.",
71
75
  "DevAgent-owned Gazebo Harmonic overlay reuses official FANUC geometry/inertials and adds only gz_ros2_control simulation plumbing.",
72
- "Kinematic/physics/visual tiers remain experimental until exact workstation acceptance passes; no third-party Gazebo CRX dependency is treated as authority.",
73
- "Real execution remains locked.",
76
+ "Kinematic/physics/visual simulation tiers are qualified by accepted exact-workstation evidence; no third-party Gazebo CRX dependency is treated as authority.",
77
+ f"Promotion evidence: manifest {ACCEPTANCE_MANIFEST_HASH}; FANUC report {qualification_report_hash(FANUC_CRX10IA_PROFILE_KEY)}.",
78
+ "Measured FAT, hardware-shadow, sim-real, site and real execution authority remain locked.",
74
79
  ),
75
80
  )
76
81
 
@@ -84,9 +89,9 @@ def _kuka_kr6_r900_2_profile() -> RobotProfile:
84
89
  model="kr6_r900_2",
85
90
  capabilities=ARM_CAPABILITIES,
86
91
  qualification=_qualification(
87
- kinematic=QualificationState.EXPERIMENTAL,
88
- physics=QualificationState.EXPERIMENTAL,
89
- visual=QualificationState.EXPERIMENTAL,
92
+ kinematic=QualificationState.QUALIFIED,
93
+ physics=QualificationState.QUALIFIED,
94
+ visual=QualificationState.QUALIFIED,
90
95
  ),
91
96
  ros=RosIntegration(
92
97
  ros2_compatible=True,
@@ -101,12 +106,13 @@ def _kuka_kr6_r900_2_profile() -> RobotProfile:
101
106
  "kr6 r900 2",
102
107
  "kr6_r900_2",
103
108
  ),
104
- legacy_qualification="experimental",
109
+ legacy_qualification="simulation",
105
110
  notes=(
106
111
  "Exact KUKA KR6 R900-2 Agilus ROS 2 profile.",
107
112
  "Upstream KUKA Jazzy packages provide verified model data plus Gazebo and MoveIt integration for this model.",
108
- "Physics/visual support remains experimental until DevAgent workstation acceptance is recorded.",
109
- "Real execution remains locked.",
113
+ "Kinematic/physics/visual simulation tiers are qualified by accepted exact-workstation evidence.",
114
+ f"Promotion evidence: manifest {ACCEPTANCE_MANIFEST_HASH}; KUKA report {qualification_report_hash(KUKA_KR6_R900_2_PROFILE_KEY)}.",
115
+ "Measured FAT, hardware-shadow, sim-real, site and real execution authority remain locked.",
110
116
  ),
111
117
  )
112
118
 
@@ -10,6 +10,10 @@ from .robot_platform import (
10
10
  RosIntegration,
11
11
  SimulationTier,
12
12
  )
13
+ from .robot_simulation_promotion_v211 import (
14
+ ACCEPTANCE_MANIFEST_HASH,
15
+ qualification_report_hash,
16
+ )
13
17
 
14
18
  ABB_IRB1200_PROFILE_KEY = "abb_irb1200"
15
19
 
@@ -17,9 +21,9 @@ ABB_IRB1200_PROFILE_KEY = "abb_irb1200"
17
21
  def _abb_irb1200_profile() -> RobotProfile:
18
22
  """Exact ABB IRB 1200-5/0.9 profile.
19
23
 
20
- The visual/physics runtime remains EXPERIMENTAL until target-workstation
21
- acceptance proves the exact Gazebo/MoveIt integration. This makes the runtime
22
- available without prematurely upgrading FAT evidence authority.
24
+ Accepted target-workstation evidence proves the exact Gazebo/MoveIt integration.
25
+ v2.1.1 promotes only kinematic/physics/visual simulation authority; measured FAT,
26
+ hardware-shadow, sim-real, site and real execution remain locked.
23
27
  """
24
28
 
25
29
  return RobotProfile(
@@ -30,9 +34,9 @@ def _abb_irb1200_profile() -> RobotProfile:
30
34
  qualification=RobotQualification(
31
35
  {
32
36
  SimulationTier.DETERMINISTIC: QualificationState.QUALIFIED,
33
- SimulationTier.KINEMATIC: QualificationState.EXPERIMENTAL,
34
- SimulationTier.PHYSICS: QualificationState.EXPERIMENTAL,
35
- SimulationTier.VISUAL: QualificationState.EXPERIMENTAL,
37
+ SimulationTier.KINEMATIC: QualificationState.QUALIFIED,
38
+ SimulationTier.PHYSICS: QualificationState.QUALIFIED,
39
+ SimulationTier.VISUAL: QualificationState.QUALIFIED,
36
40
  }
37
41
  ),
38
42
  ros=RosIntegration(
@@ -51,13 +55,12 @@ def _abb_irb1200_profile() -> RobotProfile:
51
55
  "irb1200",
52
56
  "irb1200 5 90",
53
57
  ),
54
- legacy_qualification="experimental",
58
+ legacy_qualification="simulation",
55
59
  notes=(
56
60
  "Exact ABB IRB 1200-5/0.9 ROS2 profile.",
57
- "Gazebo Harmonic + gz_ros2_control + MoveIt/RViz runtime is available "
58
- "as an experimental visual path until laptop acceptance is recorded.",
59
- "Visual preview motion is not FAT measurement evidence and real execution "
60
- "remains locked.",
61
+ "Gazebo Harmonic + gz_ros2_control + MoveIt/RViz kinematic/physics/visual simulation is qualified by accepted workstation evidence.",
62
+ f"Promotion evidence: manifest {ACCEPTANCE_MANIFEST_HASH}; ABB report {qualification_report_hash(ABB_IRB1200_PROFILE_KEY)}.",
63
+ "Measured FAT, hardware-shadow, sim-real, site and real execution authority remain locked.",
61
64
  ),
62
65
  )
63
66
 
@@ -80,11 +83,11 @@ def robot_support_level(profile: RobotProfile) -> str:
80
83
 
81
84
  if physics is QualificationState.QUALIFIED and visual is QualificationState.QUALIFIED:
82
85
  return "SIMULATION_SUPPORTED"
83
- if physics is QualificationState.EXPERIMENTAL and visual is QualificationState.EXPERIMENTAL:
86
+ if physics is QualificationState.QUALIFIED and visual is QualificationState.QUALIFIED:
84
87
  return "SIMULATION_AVAILABLE_EXPERIMENTAL"
85
88
  if visual is QualificationState.QUALIFIED or kinematic is QualificationState.QUALIFIED:
86
89
  return "VISUAL_SUPPORTED"
87
- if visual is QualificationState.EXPERIMENTAL or kinematic is QualificationState.EXPERIMENTAL:
90
+ if visual is QualificationState.QUALIFIED or kinematic is QualificationState.QUALIFIED:
88
91
  return "VISUAL_AVAILABLE_EXPERIMENTAL"
89
92
  return "MODEL_ONLY"
90
93
 
@@ -254,7 +254,7 @@ def _dry_run_visual(profile_key: str, trajectory_seed: str | None) -> int:
254
254
  print("Physics candidate: " + " ".join(fanuc_crx10ia_physics_gazebo_command()))
255
255
  print("Robot: exact FANUC CRX-10iA official geometry/inertials/joint limits")
256
256
  print(
257
- "Physics: EXPERIMENTAL DevAgent-owned gz_ros2_control overlay; "
257
+ "Physics: QUALIFIED DevAgent-owned gz_ros2_control overlay; "
258
258
  "no third-party FANUC Gazebo package is treated as authority"
259
259
  )
260
260
  print("Qualification: run `devagent robot qualify fanuc_crx10ia`")
@@ -334,8 +334,8 @@ def _robot_visualize(args: argparse.Namespace) -> int:
334
334
  )
335
335
  print("FANUC CRX-10iA official MoveIt/RViz mock simulation: READY")
336
336
  print(
337
- "Authority: EXPERIMENTAL KINEMATIC/VISUAL. "
338
- "The separate DevAgent Gazebo physics candidate is qualified through `devagent robot qualify`."
337
+ "Profile authority: KINEMATIC/VISUAL/PHYSICS SIMULATION QUALIFIED. "
338
+ "This command remains a preview path and does not create measured FAT evidence."
339
339
  )
340
340
  print("Measured FAT evidence is not promoted")
341
341
  print("Real execution: False")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devagent-physical-engine
3
- Version: 2.1.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
@@ -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.1.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.1.0
140
+ 2.1.1
141
141
  ```
142
142
 
143
143
  Run the normal customer workflow:
@@ -377,7 +377,7 @@ 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
- Exact ABB IRB1200, FANUC CRX-10iA, and KUKA KR6 R900-2 simulation qualification infrastructure is included in v2.1.0. Their packaged simulation tiers remain `EXPERIMENTAL` until accepted target-workstation reports are reviewed and a separate authority-promotion change is merged. Generic ABB/FANUC/KUKA family profiles remain `MODEL_ONLY`.
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
 
@@ -521,9 +521,9 @@ devagent-physical-ai optional provider-backed engineering front end
521
521
 
522
522
  # Project status
523
523
 
524
- **v2.1.0 — Production/Stable software workflow; commissioning verification control plane with fail-closed multivendor simulation qualification**
524
+ **v2.1.1 — Production/Stable software workflow; accepted ABB/FANUC/KUKA simulation authority promotion**
525
525
 
526
- v2.1.0 preserves the v2.0 commissioning-verification authority model and adds exact-model ABB/FANUC/KUKA qualification infrastructure with direct runtime readiness probes, verified simulation-clock and robot-description contracts, authoritative joint-state measurement, controller-feedback tracking, immutable qualification reports, software-provenance hashing, and a three-report multivendor acceptance gate. Exact ABB/FANUC/KUKA simulation tiers are promoted only after accepted target-workstation evidence and a code-reviewed authority change.
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.
527
527
 
528
528
  Production-oriented software capabilities include:
529
529
 
@@ -554,7 +554,7 @@ immutable READY / NOT_READY pre-site commissioning decision
554
554
  provider-neutral optional AI front end
555
555
  ```
556
556
 
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.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.
558
558
 
559
559
  Current hard authority boundaries remain:
560
560
 
@@ -569,6 +569,9 @@ unless separately proven by an appropriate qualified process.
569
569
 
570
570
  ## Documentation
571
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
+
572
575
  v2.1.0 release notes:
573
576
  https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V2_1_0.md
574
577
 
@@ -61,6 +61,7 @@ src/devagent_physical_engine/robot_qualification_acceptance.py
61
61
  src/devagent_physical_engine/robot_qualification_acceptance_cli.py
62
62
  src/devagent_physical_engine/robot_qualification_cli.py
63
63
  src/devagent_physical_engine/robot_qualification_report_store.py
64
+ src/devagent_physical_engine/robot_simulation_promotion_v211.py
64
65
  src/devagent_physical_engine/robot_support_contract.py
65
66
  src/devagent_physical_engine/robot_support_industrial_v2.py
66
67
  src/devagent_physical_engine/robot_support_v18.py
@@ -268,6 +269,7 @@ tests/test_motion_handoff_stability_v190.py
268
269
  tests/test_moveit_planning_diagnostics_v0125.py
269
270
  tests/test_moveit_scene_v0123.py
270
271
  tests/test_multivendor_runtime_hardening_v2.py
272
+ tests/test_multivendor_sim_promotion_v211.py
271
273
  tests/test_multivendor_sim_qualification_v2.py
272
274
  tests/test_natural_language_agent_v07.py
273
275
  tests/test_one_command_hardening_v13.py
@@ -33,21 +33,21 @@ SEED = FIXTURE / "robot_program" / "trajectory_seed.yaml"
33
33
 
34
34
 
35
35
  class ABBIRB1200SupportContractTests(unittest.TestCase):
36
- def test_exact_profile_is_available_but_not_falsely_qualified(self) -> None:
36
+ def test_exact_profile_is_simulation_qualified_without_fat_or_real_authority(self) -> None:
37
37
  profile = BUILTIN_ROBOT_PROFILES.get("abb_irb1200")
38
38
  self.assertEqual(profile.vendor, "abb")
39
39
  self.assertEqual(profile.model, "irb1200_5_90")
40
40
  self.assertEqual(
41
41
  robot_support_level(profile),
42
- "SIMULATION_AVAILABLE_EXPERIMENTAL",
42
+ "SIMULATION_SUPPORTED",
43
43
  )
44
44
  self.assertIs(
45
45
  profile.qualification.state_for(SimulationTier.PHYSICS),
46
- QualificationState.EXPERIMENTAL,
46
+ QualificationState.QUALIFIED,
47
47
  )
48
48
  self.assertIs(
49
49
  profile.qualification.state_for(SimulationTier.VISUAL),
50
- QualificationState.EXPERIMENTAL,
50
+ QualificationState.QUALIFIED,
51
51
  )
52
52
  resource = profile.to_resource()
53
53
  self.assertTrue(resource.metadata["real_execution_locked"])
@@ -138,7 +138,7 @@ class RobotVisualCLITests(unittest.TestCase):
138
138
  by_key = {row["robot"]: row for row in rows}
139
139
  self.assertEqual(
140
140
  by_key["abb_irb1200"]["support"],
141
- "SIMULATION_AVAILABLE_EXPERIMENTAL",
141
+ "SIMULATION_SUPPORTED",
142
142
  )
143
143
  self.assertTrue(by_key["abb_irb1200"]["rviz_moveit"])
144
144
  self.assertTrue(by_key["abb_irb1200"]["gazebo"])
@@ -35,7 +35,7 @@ from devagent_physical_engine.ros2.report_test_visualization_v170 import (
35
35
 
36
36
  class IndustrialMotionV170Tests(unittest.TestCase):
37
37
  def test_release_version_is_v210(self) -> None:
38
- self.assertEqual(package.__version__, "2.1.0")
38
+ self.assertEqual(package.__version__, "2.1.1")
39
39
 
40
40
  def test_reference_groups_cover_every_task_phase_once_in_order(self) -> None:
41
41
  groups = reference_industrial_groups()
@@ -123,7 +123,7 @@ class _ReadyRunner:
123
123
 
124
124
 
125
125
  class ExactIndustrialProfileTests(unittest.TestCase):
126
- def test_fanuc_exact_profile_exposes_unqualified_physics_candidate(self) -> None:
126
+ def test_fanuc_exact_profile_is_simulation_qualified(self) -> None:
127
127
  profile = BUILTIN_ROBOT_PROFILES.get("fanuc_crx10ia")
128
128
  self.assertEqual(profile.vendor, "fanuc")
129
129
  self.assertEqual(profile.model, "crx10ia")
@@ -134,11 +134,11 @@ class ExactIndustrialProfileTests(unittest.TestCase):
134
134
  ):
135
135
  self.assertIs(
136
136
  profile.qualification.state_for(tier),
137
- QualificationState.EXPERIMENTAL,
137
+ QualificationState.QUALIFIED,
138
138
  )
139
139
  self.assertEqual(
140
140
  robot_support_level(profile),
141
- "SIMULATION_AVAILABLE_EXPERIMENTAL",
141
+ "SIMULATION_SUPPORTED",
142
142
  )
143
143
  self.assertTrue(profile.to_resource().metadata["real_execution_locked"])
144
144
  self.assertIs(
@@ -150,7 +150,7 @@ class ExactIndustrialProfileTests(unittest.TestCase):
150
150
  QualificationState.NOT_QUALIFIED,
151
151
  )
152
152
 
153
- def test_kuka_exact_profile_is_physics_experimental(self) -> None:
153
+ def test_kuka_exact_profile_is_simulation_qualified(self) -> None:
154
154
  profile = BUILTIN_ROBOT_PROFILES.get("kuka_kr6_r900_2")
155
155
  self.assertEqual(profile.vendor, "kuka")
156
156
  self.assertEqual(profile.model, "kr6_r900_2")
@@ -161,11 +161,11 @@ class ExactIndustrialProfileTests(unittest.TestCase):
161
161
  ):
162
162
  self.assertIs(
163
163
  profile.qualification.state_for(tier),
164
- QualificationState.EXPERIMENTAL,
164
+ QualificationState.QUALIFIED,
165
165
  )
166
166
  self.assertEqual(
167
167
  robot_support_level(profile),
168
- "SIMULATION_AVAILABLE_EXPERIMENTAL",
168
+ "SIMULATION_SUPPORTED",
169
169
  )
170
170
  self.assertTrue(profile.to_resource().metadata["real_execution_locked"])
171
171
 
@@ -356,14 +356,14 @@ class IndustrialRobotCLITests(unittest.TestCase):
356
356
  rows = {row["robot"]: row for row in json.loads(output.getvalue())}
357
357
 
358
358
  fanuc = rows["fanuc_crx10ia"]
359
- self.assertEqual(fanuc["support"], "SIMULATION_AVAILABLE_EXPERIMENTAL")
359
+ self.assertEqual(fanuc["support"], "SIMULATION_SUPPORTED")
360
360
  self.assertTrue(fanuc["rviz_moveit"])
361
361
  self.assertTrue(fanuc["gazebo"])
362
362
  self.assertFalse(fanuc["fat_measured_qualified"])
363
363
  self.assertFalse(fanuc["real_execution_allowed"])
364
364
 
365
365
  kuka = rows["kuka_kr6_r900_2"]
366
- self.assertEqual(kuka["support"], "SIMULATION_AVAILABLE_EXPERIMENTAL")
366
+ self.assertEqual(kuka["support"], "SIMULATION_SUPPORTED")
367
367
  self.assertTrue(kuka["rviz_moveit"])
368
368
  self.assertTrue(kuka["gazebo"])
369
369
  self.assertFalse(kuka["fat_measured_qualified"])
@@ -377,7 +377,7 @@ class IndustrialRobotCLITests(unittest.TestCase):
377
377
  text = output.getvalue()
378
378
  self.assertIn("fanuc_moveit_config fanuc_moveit.launch.py", text)
379
379
  self.assertIn("robot_model:=crx10ia", text)
380
- self.assertIn("Physics: EXPERIMENTAL", text)
380
+ self.assertIn("Physics: QUALIFIED", text)
381
381
  self.assertIn("ros_gz_sim gz_sim.launch.py", text)
382
382
  self.assertIn("DevAgent-owned", text)
383
383
  self.assertIn("no third-party FANUC Gazebo package", text)
@@ -0,0 +1,46 @@
1
+ from __future__ import annotations
2
+ import unittest
3
+ from devagent_physical_engine.robot_platform import QualificationState, RobotLifecycleLevel, SimulationTier
4
+ from devagent_physical_engine.robot_simulation_promotion_v211 import (
5
+ ACCEPTANCE_CANDIDATE_SHA, ACCEPTANCE_MANIFEST_HASH, PROMOTED_PROFILE_KEYS,
6
+ PROMOTED_SIMULATION_TIERS, QUALIFICATION_REPORT_HASHES,
7
+ MEASURED_FAT_AUTHORITY_PROMOTED, HARDWARE_SHADOW_PROMOTED,
8
+ SIM_REAL_PROMOTED, SITE_QUALIFICATION_PROMOTED, REAL_EXECUTION_ALLOWED,
9
+ )
10
+ from devagent_physical_engine.robots import PROFILE_REGISTRY
11
+
12
+ class MultivendorSimulationPromotionV211Tests(unittest.TestCase):
13
+ def test_promotion_is_bound_to_exact_accepted_evidence(self):
14
+ self.assertEqual(ACCEPTANCE_CANDIDATE_SHA, "4da8c8899320e18580198b347fb9c1b1fe513ea7")
15
+ self.assertEqual(ACCEPTANCE_MANIFEST_HASH, "1dd139747506371ca762ced91334eb86b628776ebb03d6aed7e44a6dbcb867d5")
16
+ self.assertEqual(PROMOTED_SIMULATION_TIERS, ("kinematic", "physics", "visual"))
17
+ self.assertEqual(dict(QUALIFICATION_REPORT_HASHES), {
18
+ "abb_irb1200": "29cdec994c45de549efd849db7f91af980870b44c2169dc46227628df74b9a18",
19
+ "fanuc_crx10ia": "346ea41cbb53af449f20071afa6261a0683158231ae9dea42dcf72e51f7817b7",
20
+ "kuka_kr6_r900_2": "692c6b1b9a990f3391099630a0d124359c991134cc887f28325026ff94574446",
21
+ })
22
+ def test_exact_profiles_are_sim_qualified_but_other_authorities_stay_locked(self):
23
+ self.assertEqual(PROMOTED_PROFILE_KEYS, ("abb_irb1200", "fanuc_crx10ia", "kuka_kr6_r900_2"))
24
+ for key in PROMOTED_PROFILE_KEYS:
25
+ profile=PROFILE_REGISTRY.get(key)
26
+ for tier in (SimulationTier.KINEMATIC, SimulationTier.PHYSICS, SimulationTier.VISUAL):
27
+ self.assertIs(profile.qualification.state_for(tier), QualificationState.QUALIFIED)
28
+ self.assertIs(profile.lifecycle_level, RobotLifecycleLevel.SIM_QUALIFIED)
29
+ self.assertFalse(profile.measured_fat_authority)
30
+ self.assertIs(profile.qualification.hardware_shadow, QualificationState.NOT_QUALIFIED)
31
+ self.assertIs(profile.qualification.sim_real_correlation, QualificationState.NOT_QUALIFIED)
32
+ self.assertIs(profile.qualification.site_qualification, QualificationState.NOT_QUALIFIED)
33
+ self.assertTrue(profile.to_resource().metadata["real_execution_locked"])
34
+ self.assertFalse(MEASURED_FAT_AUTHORITY_PROMOTED)
35
+ self.assertFalse(HARDWARE_SHADOW_PROMOTED)
36
+ self.assertFalse(SIM_REAL_PROMOTED)
37
+ self.assertFalse(SITE_QUALIFICATION_PROMOTED)
38
+ self.assertFalse(REAL_EXECUTION_ALLOWED)
39
+ def test_generic_families_remain_model_only(self):
40
+ for key in ("abb_irb", "fanuc_crx", "kuka_kr"):
41
+ profile=PROFILE_REGISTRY.get(key)
42
+ for tier in (SimulationTier.KINEMATIC, SimulationTier.PHYSICS, SimulationTier.VISUAL):
43
+ self.assertIs(profile.qualification.state_for(tier), QualificationState.NOT_QUALIFIED)
44
+
45
+ if __name__ == "__main__":
46
+ unittest.main()
@@ -13,10 +13,10 @@ class PackageMetadataV184Tests(unittest.TestCase):
13
13
  self.assertTrue(summary.strip())
14
14
  self.assertLessEqual(len(summary), 512)
15
15
 
16
- def test_package_version_is_v210(self) -> None:
16
+ def test_package_version_is_v211(self) -> None:
17
17
  root = Path(__file__).resolve().parents[1]
18
18
  metadata = tomllib.loads((root / "pyproject.toml").read_text(encoding="utf-8"))
19
- self.assertEqual(metadata["project"]["version"], "2.1.0")
19
+ self.assertEqual(metadata["project"]["version"], "2.1.1")
20
20
 
21
21
 
22
22
  if __name__ == "__main__":