devagent-physical-engine 0.10.0__tar.gz → 0.11.3__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 (140) hide show
  1. devagent_physical_engine-0.11.3/PKG-INFO +338 -0
  2. devagent_physical_engine-0.11.3/README.md +297 -0
  3. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/pyproject.toml +28 -2
  4. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/__init__.py +1 -1
  5. devagent_physical_engine-0.11.3/src/devagent_physical_engine/continuous_clearance.py +188 -0
  6. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/preexecution_contract.py +14 -0
  7. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/provider_adapters/openai.py +82 -2
  8. devagent_physical_engine-0.11.3/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +143 -0
  9. devagent_physical_engine-0.11.3/src/devagent_physical_engine/ros2/preexecution.py +241 -0
  10. devagent_physical_engine-0.11.3/src/devagent_physical_engine/ros2/qualification_v11.py +256 -0
  11. devagent_physical_engine-0.11.3/src/devagent_physical_engine/ros2/tool_scene.py +127 -0
  12. devagent_physical_engine-0.11.3/src/devagent_physical_engine/ros2/tool_scene_probe.py +201 -0
  13. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +134 -18
  14. devagent_physical_engine-0.11.3/src/devagent_physical_engine/ros2/workpiece_scene.py +162 -0
  15. devagent_physical_engine-0.11.3/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +355 -0
  16. devagent_physical_engine-0.11.3/src/devagent_physical_engine/sim_real_qualification.py +83 -0
  17. devagent_physical_engine-0.11.3/src/devagent_physical_engine/tool_collision.py +80 -0
  18. devagent_physical_engine-0.11.3/src/devagent_physical_engine/workpiece_lifecycle.py +66 -0
  19. devagent_physical_engine-0.11.3/src/devagent_physical_engine.egg-info/PKG-INFO +338 -0
  20. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine.egg-info/SOURCES.txt +17 -1
  21. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine.egg-info/requires.txt +7 -0
  22. devagent_physical_engine-0.11.3/tests/test_continuous_clearance_v011.py +85 -0
  23. devagent_physical_engine-0.11.3/tests/test_openai_strict_schema_v0113.py +68 -0
  24. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_preexecution_contract_v10.py +27 -1
  25. devagent_physical_engine-0.11.3/tests/test_ros2_production_receipts_v011.py +155 -0
  26. devagent_physical_engine-0.11.3/tests/test_sim_real_qualification_v011.py +55 -0
  27. devagent_physical_engine-0.11.3/tests/test_tool_collision_v011.py +48 -0
  28. devagent_physical_engine-0.11.3/tests/test_workpiece_lifecycle_v011.py +81 -0
  29. devagent_physical_engine-0.10.0/PKG-INFO +0 -315
  30. devagent_physical_engine-0.10.0/README.md +0 -280
  31. devagent_physical_engine-0.10.0/src/devagent_physical_engine/ros2/preexecution.py +0 -113
  32. devagent_physical_engine-0.10.0/src/devagent_physical_engine.egg-info/PKG-INFO +0 -315
  33. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/NOTICE +0 -0
  34. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/setup.cfg +0 -0
  35. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/agent/__init__.py +0 -0
  36. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/agent/compiler.py +0 -0
  37. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/agent/contracts.py +0 -0
  38. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/agent/coordinator.py +0 -0
  39. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/agent/critic.py +0 -0
  40. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/agent/evidence.py +0 -0
  41. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  42. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/agent/planner.py +0 -0
  43. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/agent/recovery.py +0 -0
  44. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/agent/routing.py +0 -0
  45. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/agent/runtime.py +0 -0
  46. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/agent/semantic.py +0 -0
  47. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/agent/structured.py +0 -0
  48. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ai_cli.py +0 -0
  49. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/cli.py +0 -0
  50. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/doctor.py +0 -0
  51. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/engineering_agent.py +0 -0
  52. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/engineering_request.py +0 -0
  53. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/execution.py +0 -0
  54. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/models.py +0 -0
  55. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/operating_envelope.py +0 -0
  56. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  57. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  58. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  59. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  60. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  61. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  62. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/optimization/experience.py +0 -0
  63. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/optimization/measured.py +0 -0
  64. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  65. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  66. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/physical_campaign.py +0 -0
  67. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/physical_evidence.py +0 -0
  68. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/physical_motion.py +0 -0
  69. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/planning.py +0 -0
  70. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  71. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  72. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  73. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  74. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  75. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/provider_qualification.py +0 -0
  76. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/providers.py +0 -0
  77. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/qualification.py +0 -0
  78. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/qualification_cli.py +0 -0
  79. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/qualification_harness.py +0 -0
  80. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/robot_platform.py +0 -0
  81. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/robots.py +0 -0
  82. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/__init__.py +0 -0
  83. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  84. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/commands.py +0 -0
  85. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/doctor.py +0 -0
  86. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
  87. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  88. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  89. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
  90. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  91. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  92. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  93. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  94. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  95. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
  96. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  97. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
  98. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  99. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  100. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/setup_profile.py +0 -0
  101. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/simulation.py +0 -0
  102. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/simulation_platform.py +0 -0
  103. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  104. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/twin.py +0 -0
  105. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/twin_builder.py +0 -0
  106. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/twin_materialization.py +0 -0
  107. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine/verification.py +0 -0
  108. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  109. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
  110. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  111. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_agent_core.py +0 -0
  112. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_agent_semantic_hardening.py +0 -0
  113. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_ai_cli.py +0 -0
  114. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_ai_cli_v07.py +0 -0
  115. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_core.py +0 -0
  116. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_engineering_request_v07.py +0 -0
  117. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_interpreter_profiles_v08.py +0 -0
  118. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_live_provider_qualification.py +0 -0
  119. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_measured_motion_v10.py +0 -0
  120. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_natural_language_agent_v07.py +0 -0
  121. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_optimization_v05.py +0 -0
  122. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_physical_campaign_v09.py +0 -0
  123. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_physical_evidence_v09.py +0 -0
  124. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_physical_motion_v09.py +0 -0
  125. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_provider_and_qualification.py +0 -0
  126. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  127. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_qualification_harness_v06.py +0 -0
  128. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_real_provider_adapters.py +0 -0
  129. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_robot_platform_v08.py +0 -0
  130. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_ros2_simulation.py +0 -0
  131. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_ros_trajectory_v09.py +0 -0
  132. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_setup_profile.py +0 -0
  133. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_simulation_platform_v08.py +0 -0
  134. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_trajectory_qualification_v09.py +0 -0
  135. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_twin_materialization_v10.py +0 -0
  136. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_twin_v08.py +0 -0
  137. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  138. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  139. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_v052_stabilization.py +0 -0
  140. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.3}/tests/test_v08_catalog_mapping_regression.py +0 -0
@@ -0,0 +1,338 @@
1
+ Metadata-Version: 2.4
2
+ Name: devagent-physical-engine
3
+ Version: 0.11.3
4
+ Summary: Verification-first agentic planning runtime for robotic and industrial automation.
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
11
+ Classifier: Development Status :: 4 - Beta
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
+ **Verification-first agentic engineering, planning, optimization, simulation, and evidence runtime for robotic and industrial automation.**
45
+
46
+ > **AI proposes. Deterministic engines validate, compile, verify, simulate, measure, and gate promotion. Existing certified controllers remain authoritative.**
47
+
48
+ DevAgent Smart Physical Engine adds AI-assisted engineering to existing automation without replacing robot controllers, PLCs, safety controllers, or real-time servo loops. The core is provider-neutral and keeps engineering authority separated from model output.
49
+
50
+ ## Current version
51
+
52
+ **v0.11.3 — Beta software / evidence-gated physical runtime**
53
+
54
+ The Python software stack is regression-tested on Python 3.11, 3.12, and 3.13 with separate static/coverage, package-install, and runtime dependency security gates. The UR5e Gazebo/MoveIt path now contains production-candidate continuous-clearance, tool-collision, and workpiece-lifecycle capabilities, but those physical-simulation scopes remain **EXPERIMENTAL until the executable target-workstation v0.11 campaign passes**.
55
+
56
+ v0.11.3 also normalizes provider-neutral agent schemas at the OpenAI transport boundary so strict Structured Outputs can represent DevAgent optional fields without changing Anthropic/Gemini or deterministic core semantics.
57
+
58
+ Real robot execution remains locked. Functional-safety certification and site qualification are not claimed.
59
+
60
+ ## v0.11 capability status
61
+
62
+ | Area | Status |
63
+ | --- | --- |
64
+ | Provider-neutral Agent Core | Implemented |
65
+ | OpenAI / Anthropic / Gemini structured adapters | Implemented |
66
+ | Planner / Critic / Recovery | Implemented |
67
+ | Natural-language engineering request front door | Implemented |
68
+ | Deterministic compiler / semantic / verification gates | Implemented |
69
+ | Multi-vendor robot profile registry | Implemented |
70
+ | UR5e / FANUC CRX / KUKA KR / ABB IRB abstraction | Implemented; physical qualification is vendor-specific |
71
+ | Evidence-aware canonical TwinSpec | Implemented |
72
+ | Canonical Twin → Gazebo + MoveIt materialization | Implemented |
73
+ | Gazebo / TF / MoveIt world read-back | Implemented |
74
+ | Runtime-owned tool collision binding + read-back | Implemented; target qualification required |
75
+ | Runtime-owned workpiece attach/detach + read-back | Implemented; target qualification required |
76
+ | Discrete MoveIt state-validity precheck | Implemented; simulation/debug only |
77
+ | Measured MoveIt collision distance | Implemented in production-candidate verifier |
78
+ | Adaptive conservative continuous-path proof | Implemented; qualified bound required |
79
+ | Measured minimum clearance + safety margin | Implemented; target qualification required |
80
+ | Measured joint-state trajectory runtime | Implemented |
81
+ | MoveIt FK TCP path / final TCP error | Implemented |
82
+ | Quantitative sim↔real qualification gate | Implemented; measured hardware dataset required |
83
+ | Python package/release supply chain | Hardened CI + exact-green-main release + direct `release.yml` PyPI OIDC deployment |
84
+ | UR5e production-candidate simulation evidence | **Requires executable v0.11 target campaign** |
85
+ | Physical commissioning | **Not qualified by source/CI alone** |
86
+ | Site qualification | **Not qualified** |
87
+ | Real robot execution | **Locked** |
88
+ | Functional-safety certification | Not claimed |
89
+
90
+ ## Trust chain
91
+
92
+ ```mermaid
93
+ flowchart TD
94
+ USER[Engineer / customer application] --> REQUEST[Natural-language engineering request]
95
+ REQUEST --> AI[Provider-neutral AI / Planner / Critic / Recovery]
96
+ AI --> COMPILE[Deterministic compile + semantic policy]
97
+ COMPILE --> VERIFY[Verified plan artifact]
98
+ VERIFY --> TWIN[Canonical TwinSpec + SHA256]
99
+ TWIN --> MATERIALIZE[Canonical materialization]
100
+ MATERIALIZE --> GZ[Gazebo world]
101
+ MATERIALIZE --> MOVEIT[MoveIt PlanningScene]
102
+ MATERIALIZE --> TF[TF frames]
103
+ GZ --> READBACK[Backend read-back]
104
+ MOVEIT --> READBACK
105
+ TF --> READBACK
106
+ READBACK --> TOOL[Verified tool collision receipt]
107
+ TOOL --> WORKPIECE[Verified workpiece lifecycle receipt]
108
+ WORKPIECE --> MOTION[Exact PhysicalMotionPlan / Twin binding]
109
+ MOTION --> CLEAR[Measured clearance + continuous proof]
110
+ CLEAR --> SIM[ROS 2 / Gazebo execution]
111
+ SIM --> MEASURE[Measured joint states + MoveIt FK]
112
+ MEASURE --> EVIDENCE[Replayable evidence]
113
+ EVIDENCE --> PROMOTION[Scope-specific promotion gate]
114
+ PROMOTION --> LOCKED[Real execution remains separately locked]
115
+ ```
116
+
117
+ The model never owns collision policy, minimum-clearance truth, dynamic scene state, qualification promotion, or real-hardware authorization.
118
+
119
+ ## Continuous collision and clearance semantics
120
+
121
+ The legacy/discrete verifier remains available for development and simulation but can never produce commissioning-usable evidence.
122
+
123
+ The v0.11 production-candidate verifier synchronizes the authoritative MoveIt PlanningScene, measures minimum collision distance, and adaptively proves every joint interval using a conservative collision-distance Lipschitz bound. If the proof cannot be established within configured sample/depth limits, it fails closed. There is no automatic downgrade to a sampled “pass.”
124
+
125
+ A commissioning-usable pre-execution receipt requires all of:
126
+
127
+ ```text
128
+ verified=true
129
+ continuous_collision_check=true
130
+ clearance_measured=true
131
+ minimum_clearance_m > 0
132
+ materialization_hash=<exact Twin materialization>
133
+ failure_codes=[]
134
+ ```
135
+
136
+ The distance Lipschitz bound is itself qualification evidence and must be conservative for the exact robot/tool/collision model.
137
+
138
+ ## Tool and workpiece authority
139
+
140
+ Customer motion metadata can no longer claim that a tool collision model or workpiece attachment is verified.
141
+
142
+ `ToolCollisionBinding` is runtime configuration. The tool is applied as a MoveIt attached collision object and verified by geometry/link read-back before a receipt is accepted.
143
+
144
+ Workpiece state uses verified transitions:
145
+
146
+ ```text
147
+ WORLD → ATTACHED → WORLD
148
+ ```
149
+
150
+ Attach/detach applies the PlanningScene change and verifies the resulting world/attached state. Missing or inconsistent read-back blocks the motion.
151
+
152
+ ## Installation
153
+
154
+ Python 3.11+ is required.
155
+
156
+ From PyPI after the corresponding release is published:
157
+
158
+ ```bash
159
+ python -m pip install devagent-physical-engine
160
+ ```
161
+
162
+ From source:
163
+
164
+ ```bash
165
+ git clone https://github.com/tomha85/devagent-physical-engine.git
166
+ cd devagent-physical-engine
167
+ python -m venv .venv
168
+ source .venv/bin/activate
169
+ python -m pip install --upgrade pip
170
+ python -m pip install -e .
171
+ ```
172
+
173
+ Optional provider SDKs:
174
+
175
+ ```bash
176
+ python -m pip install -e ".[openai]"
177
+ python -m pip install -e ".[anthropic]"
178
+ python -m pip install -e ".[gemini]"
179
+ python -m pip install -e ".[ai]"
180
+ ```
181
+
182
+ Development/qualification tooling:
183
+
184
+ ```bash
185
+ python -m pip install -e ".[dev]"
186
+ ```
187
+
188
+ `pip install` does not install ROS/Gazebo system packages or perform privileged OS changes.
189
+
190
+ ## AI providers
191
+
192
+ Keep credentials outside WorldState/Twin data:
193
+
194
+ ```bash
195
+ export OPENAI_API_KEY='...'
196
+ export ANTHROPIC_API_KEY='...'
197
+ export GEMINI_API_KEY='...'
198
+ ```
199
+
200
+ Examples use the currently supported deterministic goal action `load`:
201
+
202
+ ```bash
203
+ devagent-physical-ai doctor --provider openai
204
+ devagent-physical-ai qualify --provider openai --model <model-id>
205
+ devagent-physical-ai request \
206
+ "Use a UR5e to load BOX_101 from conveyor_a to cnc_04. Simulate and verify the plan." \
207
+ --provider openai --model <model-id>
208
+ devagent-physical-ai engineer \
209
+ "Use a UR5e to load BOX_101 from conveyor_a to cnc_04. Simulate and verify the plan." \
210
+ --provider openai --model <model-id>
211
+ ```
212
+
213
+ Equivalent routing supports Anthropic and Gemini. Live AI qualification does not unlock real robot execution.
214
+
215
+ ## Software production gates
216
+
217
+ Repository CI now requires:
218
+
219
+ ```text
220
+ Python 3.11 regression
221
+ Python 3.12 regression
222
+ Python 3.13 regression
223
+ compileall
224
+ Ruff correctness checks
225
+ branch coverage threshold
226
+ wheel + sdist build
227
+ twine --strict
228
+ clean wheel installation/version smoke
229
+ runtime dependency vulnerability audit
230
+ ```
231
+
232
+ Critical checkout/setup/artifact GitHub Actions are pinned to exact commits.
233
+
234
+ A successful `main` CI run drives `release-on-ci.yml`, which validates the package version and creates a normal GitHub Release at the **exact CI-tested SHA**. It then dispatches `release.yml` with `workflow_dispatch` at the exact release tag. Running Trusted Publishing in the directly dispatched `release.yml` is intentional: PyPI binds the OIDC publisher identity to that workflow filename and does not currently support reusable workflows for Trusted Publishing. `release.yml` rebuilds and re-verifies the exact tag, attaches wheel/sdist/SBOM/checksum evidence to the GitHub Release, and publishes through the GitHub `pypi` environment using OIDC.
235
+
236
+ ## UR5e ROS 2 / Gazebo target
237
+
238
+ Reference target:
239
+
240
+ ```text
241
+ Ubuntu 24.04
242
+ ROS 2 Jazzy
243
+ Gazebo Harmonic
244
+ gz_ros2_control
245
+ Universal Robots ROS 2 driver
246
+ ur_simulation_gz
247
+ MoveIt 2
248
+ ```
249
+
250
+ Setup/diagnostics:
251
+
252
+ ```bash
253
+ devagent-physical setup --profile ur5e-sim --dry-run
254
+ devagent-physical setup --profile ur5e-sim
255
+ devagent-physical ros doctor
256
+ devagent-physical ros demo
257
+ devagent-physical ros qualify-trajectory-runtime
258
+ ```
259
+
260
+ ## v0.11 production-candidate executable qualification
261
+
262
+ The stronger campaign is deliberately separate from ordinary hosted GitHub CI because it requires the exact ROS/Gazebo/MoveIt target stack and qualified robot/tool collision-distance bound:
263
+
264
+ ```bash
265
+ python -m devagent_physical_engine.ros2.qualification_v11 \
266
+ --moveit-params-file /path/to/ur5e_moveit_params.yaml \
267
+ --distance-lipschitz <qualified-m-per-radian-bound> \
268
+ --safety-margin 0.005 \
269
+ --log-dir ~/.devagent/v11-production-candidate-qualification
270
+ ```
271
+
272
+ A green campaign requires canonical world read-back, verified tool attachment, verified workpiece attach+detach, synchronized MoveIt scene, conservative continuous collision/clearance proof, minimum clearance above margin, measured joint-state execution, and MoveIt FK evidence.
273
+
274
+ It may report:
275
+
276
+ ```text
277
+ promotion_candidate=true
278
+ simulation_commissioning_evidence_qualified=true
279
+ continuous_collision_check=true
280
+ minimum_clearance_measured=true
281
+ ```
282
+
283
+ but still intentionally reports:
284
+
285
+ ```text
286
+ physical_qualification=false
287
+ commissioning_qualification=false
288
+ real_execution_allowed=false
289
+ site_qualification=false
290
+ ```
291
+
292
+ Physical/site promotion requires measured hardware/shadow evidence.
293
+
294
+ ## Sim↔real qualification
295
+
296
+ The source now includes an explicit quantitative correlation gate. Default minimum criteria are:
297
+
298
+ ```text
299
+ observations >= 30
300
+ cycle-time gap p95 <= 10%
301
+ TCP error p95 <= 10 mm
302
+ behavior agreement >= 0.99
303
+ measured origin + dataset reference required
304
+ ```
305
+
306
+ Missing evidence never qualifies. Customers may set stricter thresholds.
307
+
308
+ ## Optimization semantics
309
+
310
+ DevAgent does **not** claim a mathematical global optimum. It selects the best evaluated verified candidate among candidates actually generated, verified, and measured under the configured objective. A hard violation, failed verification/simulation, unknown required metric, or failed quality gate makes the candidate ineligible regardless of weighted score.
311
+
312
+ ## Documentation
313
+
314
+ - [`docs/PRODUCTION_READINESS.md`](docs/PRODUCTION_READINESS.md) — v0.11 readiness scopes and qualification boundaries.
315
+ - [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) — current trust boundaries and runtime architecture.
316
+ - [`docs/AGENT_CORE.md`](docs/AGENT_CORE.md) — Agent Core authority model.
317
+ - [`docs/AI_PROVIDERS.md`](docs/AI_PROVIDERS.md) — provider installation, credentials, and qualification.
318
+ - [`docs/NATURAL_LANGUAGE_ENGINEERING.md`](docs/NATURAL_LANGUAGE_ENGINEERING.md) — natural-language engineering request flow.
319
+ - [`docs/ROBOT_PLATFORM_AND_TWIN.md`](docs/ROBOT_PLATFORM_AND_TWIN.md) — robot abstraction and evidence-aware Twin.
320
+ - [`docs/MEASURED_PHYSICAL_RUNTIME.md`](docs/MEASURED_PHYSICAL_RUNTIME.md) — motion and measured runtime.
321
+ - [`docs/CANONICAL_TWIN_RUNTIME.md`](docs/CANONICAL_TWIN_RUNTIME.md) — canonical scene, continuous clearance, and dynamic scene lifecycle.
322
+ - [`docs/QUALIFICATION.md`](docs/QUALIFICATION.md) — qualification/evidence model.
323
+ - [`docs/OPTIMIZATION.md`](docs/OPTIMIZATION.md) — search, metrics, Pareto ranking, and evidence.
324
+ - [`docs/SETUP.md`](docs/SETUP.md) — explicit workstation bootstrap.
325
+ - [`docs/LAPTOP_ACCEPTANCE.md`](docs/LAPTOP_ACCEPTANCE.md) — UR5e workstation acceptance.
326
+ - [`docs/PYPI_RELEASE.md`](docs/PYPI_RELEASE.md) — Trusted Publishing release pipeline.
327
+
328
+ ## Release policy
329
+
330
+ v0.11 is a **Beta software release**, not a declaration that every robot/site is physically commissioned. Capability promotion remains evidence-driven and scope-specific. Simulation evidence cannot silently become hardware/site qualification.
331
+
332
+ ## Ownership
333
+
334
+ DevAgent Smart Physical Engine
335
+ Copyright © 2026 Tom Ha
336
+ Original creator: Tom Ha
337
+ Original project: https://github.com/tomha85/devagent-physical-engine
338
+ All rights reserved.
@@ -0,0 +1,297 @@
1
+ # DevAgent Smart Physical Engine
2
+
3
+ **Verification-first agentic engineering, planning, optimization, simulation, and evidence runtime for robotic and industrial automation.**
4
+
5
+ > **AI proposes. Deterministic engines validate, compile, verify, simulate, measure, and gate promotion. Existing certified controllers remain authoritative.**
6
+
7
+ DevAgent Smart Physical Engine adds AI-assisted engineering to existing automation without replacing robot controllers, PLCs, safety controllers, or real-time servo loops. The core is provider-neutral and keeps engineering authority separated from model output.
8
+
9
+ ## Current version
10
+
11
+ **v0.11.3 — Beta software / evidence-gated physical runtime**
12
+
13
+ The Python software stack is regression-tested on Python 3.11, 3.12, and 3.13 with separate static/coverage, package-install, and runtime dependency security gates. The UR5e Gazebo/MoveIt path now contains production-candidate continuous-clearance, tool-collision, and workpiece-lifecycle capabilities, but those physical-simulation scopes remain **EXPERIMENTAL until the executable target-workstation v0.11 campaign passes**.
14
+
15
+ v0.11.3 also normalizes provider-neutral agent schemas at the OpenAI transport boundary so strict Structured Outputs can represent DevAgent optional fields without changing Anthropic/Gemini or deterministic core semantics.
16
+
17
+ Real robot execution remains locked. Functional-safety certification and site qualification are not claimed.
18
+
19
+ ## v0.11 capability status
20
+
21
+ | Area | Status |
22
+ | --- | --- |
23
+ | Provider-neutral Agent Core | Implemented |
24
+ | OpenAI / Anthropic / Gemini structured adapters | Implemented |
25
+ | Planner / Critic / Recovery | Implemented |
26
+ | Natural-language engineering request front door | Implemented |
27
+ | Deterministic compiler / semantic / verification gates | Implemented |
28
+ | Multi-vendor robot profile registry | Implemented |
29
+ | UR5e / FANUC CRX / KUKA KR / ABB IRB abstraction | Implemented; physical qualification is vendor-specific |
30
+ | Evidence-aware canonical TwinSpec | Implemented |
31
+ | Canonical Twin → Gazebo + MoveIt materialization | Implemented |
32
+ | Gazebo / TF / MoveIt world read-back | Implemented |
33
+ | Runtime-owned tool collision binding + read-back | Implemented; target qualification required |
34
+ | Runtime-owned workpiece attach/detach + read-back | Implemented; target qualification required |
35
+ | Discrete MoveIt state-validity precheck | Implemented; simulation/debug only |
36
+ | Measured MoveIt collision distance | Implemented in production-candidate verifier |
37
+ | Adaptive conservative continuous-path proof | Implemented; qualified bound required |
38
+ | Measured minimum clearance + safety margin | Implemented; target qualification required |
39
+ | Measured joint-state trajectory runtime | Implemented |
40
+ | MoveIt FK TCP path / final TCP error | Implemented |
41
+ | Quantitative sim↔real qualification gate | Implemented; measured hardware dataset required |
42
+ | Python package/release supply chain | Hardened CI + exact-green-main release + direct `release.yml` PyPI OIDC deployment |
43
+ | UR5e production-candidate simulation evidence | **Requires executable v0.11 target campaign** |
44
+ | Physical commissioning | **Not qualified by source/CI alone** |
45
+ | Site qualification | **Not qualified** |
46
+ | Real robot execution | **Locked** |
47
+ | Functional-safety certification | Not claimed |
48
+
49
+ ## Trust chain
50
+
51
+ ```mermaid
52
+ flowchart TD
53
+ USER[Engineer / customer application] --> REQUEST[Natural-language engineering request]
54
+ REQUEST --> AI[Provider-neutral AI / Planner / Critic / Recovery]
55
+ AI --> COMPILE[Deterministic compile + semantic policy]
56
+ COMPILE --> VERIFY[Verified plan artifact]
57
+ VERIFY --> TWIN[Canonical TwinSpec + SHA256]
58
+ TWIN --> MATERIALIZE[Canonical materialization]
59
+ MATERIALIZE --> GZ[Gazebo world]
60
+ MATERIALIZE --> MOVEIT[MoveIt PlanningScene]
61
+ MATERIALIZE --> TF[TF frames]
62
+ GZ --> READBACK[Backend read-back]
63
+ MOVEIT --> READBACK
64
+ TF --> READBACK
65
+ READBACK --> TOOL[Verified tool collision receipt]
66
+ TOOL --> WORKPIECE[Verified workpiece lifecycle receipt]
67
+ WORKPIECE --> MOTION[Exact PhysicalMotionPlan / Twin binding]
68
+ MOTION --> CLEAR[Measured clearance + continuous proof]
69
+ CLEAR --> SIM[ROS 2 / Gazebo execution]
70
+ SIM --> MEASURE[Measured joint states + MoveIt FK]
71
+ MEASURE --> EVIDENCE[Replayable evidence]
72
+ EVIDENCE --> PROMOTION[Scope-specific promotion gate]
73
+ PROMOTION --> LOCKED[Real execution remains separately locked]
74
+ ```
75
+
76
+ The model never owns collision policy, minimum-clearance truth, dynamic scene state, qualification promotion, or real-hardware authorization.
77
+
78
+ ## Continuous collision and clearance semantics
79
+
80
+ The legacy/discrete verifier remains available for development and simulation but can never produce commissioning-usable evidence.
81
+
82
+ The v0.11 production-candidate verifier synchronizes the authoritative MoveIt PlanningScene, measures minimum collision distance, and adaptively proves every joint interval using a conservative collision-distance Lipschitz bound. If the proof cannot be established within configured sample/depth limits, it fails closed. There is no automatic downgrade to a sampled “pass.”
83
+
84
+ A commissioning-usable pre-execution receipt requires all of:
85
+
86
+ ```text
87
+ verified=true
88
+ continuous_collision_check=true
89
+ clearance_measured=true
90
+ minimum_clearance_m > 0
91
+ materialization_hash=<exact Twin materialization>
92
+ failure_codes=[]
93
+ ```
94
+
95
+ The distance Lipschitz bound is itself qualification evidence and must be conservative for the exact robot/tool/collision model.
96
+
97
+ ## Tool and workpiece authority
98
+
99
+ Customer motion metadata can no longer claim that a tool collision model or workpiece attachment is verified.
100
+
101
+ `ToolCollisionBinding` is runtime configuration. The tool is applied as a MoveIt attached collision object and verified by geometry/link read-back before a receipt is accepted.
102
+
103
+ Workpiece state uses verified transitions:
104
+
105
+ ```text
106
+ WORLD → ATTACHED → WORLD
107
+ ```
108
+
109
+ Attach/detach applies the PlanningScene change and verifies the resulting world/attached state. Missing or inconsistent read-back blocks the motion.
110
+
111
+ ## Installation
112
+
113
+ Python 3.11+ is required.
114
+
115
+ From PyPI after the corresponding release is published:
116
+
117
+ ```bash
118
+ python -m pip install devagent-physical-engine
119
+ ```
120
+
121
+ From source:
122
+
123
+ ```bash
124
+ git clone https://github.com/tomha85/devagent-physical-engine.git
125
+ cd devagent-physical-engine
126
+ python -m venv .venv
127
+ source .venv/bin/activate
128
+ python -m pip install --upgrade pip
129
+ python -m pip install -e .
130
+ ```
131
+
132
+ Optional provider SDKs:
133
+
134
+ ```bash
135
+ python -m pip install -e ".[openai]"
136
+ python -m pip install -e ".[anthropic]"
137
+ python -m pip install -e ".[gemini]"
138
+ python -m pip install -e ".[ai]"
139
+ ```
140
+
141
+ Development/qualification tooling:
142
+
143
+ ```bash
144
+ python -m pip install -e ".[dev]"
145
+ ```
146
+
147
+ `pip install` does not install ROS/Gazebo system packages or perform privileged OS changes.
148
+
149
+ ## AI providers
150
+
151
+ Keep credentials outside WorldState/Twin data:
152
+
153
+ ```bash
154
+ export OPENAI_API_KEY='...'
155
+ export ANTHROPIC_API_KEY='...'
156
+ export GEMINI_API_KEY='...'
157
+ ```
158
+
159
+ Examples use the currently supported deterministic goal action `load`:
160
+
161
+ ```bash
162
+ devagent-physical-ai doctor --provider openai
163
+ devagent-physical-ai qualify --provider openai --model <model-id>
164
+ devagent-physical-ai request \
165
+ "Use a UR5e to load BOX_101 from conveyor_a to cnc_04. Simulate and verify the plan." \
166
+ --provider openai --model <model-id>
167
+ devagent-physical-ai engineer \
168
+ "Use a UR5e to load BOX_101 from conveyor_a to cnc_04. Simulate and verify the plan." \
169
+ --provider openai --model <model-id>
170
+ ```
171
+
172
+ Equivalent routing supports Anthropic and Gemini. Live AI qualification does not unlock real robot execution.
173
+
174
+ ## Software production gates
175
+
176
+ Repository CI now requires:
177
+
178
+ ```text
179
+ Python 3.11 regression
180
+ Python 3.12 regression
181
+ Python 3.13 regression
182
+ compileall
183
+ Ruff correctness checks
184
+ branch coverage threshold
185
+ wheel + sdist build
186
+ twine --strict
187
+ clean wheel installation/version smoke
188
+ runtime dependency vulnerability audit
189
+ ```
190
+
191
+ Critical checkout/setup/artifact GitHub Actions are pinned to exact commits.
192
+
193
+ A successful `main` CI run drives `release-on-ci.yml`, which validates the package version and creates a normal GitHub Release at the **exact CI-tested SHA**. It then dispatches `release.yml` with `workflow_dispatch` at the exact release tag. Running Trusted Publishing in the directly dispatched `release.yml` is intentional: PyPI binds the OIDC publisher identity to that workflow filename and does not currently support reusable workflows for Trusted Publishing. `release.yml` rebuilds and re-verifies the exact tag, attaches wheel/sdist/SBOM/checksum evidence to the GitHub Release, and publishes through the GitHub `pypi` environment using OIDC.
194
+
195
+ ## UR5e ROS 2 / Gazebo target
196
+
197
+ Reference target:
198
+
199
+ ```text
200
+ Ubuntu 24.04
201
+ ROS 2 Jazzy
202
+ Gazebo Harmonic
203
+ gz_ros2_control
204
+ Universal Robots ROS 2 driver
205
+ ur_simulation_gz
206
+ MoveIt 2
207
+ ```
208
+
209
+ Setup/diagnostics:
210
+
211
+ ```bash
212
+ devagent-physical setup --profile ur5e-sim --dry-run
213
+ devagent-physical setup --profile ur5e-sim
214
+ devagent-physical ros doctor
215
+ devagent-physical ros demo
216
+ devagent-physical ros qualify-trajectory-runtime
217
+ ```
218
+
219
+ ## v0.11 production-candidate executable qualification
220
+
221
+ The stronger campaign is deliberately separate from ordinary hosted GitHub CI because it requires the exact ROS/Gazebo/MoveIt target stack and qualified robot/tool collision-distance bound:
222
+
223
+ ```bash
224
+ python -m devagent_physical_engine.ros2.qualification_v11 \
225
+ --moveit-params-file /path/to/ur5e_moveit_params.yaml \
226
+ --distance-lipschitz <qualified-m-per-radian-bound> \
227
+ --safety-margin 0.005 \
228
+ --log-dir ~/.devagent/v11-production-candidate-qualification
229
+ ```
230
+
231
+ A green campaign requires canonical world read-back, verified tool attachment, verified workpiece attach+detach, synchronized MoveIt scene, conservative continuous collision/clearance proof, minimum clearance above margin, measured joint-state execution, and MoveIt FK evidence.
232
+
233
+ It may report:
234
+
235
+ ```text
236
+ promotion_candidate=true
237
+ simulation_commissioning_evidence_qualified=true
238
+ continuous_collision_check=true
239
+ minimum_clearance_measured=true
240
+ ```
241
+
242
+ but still intentionally reports:
243
+
244
+ ```text
245
+ physical_qualification=false
246
+ commissioning_qualification=false
247
+ real_execution_allowed=false
248
+ site_qualification=false
249
+ ```
250
+
251
+ Physical/site promotion requires measured hardware/shadow evidence.
252
+
253
+ ## Sim↔real qualification
254
+
255
+ The source now includes an explicit quantitative correlation gate. Default minimum criteria are:
256
+
257
+ ```text
258
+ observations >= 30
259
+ cycle-time gap p95 <= 10%
260
+ TCP error p95 <= 10 mm
261
+ behavior agreement >= 0.99
262
+ measured origin + dataset reference required
263
+ ```
264
+
265
+ Missing evidence never qualifies. Customers may set stricter thresholds.
266
+
267
+ ## Optimization semantics
268
+
269
+ DevAgent does **not** claim a mathematical global optimum. It selects the best evaluated verified candidate among candidates actually generated, verified, and measured under the configured objective. A hard violation, failed verification/simulation, unknown required metric, or failed quality gate makes the candidate ineligible regardless of weighted score.
270
+
271
+ ## Documentation
272
+
273
+ - [`docs/PRODUCTION_READINESS.md`](docs/PRODUCTION_READINESS.md) — v0.11 readiness scopes and qualification boundaries.
274
+ - [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) — current trust boundaries and runtime architecture.
275
+ - [`docs/AGENT_CORE.md`](docs/AGENT_CORE.md) — Agent Core authority model.
276
+ - [`docs/AI_PROVIDERS.md`](docs/AI_PROVIDERS.md) — provider installation, credentials, and qualification.
277
+ - [`docs/NATURAL_LANGUAGE_ENGINEERING.md`](docs/NATURAL_LANGUAGE_ENGINEERING.md) — natural-language engineering request flow.
278
+ - [`docs/ROBOT_PLATFORM_AND_TWIN.md`](docs/ROBOT_PLATFORM_AND_TWIN.md) — robot abstraction and evidence-aware Twin.
279
+ - [`docs/MEASURED_PHYSICAL_RUNTIME.md`](docs/MEASURED_PHYSICAL_RUNTIME.md) — motion and measured runtime.
280
+ - [`docs/CANONICAL_TWIN_RUNTIME.md`](docs/CANONICAL_TWIN_RUNTIME.md) — canonical scene, continuous clearance, and dynamic scene lifecycle.
281
+ - [`docs/QUALIFICATION.md`](docs/QUALIFICATION.md) — qualification/evidence model.
282
+ - [`docs/OPTIMIZATION.md`](docs/OPTIMIZATION.md) — search, metrics, Pareto ranking, and evidence.
283
+ - [`docs/SETUP.md`](docs/SETUP.md) — explicit workstation bootstrap.
284
+ - [`docs/LAPTOP_ACCEPTANCE.md`](docs/LAPTOP_ACCEPTANCE.md) — UR5e workstation acceptance.
285
+ - [`docs/PYPI_RELEASE.md`](docs/PYPI_RELEASE.md) — Trusted Publishing release pipeline.
286
+
287
+ ## Release policy
288
+
289
+ v0.11 is a **Beta software release**, not a declaration that every robot/site is physically commissioned. Capability promotion remains evidence-driven and scope-specific. Simulation evidence cannot silently become hardware/site qualification.
290
+
291
+ ## Ownership
292
+
293
+ DevAgent Smart Physical Engine
294
+ Copyright © 2026 Tom Ha
295
+ Original creator: Tom Ha
296
+ Original project: https://github.com/tomha85/devagent-physical-engine
297
+ All rights reserved.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devagent-physical-engine"
7
- version = "0.10.0"
7
+ version = "0.11.3"
8
8
  description = "Verification-first agentic planning runtime for robotic and industrial automation."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -13,7 +13,7 @@ authors = [{ name = "Tom Ha" }]
13
13
  license = { text = "All Rights Reserved" }
14
14
  keywords = ["robotics", "industrial-automation", "agentic-ai", "ros2", "verification"]
15
15
  classifiers = [
16
- "Development Status :: 3 - Alpha",
16
+ "Development Status :: 4 - Beta",
17
17
  "Intended Audience :: Developers",
18
18
  "Operating System :: OS Independent",
19
19
  "Programming Language :: Python :: 3",
@@ -33,6 +33,13 @@ ai = [
33
33
  "anthropic>=1.0,<2",
34
34
  "google-genai>=2.0,<3",
35
35
  ]
36
+ dev = [
37
+ "build==1.6.0",
38
+ "twine==7.0.0",
39
+ "coverage[toml]>=7.6,<8",
40
+ "ruff>=0.12,<1",
41
+ "pip-audit>=2.9,<3",
42
+ ]
36
43
 
37
44
  [project.urls]
38
45
  Homepage = "https://github.com/tomha85/devagent-physical-engine"
@@ -45,3 +52,22 @@ devagent-physical-ai = "devagent_physical_engine.ai_cli:main"
45
52
 
46
53
  [tool.setuptools.packages.find]
47
54
  where = ["src"]
55
+
56
+ [tool.coverage.run]
57
+ branch = true
58
+ source = ["devagent_physical_engine"]
59
+ omit = [
60
+ # ROS probe scripts and target-stack orchestration require a real ROS/Jazzy/
61
+ # Gazebo/MoveIt environment. They are qualified by qualification_v11 rather than
62
+ # pretending hosted unit execution covers them.
63
+ "src/devagent_physical_engine/ros2/*_probe.py",
64
+ "src/devagent_physical_engine/ros2/qualification*.py",
65
+ "src/devagent_physical_engine/ros2/joint_state_recorder.py",
66
+ "src/devagent_physical_engine/ros2/ur5e_adapter.py",
67
+ "src/devagent_physical_engine/ros2/ur5e_v10_adapter.py",
68
+ ]
69
+
70
+ [tool.coverage.report]
71
+ fail_under = 75
72
+ show_missing = true
73
+ skip_covered = false