devagent-physical-engine 1.9.0__tar.gz → 1.9.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 (296) hide show
  1. {devagent_physical_engine-1.9.0/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.9.1}/PKG-INFO +45 -8
  2. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/README.md +45 -8
  3. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/pyproject.toml +2 -2
  4. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/__init__.py +1 -1
  5. devagent_physical_engine-1.9.1/src/devagent_physical_engine/user_cli_v191.py +194 -0
  6. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1/src/devagent_physical_engine.egg-info}/PKG-INFO +45 -8
  7. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine.egg-info/SOURCES.txt +3 -0
  8. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine.egg-info/entry_points.txt +1 -1
  9. devagent_physical_engine-1.9.1/tests/test_fresh_simulation_cli_v191.py +99 -0
  10. devagent_physical_engine-1.9.1/tests/test_fresh_simulation_service_v191.py +90 -0
  11. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_industrial_motion_v170.py +2 -2
  12. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_package_metadata_v184.py +2 -2
  13. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_transfer_place_diagnostic_v172.py +2 -2
  14. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/NOTICE +0 -0
  15. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/setup.cfg +0 -0
  16. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/agent/__init__.py +0 -0
  17. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/agent/compiler.py +0 -0
  18. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/agent/contracts.py +0 -0
  19. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/agent/coordinator.py +0 -0
  20. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/agent/critic.py +0 -0
  21. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/agent/evidence.py +0 -0
  22. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  23. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/agent/planner.py +0 -0
  24. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/agent/recovery.py +0 -0
  25. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/agent/routing.py +0 -0
  26. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/agent/runtime.py +0 -0
  27. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/agent/semantic.py +0 -0
  28. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/agent/structured.py +0 -0
  29. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ai_cli.py +0 -0
  30. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/cli.py +0 -0
  31. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/commercial.py +0 -0
  32. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/commercial_campaign.py +0 -0
  33. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/commercial_cli.py +0 -0
  34. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/commercial_importer.py +0 -0
  35. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
  36. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/commercial_readiness.py +0 -0
  37. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/commercial_repository.py +0 -0
  38. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/continuous_clearance.py +0 -0
  39. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/controller_runtime_hotfix_v181.py +0 -0
  40. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/doctor.py +0 -0
  41. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/dynamic_verification_runtime_v190.py +0 -0
  42. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/engineering_agent.py +0 -0
  43. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/engineering_request.py +0 -0
  44. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/evidence_replay.py +0 -0
  45. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/evidence_trust.py +0 -0
  46. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/execution.py +0 -0
  47. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +0 -0
  48. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/industrial_motion_v170.py +0 -0
  49. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/industrial_motion_v182.py +0 -0
  50. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/models.py +0 -0
  51. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/one_command.py +0 -0
  52. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/one_command_runtime.py +0 -0
  53. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/one_command_v15.py +0 -0
  54. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/one_command_v16.py +0 -0
  55. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/operating_envelope.py +0 -0
  56. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  57. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  58. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  59. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  60. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  61. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  62. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/optimization/experience.py +0 -0
  63. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/optimization/measured.py +0 -0
  64. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  65. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  66. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/physical_campaign.py +0 -0
  67. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/physical_evidence.py +0 -0
  68. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/physical_evidence_v190.py +0 -0
  69. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/physical_motion.py +0 -0
  70. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/planning.py +0 -0
  71. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/pose_math.py +0 -0
  72. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/preexecution_contract.py +0 -0
  73. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/production_authority.py +0 -0
  74. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/production_grade.py +0 -0
  75. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/project.py +0 -0
  76. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  77. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  78. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  79. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  80. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  81. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
  82. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/provider_criterion.py +0 -0
  83. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/provider_qualification.py +0 -0
  84. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/providers.py +0 -0
  85. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/qualification.py +0 -0
  86. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/qualification_cli.py +0 -0
  87. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/qualification_harness.py +0 -0
  88. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/reference_workcell.py +0 -0
  89. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/report_requirements_v190.py +0 -0
  90. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/report_test_execution.py +0 -0
  91. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
  92. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/robot_platform.py +0 -0
  93. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/robot_support_v18.py +0 -0
  94. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/robots.py +0 -0
  95. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/__init__.py +0 -0
  96. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/abb_irb1200.py +0 -0
  97. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/abb_irb1200_preview.py +0 -0
  98. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  99. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/commands.py +0 -0
  100. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
  101. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/controller_action_probe.py +0 -0
  102. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/destination_support_contact_v182.py +0 -0
  103. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/doctor.py +0 -0
  104. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
  105. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
  106. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  107. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
  108. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
  109. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  110. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +0 -0
  111. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py +0 -0
  112. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py +0 -0
  113. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v182.py +0 -0
  114. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
  115. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
  116. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  117. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
  118. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
  119. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  120. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
  121. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +0 -0
  122. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe_v182.py +0 -0
  123. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
  124. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  125. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  126. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
  127. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
  128. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
  129. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +0 -0
  130. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/ros_gz_pose_service_probe.py +0 -0
  131. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  132. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
  133. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +0 -0
  134. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/support_contact_acm_semantics_v189.py +0 -0
  135. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +0 -0
  136. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
  137. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
  138. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
  139. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/task_adapter_v190.py +0 -0
  140. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/task_motion_diagnostics_v190.py +0 -0
  141. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
  142. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  143. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
  144. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
  145. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
  146. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
  147. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/trajectory_feedback_tracking_v189.py +0 -0
  148. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/trajectory_runtime_v190.py +0 -0
  149. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
  150. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  151. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  152. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
  153. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/workpiece_carrier_v190.py +0 -0
  154. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/workpiece_entity_replace_probe_v190.py +0 -0
  155. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
  156. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
  157. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
  158. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
  159. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py +0 -0
  160. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v187.py +0 -0
  161. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v188.py +0 -0
  162. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v189.py +0 -0
  163. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/ros2/workpiece_transport.py +0 -0
  164. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/selective_verification.py +0 -0
  165. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
  166. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/selective_verification_v190.py +0 -0
  167. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/setup_profile.py +0 -0
  168. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
  169. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/simulation.py +0 -0
  170. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/simulation_platform.py +0 -0
  171. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
  172. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
  173. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/tool_collision.py +0 -0
  174. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  175. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/twin.py +0 -0
  176. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/twin_builder.py +0 -0
  177. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/twin_codec.py +0 -0
  178. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/twin_materialization.py +0 -0
  179. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/user_cli.py +0 -0
  180. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/user_cli_v15.py +0 -0
  181. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/user_cli_v16.py +0 -0
  182. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/user_cli_v18.py +0 -0
  183. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/verification.py +0 -0
  184. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/verification_capabilities_v190.py +0 -0
  185. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
  186. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  187. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
  188. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  189. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_abb_irb1200_visual_v18.py +0 -0
  190. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_agent_core.py +0 -0
  191. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_agent_semantic_hardening.py +0 -0
  192. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_ai_cli.py +0 -0
  193. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_ai_cli_v07.py +0 -0
  194. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_commercial_importer_v1.py +0 -0
  195. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_commercial_intelligence_v15.py +0 -0
  196. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_commercial_readiness_v1.py +0 -0
  197. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_commercial_v1.py +0 -0
  198. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_continuous_clearance_v011.py +0 -0
  199. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_controller_failure_diagnostics_v190.py +0 -0
  200. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_controller_runtime_hotfix_v181.py +0 -0
  201. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_core.py +0 -0
  202. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_destination_support_contact_v182.py +0 -0
  203. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_dynamic_report_batch_v190.py +0 -0
  204. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_dynamic_report_contract_end_to_end_v190.py +0 -0
  205. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_dynamic_verification_capabilities_v190.py +0 -0
  206. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_engineering_request_v07.py +0 -0
  207. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_evidence_replay_v12.py +0 -0
  208. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_evidence_trust_coverage_v12.py +0 -0
  209. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_evidence_trust_transport_v12.py +0 -0
  210. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_evidence_trust_v12.py +0 -0
  211. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_evidence_viewer_palette_v130.py +0 -0
  212. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_explicit_detach_world_reassert_v189.py +0 -0
  213. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_gazebo_cli_v0122.py +0 -0
  214. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_golden_abb_runner_v171.py +0 -0
  215. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_golden_abb_showcase.py +0 -0
  216. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_handoff_authority_v190.py +0 -0
  217. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_interpreter_profiles_v08.py +0 -0
  218. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_joint_state_metric_authority_v190.py +0 -0
  219. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_joint_state_probe_v0125.py +0 -0
  220. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_live_provider_qualification.py +0 -0
  221. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_loaded_place_stability_v190.py +0 -0
  222. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_measured_motion_v10.py +0 -0
  223. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_metric_authority_surface_v190.py +0 -0
  224. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_motion_handoff_stability_v190.py +0 -0
  225. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
  226. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_moveit_scene_v0123.py +0 -0
  227. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_natural_language_agent_v07.py +0 -0
  228. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_one_command_hardening_v13.py +0 -0
  229. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_one_command_pose_hardening_v15.py +0 -0
  230. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_one_command_regression_v141.py +0 -0
  231. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_one_command_v13.py +0 -0
  232. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_one_command_v190_injection.py +0 -0
  233. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_openai_strict_schema_v0113.py +0 -0
  234. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_optimization_v05.py +0 -0
  235. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_physical_campaign_v09.py +0 -0
  236. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_physical_evidence_v09.py +0 -0
  237. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_physical_motion_v09.py +0 -0
  238. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_place_preexecution_acm_v189.py +0 -0
  239. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_planning_fallback_v012.py +0 -0
  240. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_pose_math_v0125.py +0 -0
  241. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_preexecution_contract_v10.py +0 -0
  242. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_production_authority_v11.py +0 -0
  243. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_production_grade_coverage_v11.py +0 -0
  244. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_production_grade_v11.py +0 -0
  245. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_project_spine_v013.py +0 -0
  246. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_provider_and_qualification.py +0 -0
  247. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_provider_criterion_v15.py +0 -0
  248. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  249. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_qualification_harness_v06.py +0 -0
  250. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_readme_pypi.py +0 -0
  251. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_real_provider_adapters.py +0 -0
  252. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
  253. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_reference_workcell_v012.py +0 -0
  254. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_release_resting_pose_v189.py +0 -0
  255. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_release_transaction_v189.py +0 -0
  256. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_report_orchestration_v190.py +0 -0
  257. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_report_test_contract_coverage_v16.py +0 -0
  258. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_report_test_lineage_v16.py +0 -0
  259. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_report_test_visual_execution_v16.py +0 -0
  260. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_robot_platform_v08.py +0 -0
  261. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_ros2_production_receipts_v011.py +0 -0
  262. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_ros2_simulation.py +0 -0
  263. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_ros_trajectory_v09.py +0 -0
  264. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_selective_verification_v14.py +0 -0
  265. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_setup_profile.py +0 -0
  266. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_sim_real_qualification_v011.py +0 -0
  267. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_simulation_platform_v08.py +0 -0
  268. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_smooth_motion_hotfix_v162.py +0 -0
  269. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_support_contact_acm_semantics_v189.py +0 -0
  270. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_support_contact_hotfix_v161.py +0 -0
  271. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_tool_collision_v011.py +0 -0
  272. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_tool_scene_v0124.py +0 -0
  273. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_trajectory_action_contract_v189.py +0 -0
  274. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_trajectory_action_probe_v0125.py +0 -0
  275. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_trajectory_feedback_tracking_v189.py +0 -0
  276. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_trajectory_qualification_v09.py +0 -0
  277. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_trajectory_tracking_v0125.py +0 -0
  278. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_transfer_controller_policy_v189.py +0 -0
  279. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_twin_materialization_v10.py +0 -0
  280. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_twin_v08.py +0 -0
  281. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  282. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  283. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_user_cli_interactive_v131.py +0 -0
  284. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_user_cli_progress_v131.py +0 -0
  285. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_user_cli_report_visual_v16.py +0 -0
  286. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_user_cli_selective_v14.py +0 -0
  287. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_user_cli_v15.py +0 -0
  288. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
  289. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_v052_stabilization.py +0 -0
  290. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_v08_catalog_mapping_regression.py +0 -0
  291. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_workpiece_attach_semantics_v183.py +0 -0
  292. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_workpiece_carrier_v190.py +0 -0
  293. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_workpiece_lifecycle_v011.py +0 -0
  294. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_workpiece_scene_probe_v185.py +0 -0
  295. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.1}/tests/test_workpiece_semantic_lifecycle_v186.py +0 -0
  296. {devagent_physical_engine-1.9.0 → devagent_physical_engine-1.9.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: 1.9.0
3
+ Version: 1.9.1
4
4
  Summary: Verification-first robotics commissioning runtime with declarative customer report tests, case-centric evidence reuse, qualified UR5e Gazebo/MoveIt execution, exact-Twin lineage, selective verification, regression, replay, and FAT reporting.
5
5
  Author: Tom Ha
6
6
  License: All Rights Reserved
@@ -110,7 +110,7 @@ regression + FAT report + Evidence Viewer
110
110
  Python 3.11+ is required.
111
111
 
112
112
  ```bash
113
- python -m pip install --upgrade devagent-physical-engine==1.9.0
113
+ python -m pip install --upgrade devagent-physical-engine==1.9.1
114
114
  ```
115
115
 
116
116
  Verify the installed package:
@@ -122,7 +122,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
122
122
  Expected:
123
123
 
124
124
  ```text
125
- 1.9.0
125
+ 1.9.1
126
126
  ```
127
127
 
128
128
  Run the normal customer workflow:
@@ -552,6 +552,32 @@ Hosted regression includes an arbitrary customer report test using `FAT-CUSTOM-9
552
552
 
553
553
  Full release notes: https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V1_9_0.md
554
554
 
555
+ ## v1.9.1 repeatable fresh physical simulation
556
+
557
+ v1.9.1 makes evidence reuse and operator-requested fresh execution explicit without changing physical authority boundaries.
558
+
559
+ ```text
560
+ devagent> simulate TEST-PERF-001
561
+ → reuse exact qualified case evidence when available
562
+ → execute only when the mapped case evidence is missing
563
+
564
+ devagent> simulate --fresh TEST-PERF-001
565
+ → force a new execution of the selected unique physical case
566
+ → append a new immutable measurement artifact
567
+
568
+ devagent> simulate --fresh all
569
+ → force every unique mapped physical case once
570
+ → still deduplicate shared case IDs across report criteria
571
+ ```
572
+
573
+ `rerun TEST-X`, `rerun failed`, `rerun blocked`, `rerun affected`, and `rerun all` use the same fresh-execution contract for physical selectors. Deterministic selectors remain evidence-only and never command Gazebo.
574
+
575
+ Interactive verification now owns its Gazebo/MoveIt lifecycle. After an executed verification case captures its evidence, that verification-owned stack is closed so the next fresh command starts from a clean runtime instead of competing with a stale simulator in the same ROS domain. Persistent visualization is a separate intent and remains available through `devagent robot visualize`.
576
+
577
+ The lifecycle change does not relax MoveIt preexecution, canonical start-state compatibility, FollowJointTrajectory result handling, controller-feedback tracking, Twin lineage, site qualification, or real-robot execution locks.
578
+
579
+ Full release notes: https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V1_9_1.md
580
+
555
581
  ## Qualified visual-execution scope
556
582
 
557
583
  Measured report-test execution remains intentionally narrow:
@@ -575,11 +601,15 @@ Use `--interactive`, or `--open` from a real terminal, to keep a bounded prompt:
575
601
  status
576
602
  tests
577
603
  test SELECTOR
578
- simulate [SELECTOR]
579
- rerun [SELECTOR]
604
+ simulate SELECTOR
605
+ simulate all
606
+ simulate --fresh SELECTOR
607
+ simulate --fresh all
608
+ rerun SELECTOR
580
609
  rerun failed
581
610
  rerun blocked
582
611
  rerun affected
612
+ rerun all
583
613
  replay
584
614
  report
585
615
  log
@@ -604,6 +634,8 @@ all
604
634
 
605
635
  `simulate all` creates a report-wide capability execution plan, evaluates deterministic rows directly, deduplicates physical cases, reuses exact qualified evidence first, and executes only missing unique qualified cases.
606
636
 
637
+ `simulate --fresh TEST-X` and `rerun TEST-X` explicitly request a new physical execution; fresh report-wide execution still deduplicates physical case IDs.
638
+
607
639
  `replay` reconstructs persisted evidence identity; it never commands Gazebo, MoveIt, a robot, PLC, or safety PLC.
608
640
 
609
641
  ## Customer input
@@ -754,11 +786,11 @@ devagent-physical-ai optional provider-backed engineering front end
754
786
 
755
787
  # Project status
756
788
 
757
- **v1.9.0 — Production/Stable software workflow; dynamic customer report verification with target-proven qualified UR5e physical baseline**
789
+ **v1.9.1 — Production/Stable software workflow; repeatable fresh physical simulation with owned verification lifecycle**
758
790
 
759
- v1.9.0 adds data-driven report verification on top of the target-proven v1.8.9 physical runtime. Customer test IDs are opaque, report behavior is routed from declarative capability fields, arbitrary finite typed physical metrics can flow through evidence when a qualified adapter measures them, and report-wide simulation deduplicates physical cases so one qualified case measurement can satisfy multiple compatible KPIs without repeated robot motion.
791
+ v1.9.1 preserves v1.9.0's declarative customer report verification and case-centric evidence reuse, while adding explicit fresh physical execution and deterministic simulator lifecycle ownership. Normal `simulate` remains evidence-first; `simulate --fresh ...` and physical `rerun ...` force new execution, and report-wide fresh runs still execute each unique mapped case only once.
760
792
 
761
- The physical qualification claim itself remains grounded in the v1.8.9 target acceptance: the exact candidate completed the bounded UR5e nominal report lifecycle on the intended workstation with exact Twin readback, Pilz preflight, verified GRASP, scoped support contact, Gazebo carry, transfer/place, physical release/settle, explicit MoveIt detach/world reassert, retreat, and final verification.
793
+ The physical qualification claim remains grounded in the target-proven bounded UR5e nominal report lifecycle. v1.9.1 does not expand that claim to arbitrary customer cells and does not grant site qualification, functional-safety certification, or autonomous real-robot execution authority.
762
794
 
763
795
  Production-oriented software capabilities include:
764
796
 
@@ -774,6 +806,8 @@ requirement-driven nominal / boundary / fault case generation
774
806
  immutable project/Twin lineage
775
807
  exact Requirement → Mapping → Verification Plan → Case provenance
776
808
  case-centric qualified evidence reuse
809
+ explicit fresh physical execution
810
+ verification-owned simulator lifecycle cleanup
777
811
  report-wide physical-case deduplication
778
812
  mixed deterministic + physical `simulate all` orchestration
779
813
  truthful NOT_TESTED for unavailable/unsupported evidence
@@ -809,6 +843,9 @@ Production/Stable describes the bounded software workflow. The target-proven UR5
809
843
 
810
844
  ## Documentation
811
845
 
846
+ v1.9.1 release notes:
847
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V1_9_1.md
848
+
812
849
  v1.9.0 release notes:
813
850
  https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V1_9_0.md
814
851
 
@@ -68,7 +68,7 @@ regression + FAT report + Evidence Viewer
68
68
  Python 3.11+ is required.
69
69
 
70
70
  ```bash
71
- python -m pip install --upgrade devagent-physical-engine==1.9.0
71
+ python -m pip install --upgrade devagent-physical-engine==1.9.1
72
72
  ```
73
73
 
74
74
  Verify the installed package:
@@ -80,7 +80,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
80
80
  Expected:
81
81
 
82
82
  ```text
83
- 1.9.0
83
+ 1.9.1
84
84
  ```
85
85
 
86
86
  Run the normal customer workflow:
@@ -510,6 +510,32 @@ Hosted regression includes an arbitrary customer report test using `FAT-CUSTOM-9
510
510
 
511
511
  Full release notes: https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V1_9_0.md
512
512
 
513
+ ## v1.9.1 repeatable fresh physical simulation
514
+
515
+ v1.9.1 makes evidence reuse and operator-requested fresh execution explicit without changing physical authority boundaries.
516
+
517
+ ```text
518
+ devagent> simulate TEST-PERF-001
519
+ → reuse exact qualified case evidence when available
520
+ → execute only when the mapped case evidence is missing
521
+
522
+ devagent> simulate --fresh TEST-PERF-001
523
+ → force a new execution of the selected unique physical case
524
+ → append a new immutable measurement artifact
525
+
526
+ devagent> simulate --fresh all
527
+ → force every unique mapped physical case once
528
+ → still deduplicate shared case IDs across report criteria
529
+ ```
530
+
531
+ `rerun TEST-X`, `rerun failed`, `rerun blocked`, `rerun affected`, and `rerun all` use the same fresh-execution contract for physical selectors. Deterministic selectors remain evidence-only and never command Gazebo.
532
+
533
+ Interactive verification now owns its Gazebo/MoveIt lifecycle. After an executed verification case captures its evidence, that verification-owned stack is closed so the next fresh command starts from a clean runtime instead of competing with a stale simulator in the same ROS domain. Persistent visualization is a separate intent and remains available through `devagent robot visualize`.
534
+
535
+ The lifecycle change does not relax MoveIt preexecution, canonical start-state compatibility, FollowJointTrajectory result handling, controller-feedback tracking, Twin lineage, site qualification, or real-robot execution locks.
536
+
537
+ Full release notes: https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V1_9_1.md
538
+
513
539
  ## Qualified visual-execution scope
514
540
 
515
541
  Measured report-test execution remains intentionally narrow:
@@ -533,11 +559,15 @@ Use `--interactive`, or `--open` from a real terminal, to keep a bounded prompt:
533
559
  status
534
560
  tests
535
561
  test SELECTOR
536
- simulate [SELECTOR]
537
- rerun [SELECTOR]
562
+ simulate SELECTOR
563
+ simulate all
564
+ simulate --fresh SELECTOR
565
+ simulate --fresh all
566
+ rerun SELECTOR
538
567
  rerun failed
539
568
  rerun blocked
540
569
  rerun affected
570
+ rerun all
541
571
  replay
542
572
  report
543
573
  log
@@ -562,6 +592,8 @@ all
562
592
 
563
593
  `simulate all` creates a report-wide capability execution plan, evaluates deterministic rows directly, deduplicates physical cases, reuses exact qualified evidence first, and executes only missing unique qualified cases.
564
594
 
595
+ `simulate --fresh TEST-X` and `rerun TEST-X` explicitly request a new physical execution; fresh report-wide execution still deduplicates physical case IDs.
596
+
565
597
  `replay` reconstructs persisted evidence identity; it never commands Gazebo, MoveIt, a robot, PLC, or safety PLC.
566
598
 
567
599
  ## Customer input
@@ -712,11 +744,11 @@ devagent-physical-ai optional provider-backed engineering front end
712
744
 
713
745
  # Project status
714
746
 
715
- **v1.9.0 — Production/Stable software workflow; dynamic customer report verification with target-proven qualified UR5e physical baseline**
747
+ **v1.9.1 — Production/Stable software workflow; repeatable fresh physical simulation with owned verification lifecycle**
716
748
 
717
- v1.9.0 adds data-driven report verification on top of the target-proven v1.8.9 physical runtime. Customer test IDs are opaque, report behavior is routed from declarative capability fields, arbitrary finite typed physical metrics can flow through evidence when a qualified adapter measures them, and report-wide simulation deduplicates physical cases so one qualified case measurement can satisfy multiple compatible KPIs without repeated robot motion.
749
+ v1.9.1 preserves v1.9.0's declarative customer report verification and case-centric evidence reuse, while adding explicit fresh physical execution and deterministic simulator lifecycle ownership. Normal `simulate` remains evidence-first; `simulate --fresh ...` and physical `rerun ...` force new execution, and report-wide fresh runs still execute each unique mapped case only once.
718
750
 
719
- The physical qualification claim itself remains grounded in the v1.8.9 target acceptance: the exact candidate completed the bounded UR5e nominal report lifecycle on the intended workstation with exact Twin readback, Pilz preflight, verified GRASP, scoped support contact, Gazebo carry, transfer/place, physical release/settle, explicit MoveIt detach/world reassert, retreat, and final verification.
751
+ The physical qualification claim remains grounded in the target-proven bounded UR5e nominal report lifecycle. v1.9.1 does not expand that claim to arbitrary customer cells and does not grant site qualification, functional-safety certification, or autonomous real-robot execution authority.
720
752
 
721
753
  Production-oriented software capabilities include:
722
754
 
@@ -732,6 +764,8 @@ requirement-driven nominal / boundary / fault case generation
732
764
  immutable project/Twin lineage
733
765
  exact Requirement → Mapping → Verification Plan → Case provenance
734
766
  case-centric qualified evidence reuse
767
+ explicit fresh physical execution
768
+ verification-owned simulator lifecycle cleanup
735
769
  report-wide physical-case deduplication
736
770
  mixed deterministic + physical `simulate all` orchestration
737
771
  truthful NOT_TESTED for unavailable/unsupported evidence
@@ -767,6 +801,9 @@ Production/Stable describes the bounded software workflow. The target-proven UR5
767
801
 
768
802
  ## Documentation
769
803
 
804
+ v1.9.1 release notes:
805
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V1_9_1.md
806
+
770
807
  v1.9.0 release notes:
771
808
  https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V1_9_0.md
772
809
 
@@ -802,4 +839,4 @@ Original creator: Tom Ha
802
839
  Original project: https://github.com/tomha85/devagent-physical-engine
803
840
  All rights reserved.
804
841
 
805
- See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
842
+ See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devagent-physical-engine"
7
- version = "1.9.0"
7
+ version = "1.9.1"
8
8
  description = "Verification-first robotics commissioning runtime with declarative customer report tests, case-centric evidence reuse, qualified UR5e Gazebo/MoveIt execution, exact-Twin lineage, selective verification, regression, replay, and FAT reporting."
9
9
  readme = { file = "README.md", content-type = "text/markdown" }
10
10
  requires-python = ">=3.11"
@@ -48,7 +48,7 @@ Issues = "https://github.com/tomha85/devagent-physical-engine/issues"
48
48
  Sponsor = "https://github.com/sponsors/tomha85"
49
49
 
50
50
  [project.scripts]
51
- devagent = "devagent_physical_engine.user_cli_v18:main"
51
+ devagent = "devagent_physical_engine.user_cli_v191:main"
52
52
  devagent-physical = "devagent_physical_engine.cli:main"
53
53
  devagent-physical-ai = "devagent_physical_engine.ai_cli:main"
54
54
  devagent-commercial = "devagent_physical_engine.commercial_cli:main"
@@ -219,4 +219,4 @@ install_industrial_motion_v170()
219
219
  install_controller_runtime_hotfix_v181()
220
220
  install_one_command_runtime()
221
221
 
222
- __version__ = "1.9.0"
222
+ __version__ = "1.9.1"
@@ -0,0 +1,194 @@
1
+ from __future__ import annotations
2
+
3
+ import sys
4
+
5
+ from . import user_cli_v16 as _v16
6
+ from . import user_cli_v18 as _v18
7
+
8
+
9
+ class InteractiveSessionV191(_v16.InteractiveSessionV16):
10
+ """Interactive console with explicit reuse-vs-fresh physical execution semantics.
11
+
12
+ ``simulate SELECTOR`` keeps the v1.9 evidence-first behavior: an exact qualified
13
+ case measurement is reused when one already exists. ``simulate --fresh SELECTOR``
14
+ and ``rerun SELECTOR`` express a different operator intent: execute each selected
15
+ unique physical case again and append new immutable evidence. Deterministic rows
16
+ remain evidence-only and never launch a simulator.
17
+
18
+ Interactive verification owns the simulator lifecycle for every executed case. A
19
+ successful case is therefore closed after evidence capture instead of leaving an
20
+ unmanaged Gazebo/MoveIt stack behind for the next interactive command. Persistent
21
+ visualization belongs to ``devagent robot visualize`` rather than verification.
22
+ """
23
+
24
+ def _executor(self, repository):
25
+ # Verification must be repeatable. Keeping a successful simulator open makes the
26
+ # next fresh command launch a second Gazebo/MoveIt stack into the same ROS domain,
27
+ # which can produce stale model read-back or startup-timeout failures. The case
28
+ # runner remains visible while it executes, but it is stopped after evidence is
29
+ # captured so the next command starts from a clean owned lifecycle.
30
+ return _v16.ReportTestSelectiveExecutor(
31
+ repository,
32
+ source_root=self.source,
33
+ keep_open=False,
34
+ progress=lambda stage, message: self.tracker.emit(
35
+ stage, "RUNNING", message
36
+ ),
37
+ )
38
+
39
+ def _fresh_simulation(self, selector: str, *, action: str) -> None:
40
+ self.tracker.emit(
41
+ "SELECTIVE",
42
+ "RUNNING",
43
+ f"fresh visual {action} selector={selector}",
44
+ )
45
+ repository = self._repository()
46
+ try:
47
+ artifact = self._service(repository).run_simulation(
48
+ project_id=self.result.project_id,
49
+ selector=selector,
50
+ parent_campaign_artifact_id=self.result.campaign_artifact_id,
51
+ executor=self._executor(repository),
52
+ force_execution=True,
53
+ )
54
+ except (_v16.CommercialError, _v16.ProjectError, OSError) as exc:
55
+ self.tracker.emit("SELECTIVE", "BLOCKED", str(exc))
56
+ print(f"Fresh selective simulation blocked: {exc}")
57
+ print("No unqualified simulator or robot command was substituted.")
58
+ return
59
+
60
+ state = str(artifact.payload.get("state") or "complete").upper()
61
+ reason = str(artifact.payload.get("reason") or "")
62
+ self.tracker.emit(
63
+ "SELECTIVE",
64
+ state,
65
+ f"artifact={artifact.artifact_id} selector={selector} fresh=true"
66
+ + (f" reason={reason}" if reason else ""),
67
+ )
68
+ self._refresh_viewer(repository)
69
+ self._print_selective(artifact.payload)
70
+ if reason == "report_capability_execution_plan_v190":
71
+ self._print_batch_plan(artifact.payload)
72
+
73
+ if artifact.payload.get("state") == "blocked":
74
+ print("No unqualified simulator or robot command was executed.")
75
+ return
76
+ if reason == "simulation_not_required_deterministic_evidence":
77
+ print(
78
+ "Fresh execution is not applicable to this deterministic test; "
79
+ "immutable Twin evidence was evaluated directly."
80
+ )
81
+ return
82
+
83
+ contracts = artifact.payload.get("contracts")
84
+ physical_selected = (
85
+ any(
86
+ isinstance(item, dict) and item.get("mode") == "physical"
87
+ for item in contracts
88
+ )
89
+ if isinstance(contracts, list)
90
+ else False
91
+ )
92
+ if physical_selected and not artifact.payload.get("execution_performed"):
93
+ # A fresh physical request must never silently degrade into evidence reuse.
94
+ self.tracker.emit(
95
+ "SELECTIVE",
96
+ "ERROR",
97
+ f"fresh execution contract not satisfied selector={selector}",
98
+ )
99
+ print(
100
+ "Fresh physical execution was requested but no physical case was "
101
+ "executed. Treat this result as invalid and inspect RUN.log."
102
+ )
103
+ return
104
+
105
+ if artifact.payload.get("execution_performed"):
106
+ print(
107
+ "Fresh physical execution completed; prior qualified measurements were "
108
+ "not reused for the requested case execution."
109
+ )
110
+ print(
111
+ "The new measurement is appended as immutable evidence; previous "
112
+ "measurements remain available for audit/replay."
113
+ )
114
+ print(
115
+ "The verification-owned Gazebo/MoveIt runtime was closed after evidence "
116
+ "capture so the next execution starts cleanly."
117
+ )
118
+
119
+ def _simulate(self, extra: list[str]) -> None:
120
+ fresh_count = sum(item == "--fresh" for item in extra)
121
+ if not fresh_count:
122
+ super()._simulate(extra)
123
+ return
124
+ selectors = [item for item in extra if item != "--fresh"]
125
+ if fresh_count != 1 or len(selectors) != 1 or len(extra) != 2:
126
+ print("Usage: simulate [--fresh] SELECTOR")
127
+ return
128
+ self._fresh_simulation(selectors[0], action="simulate")
129
+
130
+ def _rerun(self, extra: list[str]) -> None:
131
+ if len(extra) > 1:
132
+ print("Usage: rerun [SELECTOR]")
133
+ return
134
+ if extra:
135
+ self._fresh_simulation(extra[0], action="rerun")
136
+ return
137
+ self._verify_again(
138
+ simulate=self.result.simulation_requested,
139
+ action="RERUN",
140
+ )
141
+
142
+ @staticmethod
143
+ def _help() -> None:
144
+ print(
145
+ """Commands:
146
+ status show the latest bounded full-verification summary
147
+ tests show the live report matrix and evidence authority
148
+ test SELECTOR evaluate selected criteria from existing evidence only
149
+ simulate SELECTOR reuse exact qualified case evidence, else execute missing case(s)
150
+ simulate all dedupe/reuse report cases and execute only missing case(s)
151
+ simulate --fresh SELECTOR force fresh execution of selected unique physical case(s)
152
+ simulate --fresh all force every unique mapped physical case once
153
+ rerun SELECTOR alias for fresh selective execution for physical selectors
154
+ rerun failed freshly execute physical cases behind failed criteria
155
+ rerun blocked freshly execute physical cases behind NOT_TESTED/blocked criteria
156
+ rerun affected freshly execute physical cases selected by change impact
157
+ rerun all freshly execute every unique mapped physical case once
158
+ rerun repeat the prior full-verification mode
159
+ replay inspect/reconstruct stored evidence; never commands a robot
160
+ report open the current Evidence Viewer in a browser tab
161
+ log [N] show the last N RUN.log lines (default 40, maximum 500)
162
+ help show this command list
163
+ quit leave the interactive session
164
+
165
+ A report TEST-ID is a verification criterion, not a robot-run identity. Multiple tests
166
+ may consume the same physical case measurement. Normal `simulate` therefore reuses exact
167
+ qualified evidence by design. Use `--fresh` or `rerun SELECTOR` when the operator
168
+ explicitly wants a new physical execution. Fresh report-wide execution still deduplicates
169
+ case IDs so one physical scenario is never repeated merely because several criteria
170
+ consume its evidence. Deterministic tests remain evidence-only and never launch Gazebo.
171
+ Verification-owned Gazebo/MoveIt sessions are closed after each executed case; use
172
+ `devagent robot visualize` when a persistent visual session is desired.
173
+ """
174
+ )
175
+
176
+
177
+ def _run_v191(argv: list[str]) -> int:
178
+ original_session = _v16.InteractiveSessionV16
179
+ _v16.InteractiveSessionV16 = InteractiveSessionV191
180
+ try:
181
+ return _v16.main(argv)
182
+ finally:
183
+ _v16.InteractiveSessionV16 = original_session
184
+
185
+
186
+ def main(argv: list[str] | None = None) -> int:
187
+ effective = list(sys.argv[1:] if argv is None else argv)
188
+ if effective and effective[0] in {"robots", "robot"}:
189
+ return _v18.main(effective)
190
+ return _run_v191(effective)
191
+
192
+
193
+ if __name__ == "__main__":
194
+ raise SystemExit(main())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devagent-physical-engine
3
- Version: 1.9.0
3
+ Version: 1.9.1
4
4
  Summary: Verification-first robotics commissioning runtime with declarative customer report tests, case-centric evidence reuse, qualified UR5e Gazebo/MoveIt execution, exact-Twin lineage, selective verification, regression, replay, and FAT reporting.
5
5
  Author: Tom Ha
6
6
  License: All Rights Reserved
@@ -110,7 +110,7 @@ regression + FAT report + Evidence Viewer
110
110
  Python 3.11+ is required.
111
111
 
112
112
  ```bash
113
- python -m pip install --upgrade devagent-physical-engine==1.9.0
113
+ python -m pip install --upgrade devagent-physical-engine==1.9.1
114
114
  ```
115
115
 
116
116
  Verify the installed package:
@@ -122,7 +122,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
122
122
  Expected:
123
123
 
124
124
  ```text
125
- 1.9.0
125
+ 1.9.1
126
126
  ```
127
127
 
128
128
  Run the normal customer workflow:
@@ -552,6 +552,32 @@ Hosted regression includes an arbitrary customer report test using `FAT-CUSTOM-9
552
552
 
553
553
  Full release notes: https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V1_9_0.md
554
554
 
555
+ ## v1.9.1 repeatable fresh physical simulation
556
+
557
+ v1.9.1 makes evidence reuse and operator-requested fresh execution explicit without changing physical authority boundaries.
558
+
559
+ ```text
560
+ devagent> simulate TEST-PERF-001
561
+ → reuse exact qualified case evidence when available
562
+ → execute only when the mapped case evidence is missing
563
+
564
+ devagent> simulate --fresh TEST-PERF-001
565
+ → force a new execution of the selected unique physical case
566
+ → append a new immutable measurement artifact
567
+
568
+ devagent> simulate --fresh all
569
+ → force every unique mapped physical case once
570
+ → still deduplicate shared case IDs across report criteria
571
+ ```
572
+
573
+ `rerun TEST-X`, `rerun failed`, `rerun blocked`, `rerun affected`, and `rerun all` use the same fresh-execution contract for physical selectors. Deterministic selectors remain evidence-only and never command Gazebo.
574
+
575
+ Interactive verification now owns its Gazebo/MoveIt lifecycle. After an executed verification case captures its evidence, that verification-owned stack is closed so the next fresh command starts from a clean runtime instead of competing with a stale simulator in the same ROS domain. Persistent visualization is a separate intent and remains available through `devagent robot visualize`.
576
+
577
+ The lifecycle change does not relax MoveIt preexecution, canonical start-state compatibility, FollowJointTrajectory result handling, controller-feedback tracking, Twin lineage, site qualification, or real-robot execution locks.
578
+
579
+ Full release notes: https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V1_9_1.md
580
+
555
581
  ## Qualified visual-execution scope
556
582
 
557
583
  Measured report-test execution remains intentionally narrow:
@@ -575,11 +601,15 @@ Use `--interactive`, or `--open` from a real terminal, to keep a bounded prompt:
575
601
  status
576
602
  tests
577
603
  test SELECTOR
578
- simulate [SELECTOR]
579
- rerun [SELECTOR]
604
+ simulate SELECTOR
605
+ simulate all
606
+ simulate --fresh SELECTOR
607
+ simulate --fresh all
608
+ rerun SELECTOR
580
609
  rerun failed
581
610
  rerun blocked
582
611
  rerun affected
612
+ rerun all
583
613
  replay
584
614
  report
585
615
  log
@@ -604,6 +634,8 @@ all
604
634
 
605
635
  `simulate all` creates a report-wide capability execution plan, evaluates deterministic rows directly, deduplicates physical cases, reuses exact qualified evidence first, and executes only missing unique qualified cases.
606
636
 
637
+ `simulate --fresh TEST-X` and `rerun TEST-X` explicitly request a new physical execution; fresh report-wide execution still deduplicates physical case IDs.
638
+
607
639
  `replay` reconstructs persisted evidence identity; it never commands Gazebo, MoveIt, a robot, PLC, or safety PLC.
608
640
 
609
641
  ## Customer input
@@ -754,11 +786,11 @@ devagent-physical-ai optional provider-backed engineering front end
754
786
 
755
787
  # Project status
756
788
 
757
- **v1.9.0 — Production/Stable software workflow; dynamic customer report verification with target-proven qualified UR5e physical baseline**
789
+ **v1.9.1 — Production/Stable software workflow; repeatable fresh physical simulation with owned verification lifecycle**
758
790
 
759
- v1.9.0 adds data-driven report verification on top of the target-proven v1.8.9 physical runtime. Customer test IDs are opaque, report behavior is routed from declarative capability fields, arbitrary finite typed physical metrics can flow through evidence when a qualified adapter measures them, and report-wide simulation deduplicates physical cases so one qualified case measurement can satisfy multiple compatible KPIs without repeated robot motion.
791
+ v1.9.1 preserves v1.9.0's declarative customer report verification and case-centric evidence reuse, while adding explicit fresh physical execution and deterministic simulator lifecycle ownership. Normal `simulate` remains evidence-first; `simulate --fresh ...` and physical `rerun ...` force new execution, and report-wide fresh runs still execute each unique mapped case only once.
760
792
 
761
- The physical qualification claim itself remains grounded in the v1.8.9 target acceptance: the exact candidate completed the bounded UR5e nominal report lifecycle on the intended workstation with exact Twin readback, Pilz preflight, verified GRASP, scoped support contact, Gazebo carry, transfer/place, physical release/settle, explicit MoveIt detach/world reassert, retreat, and final verification.
793
+ The physical qualification claim remains grounded in the target-proven bounded UR5e nominal report lifecycle. v1.9.1 does not expand that claim to arbitrary customer cells and does not grant site qualification, functional-safety certification, or autonomous real-robot execution authority.
762
794
 
763
795
  Production-oriented software capabilities include:
764
796
 
@@ -774,6 +806,8 @@ requirement-driven nominal / boundary / fault case generation
774
806
  immutable project/Twin lineage
775
807
  exact Requirement → Mapping → Verification Plan → Case provenance
776
808
  case-centric qualified evidence reuse
809
+ explicit fresh physical execution
810
+ verification-owned simulator lifecycle cleanup
777
811
  report-wide physical-case deduplication
778
812
  mixed deterministic + physical `simulate all` orchestration
779
813
  truthful NOT_TESTED for unavailable/unsupported evidence
@@ -809,6 +843,9 @@ Production/Stable describes the bounded software workflow. The target-proven UR5
809
843
 
810
844
  ## Documentation
811
845
 
846
+ v1.9.1 release notes:
847
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V1_9_1.md
848
+
812
849
  v1.9.0 release notes:
813
850
  https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V1_9_0.md
814
851
 
@@ -71,6 +71,7 @@ src/devagent_physical_engine/user_cli.py
71
71
  src/devagent_physical_engine/user_cli_v15.py
72
72
  src/devagent_physical_engine/user_cli_v16.py
73
73
  src/devagent_physical_engine/user_cli_v18.py
74
+ src/devagent_physical_engine/user_cli_v191.py
74
75
  src/devagent_physical_engine/verification.py
75
76
  src/devagent_physical_engine/verification_capabilities_v190.py
76
77
  src/devagent_physical_engine/workpiece_lifecycle.py
@@ -202,6 +203,8 @@ tests/test_evidence_trust_transport_v12.py
202
203
  tests/test_evidence_trust_v12.py
203
204
  tests/test_evidence_viewer_palette_v130.py
204
205
  tests/test_explicit_detach_world_reassert_v189.py
206
+ tests/test_fresh_simulation_cli_v191.py
207
+ tests/test_fresh_simulation_service_v191.py
205
208
  tests/test_gazebo_cli_v0122.py
206
209
  tests/test_golden_abb_runner_v171.py
207
210
  tests/test_golden_abb_showcase.py
@@ -1,5 +1,5 @@
1
1
  [console_scripts]
2
- devagent = devagent_physical_engine.user_cli_v18:main
2
+ devagent = devagent_physical_engine.user_cli_v191:main
3
3
  devagent-commercial = devagent_physical_engine.commercial_cli:main
4
4
  devagent-physical = devagent_physical_engine.cli:main
5
5
  devagent-physical-ai = devagent_physical_engine.ai_cli:main