devagent-physical-engine 0.10.0__tar.gz → 0.11.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. devagent_physical_engine-0.11.2/PKG-INFO +336 -0
  2. devagent_physical_engine-0.11.2/README.md +295 -0
  3. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/pyproject.toml +28 -2
  4. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/__init__.py +1 -1
  5. devagent_physical_engine-0.11.2/src/devagent_physical_engine/continuous_clearance.py +188 -0
  6. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/preexecution_contract.py +14 -0
  7. devagent_physical_engine-0.11.2/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +143 -0
  8. devagent_physical_engine-0.11.2/src/devagent_physical_engine/ros2/preexecution.py +241 -0
  9. devagent_physical_engine-0.11.2/src/devagent_physical_engine/ros2/qualification_v11.py +256 -0
  10. devagent_physical_engine-0.11.2/src/devagent_physical_engine/ros2/tool_scene.py +127 -0
  11. devagent_physical_engine-0.11.2/src/devagent_physical_engine/ros2/tool_scene_probe.py +201 -0
  12. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +134 -18
  13. devagent_physical_engine-0.11.2/src/devagent_physical_engine/ros2/workpiece_scene.py +162 -0
  14. devagent_physical_engine-0.11.2/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +355 -0
  15. devagent_physical_engine-0.11.2/src/devagent_physical_engine/sim_real_qualification.py +83 -0
  16. devagent_physical_engine-0.11.2/src/devagent_physical_engine/tool_collision.py +80 -0
  17. devagent_physical_engine-0.11.2/src/devagent_physical_engine/workpiece_lifecycle.py +66 -0
  18. devagent_physical_engine-0.11.2/src/devagent_physical_engine.egg-info/PKG-INFO +336 -0
  19. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine.egg-info/SOURCES.txt +16 -1
  20. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine.egg-info/requires.txt +7 -0
  21. devagent_physical_engine-0.11.2/tests/test_continuous_clearance_v011.py +85 -0
  22. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_preexecution_contract_v10.py +27 -1
  23. devagent_physical_engine-0.11.2/tests/test_ros2_production_receipts_v011.py +155 -0
  24. devagent_physical_engine-0.11.2/tests/test_sim_real_qualification_v011.py +55 -0
  25. devagent_physical_engine-0.11.2/tests/test_tool_collision_v011.py +48 -0
  26. devagent_physical_engine-0.11.2/tests/test_workpiece_lifecycle_v011.py +81 -0
  27. devagent_physical_engine-0.10.0/PKG-INFO +0 -315
  28. devagent_physical_engine-0.10.0/README.md +0 -280
  29. devagent_physical_engine-0.10.0/src/devagent_physical_engine/ros2/preexecution.py +0 -113
  30. devagent_physical_engine-0.10.0/src/devagent_physical_engine.egg-info/PKG-INFO +0 -315
  31. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/NOTICE +0 -0
  32. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/setup.cfg +0 -0
  33. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/__init__.py +0 -0
  34. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/compiler.py +0 -0
  35. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/contracts.py +0 -0
  36. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/coordinator.py +0 -0
  37. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/critic.py +0 -0
  38. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/evidence.py +0 -0
  39. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  40. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/planner.py +0 -0
  41. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/recovery.py +0 -0
  42. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/routing.py +0 -0
  43. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/runtime.py +0 -0
  44. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/semantic.py +0 -0
  45. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/structured.py +0 -0
  46. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ai_cli.py +0 -0
  47. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/cli.py +0 -0
  48. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/doctor.py +0 -0
  49. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/engineering_agent.py +0 -0
  50. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/engineering_request.py +0 -0
  51. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/execution.py +0 -0
  52. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/models.py +0 -0
  53. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/operating_envelope.py +0 -0
  54. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  55. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  56. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  57. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  58. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  59. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  60. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/experience.py +0 -0
  61. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/measured.py +0 -0
  62. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  63. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  64. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/physical_campaign.py +0 -0
  65. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/physical_evidence.py +0 -0
  66. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/physical_motion.py +0 -0
  67. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/planning.py +0 -0
  68. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  69. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  70. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  71. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  72. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  73. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
  74. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/provider_qualification.py +0 -0
  75. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/providers.py +0 -0
  76. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/qualification.py +0 -0
  77. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/qualification_cli.py +0 -0
  78. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/qualification_harness.py +0 -0
  79. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/robot_platform.py +0 -0
  80. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/robots.py +0 -0
  81. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/__init__.py +0 -0
  82. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  83. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/commands.py +0 -0
  84. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/doctor.py +0 -0
  85. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
  86. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  87. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  88. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
  89. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  90. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  91. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  92. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  93. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  94. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
  95. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  96. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
  97. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  98. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  99. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/setup_profile.py +0 -0
  100. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/simulation.py +0 -0
  101. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/simulation_platform.py +0 -0
  102. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  103. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/twin.py +0 -0
  104. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/twin_builder.py +0 -0
  105. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/twin_materialization.py +0 -0
  106. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/verification.py +0 -0
  107. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  108. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
  109. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  110. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_agent_core.py +0 -0
  111. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_agent_semantic_hardening.py +0 -0
  112. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_ai_cli.py +0 -0
  113. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_ai_cli_v07.py +0 -0
  114. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_core.py +0 -0
  115. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_engineering_request_v07.py +0 -0
  116. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_interpreter_profiles_v08.py +0 -0
  117. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_live_provider_qualification.py +0 -0
  118. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_measured_motion_v10.py +0 -0
  119. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_natural_language_agent_v07.py +0 -0
  120. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_optimization_v05.py +0 -0
  121. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_physical_campaign_v09.py +0 -0
  122. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_physical_evidence_v09.py +0 -0
  123. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_physical_motion_v09.py +0 -0
  124. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_provider_and_qualification.py +0 -0
  125. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  126. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_qualification_harness_v06.py +0 -0
  127. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_real_provider_adapters.py +0 -0
  128. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_robot_platform_v08.py +0 -0
  129. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_ros2_simulation.py +0 -0
  130. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_ros_trajectory_v09.py +0 -0
  131. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_setup_profile.py +0 -0
  132. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_simulation_platform_v08.py +0 -0
  133. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_trajectory_qualification_v09.py +0 -0
  134. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_twin_materialization_v10.py +0 -0
  135. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_twin_v08.py +0 -0
  136. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  137. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  138. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_v052_stabilization.py +0 -0
  139. {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_v08_catalog_mapping_regression.py +0 -0
@@ -0,0 +1,336 @@
1
+ Metadata-Version: 2.4
2
+ Name: devagent-physical-engine
3
+ Version: 0.11.2
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.2 — 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
+ Real robot execution remains locked. Functional-safety certification and site qualification are not claimed.
57
+
58
+ ## v0.11 capability status
59
+
60
+ | Area | Status |
61
+ | --- | --- |
62
+ | Provider-neutral Agent Core | Implemented |
63
+ | OpenAI / Anthropic / Gemini structured adapters | Implemented |
64
+ | Planner / Critic / Recovery | Implemented |
65
+ | Natural-language engineering request front door | Implemented |
66
+ | Deterministic compiler / semantic / verification gates | Implemented |
67
+ | Multi-vendor robot profile registry | Implemented |
68
+ | UR5e / FANUC CRX / KUKA KR / ABB IRB abstraction | Implemented; physical qualification is vendor-specific |
69
+ | Evidence-aware canonical TwinSpec | Implemented |
70
+ | Canonical Twin → Gazebo + MoveIt materialization | Implemented |
71
+ | Gazebo / TF / MoveIt world read-back | Implemented |
72
+ | Runtime-owned tool collision binding + read-back | Implemented; target qualification required |
73
+ | Runtime-owned workpiece attach/detach + read-back | Implemented; target qualification required |
74
+ | Discrete MoveIt state-validity precheck | Implemented; simulation/debug only |
75
+ | Measured MoveIt collision distance | Implemented in production-candidate verifier |
76
+ | Adaptive conservative continuous-path proof | Implemented; qualified bound required |
77
+ | Measured minimum clearance + safety margin | Implemented; target qualification required |
78
+ | Measured joint-state trajectory runtime | Implemented |
79
+ | MoveIt FK TCP path / final TCP error | Implemented |
80
+ | Quantitative sim↔real qualification gate | Implemented; measured hardware dataset required |
81
+ | Python package/release supply chain | Hardened CI + exact-green-main release + direct `release.yml` PyPI OIDC deployment |
82
+ | UR5e production-candidate simulation evidence | **Requires executable v0.11 target campaign** |
83
+ | Physical commissioning | **Not qualified by source/CI alone** |
84
+ | Site qualification | **Not qualified** |
85
+ | Real robot execution | **Locked** |
86
+ | Functional-safety certification | Not claimed |
87
+
88
+ ## Trust chain
89
+
90
+ ```mermaid
91
+ flowchart TD
92
+ USER[Engineer / customer application] --> REQUEST[Natural-language engineering request]
93
+ REQUEST --> AI[Provider-neutral AI / Planner / Critic / Recovery]
94
+ AI --> COMPILE[Deterministic compile + semantic policy]
95
+ COMPILE --> VERIFY[Verified plan artifact]
96
+ VERIFY --> TWIN[Canonical TwinSpec + SHA256]
97
+ TWIN --> MATERIALIZE[Canonical materialization]
98
+ MATERIALIZE --> GZ[Gazebo world]
99
+ MATERIALIZE --> MOVEIT[MoveIt PlanningScene]
100
+ MATERIALIZE --> TF[TF frames]
101
+ GZ --> READBACK[Backend read-back]
102
+ MOVEIT --> READBACK
103
+ TF --> READBACK
104
+ READBACK --> TOOL[Verified tool collision receipt]
105
+ TOOL --> WORKPIECE[Verified workpiece lifecycle receipt]
106
+ WORKPIECE --> MOTION[Exact PhysicalMotionPlan / Twin binding]
107
+ MOTION --> CLEAR[Measured clearance + continuous proof]
108
+ CLEAR --> SIM[ROS 2 / Gazebo execution]
109
+ SIM --> MEASURE[Measured joint states + MoveIt FK]
110
+ MEASURE --> EVIDENCE[Replayable evidence]
111
+ EVIDENCE --> PROMOTION[Scope-specific promotion gate]
112
+ PROMOTION --> LOCKED[Real execution remains separately locked]
113
+ ```
114
+
115
+ The model never owns collision policy, minimum-clearance truth, dynamic scene state, qualification promotion, or real-hardware authorization.
116
+
117
+ ## Continuous collision and clearance semantics
118
+
119
+ The legacy/discrete verifier remains available for development and simulation but can never produce commissioning-usable evidence.
120
+
121
+ 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.”
122
+
123
+ A commissioning-usable pre-execution receipt requires all of:
124
+
125
+ ```text
126
+ verified=true
127
+ continuous_collision_check=true
128
+ clearance_measured=true
129
+ minimum_clearance_m > 0
130
+ materialization_hash=<exact Twin materialization>
131
+ failure_codes=[]
132
+ ```
133
+
134
+ The distance Lipschitz bound is itself qualification evidence and must be conservative for the exact robot/tool/collision model.
135
+
136
+ ## Tool and workpiece authority
137
+
138
+ Customer motion metadata can no longer claim that a tool collision model or workpiece attachment is verified.
139
+
140
+ `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.
141
+
142
+ Workpiece state uses verified transitions:
143
+
144
+ ```text
145
+ WORLD → ATTACHED → WORLD
146
+ ```
147
+
148
+ Attach/detach applies the PlanningScene change and verifies the resulting world/attached state. Missing or inconsistent read-back blocks the motion.
149
+
150
+ ## Installation
151
+
152
+ Python 3.11+ is required.
153
+
154
+ From PyPI after the corresponding release is published:
155
+
156
+ ```bash
157
+ python -m pip install devagent-physical-engine
158
+ ```
159
+
160
+ From source:
161
+
162
+ ```bash
163
+ git clone https://github.com/tomha85/devagent-physical-engine.git
164
+ cd devagent-physical-engine
165
+ python -m venv .venv
166
+ source .venv/bin/activate
167
+ python -m pip install --upgrade pip
168
+ python -m pip install -e .
169
+ ```
170
+
171
+ Optional provider SDKs:
172
+
173
+ ```bash
174
+ python -m pip install -e ".[openai]"
175
+ python -m pip install -e ".[anthropic]"
176
+ python -m pip install -e ".[gemini]"
177
+ python -m pip install -e ".[ai]"
178
+ ```
179
+
180
+ Development/qualification tooling:
181
+
182
+ ```bash
183
+ python -m pip install -e ".[dev]"
184
+ ```
185
+
186
+ `pip install` does not install ROS/Gazebo system packages or perform privileged OS changes.
187
+
188
+ ## AI providers
189
+
190
+ Keep credentials outside WorldState/Twin data:
191
+
192
+ ```bash
193
+ export OPENAI_API_KEY='...'
194
+ export ANTHROPIC_API_KEY='...'
195
+ export GEMINI_API_KEY='...'
196
+ ```
197
+
198
+ Examples:
199
+
200
+ ```bash
201
+ devagent-physical-ai doctor --provider openai
202
+ devagent-physical-ai qualify --provider openai --model <model-id>
203
+ devagent-physical-ai request \
204
+ "Use a UR5e to move a part from conveyor_a to cnc_04" \
205
+ --provider openai --model <model-id>
206
+ devagent-physical-ai engineer \
207
+ "Use a UR5e to move a part from conveyor_a to cnc_04" \
208
+ --provider openai --model <model-id>
209
+ ```
210
+
211
+ Equivalent routing supports Anthropic and Gemini. Live AI qualification does not unlock real robot execution.
212
+
213
+ ## Software production gates
214
+
215
+ Repository CI now requires:
216
+
217
+ ```text
218
+ Python 3.11 regression
219
+ Python 3.12 regression
220
+ Python 3.13 regression
221
+ compileall
222
+ Ruff correctness checks
223
+ branch coverage threshold
224
+ wheel + sdist build
225
+ twine --strict
226
+ clean wheel installation/version smoke
227
+ runtime dependency vulnerability audit
228
+ ```
229
+
230
+ Critical checkout/setup/artifact GitHub Actions are pinned to exact commits.
231
+
232
+ 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.
233
+
234
+ ## UR5e ROS 2 / Gazebo target
235
+
236
+ Reference target:
237
+
238
+ ```text
239
+ Ubuntu 24.04
240
+ ROS 2 Jazzy
241
+ Gazebo Harmonic
242
+ gz_ros2_control
243
+ Universal Robots ROS 2 driver
244
+ ur_simulation_gz
245
+ MoveIt 2
246
+ ```
247
+
248
+ Setup/diagnostics:
249
+
250
+ ```bash
251
+ devagent-physical setup --profile ur5e-sim --dry-run
252
+ devagent-physical setup --profile ur5e-sim
253
+ devagent-physical ros doctor
254
+ devagent-physical ros demo
255
+ devagent-physical ros qualify-trajectory-runtime
256
+ ```
257
+
258
+ ## v0.11 production-candidate executable qualification
259
+
260
+ 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:
261
+
262
+ ```bash
263
+ python -m devagent_physical_engine.ros2.qualification_v11 \
264
+ --moveit-params-file /path/to/ur5e_moveit_params.yaml \
265
+ --distance-lipschitz <qualified-m-per-radian-bound> \
266
+ --safety-margin 0.005 \
267
+ --log-dir ~/.devagent/v11-production-candidate-qualification
268
+ ```
269
+
270
+ 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.
271
+
272
+ It may report:
273
+
274
+ ```text
275
+ promotion_candidate=true
276
+ simulation_commissioning_evidence_qualified=true
277
+ continuous_collision_check=true
278
+ minimum_clearance_measured=true
279
+ ```
280
+
281
+ but still intentionally reports:
282
+
283
+ ```text
284
+ physical_qualification=false
285
+ commissioning_qualification=false
286
+ real_execution_allowed=false
287
+ site_qualification=false
288
+ ```
289
+
290
+ Physical/site promotion requires measured hardware/shadow evidence.
291
+
292
+ ## Sim↔real qualification
293
+
294
+ The source now includes an explicit quantitative correlation gate. Default minimum criteria are:
295
+
296
+ ```text
297
+ observations >= 30
298
+ cycle-time gap p95 <= 10%
299
+ TCP error p95 <= 10 mm
300
+ behavior agreement >= 0.99
301
+ measured origin + dataset reference required
302
+ ```
303
+
304
+ Missing evidence never qualifies. Customers may set stricter thresholds.
305
+
306
+ ## Optimization semantics
307
+
308
+ 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.
309
+
310
+ ## Documentation
311
+
312
+ - [`docs/PRODUCTION_READINESS.md`](docs/PRODUCTION_READINESS.md) — v0.11 readiness scopes and qualification boundaries.
313
+ - [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) — current trust boundaries and runtime architecture.
314
+ - [`docs/AGENT_CORE.md`](docs/AGENT_CORE.md) — Agent Core authority model.
315
+ - [`docs/AI_PROVIDERS.md`](docs/AI_PROVIDERS.md) — provider installation, credentials, and qualification.
316
+ - [`docs/NATURAL_LANGUAGE_ENGINEERING.md`](docs/NATURAL_LANGUAGE_ENGINEERING.md) — natural-language engineering request flow.
317
+ - [`docs/ROBOT_PLATFORM_AND_TWIN.md`](docs/ROBOT_PLATFORM_AND_TWIN.md) — robot abstraction and evidence-aware Twin.
318
+ - [`docs/MEASURED_PHYSICAL_RUNTIME.md`](docs/MEASURED_PHYSICAL_RUNTIME.md) — motion and measured runtime.
319
+ - [`docs/CANONICAL_TWIN_RUNTIME.md`](docs/CANONICAL_TWIN_RUNTIME.md) — canonical scene, continuous clearance, and dynamic scene lifecycle.
320
+ - [`docs/QUALIFICATION.md`](docs/QUALIFICATION.md) — qualification/evidence model.
321
+ - [`docs/OPTIMIZATION.md`](docs/OPTIMIZATION.md) — search, metrics, Pareto ranking, and evidence.
322
+ - [`docs/SETUP.md`](docs/SETUP.md) — explicit workstation bootstrap.
323
+ - [`docs/LAPTOP_ACCEPTANCE.md`](docs/LAPTOP_ACCEPTANCE.md) — UR5e workstation acceptance.
324
+ - [`docs/PYPI_RELEASE.md`](docs/PYPI_RELEASE.md) — Trusted Publishing release pipeline.
325
+
326
+ ## Release policy
327
+
328
+ 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.
329
+
330
+ ## Ownership
331
+
332
+ DevAgent Smart Physical Engine
333
+ Copyright © 2026 Tom Ha
334
+ Original creator: Tom Ha
335
+ Original project: https://github.com/tomha85/devagent-physical-engine
336
+ All rights reserved.
@@ -0,0 +1,295 @@
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.2 — 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
+ Real robot execution remains locked. Functional-safety certification and site qualification are not claimed.
16
+
17
+ ## v0.11 capability status
18
+
19
+ | Area | Status |
20
+ | --- | --- |
21
+ | Provider-neutral Agent Core | Implemented |
22
+ | OpenAI / Anthropic / Gemini structured adapters | Implemented |
23
+ | Planner / Critic / Recovery | Implemented |
24
+ | Natural-language engineering request front door | Implemented |
25
+ | Deterministic compiler / semantic / verification gates | Implemented |
26
+ | Multi-vendor robot profile registry | Implemented |
27
+ | UR5e / FANUC CRX / KUKA KR / ABB IRB abstraction | Implemented; physical qualification is vendor-specific |
28
+ | Evidence-aware canonical TwinSpec | Implemented |
29
+ | Canonical Twin → Gazebo + MoveIt materialization | Implemented |
30
+ | Gazebo / TF / MoveIt world read-back | Implemented |
31
+ | Runtime-owned tool collision binding + read-back | Implemented; target qualification required |
32
+ | Runtime-owned workpiece attach/detach + read-back | Implemented; target qualification required |
33
+ | Discrete MoveIt state-validity precheck | Implemented; simulation/debug only |
34
+ | Measured MoveIt collision distance | Implemented in production-candidate verifier |
35
+ | Adaptive conservative continuous-path proof | Implemented; qualified bound required |
36
+ | Measured minimum clearance + safety margin | Implemented; target qualification required |
37
+ | Measured joint-state trajectory runtime | Implemented |
38
+ | MoveIt FK TCP path / final TCP error | Implemented |
39
+ | Quantitative sim↔real qualification gate | Implemented; measured hardware dataset required |
40
+ | Python package/release supply chain | Hardened CI + exact-green-main release + direct `release.yml` PyPI OIDC deployment |
41
+ | UR5e production-candidate simulation evidence | **Requires executable v0.11 target campaign** |
42
+ | Physical commissioning | **Not qualified by source/CI alone** |
43
+ | Site qualification | **Not qualified** |
44
+ | Real robot execution | **Locked** |
45
+ | Functional-safety certification | Not claimed |
46
+
47
+ ## Trust chain
48
+
49
+ ```mermaid
50
+ flowchart TD
51
+ USER[Engineer / customer application] --> REQUEST[Natural-language engineering request]
52
+ REQUEST --> AI[Provider-neutral AI / Planner / Critic / Recovery]
53
+ AI --> COMPILE[Deterministic compile + semantic policy]
54
+ COMPILE --> VERIFY[Verified plan artifact]
55
+ VERIFY --> TWIN[Canonical TwinSpec + SHA256]
56
+ TWIN --> MATERIALIZE[Canonical materialization]
57
+ MATERIALIZE --> GZ[Gazebo world]
58
+ MATERIALIZE --> MOVEIT[MoveIt PlanningScene]
59
+ MATERIALIZE --> TF[TF frames]
60
+ GZ --> READBACK[Backend read-back]
61
+ MOVEIT --> READBACK
62
+ TF --> READBACK
63
+ READBACK --> TOOL[Verified tool collision receipt]
64
+ TOOL --> WORKPIECE[Verified workpiece lifecycle receipt]
65
+ WORKPIECE --> MOTION[Exact PhysicalMotionPlan / Twin binding]
66
+ MOTION --> CLEAR[Measured clearance + continuous proof]
67
+ CLEAR --> SIM[ROS 2 / Gazebo execution]
68
+ SIM --> MEASURE[Measured joint states + MoveIt FK]
69
+ MEASURE --> EVIDENCE[Replayable evidence]
70
+ EVIDENCE --> PROMOTION[Scope-specific promotion gate]
71
+ PROMOTION --> LOCKED[Real execution remains separately locked]
72
+ ```
73
+
74
+ The model never owns collision policy, minimum-clearance truth, dynamic scene state, qualification promotion, or real-hardware authorization.
75
+
76
+ ## Continuous collision and clearance semantics
77
+
78
+ The legacy/discrete verifier remains available for development and simulation but can never produce commissioning-usable evidence.
79
+
80
+ 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.”
81
+
82
+ A commissioning-usable pre-execution receipt requires all of:
83
+
84
+ ```text
85
+ verified=true
86
+ continuous_collision_check=true
87
+ clearance_measured=true
88
+ minimum_clearance_m > 0
89
+ materialization_hash=<exact Twin materialization>
90
+ failure_codes=[]
91
+ ```
92
+
93
+ The distance Lipschitz bound is itself qualification evidence and must be conservative for the exact robot/tool/collision model.
94
+
95
+ ## Tool and workpiece authority
96
+
97
+ Customer motion metadata can no longer claim that a tool collision model or workpiece attachment is verified.
98
+
99
+ `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.
100
+
101
+ Workpiece state uses verified transitions:
102
+
103
+ ```text
104
+ WORLD → ATTACHED → WORLD
105
+ ```
106
+
107
+ Attach/detach applies the PlanningScene change and verifies the resulting world/attached state. Missing or inconsistent read-back blocks the motion.
108
+
109
+ ## Installation
110
+
111
+ Python 3.11+ is required.
112
+
113
+ From PyPI after the corresponding release is published:
114
+
115
+ ```bash
116
+ python -m pip install devagent-physical-engine
117
+ ```
118
+
119
+ From source:
120
+
121
+ ```bash
122
+ git clone https://github.com/tomha85/devagent-physical-engine.git
123
+ cd devagent-physical-engine
124
+ python -m venv .venv
125
+ source .venv/bin/activate
126
+ python -m pip install --upgrade pip
127
+ python -m pip install -e .
128
+ ```
129
+
130
+ Optional provider SDKs:
131
+
132
+ ```bash
133
+ python -m pip install -e ".[openai]"
134
+ python -m pip install -e ".[anthropic]"
135
+ python -m pip install -e ".[gemini]"
136
+ python -m pip install -e ".[ai]"
137
+ ```
138
+
139
+ Development/qualification tooling:
140
+
141
+ ```bash
142
+ python -m pip install -e ".[dev]"
143
+ ```
144
+
145
+ `pip install` does not install ROS/Gazebo system packages or perform privileged OS changes.
146
+
147
+ ## AI providers
148
+
149
+ Keep credentials outside WorldState/Twin data:
150
+
151
+ ```bash
152
+ export OPENAI_API_KEY='...'
153
+ export ANTHROPIC_API_KEY='...'
154
+ export GEMINI_API_KEY='...'
155
+ ```
156
+
157
+ Examples:
158
+
159
+ ```bash
160
+ devagent-physical-ai doctor --provider openai
161
+ devagent-physical-ai qualify --provider openai --model <model-id>
162
+ devagent-physical-ai request \
163
+ "Use a UR5e to move a part from conveyor_a to cnc_04" \
164
+ --provider openai --model <model-id>
165
+ devagent-physical-ai engineer \
166
+ "Use a UR5e to move a part from conveyor_a to cnc_04" \
167
+ --provider openai --model <model-id>
168
+ ```
169
+
170
+ Equivalent routing supports Anthropic and Gemini. Live AI qualification does not unlock real robot execution.
171
+
172
+ ## Software production gates
173
+
174
+ Repository CI now requires:
175
+
176
+ ```text
177
+ Python 3.11 regression
178
+ Python 3.12 regression
179
+ Python 3.13 regression
180
+ compileall
181
+ Ruff correctness checks
182
+ branch coverage threshold
183
+ wheel + sdist build
184
+ twine --strict
185
+ clean wheel installation/version smoke
186
+ runtime dependency vulnerability audit
187
+ ```
188
+
189
+ Critical checkout/setup/artifact GitHub Actions are pinned to exact commits.
190
+
191
+ 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.
192
+
193
+ ## UR5e ROS 2 / Gazebo target
194
+
195
+ Reference target:
196
+
197
+ ```text
198
+ Ubuntu 24.04
199
+ ROS 2 Jazzy
200
+ Gazebo Harmonic
201
+ gz_ros2_control
202
+ Universal Robots ROS 2 driver
203
+ ur_simulation_gz
204
+ MoveIt 2
205
+ ```
206
+
207
+ Setup/diagnostics:
208
+
209
+ ```bash
210
+ devagent-physical setup --profile ur5e-sim --dry-run
211
+ devagent-physical setup --profile ur5e-sim
212
+ devagent-physical ros doctor
213
+ devagent-physical ros demo
214
+ devagent-physical ros qualify-trajectory-runtime
215
+ ```
216
+
217
+ ## v0.11 production-candidate executable qualification
218
+
219
+ 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:
220
+
221
+ ```bash
222
+ python -m devagent_physical_engine.ros2.qualification_v11 \
223
+ --moveit-params-file /path/to/ur5e_moveit_params.yaml \
224
+ --distance-lipschitz <qualified-m-per-radian-bound> \
225
+ --safety-margin 0.005 \
226
+ --log-dir ~/.devagent/v11-production-candidate-qualification
227
+ ```
228
+
229
+ 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.
230
+
231
+ It may report:
232
+
233
+ ```text
234
+ promotion_candidate=true
235
+ simulation_commissioning_evidence_qualified=true
236
+ continuous_collision_check=true
237
+ minimum_clearance_measured=true
238
+ ```
239
+
240
+ but still intentionally reports:
241
+
242
+ ```text
243
+ physical_qualification=false
244
+ commissioning_qualification=false
245
+ real_execution_allowed=false
246
+ site_qualification=false
247
+ ```
248
+
249
+ Physical/site promotion requires measured hardware/shadow evidence.
250
+
251
+ ## Sim↔real qualification
252
+
253
+ The source now includes an explicit quantitative correlation gate. Default minimum criteria are:
254
+
255
+ ```text
256
+ observations >= 30
257
+ cycle-time gap p95 <= 10%
258
+ TCP error p95 <= 10 mm
259
+ behavior agreement >= 0.99
260
+ measured origin + dataset reference required
261
+ ```
262
+
263
+ Missing evidence never qualifies. Customers may set stricter thresholds.
264
+
265
+ ## Optimization semantics
266
+
267
+ 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.
268
+
269
+ ## Documentation
270
+
271
+ - [`docs/PRODUCTION_READINESS.md`](docs/PRODUCTION_READINESS.md) — v0.11 readiness scopes and qualification boundaries.
272
+ - [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) — current trust boundaries and runtime architecture.
273
+ - [`docs/AGENT_CORE.md`](docs/AGENT_CORE.md) — Agent Core authority model.
274
+ - [`docs/AI_PROVIDERS.md`](docs/AI_PROVIDERS.md) — provider installation, credentials, and qualification.
275
+ - [`docs/NATURAL_LANGUAGE_ENGINEERING.md`](docs/NATURAL_LANGUAGE_ENGINEERING.md) — natural-language engineering request flow.
276
+ - [`docs/ROBOT_PLATFORM_AND_TWIN.md`](docs/ROBOT_PLATFORM_AND_TWIN.md) — robot abstraction and evidence-aware Twin.
277
+ - [`docs/MEASURED_PHYSICAL_RUNTIME.md`](docs/MEASURED_PHYSICAL_RUNTIME.md) — motion and measured runtime.
278
+ - [`docs/CANONICAL_TWIN_RUNTIME.md`](docs/CANONICAL_TWIN_RUNTIME.md) — canonical scene, continuous clearance, and dynamic scene lifecycle.
279
+ - [`docs/QUALIFICATION.md`](docs/QUALIFICATION.md) — qualification/evidence model.
280
+ - [`docs/OPTIMIZATION.md`](docs/OPTIMIZATION.md) — search, metrics, Pareto ranking, and evidence.
281
+ - [`docs/SETUP.md`](docs/SETUP.md) — explicit workstation bootstrap.
282
+ - [`docs/LAPTOP_ACCEPTANCE.md`](docs/LAPTOP_ACCEPTANCE.md) — UR5e workstation acceptance.
283
+ - [`docs/PYPI_RELEASE.md`](docs/PYPI_RELEASE.md) — Trusted Publishing release pipeline.
284
+
285
+ ## Release policy
286
+
287
+ 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.
288
+
289
+ ## Ownership
290
+
291
+ DevAgent Smart Physical Engine
292
+ Copyright © 2026 Tom Ha
293
+ Original creator: Tom Ha
294
+ Original project: https://github.com/tomha85/devagent-physical-engine
295
+ 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.2"
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
@@ -41,4 +41,4 @@ __all__ = [
41
41
  "TwinValidator",
42
42
  ]
43
43
 
44
- __version__ = "0.10.0"
44
+ __version__ = "0.11.2"