devagent-physical-engine 1.6.1__tar.gz → 1.6.2__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 (225) hide show
  1. {devagent_physical_engine-1.6.1/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.6.2}/PKG-INFO +20 -5
  2. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/README.md +19 -4
  3. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/pyproject.toml +2 -2
  4. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/__init__.py +3 -1
  5. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/joint_state_recorder.py +40 -4
  6. devagent_physical_engine-1.6.2/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +39 -0
  7. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2/src/devagent_physical_engine.egg-info}/PKG-INFO +20 -5
  8. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine.egg-info/SOURCES.txt +2 -0
  9. devagent_physical_engine-1.6.2/tests/test_smooth_motion_hotfix_v162.py +81 -0
  10. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/NOTICE +0 -0
  11. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/setup.cfg +0 -0
  12. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/__init__.py +0 -0
  13. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/compiler.py +0 -0
  14. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/contracts.py +0 -0
  15. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/coordinator.py +0 -0
  16. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/critic.py +0 -0
  17. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/evidence.py +0 -0
  18. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  19. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/planner.py +0 -0
  20. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/recovery.py +0 -0
  21. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/routing.py +0 -0
  22. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/runtime.py +0 -0
  23. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/semantic.py +0 -0
  24. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/structured.py +0 -0
  25. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ai_cli.py +0 -0
  26. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/cli.py +0 -0
  27. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/commercial.py +0 -0
  28. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/commercial_campaign.py +0 -0
  29. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/commercial_cli.py +0 -0
  30. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/commercial_importer.py +0 -0
  31. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
  32. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/commercial_readiness.py +0 -0
  33. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/commercial_repository.py +0 -0
  34. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/continuous_clearance.py +0 -0
  35. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/doctor.py +0 -0
  36. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/engineering_agent.py +0 -0
  37. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/engineering_request.py +0 -0
  38. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/evidence_replay.py +0 -0
  39. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/evidence_trust.py +0 -0
  40. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/execution.py +0 -0
  41. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/models.py +0 -0
  42. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/one_command.py +0 -0
  43. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/one_command_runtime.py +0 -0
  44. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/one_command_v15.py +0 -0
  45. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/one_command_v16.py +0 -0
  46. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/operating_envelope.py +0 -0
  47. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  48. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  49. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  50. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  51. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  52. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  53. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/experience.py +0 -0
  54. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/measured.py +0 -0
  55. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  56. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  57. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/physical_campaign.py +0 -0
  58. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/physical_evidence.py +0 -0
  59. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/physical_motion.py +0 -0
  60. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/planning.py +0 -0
  61. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/pose_math.py +0 -0
  62. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/preexecution_contract.py +0 -0
  63. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/production_authority.py +0 -0
  64. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/production_grade.py +0 -0
  65. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/project.py +0 -0
  66. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  67. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  68. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  69. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  70. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  71. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
  72. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/provider_criterion.py +0 -0
  73. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/provider_qualification.py +0 -0
  74. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/providers.py +0 -0
  75. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/qualification.py +0 -0
  76. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/qualification_cli.py +0 -0
  77. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/qualification_harness.py +0 -0
  78. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/reference_workcell.py +0 -0
  79. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/report_test_execution.py +0 -0
  80. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
  81. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/robot_platform.py +0 -0
  82. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/robots.py +0 -0
  83. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/__init__.py +0 -0
  84. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  85. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/commands.py +0 -0
  86. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
  87. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/doctor.py +0 -0
  88. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
  89. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
  90. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  91. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
  92. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
  93. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  94. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
  95. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  96. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
  97. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
  98. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  99. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
  100. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
  101. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  102. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  103. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
  104. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
  105. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
  106. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  107. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
  108. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
  109. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
  110. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
  111. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
  112. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  113. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
  114. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
  115. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
  116. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
  117. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
  118. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  119. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  120. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
  121. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
  122. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
  123. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
  124. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
  125. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/selective_verification.py +0 -0
  126. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
  127. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/setup_profile.py +0 -0
  128. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
  129. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/simulation.py +0 -0
  130. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/simulation_platform.py +0 -0
  131. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
  132. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/tool_collision.py +0 -0
  133. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  134. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/twin.py +0 -0
  135. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/twin_builder.py +0 -0
  136. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/twin_codec.py +0 -0
  137. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/twin_materialization.py +0 -0
  138. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/user_cli.py +0 -0
  139. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/user_cli_v15.py +0 -0
  140. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/user_cli_v16.py +0 -0
  141. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/verification.py +0 -0
  142. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
  143. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  144. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
  145. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
  146. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  147. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_agent_core.py +0 -0
  148. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_agent_semantic_hardening.py +0 -0
  149. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_ai_cli.py +0 -0
  150. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_ai_cli_v07.py +0 -0
  151. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_commercial_importer_v1.py +0 -0
  152. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_commercial_intelligence_v15.py +0 -0
  153. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_commercial_readiness_v1.py +0 -0
  154. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_commercial_v1.py +0 -0
  155. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_continuous_clearance_v011.py +0 -0
  156. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_core.py +0 -0
  157. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_engineering_request_v07.py +0 -0
  158. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_evidence_replay_v12.py +0 -0
  159. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_evidence_trust_coverage_v12.py +0 -0
  160. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_evidence_trust_transport_v12.py +0 -0
  161. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_evidence_trust_v12.py +0 -0
  162. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_evidence_viewer_palette_v130.py +0 -0
  163. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_gazebo_cli_v0122.py +0 -0
  164. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_golden_abb_showcase.py +0 -0
  165. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_interpreter_profiles_v08.py +0 -0
  166. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_joint_state_probe_v0125.py +0 -0
  167. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_live_provider_qualification.py +0 -0
  168. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_measured_motion_v10.py +0 -0
  169. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
  170. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_moveit_scene_v0123.py +0 -0
  171. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_natural_language_agent_v07.py +0 -0
  172. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_one_command_hardening_v13.py +0 -0
  173. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_one_command_pose_hardening_v15.py +0 -0
  174. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_one_command_regression_v141.py +0 -0
  175. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_one_command_v13.py +0 -0
  176. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_openai_strict_schema_v0113.py +0 -0
  177. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_optimization_v05.py +0 -0
  178. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_physical_campaign_v09.py +0 -0
  179. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_physical_evidence_v09.py +0 -0
  180. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_physical_motion_v09.py +0 -0
  181. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_planning_fallback_v012.py +0 -0
  182. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_pose_math_v0125.py +0 -0
  183. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_preexecution_contract_v10.py +0 -0
  184. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_production_authority_v11.py +0 -0
  185. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_production_grade_coverage_v11.py +0 -0
  186. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_production_grade_v11.py +0 -0
  187. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_project_spine_v013.py +0 -0
  188. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_provider_and_qualification.py +0 -0
  189. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_provider_criterion_v15.py +0 -0
  190. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  191. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_qualification_harness_v06.py +0 -0
  192. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_readme_pypi.py +0 -0
  193. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_real_provider_adapters.py +0 -0
  194. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
  195. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_reference_workcell_v012.py +0 -0
  196. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_report_test_contract_coverage_v16.py +0 -0
  197. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_report_test_lineage_v16.py +0 -0
  198. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_report_test_visual_execution_v16.py +0 -0
  199. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_robot_platform_v08.py +0 -0
  200. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_ros2_production_receipts_v011.py +0 -0
  201. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_ros2_simulation.py +0 -0
  202. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_ros_trajectory_v09.py +0 -0
  203. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_selective_verification_v14.py +0 -0
  204. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_setup_profile.py +0 -0
  205. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_sim_real_qualification_v011.py +0 -0
  206. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_simulation_platform_v08.py +0 -0
  207. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_support_contact_hotfix_v161.py +0 -0
  208. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_tool_collision_v011.py +0 -0
  209. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_tool_scene_v0124.py +0 -0
  210. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_trajectory_action_probe_v0125.py +0 -0
  211. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_trajectory_qualification_v09.py +0 -0
  212. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_trajectory_tracking_v0125.py +0 -0
  213. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_twin_materialization_v10.py +0 -0
  214. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_twin_v08.py +0 -0
  215. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  216. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  217. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_user_cli_interactive_v131.py +0 -0
  218. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_user_cli_progress_v131.py +0 -0
  219. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_user_cli_report_visual_v16.py +0 -0
  220. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_user_cli_selective_v14.py +0 -0
  221. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_user_cli_v15.py +0 -0
  222. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
  223. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_v052_stabilization.py +0 -0
  224. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_v08_catalog_mapping_regression.py +0 -0
  225. {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_workpiece_lifecycle_v011.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devagent-physical-engine
3
- Version: 1.6.1
3
+ Version: 1.6.2
4
4
  Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, report-test Gazebo visualization, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
5
5
  Author: Tom Ha
6
6
  License: All Rights Reserved
@@ -82,7 +82,7 @@ DevAgent is designed to answer: **What can be proven about this cell, what faile
82
82
  Python 3.11+ is required.
83
83
 
84
84
  ```bash
85
- python -m pip install --upgrade devagent-physical-engine==1.6.1
85
+ python -m pip install --upgrade devagent-physical-engine==1.6.2
86
86
  ```
87
87
 
88
88
  Verify the installed package:
@@ -94,7 +94,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
94
94
  Expected:
95
95
 
96
96
  ```text
97
- 1.6.1
97
+ 1.6.2
98
98
  ```
99
99
 
100
100
  Run the normal customer workflow:
@@ -217,6 +217,21 @@ attached workpiece ↔ conveyor_a support surface
217
217
 
218
218
  That allowance is scoped to lift departure only. Transfer/place keep normal collision checking, no global PlanningScene collision policy is disabled, and the live ACM is never replaced by a sparse two-object matrix.
219
219
 
220
+ ## v1.6.2 smooth visual motion hotfix
221
+
222
+ v1.6.2 makes the packaged UR5e visual task deliberately slower and easier to inspect. The task-specific MoveIt planner defaults are reduced from 25% velocity / 25% acceleration to:
223
+
224
+ ```text
225
+ velocity scale: 12%
226
+ acceleration scale: 8%
227
+ ```
228
+
229
+ This is real trajectory time parameterization through MoveIt and `FollowJointTrajectory`; DevAgent does not fake smoothness with teleports or sleeps. Explicit planner scales remain authoritative. Collision checks, endpoint tolerances, tracking tolerances, Twin lineage, and real-execution authority are unchanged.
230
+
231
+ The joint-state recorder also rejects duplicate/backward ROS source timestamps before trajectory interpolation while recording the number of dropped samples. This removes the false `trajectory_tracking_time_not_increasing` failure caused by duplicate Gazebo/ros2_control JointState stamps without manufacturing synthetic timestamps.
232
+
233
+ Because the visual trajectory now executes more slowly, cycle-time requirements are evaluated against the actual slower simulation execution. DevAgent does not normalize the observed duration back to a faster value or claim performance that was not executed.
234
+
220
235
  ## Exact lineage hardening
221
236
 
222
237
  A case ID such as `case-0001` is local to its verification plan. v1.6 therefore requires the complete lineage:
@@ -512,9 +527,9 @@ devagent-physical-ai optional provider-backed engineering front end
512
527
 
513
528
  # Project status
514
529
 
515
- **v1.6.1 — Production/Stable software workflow**
530
+ **v1.6.2 — Production/Stable software workflow**
516
531
 
517
- v1.6.1 hotfixes the qualified UR5e report-test lift preflight by preserving the complete live MoveIt Allowed Collision Matrix and allowing only the attached workpiece/source-support contact during lift departure. It retains v1.6 exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, interactive report-case visualization, and fail-closed unsupported scopes.
532
+ v1.6.2 slows the packaged UR5e task/report visual motion to conservative 12% velocity / 8% acceleration defaults and hardens JointState acquisition against duplicate/backward ROS timestamps. It retains the v1.6.1 lift support-contact fix, exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, and fail-closed authority boundaries.
518
533
 
519
534
  Production-oriented software capabilities include:
520
535
 
@@ -41,7 +41,7 @@ DevAgent is designed to answer: **What can be proven about this cell, what faile
41
41
  Python 3.11+ is required.
42
42
 
43
43
  ```bash
44
- python -m pip install --upgrade devagent-physical-engine==1.6.1
44
+ python -m pip install --upgrade devagent-physical-engine==1.6.2
45
45
  ```
46
46
 
47
47
  Verify the installed package:
@@ -53,7 +53,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
53
53
  Expected:
54
54
 
55
55
  ```text
56
- 1.6.1
56
+ 1.6.2
57
57
  ```
58
58
 
59
59
  Run the normal customer workflow:
@@ -176,6 +176,21 @@ attached workpiece ↔ conveyor_a support surface
176
176
 
177
177
  That allowance is scoped to lift departure only. Transfer/place keep normal collision checking, no global PlanningScene collision policy is disabled, and the live ACM is never replaced by a sparse two-object matrix.
178
178
 
179
+ ## v1.6.2 smooth visual motion hotfix
180
+
181
+ v1.6.2 makes the packaged UR5e visual task deliberately slower and easier to inspect. The task-specific MoveIt planner defaults are reduced from 25% velocity / 25% acceleration to:
182
+
183
+ ```text
184
+ velocity scale: 12%
185
+ acceleration scale: 8%
186
+ ```
187
+
188
+ This is real trajectory time parameterization through MoveIt and `FollowJointTrajectory`; DevAgent does not fake smoothness with teleports or sleeps. Explicit planner scales remain authoritative. Collision checks, endpoint tolerances, tracking tolerances, Twin lineage, and real-execution authority are unchanged.
189
+
190
+ The joint-state recorder also rejects duplicate/backward ROS source timestamps before trajectory interpolation while recording the number of dropped samples. This removes the false `trajectory_tracking_time_not_increasing` failure caused by duplicate Gazebo/ros2_control JointState stamps without manufacturing synthetic timestamps.
191
+
192
+ Because the visual trajectory now executes more slowly, cycle-time requirements are evaluated against the actual slower simulation execution. DevAgent does not normalize the observed duration back to a faster value or claim performance that was not executed.
193
+
179
194
  ## Exact lineage hardening
180
195
 
181
196
  A case ID such as `case-0001` is local to its verification plan. v1.6 therefore requires the complete lineage:
@@ -471,9 +486,9 @@ devagent-physical-ai optional provider-backed engineering front end
471
486
 
472
487
  # Project status
473
488
 
474
- **v1.6.1 — Production/Stable software workflow**
489
+ **v1.6.2 — Production/Stable software workflow**
475
490
 
476
- v1.6.1 hotfixes the qualified UR5e report-test lift preflight by preserving the complete live MoveIt Allowed Collision Matrix and allowing only the attached workpiece/source-support contact during lift departure. It retains v1.6 exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, interactive report-case visualization, and fail-closed unsupported scopes.
491
+ v1.6.2 slows the packaged UR5e task/report visual motion to conservative 12% velocity / 8% acceleration defaults and hardens JointState acquisition against duplicate/backward ROS timestamps. It retains the v1.6.1 lift support-contact fix, exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, and fail-closed authority boundaries.
477
492
 
478
493
  Production-oriented software capabilities include:
479
494
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devagent-physical-engine"
7
- version = "1.6.1"
7
+ version = "1.6.2"
8
8
  description = "Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, report-test Gazebo visualization, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence."
9
9
  readme = { file = "README.md", content-type = "text/markdown" }
10
10
  requires-python = ">=3.11"
@@ -81,4 +81,4 @@ omit = [
81
81
  [tool.coverage.report]
82
82
  fail_under = 75
83
83
  show_missing = true
84
- skip_covered = false
84
+ skip_covered = false
@@ -108,6 +108,7 @@ from .selective_verification import (
108
108
  VerificationTestMappingRecorder,
109
109
  )
110
110
  from .selective_verification_v16 import SelectiveVerificationServiceV16
111
+ from .smooth_motion_hotfix_v162 import install_smooth_motion_hotfix_v162
111
112
  from .support_contact_hotfix_v161 import install_support_contact_hotfix_v161
112
113
  from .twin import TwinConfidenceLevel, TwinSpec, TwinValidationReport, TwinValidator
113
114
  from .twin_codec import twin_from_dict, twin_from_revision
@@ -211,6 +212,7 @@ __all__ = [
211
212
  ]
212
213
 
213
214
  install_support_contact_hotfix_v161()
215
+ install_smooth_motion_hotfix_v162()
214
216
  install_one_command_runtime()
215
217
 
216
- __version__ = "1.6.1"
218
+ __version__ = "1.6.2"
@@ -14,6 +14,29 @@ def _atomic_json(path: Path, payload: dict[str, object]) -> None:
14
14
  temporary.replace(path)
15
15
 
16
16
 
17
+ def accepted_sample_time_ns(
18
+ *,
19
+ stamped_ns: int,
20
+ fallback_ns: int,
21
+ previous_ns: int | None,
22
+ ) -> int | None:
23
+ """Return one strictly increasing sample timestamp or reject the duplicate.
24
+
25
+ Some ros2_control/Gazebo publishers can emit more than one JointState callback
26
+ with the same ROS header stamp. Tracking interpolation requires a strictly
27
+ increasing time axis, so duplicate/backward source stamps are discarded rather
28
+ than silently perturbing their timestamps. The recorder reports how many samples
29
+ were discarded so the raw acquisition behavior remains auditable.
30
+ """
31
+
32
+ candidate = int(stamped_ns) if int(stamped_ns) > 0 else int(fallback_ns)
33
+ if candidate < 0:
34
+ return None
35
+ if previous_ns is not None and candidate <= int(previous_ns):
36
+ return None
37
+ return candidate
38
+
39
+
17
40
  def main() -> int:
18
41
  parser = argparse.ArgumentParser()
19
42
  parser.add_argument("--output", required=True)
@@ -30,6 +53,7 @@ def main() -> int:
30
53
  samples: list[dict[str, object]] = []
31
54
  overflow = False
32
55
  ready_written = False
56
+ dropped_non_increasing = 0
33
57
 
34
58
  import rclpy
35
59
  from sensor_msgs.msg import JointState
@@ -37,20 +61,29 @@ def main() -> int:
37
61
  rclpy.init()
38
62
  node = rclpy.create_node("devagent_joint_state_recorder")
39
63
  started_ns: int | None = None
64
+ previous_ns: int | None = None
40
65
 
41
66
  def callback(message: JointState) -> None:
42
- nonlocal started_ns, overflow, ready_written
67
+ nonlocal started_ns, previous_ns, overflow, ready_written, dropped_non_increasing
43
68
  stamp = message.header.stamp
44
69
  stamped_ns = int(stamp.sec) * 1_000_000_000 + int(stamp.nanosec)
45
- now_ns = stamped_ns if stamped_ns > 0 else node.get_clock().now().nanoseconds
70
+ selected_ns = accepted_sample_time_ns(
71
+ stamped_ns=stamped_ns,
72
+ fallback_ns=node.get_clock().now().nanoseconds,
73
+ previous_ns=previous_ns,
74
+ )
75
+ if selected_ns is None:
76
+ dropped_non_increasing += 1
77
+ return
78
+ previous_ns = selected_ns
46
79
  if started_ns is None:
47
- started_ns = now_ns
80
+ started_ns = selected_ns
48
81
  if len(samples) >= int(args.max_samples):
49
82
  overflow = True
50
83
  return
51
84
  samples.append(
52
85
  {
53
- "time_s": (now_ns - started_ns) / 1_000_000_000.0,
86
+ "time_s": (selected_ns - started_ns) / 1_000_000_000.0,
54
87
  "names": list(message.name),
55
88
  "positions_rad": list(message.position),
56
89
  }
@@ -62,6 +95,7 @@ def main() -> int:
62
95
  "ready": True,
63
96
  "topic": args.topic,
64
97
  "first_sample_received": True,
98
+ "strictly_increasing_time": True,
65
99
  },
66
100
  )
67
101
  ready_written = True
@@ -77,6 +111,8 @@ def main() -> int:
77
111
  "sample_count": len(samples),
78
112
  "overflow": overflow,
79
113
  "ready_observed": ready_written,
114
+ "strictly_increasing_time": True,
115
+ "dropped_non_increasing_count": dropped_non_increasing,
80
116
  "samples": samples,
81
117
  }
82
118
  _atomic_json(output, payload)
@@ -0,0 +1,39 @@
1
+ from __future__ import annotations
2
+
3
+ from functools import wraps
4
+ from typing import Any
5
+
6
+ from .ros2.moveit_task_planner import MoveItTaskPlanner
7
+
8
+
9
+ VISUAL_MOVEIT_VELOCITY_SCALE = 0.12
10
+ VISUAL_MOVEIT_ACCELERATION_SCALE = 0.08
11
+ _PATCH_MARKER = "_devagent_smooth_motion_v162"
12
+
13
+
14
+ def install_smooth_motion_hotfix_v162() -> None:
15
+ """Install conservative defaults for the task-specific visual MoveIt planner.
16
+
17
+ MoveItTaskPlanner is used only by the packaged task/report visual execution paths.
18
+ Those paths previously inherited 25% velocity and 25% acceleration. On the
19
+ qualified UR5e reference cell that made short pick/lift phases visually abrupt
20
+ and also reduced controller tracking margin on a real Gazebo/ros2_control stack.
21
+
22
+ v1.6.2 lowers only the planner defaults used when the caller did not explicitly
23
+ request a scale. Explicit planner scales remain authoritative. Collision checking,
24
+ endpoint tolerances, tracking tolerances, exact-Twin lineage, and real-execution
25
+ authority are not relaxed.
26
+ """
27
+
28
+ current = MoveItTaskPlanner.__init__
29
+ if getattr(current, _PATCH_MARKER, False):
30
+ return
31
+
32
+ @wraps(current)
33
+ def patched(self: MoveItTaskPlanner, *args: Any, **kwargs: Any) -> None:
34
+ kwargs.setdefault("velocity_scale", VISUAL_MOVEIT_VELOCITY_SCALE)
35
+ kwargs.setdefault("acceleration_scale", VISUAL_MOVEIT_ACCELERATION_SCALE)
36
+ current(self, *args, **kwargs)
37
+
38
+ setattr(patched, _PATCH_MARKER, True)
39
+ MoveItTaskPlanner.__init__ = patched
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devagent-physical-engine
3
- Version: 1.6.1
3
+ Version: 1.6.2
4
4
  Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, report-test Gazebo visualization, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
5
5
  Author: Tom Ha
6
6
  License: All Rights Reserved
@@ -82,7 +82,7 @@ DevAgent is designed to answer: **What can be proven about this cell, what faile
82
82
  Python 3.11+ is required.
83
83
 
84
84
  ```bash
85
- python -m pip install --upgrade devagent-physical-engine==1.6.1
85
+ python -m pip install --upgrade devagent-physical-engine==1.6.2
86
86
  ```
87
87
 
88
88
  Verify the installed package:
@@ -94,7 +94,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
94
94
  Expected:
95
95
 
96
96
  ```text
97
- 1.6.1
97
+ 1.6.2
98
98
  ```
99
99
 
100
100
  Run the normal customer workflow:
@@ -217,6 +217,21 @@ attached workpiece ↔ conveyor_a support surface
217
217
 
218
218
  That allowance is scoped to lift departure only. Transfer/place keep normal collision checking, no global PlanningScene collision policy is disabled, and the live ACM is never replaced by a sparse two-object matrix.
219
219
 
220
+ ## v1.6.2 smooth visual motion hotfix
221
+
222
+ v1.6.2 makes the packaged UR5e visual task deliberately slower and easier to inspect. The task-specific MoveIt planner defaults are reduced from 25% velocity / 25% acceleration to:
223
+
224
+ ```text
225
+ velocity scale: 12%
226
+ acceleration scale: 8%
227
+ ```
228
+
229
+ This is real trajectory time parameterization through MoveIt and `FollowJointTrajectory`; DevAgent does not fake smoothness with teleports or sleeps. Explicit planner scales remain authoritative. Collision checks, endpoint tolerances, tracking tolerances, Twin lineage, and real-execution authority are unchanged.
230
+
231
+ The joint-state recorder also rejects duplicate/backward ROS source timestamps before trajectory interpolation while recording the number of dropped samples. This removes the false `trajectory_tracking_time_not_increasing` failure caused by duplicate Gazebo/ros2_control JointState stamps without manufacturing synthetic timestamps.
232
+
233
+ Because the visual trajectory now executes more slowly, cycle-time requirements are evaluated against the actual slower simulation execution. DevAgent does not normalize the observed duration back to a faster value or claim performance that was not executed.
234
+
220
235
  ## Exact lineage hardening
221
236
 
222
237
  A case ID such as `case-0001` is local to its verification plan. v1.6 therefore requires the complete lineage:
@@ -512,9 +527,9 @@ devagent-physical-ai optional provider-backed engineering front end
512
527
 
513
528
  # Project status
514
529
 
515
- **v1.6.1 — Production/Stable software workflow**
530
+ **v1.6.2 — Production/Stable software workflow**
516
531
 
517
- v1.6.1 hotfixes the qualified UR5e report-test lift preflight by preserving the complete live MoveIt Allowed Collision Matrix and allowing only the attached workpiece/source-support contact during lift departure. It retains v1.6 exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, interactive report-case visualization, and fail-closed unsupported scopes.
532
+ v1.6.2 slows the packaged UR5e task/report visual motion to conservative 12% velocity / 8% acceleration defaults and hardens JointState acquisition against duplicate/backward ROS timestamps. It retains the v1.6.1 lift support-contact fix, exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, and fail-closed authority boundaries.
518
533
 
519
534
  Production-oriented software capabilities include:
520
535
 
@@ -50,6 +50,7 @@ src/devagent_physical_engine/setup_profile.py
50
50
  src/devagent_physical_engine/sim_real_qualification.py
51
51
  src/devagent_physical_engine/simulation.py
52
52
  src/devagent_physical_engine/simulation_platform.py
53
+ src/devagent_physical_engine/smooth_motion_hotfix_v162.py
53
54
  src/devagent_physical_engine/support_contact_hotfix_v161.py
54
55
  src/devagent_physical_engine/tool_collision.py
55
56
  src/devagent_physical_engine/trajectory_qualification.py
@@ -200,6 +201,7 @@ tests/test_selective_verification_v14.py
200
201
  tests/test_setup_profile.py
201
202
  tests/test_sim_real_qualification_v011.py
202
203
  tests/test_simulation_platform_v08.py
204
+ tests/test_smooth_motion_hotfix_v162.py
203
205
  tests/test_support_contact_hotfix_v161.py
204
206
  tests/test_tool_collision_v011.py
205
207
  tests/test_tool_scene_v0124.py
@@ -0,0 +1,81 @@
1
+ from __future__ import annotations
2
+
3
+ import unittest
4
+
5
+ from devagent_physical_engine.ros2.joint_state_recorder import accepted_sample_time_ns
6
+ from devagent_physical_engine.ros2.moveit_task_planner import MoveItTaskPlanner
7
+ from devagent_physical_engine.smooth_motion_hotfix_v162 import (
8
+ VISUAL_MOVEIT_ACCELERATION_SCALE,
9
+ VISUAL_MOVEIT_VELOCITY_SCALE,
10
+ install_smooth_motion_hotfix_v162,
11
+ )
12
+
13
+
14
+ class SmoothMotionHotfixV162Tests(unittest.TestCase):
15
+ def test_default_visual_planner_is_slow_and_conservative(self) -> None:
16
+ install_smooth_motion_hotfix_v162()
17
+ install_smooth_motion_hotfix_v162()
18
+ planner = MoveItTaskPlanner(object())
19
+ self.assertEqual(planner.velocity_scale, VISUAL_MOVEIT_VELOCITY_SCALE)
20
+ self.assertEqual(planner.acceleration_scale, VISUAL_MOVEIT_ACCELERATION_SCALE)
21
+ self.assertEqual(planner.velocity_scale, 0.12)
22
+ self.assertEqual(planner.acceleration_scale, 0.08)
23
+
24
+ def test_explicit_planner_scales_are_not_overridden(self) -> None:
25
+ planner = MoveItTaskPlanner(
26
+ object(),
27
+ velocity_scale=0.21,
28
+ acceleration_scale=0.13,
29
+ )
30
+ self.assertEqual(planner.velocity_scale, 0.21)
31
+ self.assertEqual(planner.acceleration_scale, 0.13)
32
+
33
+ def test_joint_state_timestamp_uses_positive_source_stamp(self) -> None:
34
+ self.assertEqual(
35
+ accepted_sample_time_ns(
36
+ stamped_ns=2_000_000_000,
37
+ fallback_ns=9_000_000_000,
38
+ previous_ns=1_000_000_000,
39
+ ),
40
+ 2_000_000_000,
41
+ )
42
+
43
+ def test_joint_state_timestamp_falls_back_when_source_stamp_is_zero(self) -> None:
44
+ self.assertEqual(
45
+ accepted_sample_time_ns(
46
+ stamped_ns=0,
47
+ fallback_ns=3_000_000_000,
48
+ previous_ns=2_000_000_000,
49
+ ),
50
+ 3_000_000_000,
51
+ )
52
+
53
+ def test_duplicate_and_backward_joint_state_timestamps_are_rejected(self) -> None:
54
+ self.assertIsNone(
55
+ accepted_sample_time_ns(
56
+ stamped_ns=2_000_000_000,
57
+ fallback_ns=8_000_000_000,
58
+ previous_ns=2_000_000_000,
59
+ )
60
+ )
61
+ self.assertIsNone(
62
+ accepted_sample_time_ns(
63
+ stamped_ns=1_999_999_999,
64
+ fallback_ns=8_000_000_000,
65
+ previous_ns=2_000_000_000,
66
+ )
67
+ )
68
+
69
+ def test_first_sample_can_start_at_zero_fallback_clock(self) -> None:
70
+ self.assertEqual(
71
+ accepted_sample_time_ns(
72
+ stamped_ns=0,
73
+ fallback_ns=0,
74
+ previous_ns=None,
75
+ ),
76
+ 0,
77
+ )
78
+
79
+
80
+ if __name__ == "__main__":
81
+ unittest.main()