devagent-physical-engine 1.2.0__tar.gz → 1.3.0__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 (192) hide show
  1. devagent_physical_engine-1.3.0/PKG-INFO +1181 -0
  2. devagent_physical_engine-1.3.0/README.md +1140 -0
  3. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/pyproject.toml +3 -2
  4. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/__init__.py +15 -1
  5. devagent_physical_engine-1.3.0/src/devagent_physical_engine/one_command.py +961 -0
  6. devagent_physical_engine-1.3.0/src/devagent_physical_engine/user_cli.py +107 -0
  7. devagent_physical_engine-1.3.0/src/devagent_physical_engine.egg-info/PKG-INFO +1181 -0
  8. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine.egg-info/SOURCES.txt +4 -0
  9. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine.egg-info/entry_points.txt +1 -0
  10. devagent_physical_engine-1.3.0/tests/test_one_command_hardening_v13.py +88 -0
  11. devagent_physical_engine-1.3.0/tests/test_one_command_v13.py +232 -0
  12. devagent_physical_engine-1.2.0/PKG-INFO +0 -976
  13. devagent_physical_engine-1.2.0/README.md +0 -935
  14. devagent_physical_engine-1.2.0/src/devagent_physical_engine.egg-info/PKG-INFO +0 -976
  15. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/NOTICE +0 -0
  16. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/setup.cfg +0 -0
  17. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/__init__.py +0 -0
  18. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/compiler.py +0 -0
  19. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/contracts.py +0 -0
  20. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/coordinator.py +0 -0
  21. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/critic.py +0 -0
  22. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/evidence.py +0 -0
  23. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  24. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/planner.py +0 -0
  25. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/recovery.py +0 -0
  26. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/routing.py +0 -0
  27. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/runtime.py +0 -0
  28. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/semantic.py +0 -0
  29. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/structured.py +0 -0
  30. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ai_cli.py +0 -0
  31. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/cli.py +0 -0
  32. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/commercial.py +0 -0
  33. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/commercial_campaign.py +0 -0
  34. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/commercial_cli.py +0 -0
  35. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/commercial_importer.py +0 -0
  36. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/commercial_readiness.py +0 -0
  37. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/commercial_repository.py +0 -0
  38. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/continuous_clearance.py +0 -0
  39. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/doctor.py +0 -0
  40. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/engineering_agent.py +0 -0
  41. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/engineering_request.py +0 -0
  42. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/evidence_replay.py +0 -0
  43. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/evidence_trust.py +0 -0
  44. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/execution.py +0 -0
  45. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/models.py +0 -0
  46. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/operating_envelope.py +0 -0
  47. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  48. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  49. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  50. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  51. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  52. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  53. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/experience.py +0 -0
  54. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/measured.py +0 -0
  55. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  56. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  57. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/physical_campaign.py +0 -0
  58. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/physical_evidence.py +0 -0
  59. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/physical_motion.py +0 -0
  60. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/planning.py +0 -0
  61. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/pose_math.py +0 -0
  62. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/preexecution_contract.py +0 -0
  63. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/production_authority.py +0 -0
  64. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/production_grade.py +0 -0
  65. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/project.py +0 -0
  66. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  67. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  68. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  69. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  70. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  71. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
  72. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/provider_qualification.py +0 -0
  73. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/providers.py +0 -0
  74. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/qualification.py +0 -0
  75. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/qualification_cli.py +0 -0
  76. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/qualification_harness.py +0 -0
  77. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/reference_workcell.py +0 -0
  78. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/robot_platform.py +0 -0
  79. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/robots.py +0 -0
  80. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/__init__.py +0 -0
  81. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  82. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/commands.py +0 -0
  83. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
  84. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/doctor.py +0 -0
  85. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
  86. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
  87. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  88. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
  89. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
  90. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  91. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
  92. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
  93. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  94. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
  95. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  96. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
  97. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
  98. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  99. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  100. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
  101. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
  102. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  103. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
  104. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
  105. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
  106. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  107. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
  108. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
  109. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
  110. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
  111. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
  112. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  113. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  114. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
  115. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
  116. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
  117. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
  118. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
  119. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/setup_profile.py +0 -0
  120. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
  121. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/simulation.py +0 -0
  122. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/simulation_platform.py +0 -0
  123. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/tool_collision.py +0 -0
  124. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  125. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/twin.py +0 -0
  126. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/twin_builder.py +0 -0
  127. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/twin_materialization.py +0 -0
  128. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/verification.py +0 -0
  129. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
  130. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  131. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
  132. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  133. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_agent_core.py +0 -0
  134. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_agent_semantic_hardening.py +0 -0
  135. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_ai_cli.py +0 -0
  136. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_ai_cli_v07.py +0 -0
  137. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_commercial_importer_v1.py +0 -0
  138. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_commercial_readiness_v1.py +0 -0
  139. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_commercial_v1.py +0 -0
  140. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_continuous_clearance_v011.py +0 -0
  141. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_core.py +0 -0
  142. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_engineering_request_v07.py +0 -0
  143. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_evidence_replay_v12.py +0 -0
  144. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_evidence_trust_coverage_v12.py +0 -0
  145. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_evidence_trust_transport_v12.py +0 -0
  146. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_evidence_trust_v12.py +0 -0
  147. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_gazebo_cli_v0122.py +0 -0
  148. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_interpreter_profiles_v08.py +0 -0
  149. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_joint_state_probe_v0125.py +0 -0
  150. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_live_provider_qualification.py +0 -0
  151. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_measured_motion_v10.py +0 -0
  152. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
  153. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_moveit_scene_v0123.py +0 -0
  154. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_natural_language_agent_v07.py +0 -0
  155. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_openai_strict_schema_v0113.py +0 -0
  156. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_optimization_v05.py +0 -0
  157. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_physical_campaign_v09.py +0 -0
  158. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_physical_evidence_v09.py +0 -0
  159. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_physical_motion_v09.py +0 -0
  160. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_planning_fallback_v012.py +0 -0
  161. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_pose_math_v0125.py +0 -0
  162. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_preexecution_contract_v10.py +0 -0
  163. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_production_authority_v11.py +0 -0
  164. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_production_grade_coverage_v11.py +0 -0
  165. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_production_grade_v11.py +0 -0
  166. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_project_spine_v013.py +0 -0
  167. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_provider_and_qualification.py +0 -0
  168. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  169. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_qualification_harness_v06.py +0 -0
  170. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_readme_pypi.py +0 -0
  171. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_real_provider_adapters.py +0 -0
  172. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
  173. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_reference_workcell_v012.py +0 -0
  174. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_robot_platform_v08.py +0 -0
  175. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_ros2_production_receipts_v011.py +0 -0
  176. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_ros2_simulation.py +0 -0
  177. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_ros_trajectory_v09.py +0 -0
  178. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_setup_profile.py +0 -0
  179. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_sim_real_qualification_v011.py +0 -0
  180. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_simulation_platform_v08.py +0 -0
  181. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_tool_collision_v011.py +0 -0
  182. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_tool_scene_v0124.py +0 -0
  183. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_trajectory_action_probe_v0125.py +0 -0
  184. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_trajectory_qualification_v09.py +0 -0
  185. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_trajectory_tracking_v0125.py +0 -0
  186. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_twin_materialization_v10.py +0 -0
  187. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_twin_v08.py +0 -0
  188. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  189. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  190. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_v052_stabilization.py +0 -0
  191. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_v08_catalog_mapping_regression.py +0 -0
  192. {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_workpiece_lifecycle_v011.py +0 -0
@@ -0,0 +1,1181 @@
1
+ Metadata-Version: 2.4
2
+ Name: devagent-physical-engine
3
+ Version: 1.3.0
4
+ Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
5
+ Author: Tom Ha
6
+ License: All Rights Reserved
7
+ Project-URL: Homepage, https://github.com/tomha85/devagent-physical-engine
8
+ Project-URL: Repository, https://github.com/tomha85/devagent-physical-engine
9
+ Project-URL: Issues, https://github.com/tomha85/devagent-physical-engine/issues
10
+ Keywords: robotics,industrial-automation,agentic-ai,ros2,verification,digital-twin,fat-testing,regression,evidence,replay
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+ License-File: NOTICE
23
+ Requires-Dist: PyYAML<7,>=6.0
24
+ Provides-Extra: openai
25
+ Requires-Dist: openai<4,>=3.0; extra == "openai"
26
+ Provides-Extra: anthropic
27
+ Requires-Dist: anthropic<2,>=1.0; extra == "anthropic"
28
+ Provides-Extra: gemini
29
+ Requires-Dist: google-genai<3,>=2.0; extra == "gemini"
30
+ Provides-Extra: ai
31
+ Requires-Dist: openai<4,>=3.0; extra == "ai"
32
+ Requires-Dist: anthropic<2,>=1.0; extra == "ai"
33
+ Requires-Dist: google-genai<3,>=2.0; extra == "ai"
34
+ Provides-Extra: dev
35
+ Requires-Dist: build==1.6.0; extra == "dev"
36
+ Requires-Dist: twine==7.0.0; extra == "dev"
37
+ Requires-Dist: coverage[toml]<8,>=7.6; extra == "dev"
38
+ Requires-Dist: ruff<1,>=0.12; extra == "dev"
39
+ Requires-Dist: pip-audit<3,>=2.9; extra == "dev"
40
+ Dynamic: license-file
41
+
42
+ # DevAgent Smart Physical Engine
43
+
44
+ [![PyPI](https://img.shields.io/pypi/v/devagent-physical-engine.svg)](https://pypi.org/project/devagent-physical-engine/)
45
+ [![Python](https://img.shields.io/pypi/pyversions/devagent-physical-engine.svg)](https://pypi.org/project/devagent-physical-engine/)
46
+ [![Status: Production/Stable](https://img.shields.io/badge/status-production%2Fstable-blue.svg)](#project-status)
47
+
48
+ **Verification-first commissioning engineering for robotics and industrial automation.**
49
+
50
+ DevAgent turns an ordinary customer engineering folder into a bounded, traceable verification workflow:
51
+
52
+ ```text
53
+ customer files
54
+
55
+ intake + SHA-256 inventory
56
+
57
+ requirements + explicit engineering facts
58
+
59
+ immutable Digital Twin revision
60
+
61
+ deterministic verification plan
62
+
63
+ measured evidence when a qualified execution path exists
64
+
65
+ PASS / FAIL / NOT_TESTED
66
+
67
+ FAT report + Evidence Viewer + replayable lineage
68
+ ```
69
+
70
+ > **AI proposes. Deterministic engines validate, compile, verify, measure, and gate promotion. OEM robot controllers, PLCs, safety PLCs, and certified safety systems remain authoritative.**
71
+
72
+ DevAgent is designed to answer a practical commissioning question before engineers travel onsite:
73
+
74
+ > **What can be proven about this cell, what failed, what is still unknown, what changed, and what evidence supports the conclusion?**
75
+
76
+ ---
77
+
78
+ ## Quick start
79
+
80
+ Python 3.11+ is required.
81
+
82
+ Install:
83
+
84
+ ```bash
85
+ python -m pip install --upgrade devagent-physical-engine==1.3.0
86
+ ```
87
+
88
+ Verify the installed version:
89
+
90
+ ```bash
91
+ python -c "import devagent_physical_engine as d; print(d.__version__)"
92
+ ```
93
+
94
+ Expected:
95
+
96
+ ```text
97
+ 1.3.0
98
+ ```
99
+
100
+ Run DevAgent on the customer project folder:
101
+
102
+ ```bash
103
+ devagent verify ./customer-project
104
+ ```
105
+
106
+ That is the normal starting point.
107
+
108
+ You do **not** need to manually initialize a DevAgent project, choose artifact IDs, convert an XLSX sheet to CSV, or understand the internal evidence database before using Simple Mode.
109
+
110
+ If you also want physical simulation when an exact qualified execution path exists:
111
+
112
+ ```bash
113
+ devagent verify ./customer-project --simulate
114
+ ```
115
+
116
+ If you want DevAgent to open the generated Evidence Viewer:
117
+
118
+ ```bash
119
+ devagent verify ./customer-project --simulate --open
120
+ ```
121
+
122
+ For machine-readable output:
123
+
124
+ ```bash
125
+ devagent verify ./customer-project --json
126
+ ```
127
+
128
+ Use a dedicated evidence database and results directory when required:
129
+
130
+ ```bash
131
+ devagent verify ./customer-project \
132
+ --db ./customer-projects.db \
133
+ --output ./verification-results \
134
+ --json
135
+ ```
136
+
137
+ Default locations:
138
+
139
+ ```text
140
+ Evidence database: ~/.devagent/projects.db
141
+ Results: <customer-project>/devagent-results/
142
+ ```
143
+
144
+ ---
145
+
146
+ # How to use the engine
147
+
148
+ ## 1. Give DevAgent the engineering folder you already have
149
+
150
+ A typical project may look like this:
151
+
152
+ ```text
153
+ ACME_CNC_CELL_TEST/
154
+ ├── project.yaml
155
+ ├── requirements.xlsx
156
+ ├── ur5e.urdf
157
+ ├── tcp.yaml
158
+ ├── layout.yaml
159
+ ├── robot_program/
160
+ │ └── mission.yaml
161
+ ├── drawings.step
162
+ ├── safety_requirements.pdf
163
+ └── expected/
164
+ └── expected_findings.json
165
+ ```
166
+
167
+ The filenames do not all have to match this example. DevAgent inventories the source tree, fingerprints files with SHA-256, assigns bounded roles, and normalizes supported structured evidence.
168
+
169
+ Important rule:
170
+
171
+ ```text
172
+ file discovered != engineering fact proven
173
+ ```
174
+
175
+ A URDF, Xacro, STEP, STL, PDF, YAML, or JSON file does not automatically prove pose, TCP, calibration, collision geometry, physics, safety, or production readiness.
176
+
177
+ ### What DevAgent does during intake
178
+
179
+ ```text
180
+ CUSTOMER FOLDER
181
+ |
182
+ v
183
+ FILE INVENTORY + SHA-256
184
+ |
185
+ v
186
+ ROLE CLASSIFICATION
187
+ |
188
+ +--> expected/ test data -> NEVER engineering authority
189
+ |
190
+ v
191
+ REQUIREMENT NORMALIZATION
192
+ |
193
+ v
194
+ EXPLICIT FACT EXTRACTION
195
+ |
196
+ v
197
+ PROPOSED TWIN NORMALIZATION
198
+ |
199
+ v
200
+ DETERMINISTIC TWIN VALIDATION
201
+ |
202
+ +--> missing or ambiguous facts -> QUESTIONS.md
203
+ |
204
+ v
205
+ VERIFICATION PLAN / CAMPAIGN / FAT
206
+ |
207
+ v
208
+ EVIDENCE VIEWER
209
+ ```
210
+
211
+ Unknown facts remain unknown. DevAgent does not fill engineering gaps with guesses.
212
+
213
+ ---
214
+
215
+ ## 2. First-run example: incomplete customer information
216
+
217
+ Assume the customer provides this `project.yaml`:
218
+
219
+ ```yaml
220
+ project_id: acme-cell
221
+ name: ACME Cell
222
+ site_id: atl-01
223
+ workcell_id: cell-01
224
+ ```
225
+
226
+ and also provides robot/layout/TCP/requirements files, but does not say exactly what task the robot must perform.
227
+
228
+ Run:
229
+
230
+ ```bash
231
+ devagent verify ./ACME_CNC_CELL_TEST
232
+ ```
233
+
234
+ DevAgent creates the project automatically and may return:
235
+
236
+ ```text
237
+ State: needs_information
238
+ ```
239
+
240
+ Typical questions may include:
241
+
242
+ ```text
243
+ engineering_request_operation_missing
244
+ engineering_request_object_id_missing
245
+ engineering_request_source_missing
246
+ engineering_request_destination_missing
247
+ ```
248
+
249
+ The questions are also written to:
250
+
251
+ ```text
252
+ ACME_CNC_CELL_TEST/devagent-results/QUESTIONS.md
253
+ ```
254
+
255
+ This is expected fail-closed behavior. DevAgent will not invent the operation, workpiece, source, or destination simply to produce a green report.
256
+
257
+ Typical first-run output:
258
+
259
+ ```text
260
+ ACME_CNC_CELL_TEST/
261
+ └── devagent-results/
262
+ ├── SUMMARY.json
263
+ ├── INTAKE.json
264
+ ├── QUESTIONS.md
265
+ └── normalized/
266
+ └── requirements.csv
267
+ ```
268
+
269
+ Fix the source engineering information, then run the same command again.
270
+
271
+ ---
272
+
273
+ ## 3. Complete ACME example
274
+
275
+ The following example uses the same input shape exercised by the v1.3 one-command acceptance tests.
276
+
277
+ ### `project.yaml`
278
+
279
+ ```yaml
280
+ project_id: acme-cell
281
+ name: ACME Cell
282
+ site_id: atl-01
283
+ workcell_id: cell-01
284
+
285
+ robot_base_pose:
286
+ x: 0
287
+ y: 0
288
+ z: 0
289
+ roll: 0
290
+ pitch: 0
291
+ yaw: 0
292
+
293
+ engineering_request:
294
+ robot: ur5e
295
+ operation: load
296
+ object_id: BOX_101
297
+ source: conveyor_a
298
+ destination: cnc_04
299
+ tool: gripper
300
+ payload_kg: 1.5
301
+ ```
302
+
303
+ ### `tcp.yaml`
304
+
305
+ ```yaml
306
+ tcp:
307
+ x: 0
308
+ y: 0
309
+ z: 180
310
+ roll: 0
311
+ pitch: 0
312
+ yaw: 0
313
+ ```
314
+
315
+ ### `layout.yaml`
316
+
317
+ ```yaml
318
+ entities:
319
+ - id: conveyor_a
320
+ type: conveyor
321
+ pose:
322
+ x: 700
323
+ y: 0
324
+ z: 850
325
+ geometry:
326
+ kind: box
327
+ dimensions: [2000, 600, 800]
328
+
329
+ - id: cnc_04
330
+ type: machine
331
+ pose:
332
+ x: 1200
333
+ y: 400
334
+ z: 0
335
+ geometry:
336
+ kind: box
337
+ dimensions: [1400, 1200, 1800]
338
+
339
+ - id: BOX_101
340
+ type: workpiece
341
+ pose:
342
+ x: 700
343
+ y: 0
344
+ z: 900
345
+ geometry:
346
+ kind: box
347
+ dimensions: [200, 100, 50]
348
+ ```
349
+
350
+ ### `ur5e.urdf`
351
+
352
+ Use the customer's real robot model. A minimal test fixture can look like:
353
+
354
+ ```xml
355
+ <robot name="ur5e"/>
356
+ ```
357
+
358
+ Do not treat a placeholder URDF as production geometry evidence.
359
+
360
+ ### `requirements.xlsx`
361
+
362
+ A conventional first worksheet can contain columns such as:
363
+
364
+ | requirement_id | text | check | target | expected | severity |
365
+ | --- | --- | --- | ---: | --- | --- |
366
+ | REQ-101 | Cycle time <= 8 s | cycle_time_max_s | 8.0 | true | must |
367
+ | REQ-102 | E-stop accessible | | | true | must |
368
+
369
+ Simple Mode can normalize common requirement ID, text, check, threshold/target, expected-value, and severity/criticality column names without requiring OpenPyXL at runtime.
370
+
371
+ If the spreadsheet columns are ambiguous, DevAgent asks for clarification rather than guessing which column is authoritative.
372
+
373
+ Run:
374
+
375
+ ```bash
376
+ devagent verify ./ACME_CNC_CELL_TEST
377
+ ```
378
+
379
+ When enough explicit evidence exists to build the Twin and deterministic campaign, the results directory can expand to:
380
+
381
+ ```text
382
+ ACME_CNC_CELL_TEST/
383
+ └── devagent-results/
384
+ ├── SUMMARY.json
385
+ ├── INTAKE.json
386
+ ├── QUESTIONS.md
387
+ ├── normalized/
388
+ │ ├── requirements.csv
389
+ │ └── devagent-twin.yaml
390
+ ├── FAT_REPORT.html
391
+ └── EVIDENCE.html
392
+ ```
393
+
394
+ `normalized/devagent-twin.yaml` is generated evidence mapping. It is not an independent source of truth and does not bypass Twin validation.
395
+
396
+ ---
397
+
398
+ ## 4. Request simulation
399
+
400
+ Run:
401
+
402
+ ```bash
403
+ devagent verify ./ACME_CNC_CELL_TEST --simulate
404
+ ```
405
+
406
+ `--simulate` means:
407
+
408
+ ```text
409
+ request measured physical simulation if the exact imported-Twin execution path is qualified
410
+ ```
411
+
412
+ It does **not** mean:
413
+
414
+ ```text
415
+ run any available demo and label it customer evidence
416
+ ```
417
+
418
+ The current one-command safety boundary is:
419
+
420
+ ```text
421
+ IMPORTED CUSTOMER TWIN
422
+ |
423
+ v
424
+ EXACT QUALIFIED EXECUTION ADAPTER?
425
+ |
426
+ +----+----+
427
+ | |
428
+ YES NO
429
+ | |
430
+ execute simulation_state=blocked
431
+ measure exit 31 when --simulate was requested
432
+ record no fake measurement
433
+ ```
434
+
435
+ For example, the repository contains a UR5e reference simulation stack, but:
436
+
437
+ ```text
438
+ reference UR5e demo != customer imported Twin evidence
439
+ ```
440
+
441
+ If the exact imported-customer execution adapter is not qualified, DevAgent reports a bounded reason such as:
442
+
443
+ ```text
444
+ imported_customer_twin_execution_adapter_not_yet_qualified
445
+ ```
446
+
447
+ or:
448
+
449
+ ```text
450
+ twin_not_ready_for_physics
451
+ ```
452
+
453
+ That is intentional. A blocked simulation is more trustworthy than a visually impressive but unrelated demo.
454
+
455
+ ---
456
+
457
+ ## 5. Open the Evidence Viewer
458
+
459
+ When evidence lineage can be rendered:
460
+
461
+ ```bash
462
+ devagent verify ./ACME_CNC_CELL_TEST --open
463
+ ```
464
+
465
+ or:
466
+
467
+ ```bash
468
+ devagent verify ./ACME_CNC_CELL_TEST --simulate --open
469
+ ```
470
+
471
+ The viewer is read-only and is intended to answer:
472
+
473
+ - Which requirement was evaluated?
474
+ - What was the verdict?
475
+ - What value was observed?
476
+ - What threshold or expected value was used?
477
+ - Which Twin revision was evaluated?
478
+ - Which evidence artifact supports the result?
479
+ - Which SHA-256 hashes bind the evidence?
480
+ - What is still blocked or not tested?
481
+
482
+ The trust principle is simple:
483
+
484
+ > **Do not trust a PASS label by itself. Inspect the evidence behind it.**
485
+
486
+ ---
487
+
488
+ # Understanding the results
489
+
490
+ ## `SUMMARY.json`
491
+
492
+ This is the primary machine-readable result of Simple Mode.
493
+
494
+ Important fields include:
495
+
496
+ ```text
497
+ project_id
498
+ state
499
+ twin_revision_id
500
+ twin_state
501
+ requirements_file
502
+ verification_plan_artifact_id
503
+ campaign_artifact_id
504
+ fat_artifact_id
505
+ evidence_bundle_artifact_id
506
+ evidence_viewer
507
+ simulation_requested
508
+ simulation_state
509
+ simulation_reason
510
+ release_ready
511
+ real_execution_allowed
512
+ questions
513
+ ```
514
+
515
+ A green software workflow never changes this hard safety boundary by itself:
516
+
517
+ ```text
518
+ real_execution_allowed = false
519
+ ```
520
+
521
+ ## `INTAKE.json`
522
+
523
+ Records the source-file inventory and SHA-256 fingerprints so the customer can see exactly what DevAgent inspected.
524
+
525
+ Each discovered file is associated with a bounded role and authority decision.
526
+
527
+ Examples:
528
+
529
+ ```text
530
+ requirements.xlsx -> requirements
531
+ layout.yaml -> engineering_data
532
+ ur5e.urdf -> robot_model
533
+ safety_requirements.pdf -> manual engineering document
534
+ expected/... -> test_oracle, used_for_authority=false
535
+ ```
536
+
537
+ ## `QUESTIONS.md`
538
+
539
+ Contains missing or ambiguous engineering facts that prevented deterministic promotion.
540
+
541
+ Use it as an engineering punch list, update the original customer files, and rerun:
542
+
543
+ ```bash
544
+ devagent verify ./ACME_CNC_CELL_TEST
545
+ ```
546
+
547
+ ## `FAT_REPORT.html`
548
+
549
+ Customer-readable verification report generated when a campaign can be built.
550
+
551
+ A missing metric or unsupported requirement is not silently changed to PASS. It remains `NOT_TESTED` or otherwise blocks readiness.
552
+
553
+ ## `EVIDENCE.html`
554
+
555
+ Read-only evidence view of requirement/Twin/artifact lineage.
556
+
557
+ ---
558
+
559
+ # Requirements and verdicts
560
+
561
+ Supported deterministic structural/Twin checks include:
562
+
563
+ ```text
564
+ planning_allowed
565
+ physics_allowed
566
+ entity_present
567
+ validation_issue_absent
568
+ twin_state
569
+ ```
570
+
571
+ Measured physical checks include:
572
+
573
+ ```text
574
+ cycle_time_max_s
575
+ minimum_clearance_m
576
+ final_tcp_error_max_m
577
+ max_tracking_error_rad
578
+ collision_free
579
+ physical_completed
580
+ ```
581
+
582
+ The verdict model is intentionally bounded:
583
+
584
+ ```text
585
+ PASS
586
+ FAIL
587
+ NOT_TESTED
588
+ ```
589
+
590
+ A requirement that needs measured physical evidence cannot PASS from prose, a CAD filename, or a generated verification plan.
591
+
592
+ Example:
593
+
594
+ ```text
595
+ Requirement: cycle time <= 8.0 s
596
+ Measurement available: no
597
+ Verdict: NOT_TESTED
598
+ ```
599
+
600
+ When exact-Twin measured evidence exists:
601
+
602
+ ```text
603
+ Requirement: cycle time <= 8.0 s
604
+ Observed: 7.42 s
605
+ Threshold: 8.0 s
606
+ Verdict: PASS
607
+ Evidence: exact measurement artifact + Twin revision/hash
608
+ ```
609
+
610
+ ---
611
+
612
+ # XLSX, PDF, and expected-data policies
613
+
614
+ ## XLSX requirements
615
+
616
+ Simple Mode supports conventional `requirements.xlsx` first-worksheet normalization.
617
+
618
+ Common semantic columns include:
619
+
620
+ ```text
621
+ requirement ID
622
+ requirement text / description
623
+ check / metric
624
+ target / threshold
625
+ expected value
626
+ severity / criticality / priority
627
+ ```
628
+
629
+ If multiple requirement sources are present and authority becomes ambiguous, DevAgent fails closed rather than silently merging them.
630
+
631
+ ## PDF documents
632
+
633
+ PDFs are inventoried and fingerprinted for review.
634
+
635
+ v1.3 does **not** silently OCR arbitrary safety PDFs and convert extracted prose into deterministic PASS evidence.
636
+
637
+ A safety requirement without a supported deterministic check remains manual/`NOT_TESTED` until appropriate evidence exists.
638
+
639
+ ## `expected/` folders
640
+
641
+ A root `expected/` folder is treated as test-fixture oracle data:
642
+
643
+ ```text
644
+ expected/
645
+ -> inventoried
646
+ -> SHA-256 recorded
647
+ -> role = test_oracle
648
+ -> used_for_authority = false
649
+ ```
650
+
651
+ This prevents a fixture from proving its own expected answer.
652
+
653
+ ---
654
+
655
+ # Simple Mode exit codes
656
+
657
+ | Exit | Meaning |
658
+ | ---: | --- |
659
+ | `0` | bounded verification is release-ready |
660
+ | `10` | customer input or operational contract failure |
661
+ | `30` | more engineering information is required |
662
+ | `31` | simulation was requested but the exact execution path is blocked/unqualified |
663
+ | `32` | verification completed but release readiness is still false |
664
+
665
+ Non-zero engineering exits are intentional and machine-friendly.
666
+
667
+ Example CI use:
668
+
669
+ ```bash
670
+ devagent verify ./customer-project --json > devagent-result.json
671
+ rc=$?
672
+
673
+ case "$rc" in
674
+ 0) echo "bounded verification ready" ;;
675
+ 30) echo "customer information required" ;;
676
+ 31) echo "simulation path blocked" ;;
677
+ 32) echo "verification complete but not release-ready" ;;
678
+ *) echo "input or operational failure" ;;
679
+ esac
680
+ ```
681
+
682
+ ---
683
+
684
+ # When to use Simple Mode vs Expert Mode
685
+
686
+ Use **Simple Mode** for the normal customer workflow:
687
+
688
+ ```bash
689
+ devagent verify ./customer-project
690
+ ```
691
+
692
+ Use **Expert Mode** when you need explicit control over:
693
+
694
+ - project identity;
695
+ - immutable Twin revisions;
696
+ - explicit requirement artifacts;
697
+ - measurement binding;
698
+ - campaign artifact IDs;
699
+ - regression baselines;
700
+ - Evidence Bundle generation;
701
+ - replay reconstruction;
702
+ - external CI/orchestration;
703
+ - qualification workflows.
704
+
705
+ Installed CLIs:
706
+
707
+ ```text
708
+ devagent one-command customer verification
709
+ devagent-commercial expert commercial/evidence workflow
710
+ devagent-physical deterministic core + ROS/qualification tools
711
+ devagent-physical-ai optional provider-backed engineering front end
712
+ ```
713
+
714
+ ---
715
+
716
+ # Expert Mode example
717
+
718
+ The default project/evidence database is:
719
+
720
+ ```text
721
+ ~/.devagent/projects.db
722
+ ```
723
+
724
+ ## 1. Create project identity
725
+
726
+ ```bash
727
+ devagent-commercial init warehouse-cnc-04 \
728
+ --name "Warehouse CNC Loading Cell 04" \
729
+ --site atl-01 \
730
+ --workcell cnc-04
731
+ ```
732
+
733
+ ## 2. Import explicit customer Twin evidence
734
+
735
+ ```bash
736
+ devagent-commercial import-twin warehouse-cnc-04 ./customer-cell \
737
+ | tee twin-import.json
738
+ ```
739
+
740
+ List immutable revisions:
741
+
742
+ ```bash
743
+ devagent-physical project \
744
+ --db ~/.devagent/projects.db \
745
+ revisions warehouse-cnc-04
746
+ ```
747
+
748
+ Twin manifest example:
749
+
750
+ https://github.com/tomha85/devagent-physical-engine/blob/main/examples/commercial/devagent-twin.yaml
751
+
752
+ Do not use template values as customer evidence.
753
+
754
+ ## 3. Load requirements
755
+
756
+ ```bash
757
+ devagent-commercial requirements warehouse-cnc-04 \
758
+ examples/commercial/requirements-production.csv
759
+ ```
760
+
761
+ Example requirements file:
762
+
763
+ https://github.com/tomha85/devagent-physical-engine/blob/main/examples/commercial/requirements-production.csv
764
+
765
+ ## 4. Generate verification plan
766
+
767
+ ```bash
768
+ devagent-commercial verification-plan warehouse-cnc-04 \
769
+ examples/commercial/verification-plan.yaml \
770
+ --revision twin-r0001
771
+ ```
772
+
773
+ Planning creates bounded test intent. It is not execution evidence.
774
+
775
+ ## 5. Record measured evidence
776
+
777
+ ```bash
778
+ devagent-commercial record-measurement warehouse-cnc-04 \
779
+ physical-measurement.json \
780
+ --revision twin-r0001
781
+ ```
782
+
783
+ Example schema:
784
+
785
+ https://github.com/tomha85/devagent-physical-engine/blob/main/examples/commercial/physical-measurement.json
786
+
787
+ Preferred integrations use the typed `PhysicalEvidenceRecorder.record_motion_metrics(...)` path so measurement, canonical motion, planner/source graph, qualification reference, and Twin hash remain bound together.
788
+
789
+ ## 6. Run deterministic campaign
790
+
791
+ ```bash
792
+ devagent-commercial campaign warehouse-cnc-04 \
793
+ examples/commercial/requirements-production.csv \
794
+ --revision twin-r0001 \
795
+ --measurement ARTIFACT_ID
796
+ ```
797
+
798
+ ## 7. Generate FAT report
799
+
800
+ ```bash
801
+ devagent-commercial fat-report warehouse-cnc-04 \
802
+ CAMPAIGN_ARTIFACT \
803
+ --output FAT_REPORT.html
804
+ ```
805
+
806
+ ## 8. Build Evidence Bundle
807
+
808
+ ```bash
809
+ devagent-commercial evidence-bundle \
810
+ warehouse-cnc-04 \
811
+ CAMPAIGN_ARTIFACT
812
+ ```
813
+
814
+ The bundle binds requirement results to exact artifact IDs, artifact hashes, Twin revision, and Twin hash.
815
+
816
+ ## 9. Inspect evidence graph
817
+
818
+ ```bash
819
+ devagent-commercial evidence-graph warehouse-cnc-04 \
820
+ > evidence-graph.json
821
+ ```
822
+
823
+ ## 10. Generate static Evidence Viewer
824
+
825
+ ```bash
826
+ devagent-commercial evidence-viewer warehouse-cnc-04 \
827
+ --output DEVAGENT_EVIDENCE.html
828
+ ```
829
+
830
+ ## 11. Replay persisted lineage
831
+
832
+ ```bash
833
+ devagent-commercial replay \
834
+ warehouse-cnc-04 \
835
+ EVIDENCE_BUNDLE \
836
+ --qualification-root ~/.devagent/physical-qualification \
837
+ --output replay-manifest.json \
838
+ --record
839
+ ```
840
+
841
+ Replay verifies persisted identity before reconstruction:
842
+
843
+ ```text
844
+ artifact ID
845
+ artifact type
846
+ artifact SHA-256
847
+ Twin revision/hash
848
+ run_id
849
+ case_id
850
+ case evidence hash
851
+ seed
852
+ reset state
853
+ parameters
854
+ canonical motion fingerprint
855
+ ```
856
+
857
+ A successful replay inspection reports:
858
+
859
+ ```text
860
+ replayable = true
861
+ execution_performed = false
862
+ ```
863
+
864
+ Replay reconstruction does not command Gazebo, MoveIt, a robot, PLC, or safety PLC.
865
+
866
+ ## 12. Change impact
867
+
868
+ After importing a new Twin revision:
869
+
870
+ ```bash
871
+ devagent-commercial impact warehouse-cnc-04 \
872
+ twin-r0001 twin-r0002 \
873
+ examples/commercial/requirements-production.csv
874
+ ```
875
+
876
+ ## 13. Regression
877
+
878
+ ```bash
879
+ devagent-commercial regression warehouse-cnc-04 \
880
+ BASELINE_CAMPAIGN CURRENT_CAMPAIGN \
881
+ --impact CHANGE_IMPACT_ARTIFACT
882
+ ```
883
+
884
+ A previous PASS does not remain authoritative after a changed Twin unless the required evidence chain remains valid for the new revision.
885
+
886
+ ## 14. Project status
887
+
888
+ ```bash
889
+ devagent-commercial status warehouse-cnc-04
890
+ ```
891
+
892
+ Inspect artifacts:
893
+
894
+ ```bash
895
+ devagent-commercial artifacts warehouse-cnc-04
896
+ ```
897
+
898
+ Useful artifact types include:
899
+
900
+ ```text
901
+ customer_twin_import
902
+ one_command_twin_normalization
903
+ requirement_set
904
+ verification_plan
905
+ physical_measurement
906
+ physical_motion_plan
907
+ runtime_measurement_binding
908
+ commercial_campaign
909
+ change_impact
910
+ commercial_regression
911
+ fat_report
912
+ evidence_bundle
913
+ replay_verification
914
+ ```
915
+
916
+ ---
917
+
918
+ # Physical simulation setup
919
+
920
+ `pip install` does **not** install ROS 2, Gazebo, MoveIt, OEM drivers, or privileged operating-system packages.
921
+
922
+ Reference stack:
923
+
924
+ ```text
925
+ Ubuntu 24.04
926
+ ROS 2 Jazzy
927
+ Gazebo Harmonic
928
+ gz_ros2_control
929
+ Universal Robots ROS 2 driver
930
+ ur_simulation_gz
931
+ MoveIt 2
932
+ ```
933
+
934
+ Preview setup changes:
935
+
936
+ ```bash
937
+ devagent-physical setup --profile ur5e-sim --dry-run
938
+ ```
939
+
940
+ Apply explicitly:
941
+
942
+ ```bash
943
+ devagent-physical setup --profile ur5e-sim --yes
944
+ ```
945
+
946
+ Check runtime readiness:
947
+
948
+ ```bash
949
+ devagent-physical ros doctor
950
+ ```
951
+
952
+ Qualify trajectory runtime:
953
+
954
+ ```bash
955
+ devagent-physical ros qualify-trajectory-runtime
956
+ ```
957
+
958
+ Other reference commands:
959
+
960
+ ```bash
961
+ devagent-physical ros launch --dry-run
962
+ devagent-physical ros acceptance
963
+ devagent-physical ros demo
964
+ devagent-physical qualify
965
+ ```
966
+
967
+ Hosted Python CI cannot prove a graphical Gazebo runtime, MoveIt `move_group`, TF, controller actions, OEM drivers, or an arbitrary imported workcell. Physical qualification must run on the exact workstation/adapter stack.
968
+
969
+ ---
970
+
971
+ # Optional AI providers
972
+
973
+ AI is optional and remains outside deterministic authority.
974
+
975
+ Install one provider:
976
+
977
+ ```bash
978
+ python -m pip install "devagent-physical-engine[openai]"
979
+ ```
980
+
981
+ ```bash
982
+ python -m pip install "devagent-physical-engine[anthropic]"
983
+ ```
984
+
985
+ ```bash
986
+ python -m pip install "devagent-physical-engine[gemini]"
987
+ ```
988
+
989
+ Or all provider SDKs:
990
+
991
+ ```bash
992
+ python -m pip install "devagent-physical-engine[ai]"
993
+ ```
994
+
995
+ Typical credentials:
996
+
997
+ ```bash
998
+ export OPENAI_API_KEY="..."
999
+ export ANTHROPIC_API_KEY="..."
1000
+ export GEMINI_API_KEY="..."
1001
+ ```
1002
+
1003
+ Check provider setup without using the provider as physical authority:
1004
+
1005
+ ```bash
1006
+ devagent-physical-ai doctor --provider openai
1007
+ ```
1008
+
1009
+ Example natural-language engineering request:
1010
+
1011
+ ```bash
1012
+ devagent-physical-ai engineer \
1013
+ "Use a UR5e to load BOX_101 from conveyor_a to cnc_04. Simulate and verify the plan." \
1014
+ --provider openai \
1015
+ --model YOUR_MODEL
1016
+ ```
1017
+
1018
+ The model can help interpret and propose engineering intent. It cannot grant deterministic safety, physical qualification, site qualification, or real-execution authority.
1019
+
1020
+ ---
1021
+
1022
+ # Evidence and authority model
1023
+
1024
+ DevAgent deliberately separates four things that are often incorrectly mixed together:
1025
+
1026
+ ```text
1027
+ 1. requirement
1028
+ 2. test intent
1029
+ 3. measured evidence
1030
+ 4. authority/readiness
1031
+ ```
1032
+
1033
+ A verification plan proves only that a test was planned.
1034
+
1035
+ A model-only result proves only the model-level property that was actually evaluated.
1036
+
1037
+ A physical requirement requires physical measurement evidence.
1038
+
1039
+ A replay reconstruction proves persisted evidence lineage can be reconstructed; it is not a new simulation run.
1040
+
1041
+ A simulation PASS does not equal site commissioning.
1042
+
1043
+ A complete customer FAT report does not equal functional-safety certification.
1044
+
1045
+ Current hard boundary:
1046
+
1047
+ ```text
1048
+ physical_qualification = false unless separately qualified evidence says otherwise
1049
+ site_qualification = false
1050
+ real_execution_allowed = false
1051
+ ```
1052
+
1053
+ This architecture is intentional:
1054
+
1055
+ ```text
1056
+ Agents propose.
1057
+ Deterministic engines compile and verify.
1058
+ Existing certified controllers execute.
1059
+ ```
1060
+
1061
+ ---
1062
+
1063
+ # What DevAgent should be used for
1064
+
1065
+ DevAgent is designed to help engineering teams:
1066
+
1067
+ - reduce FAT preparation and verification effort;
1068
+ - discover missing engineering information before travel;
1069
+ - identify requirement failures before onsite commissioning;
1070
+ - create repeatable deterministic test plans;
1071
+ - bind physical measurements to exact Twin revisions;
1072
+ - detect regression after engineering changes;
1073
+ - preserve evidence provenance;
1074
+ - produce customer-readable FAT evidence;
1075
+ - reduce dependence on manual artifact bookkeeping;
1076
+ - make verification results inspectable rather than opaque.
1077
+
1078
+ It is **not** a replacement for:
1079
+
1080
+ - OEM robot controllers;
1081
+ - PLC logic authority;
1082
+ - safety PLCs;
1083
+ - certified safety functions;
1084
+ - site acceptance responsibility;
1085
+ - functional-safety engineering;
1086
+ - real-world commissioning judgment.
1087
+
1088
+ ---
1089
+
1090
+ # Project status
1091
+
1092
+ **v1.3.0 — Production/Stable software workflow**
1093
+
1094
+ The bounded software/evidence workflow is production-oriented and continuously tested across Python 3.11, 3.12, and 3.13.
1095
+
1096
+ The v1.3 release candidate includes:
1097
+
1098
+ ```text
1099
+ one-command customer intake
1100
+ XLSX requirement normalization
1101
+ immutable project/Twin lineage
1102
+ deterministic verification campaigns
1103
+ measured evidence binding
1104
+ FAT generation
1105
+ Evidence Bundle
1106
+ Evidence Viewer
1107
+ replay reconstruction
1108
+ change impact
1109
+ regression
1110
+ provider-neutral optional AI front end
1111
+ ```
1112
+
1113
+ Software quality gates include dedicated coverage thresholds for:
1114
+
1115
+ ```text
1116
+ One-Command customer workflow
1117
+ Production Authority
1118
+ Evidence Trust / Replay
1119
+ ```
1120
+
1121
+ Production/Stable describes the bounded software workflow. It does not claim arbitrary customer cells are physically or site qualified.
1122
+
1123
+ ---
1124
+
1125
+ # Documentation
1126
+
1127
+ One-command verification:
1128
+
1129
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/ONE_COMMAND_VERIFY_V13.md
1130
+
1131
+ Evidence Trust / replay / viewer:
1132
+
1133
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/EVIDENCE_TRUST_V12.md
1134
+
1135
+ Measured physical runtime:
1136
+
1137
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/MEASURED_PHYSICAL_RUNTIME.md
1138
+
1139
+ Commercial project spine:
1140
+
1141
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/COMMERCIAL_PROJECT_SPINE.md
1142
+
1143
+ Commercial workflow:
1144
+
1145
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/COMMERCIAL_V1.md
1146
+
1147
+ Natural-language engineering:
1148
+
1149
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/NATURAL_LANGUAGE_ENGINEERING.md
1150
+
1151
+ AI providers:
1152
+
1153
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/AI_PROVIDERS.md
1154
+
1155
+ Architecture:
1156
+
1157
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/ARCHITECTURE.md
1158
+
1159
+ Canonical Twin runtime:
1160
+
1161
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/CANONICAL_TWIN_RUNTIME.md
1162
+
1163
+ Laptop acceptance:
1164
+
1165
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/LAPTOP_ACCEPTANCE.md
1166
+
1167
+ Optimization:
1168
+
1169
+ https://github.com/tomha85/devagent-physical-engine/blob/main/docs/OPTIMIZATION.md
1170
+
1171
+ ---
1172
+
1173
+ # Ownership
1174
+
1175
+ DevAgent Smart Physical Engine
1176
+ Copyright © 2026 Tom Ha
1177
+ Original creator: Tom Ha
1178
+ Original project: https://github.com/tomha85/devagent-physical-engine
1179
+ All rights reserved.
1180
+
1181
+ See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for the complete ownership and usage terms.