devagent-physical-engine 1.3.0__tar.gz → 1.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. {devagent_physical_engine-1.3.0/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.3.1}/PKG-INFO +125 -16
  2. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/README.md +124 -15
  3. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/pyproject.toml +1 -1
  4. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/__init__.py +1 -1
  5. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/evidence_trust.py +6 -6
  6. devagent_physical_engine-1.3.1/src/devagent_physical_engine/user_cli.py +589 -0
  7. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1/src/devagent_physical_engine.egg-info}/PKG-INFO +125 -16
  8. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine.egg-info/SOURCES.txt +3 -0
  9. devagent_physical_engine-1.3.1/tests/test_evidence_viewer_palette_v130.py +21 -0
  10. devagent_physical_engine-1.3.1/tests/test_user_cli_interactive_v131.py +237 -0
  11. devagent_physical_engine-1.3.1/tests/test_user_cli_progress_v131.py +148 -0
  12. devagent_physical_engine-1.3.0/src/devagent_physical_engine/user_cli.py +0 -107
  13. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/NOTICE +0 -0
  14. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/setup.cfg +0 -0
  15. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/agent/__init__.py +0 -0
  16. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/agent/compiler.py +0 -0
  17. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/agent/contracts.py +0 -0
  18. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/agent/coordinator.py +0 -0
  19. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/agent/critic.py +0 -0
  20. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/agent/evidence.py +0 -0
  21. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  22. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/agent/planner.py +0 -0
  23. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/agent/recovery.py +0 -0
  24. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/agent/routing.py +0 -0
  25. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/agent/runtime.py +0 -0
  26. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/agent/semantic.py +0 -0
  27. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/agent/structured.py +0 -0
  28. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ai_cli.py +0 -0
  29. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/cli.py +0 -0
  30. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/commercial.py +0 -0
  31. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/commercial_campaign.py +0 -0
  32. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/commercial_cli.py +0 -0
  33. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/commercial_importer.py +0 -0
  34. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/commercial_readiness.py +0 -0
  35. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/commercial_repository.py +0 -0
  36. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/continuous_clearance.py +0 -0
  37. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/doctor.py +0 -0
  38. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/engineering_agent.py +0 -0
  39. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/engineering_request.py +0 -0
  40. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/evidence_replay.py +0 -0
  41. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/execution.py +0 -0
  42. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/models.py +0 -0
  43. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/one_command.py +0 -0
  44. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/operating_envelope.py +0 -0
  45. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  46. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  47. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  48. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  49. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  50. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  51. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/optimization/experience.py +0 -0
  52. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/optimization/measured.py +0 -0
  53. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  54. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  55. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/physical_campaign.py +0 -0
  56. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/physical_evidence.py +0 -0
  57. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/physical_motion.py +0 -0
  58. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/planning.py +0 -0
  59. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/pose_math.py +0 -0
  60. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/preexecution_contract.py +0 -0
  61. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/production_authority.py +0 -0
  62. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/production_grade.py +0 -0
  63. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/project.py +0 -0
  64. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  65. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  66. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  67. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  68. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  69. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
  70. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/provider_qualification.py +0 -0
  71. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/providers.py +0 -0
  72. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/qualification.py +0 -0
  73. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/qualification_cli.py +0 -0
  74. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/qualification_harness.py +0 -0
  75. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/reference_workcell.py +0 -0
  76. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/robot_platform.py +0 -0
  77. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/robots.py +0 -0
  78. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/__init__.py +0 -0
  79. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  80. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/commands.py +0 -0
  81. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
  82. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/doctor.py +0 -0
  83. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
  84. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
  85. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  86. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
  87. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
  88. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  89. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
  90. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
  91. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  92. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
  93. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  94. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
  95. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
  96. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  97. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  98. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
  99. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
  100. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  101. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
  102. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
  103. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
  104. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  105. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
  106. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
  107. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
  108. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
  109. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
  110. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  111. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  112. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
  113. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
  114. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
  115. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
  116. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
  117. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/setup_profile.py +0 -0
  118. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
  119. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/simulation.py +0 -0
  120. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/simulation_platform.py +0 -0
  121. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/tool_collision.py +0 -0
  122. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  123. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/twin.py +0 -0
  124. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/twin_builder.py +0 -0
  125. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/twin_materialization.py +0 -0
  126. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/verification.py +0 -0
  127. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
  128. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  129. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
  130. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
  131. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  132. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_agent_core.py +0 -0
  133. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_agent_semantic_hardening.py +0 -0
  134. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_ai_cli.py +0 -0
  135. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_ai_cli_v07.py +0 -0
  136. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_commercial_importer_v1.py +0 -0
  137. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_commercial_readiness_v1.py +0 -0
  138. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_commercial_v1.py +0 -0
  139. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_continuous_clearance_v011.py +0 -0
  140. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_core.py +0 -0
  141. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_engineering_request_v07.py +0 -0
  142. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_evidence_replay_v12.py +0 -0
  143. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_evidence_trust_coverage_v12.py +0 -0
  144. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_evidence_trust_transport_v12.py +0 -0
  145. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_evidence_trust_v12.py +0 -0
  146. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_gazebo_cli_v0122.py +0 -0
  147. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_interpreter_profiles_v08.py +0 -0
  148. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_joint_state_probe_v0125.py +0 -0
  149. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_live_provider_qualification.py +0 -0
  150. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_measured_motion_v10.py +0 -0
  151. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
  152. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_moveit_scene_v0123.py +0 -0
  153. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_natural_language_agent_v07.py +0 -0
  154. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_one_command_hardening_v13.py +0 -0
  155. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_one_command_v13.py +0 -0
  156. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_openai_strict_schema_v0113.py +0 -0
  157. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_optimization_v05.py +0 -0
  158. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_physical_campaign_v09.py +0 -0
  159. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_physical_evidence_v09.py +0 -0
  160. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_physical_motion_v09.py +0 -0
  161. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_planning_fallback_v012.py +0 -0
  162. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_pose_math_v0125.py +0 -0
  163. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_preexecution_contract_v10.py +0 -0
  164. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_production_authority_v11.py +0 -0
  165. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_production_grade_coverage_v11.py +0 -0
  166. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_production_grade_v11.py +0 -0
  167. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_project_spine_v013.py +0 -0
  168. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_provider_and_qualification.py +0 -0
  169. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  170. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_qualification_harness_v06.py +0 -0
  171. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_readme_pypi.py +0 -0
  172. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_real_provider_adapters.py +0 -0
  173. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
  174. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_reference_workcell_v012.py +0 -0
  175. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_robot_platform_v08.py +0 -0
  176. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_ros2_production_receipts_v011.py +0 -0
  177. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_ros2_simulation.py +0 -0
  178. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_ros_trajectory_v09.py +0 -0
  179. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_setup_profile.py +0 -0
  180. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_sim_real_qualification_v011.py +0 -0
  181. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_simulation_platform_v08.py +0 -0
  182. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_tool_collision_v011.py +0 -0
  183. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_tool_scene_v0124.py +0 -0
  184. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_trajectory_action_probe_v0125.py +0 -0
  185. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_trajectory_qualification_v09.py +0 -0
  186. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_trajectory_tracking_v0125.py +0 -0
  187. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_twin_materialization_v10.py +0 -0
  188. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_twin_v08.py +0 -0
  189. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  190. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  191. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_v052_stabilization.py +0 -0
  192. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_v08_catalog_mapping_regression.py +0 -0
  193. {devagent_physical_engine-1.3.0 → devagent_physical_engine-1.3.1}/tests/test_workpiece_lifecycle_v011.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devagent-physical-engine
3
- Version: 1.3.0
3
+ Version: 1.3.1
4
4
  Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
5
5
  Author: Tom Ha
6
6
  License: All Rights Reserved
@@ -82,7 +82,7 @@ Python 3.11+ is required.
82
82
  Install:
83
83
 
84
84
  ```bash
85
- python -m pip install --upgrade devagent-physical-engine==1.3.0
85
+ python -m pip install --upgrade devagent-physical-engine==1.3.1
86
86
  ```
87
87
 
88
88
  Verify the installed version:
@@ -94,7 +94,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
94
94
  Expected:
95
95
 
96
96
  ```text
97
- 1.3.0
97
+ 1.3.1
98
98
  ```
99
99
 
100
100
  Run DevAgent on the customer project folder:
@@ -107,18 +107,20 @@ That is the normal starting point.
107
107
 
108
108
  You do **not** need to manually initialize a DevAgent project, choose artifact IDs, convert an XLSX sheet to CSV, or understand the internal evidence database before using Simple Mode.
109
109
 
110
- If you also want physical simulation when an exact qualified execution path exists:
110
+ Request physical simulation when an exact qualified execution path exists:
111
111
 
112
112
  ```bash
113
113
  devagent verify ./customer-project --simulate
114
114
  ```
115
115
 
116
- If you want DevAgent to open the generated Evidence Viewer:
116
+ Open the generated Evidence Viewer after verification:
117
117
 
118
118
  ```bash
119
119
  devagent verify ./customer-project --simulate --open
120
120
  ```
121
121
 
122
+ `--open` requests the report in a **new browser tab** after the terminal verification summary is complete. DevAgent requests that the browser not raise itself over the terminal, then the CLI returns so the same terminal can be used for replay and inspection commands. Desktop/browser policy may still choose to focus the new tab.
123
+
122
124
  For machine-readable output:
123
125
 
124
126
  ```bash
@@ -143,6 +145,59 @@ Results: <customer-project>/devagent-results/
143
145
 
144
146
  ---
145
147
 
148
+ # What the user sees in the terminal
149
+
150
+ Human Simple Mode keeps the terminal as the primary run surface. Example:
151
+
152
+ ```text
153
+ [DevAgent + 0.00s] START RUNNING source=ACME_CNC_CELL_TEST
154
+ [DevAgent + 0.00s] INTAKE RUNNING scanning and classifying customer engineering files
155
+ [DevAgent + 0.42s] REQUIREMENTS READY customer requirements normalized
156
+ [DevAgent + 0.61s] TWIN NORMALIZED customer Twin draft normalized
157
+ [DevAgent + 0.85s] PROJECT READY project_id=acme-cell
158
+ [DevAgent + 0.91s] PLAN READY artifact=...
159
+ [DevAgent + 1.02s] SIMULATION BLOCKED imported_customer_twin_execution_adapter_not_yet_qualified
160
+ [DevAgent + 1.11s] CAMPAIGN COMPLETE artifact=...
161
+ [DevAgent + 1.18s] FAT COMPLETE artifact=...
162
+ [DevAgent + 1.24s] EVIDENCE COMPLETE bundle=...
163
+ [DevAgent + 1.25s] COMPLETE DONE state=verification_incomplete release_ready=False real_execution_allowed=False
164
+ [DevAgent + 1.25s] REPORT OPENING new tab requested; terminal will remain available: .../EVIDENCE.html
165
+ [DevAgent + 1.26s] REPORT DISPATCHED browser request completed; terminal is available
166
+ ```
167
+
168
+ If verification runs longer than five seconds, DevAgent emits a heartbeat such as:
169
+
170
+ ```text
171
+ [DevAgent + 5.00s] ENGINE RUNNING verification is still active
172
+ ```
173
+
174
+ The same human progress trace is persisted to:
175
+
176
+ ```text
177
+ <customer-project>/devagent-results/RUN.log
178
+ ```
179
+
180
+ After an Evidence Bundle exists, DevAgent prints a copy/paste replay command. Example:
181
+
182
+ ```bash
183
+ devagent-commercial --db ~/.devagent/projects.db replay \
184
+ acme-cell \
185
+ EVIDENCE_BUNDLE_ARTIFACT \
186
+ --output ./devagent-results/REPLAY.json
187
+ ```
188
+
189
+ If simulation was blocked and no measured runtime case exists, replay is expected to fail closed. If qualified simulation runtime evidence exists, replay reconstructs and verifies that exact persisted case without commanding a robot.
190
+
191
+ To suppress human progress while keeping the final human summary:
192
+
193
+ ```bash
194
+ devagent verify ./customer-project --no-progress
195
+ ```
196
+
197
+ `--json` remains machine-clean and suppresses human progress automatically.
198
+
199
+ ---
200
+
146
201
  # How to use the engine
147
202
 
148
203
  ## 1. Give DevAgent the engineering folder you already have
@@ -205,7 +260,7 @@ DETERMINISTIC TWIN VALIDATION
205
260
  VERIFICATION PLAN / CAMPAIGN / FAT
206
261
  |
207
262
  v
208
- EVIDENCE VIEWER
263
+ EVIDENCE VIEWER + RUN LOG + REPLAY HANDOFF
209
264
  ```
210
265
 
211
266
  Unknown facts remain unknown. DevAgent does not fill engineering gaps with guesses.
@@ -259,6 +314,7 @@ Typical first-run output:
259
314
  ```text
260
315
  ACME_CNC_CELL_TEST/
261
316
  └── devagent-results/
317
+ ├── RUN.log
262
318
  ├── SUMMARY.json
263
319
  ├── INTAKE.json
264
320
  ├── QUESTIONS.md
@@ -381,6 +437,7 @@ When enough explicit evidence exists to build the Twin and deterministic campaig
381
437
  ```text
382
438
  ACME_CNC_CELL_TEST/
383
439
  └── devagent-results/
440
+ ├── RUN.log
384
441
  ├── SUMMARY.json
385
442
  ├── INTAKE.json
386
443
  ├── QUESTIONS.md
@@ -388,7 +445,8 @@ ACME_CNC_CELL_TEST/
388
445
  │ ├── requirements.csv
389
446
  │ └── devagent-twin.yaml
390
447
  ├── FAT_REPORT.html
391
- └── EVIDENCE.html
448
+ ├── EVIDENCE.html
449
+ └── REPLAY.json # when replay succeeds with --output
392
450
  ```
393
451
 
394
452
  `normalized/devagent-twin.yaml` is generated evidence mapping. It is not an independent source of truth and does not bypass Twin validation.
@@ -454,7 +512,7 @@ That is intentional. A blocked simulation is more trustworthy than a visually im
454
512
 
455
513
  ---
456
514
 
457
- ## 5. Open the Evidence Viewer
515
+ ## 5. Open the Evidence Viewer and continue in the terminal
458
516
 
459
517
  When evidence lineage can be rendered:
460
518
 
@@ -468,6 +526,22 @@ or:
468
526
  devagent verify ./ACME_CNC_CELL_TEST --simulate --open
469
527
  ```
470
528
 
529
+ The sequence is intentionally:
530
+
531
+ ```text
532
+ terminal verification completes
533
+
534
+ final summary printed
535
+
536
+ replay command printed
537
+
538
+ Evidence Viewer requested in a new browser tab
539
+
540
+ CLI returns
541
+
542
+ same terminal is available for replay / artifact inspection / next command
543
+ ```
544
+
471
545
  The viewer is read-only and is intended to answer:
472
546
 
473
547
  - Which requirement was evaluated?
@@ -487,6 +561,22 @@ The trust principle is simple:
487
561
 
488
562
  # Understanding the results
489
563
 
564
+ ## `RUN.log`
565
+
566
+ Persistent copy of the human terminal progress trace. It is presentation/debug evidence and does not replace immutable engineering artifacts.
567
+
568
+ Inspect it later:
569
+
570
+ ```bash
571
+ cat ./customer-project/devagent-results/RUN.log
572
+ ```
573
+
574
+ or follow it while another process is running:
575
+
576
+ ```bash
577
+ tail -f ./customer-project/devagent-results/RUN.log
578
+ ```
579
+
490
580
  ## `SUMMARY.json`
491
581
 
492
582
  This is the primary machine-readable result of Simple Mode.
@@ -527,11 +617,11 @@ Each discovered file is associated with a bounded role and authority decision.
527
617
  Examples:
528
618
 
529
619
  ```text
530
- requirements.xlsx -> requirements
531
- layout.yaml -> engineering_data
532
- ur5e.urdf -> robot_model
533
- safety_requirements.pdf -> manual engineering document
534
- expected/... -> test_oracle, used_for_authority=false
620
+ requirements.xlsx -> requirements
621
+ layout.yaml -> engineering_data
622
+ ur5e.urdf -> robot_model
623
+ safety_requirements.pdf -> manual engineering document
624
+ expected/... -> test_oracle, used_for_authority=false
535
625
  ```
536
626
 
537
627
  ## `QUESTIONS.md`
@@ -554,6 +644,10 @@ A missing metric or unsupported requirement is not silently changed to PASS. It
554
644
 
555
645
  Read-only evidence view of requirement/Twin/artifact lineage.
556
646
 
647
+ ## `REPLAY.json`
648
+
649
+ Written only when replay reconstruction succeeds and `--output` was supplied. It is a canonical replay manifest, not a new robot or simulator execution.
650
+
557
651
  ---
558
652
 
559
653
  # Requirements and verdicts
@@ -829,6 +923,18 @@ devagent-commercial evidence-viewer warehouse-cnc-04 \
829
923
 
830
924
  ## 11. Replay persisted lineage
831
925
 
926
+ Read-only inspection first:
927
+
928
+ ```bash
929
+ devagent-commercial replay \
930
+ warehouse-cnc-04 \
931
+ EVIDENCE_BUNDLE \
932
+ --qualification-root ~/.devagent/physical-qualification \
933
+ --output replay-manifest.json
934
+ ```
935
+
936
+ Optionally record immutable `replay_verification` evidence after a successful reconstruction:
937
+
832
938
  ```bash
833
939
  devagent-commercial replay \
834
940
  warehouse-cnc-04 \
@@ -1089,11 +1195,11 @@ It is **not** a replacement for:
1089
1195
 
1090
1196
  # Project status
1091
1197
 
1092
- **v1.3.0 — Production/Stable software workflow**
1198
+ **v1.3.1 — Production/Stable software workflow**
1093
1199
 
1094
1200
  The bounded software/evidence workflow is production-oriented and continuously tested across Python 3.11, 3.12, and 3.13.
1095
1201
 
1096
- The v1.3 release candidate includes:
1202
+ The v1.3.1 patch release includes:
1097
1203
 
1098
1204
  ```text
1099
1205
  one-command customer intake
@@ -1102,8 +1208,11 @@ immutable project/Twin lineage
1102
1208
  deterministic verification campaigns
1103
1209
  measured evidence binding
1104
1210
  FAT generation
1211
+ professional Evidence Viewer report palette
1212
+ terminal stage-by-stage progress + RUN.log
1213
+ new-tab report handoff without intentionally raising over terminal
1214
+ copy/paste replay command after Evidence Bundle generation
1105
1215
  Evidence Bundle
1106
- Evidence Viewer
1107
1216
  replay reconstruction
1108
1217
  change impact
1109
1218
  regression
@@ -41,7 +41,7 @@ Python 3.11+ is required.
41
41
  Install:
42
42
 
43
43
  ```bash
44
- python -m pip install --upgrade devagent-physical-engine==1.3.0
44
+ python -m pip install --upgrade devagent-physical-engine==1.3.1
45
45
  ```
46
46
 
47
47
  Verify the installed version:
@@ -53,7 +53,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
53
53
  Expected:
54
54
 
55
55
  ```text
56
- 1.3.0
56
+ 1.3.1
57
57
  ```
58
58
 
59
59
  Run DevAgent on the customer project folder:
@@ -66,18 +66,20 @@ That is the normal starting point.
66
66
 
67
67
  You do **not** need to manually initialize a DevAgent project, choose artifact IDs, convert an XLSX sheet to CSV, or understand the internal evidence database before using Simple Mode.
68
68
 
69
- If you also want physical simulation when an exact qualified execution path exists:
69
+ Request physical simulation when an exact qualified execution path exists:
70
70
 
71
71
  ```bash
72
72
  devagent verify ./customer-project --simulate
73
73
  ```
74
74
 
75
- If you want DevAgent to open the generated Evidence Viewer:
75
+ Open the generated Evidence Viewer after verification:
76
76
 
77
77
  ```bash
78
78
  devagent verify ./customer-project --simulate --open
79
79
  ```
80
80
 
81
+ `--open` requests the report in a **new browser tab** after the terminal verification summary is complete. DevAgent requests that the browser not raise itself over the terminal, then the CLI returns so the same terminal can be used for replay and inspection commands. Desktop/browser policy may still choose to focus the new tab.
82
+
81
83
  For machine-readable output:
82
84
 
83
85
  ```bash
@@ -102,6 +104,59 @@ Results: <customer-project>/devagent-results/
102
104
 
103
105
  ---
104
106
 
107
+ # What the user sees in the terminal
108
+
109
+ Human Simple Mode keeps the terminal as the primary run surface. Example:
110
+
111
+ ```text
112
+ [DevAgent + 0.00s] START RUNNING source=ACME_CNC_CELL_TEST
113
+ [DevAgent + 0.00s] INTAKE RUNNING scanning and classifying customer engineering files
114
+ [DevAgent + 0.42s] REQUIREMENTS READY customer requirements normalized
115
+ [DevAgent + 0.61s] TWIN NORMALIZED customer Twin draft normalized
116
+ [DevAgent + 0.85s] PROJECT READY project_id=acme-cell
117
+ [DevAgent + 0.91s] PLAN READY artifact=...
118
+ [DevAgent + 1.02s] SIMULATION BLOCKED imported_customer_twin_execution_adapter_not_yet_qualified
119
+ [DevAgent + 1.11s] CAMPAIGN COMPLETE artifact=...
120
+ [DevAgent + 1.18s] FAT COMPLETE artifact=...
121
+ [DevAgent + 1.24s] EVIDENCE COMPLETE bundle=...
122
+ [DevAgent + 1.25s] COMPLETE DONE state=verification_incomplete release_ready=False real_execution_allowed=False
123
+ [DevAgent + 1.25s] REPORT OPENING new tab requested; terminal will remain available: .../EVIDENCE.html
124
+ [DevAgent + 1.26s] REPORT DISPATCHED browser request completed; terminal is available
125
+ ```
126
+
127
+ If verification runs longer than five seconds, DevAgent emits a heartbeat such as:
128
+
129
+ ```text
130
+ [DevAgent + 5.00s] ENGINE RUNNING verification is still active
131
+ ```
132
+
133
+ The same human progress trace is persisted to:
134
+
135
+ ```text
136
+ <customer-project>/devagent-results/RUN.log
137
+ ```
138
+
139
+ After an Evidence Bundle exists, DevAgent prints a copy/paste replay command. Example:
140
+
141
+ ```bash
142
+ devagent-commercial --db ~/.devagent/projects.db replay \
143
+ acme-cell \
144
+ EVIDENCE_BUNDLE_ARTIFACT \
145
+ --output ./devagent-results/REPLAY.json
146
+ ```
147
+
148
+ If simulation was blocked and no measured runtime case exists, replay is expected to fail closed. If qualified simulation runtime evidence exists, replay reconstructs and verifies that exact persisted case without commanding a robot.
149
+
150
+ To suppress human progress while keeping the final human summary:
151
+
152
+ ```bash
153
+ devagent verify ./customer-project --no-progress
154
+ ```
155
+
156
+ `--json` remains machine-clean and suppresses human progress automatically.
157
+
158
+ ---
159
+
105
160
  # How to use the engine
106
161
 
107
162
  ## 1. Give DevAgent the engineering folder you already have
@@ -164,7 +219,7 @@ DETERMINISTIC TWIN VALIDATION
164
219
  VERIFICATION PLAN / CAMPAIGN / FAT
165
220
  |
166
221
  v
167
- EVIDENCE VIEWER
222
+ EVIDENCE VIEWER + RUN LOG + REPLAY HANDOFF
168
223
  ```
169
224
 
170
225
  Unknown facts remain unknown. DevAgent does not fill engineering gaps with guesses.
@@ -218,6 +273,7 @@ Typical first-run output:
218
273
  ```text
219
274
  ACME_CNC_CELL_TEST/
220
275
  └── devagent-results/
276
+ ├── RUN.log
221
277
  ├── SUMMARY.json
222
278
  ├── INTAKE.json
223
279
  ├── QUESTIONS.md
@@ -340,6 +396,7 @@ When enough explicit evidence exists to build the Twin and deterministic campaig
340
396
  ```text
341
397
  ACME_CNC_CELL_TEST/
342
398
  └── devagent-results/
399
+ ├── RUN.log
343
400
  ├── SUMMARY.json
344
401
  ├── INTAKE.json
345
402
  ├── QUESTIONS.md
@@ -347,7 +404,8 @@ ACME_CNC_CELL_TEST/
347
404
  │ ├── requirements.csv
348
405
  │ └── devagent-twin.yaml
349
406
  ├── FAT_REPORT.html
350
- └── EVIDENCE.html
407
+ ├── EVIDENCE.html
408
+ └── REPLAY.json # when replay succeeds with --output
351
409
  ```
352
410
 
353
411
  `normalized/devagent-twin.yaml` is generated evidence mapping. It is not an independent source of truth and does not bypass Twin validation.
@@ -413,7 +471,7 @@ That is intentional. A blocked simulation is more trustworthy than a visually im
413
471
 
414
472
  ---
415
473
 
416
- ## 5. Open the Evidence Viewer
474
+ ## 5. Open the Evidence Viewer and continue in the terminal
417
475
 
418
476
  When evidence lineage can be rendered:
419
477
 
@@ -427,6 +485,22 @@ or:
427
485
  devagent verify ./ACME_CNC_CELL_TEST --simulate --open
428
486
  ```
429
487
 
488
+ The sequence is intentionally:
489
+
490
+ ```text
491
+ terminal verification completes
492
+
493
+ final summary printed
494
+
495
+ replay command printed
496
+
497
+ Evidence Viewer requested in a new browser tab
498
+
499
+ CLI returns
500
+
501
+ same terminal is available for replay / artifact inspection / next command
502
+ ```
503
+
430
504
  The viewer is read-only and is intended to answer:
431
505
 
432
506
  - Which requirement was evaluated?
@@ -446,6 +520,22 @@ The trust principle is simple:
446
520
 
447
521
  # Understanding the results
448
522
 
523
+ ## `RUN.log`
524
+
525
+ Persistent copy of the human terminal progress trace. It is presentation/debug evidence and does not replace immutable engineering artifacts.
526
+
527
+ Inspect it later:
528
+
529
+ ```bash
530
+ cat ./customer-project/devagent-results/RUN.log
531
+ ```
532
+
533
+ or follow it while another process is running:
534
+
535
+ ```bash
536
+ tail -f ./customer-project/devagent-results/RUN.log
537
+ ```
538
+
449
539
  ## `SUMMARY.json`
450
540
 
451
541
  This is the primary machine-readable result of Simple Mode.
@@ -486,11 +576,11 @@ Each discovered file is associated with a bounded role and authority decision.
486
576
  Examples:
487
577
 
488
578
  ```text
489
- requirements.xlsx -> requirements
490
- layout.yaml -> engineering_data
491
- ur5e.urdf -> robot_model
492
- safety_requirements.pdf -> manual engineering document
493
- expected/... -> test_oracle, used_for_authority=false
579
+ requirements.xlsx -> requirements
580
+ layout.yaml -> engineering_data
581
+ ur5e.urdf -> robot_model
582
+ safety_requirements.pdf -> manual engineering document
583
+ expected/... -> test_oracle, used_for_authority=false
494
584
  ```
495
585
 
496
586
  ## `QUESTIONS.md`
@@ -513,6 +603,10 @@ A missing metric or unsupported requirement is not silently changed to PASS. It
513
603
 
514
604
  Read-only evidence view of requirement/Twin/artifact lineage.
515
605
 
606
+ ## `REPLAY.json`
607
+
608
+ Written only when replay reconstruction succeeds and `--output` was supplied. It is a canonical replay manifest, not a new robot or simulator execution.
609
+
516
610
  ---
517
611
 
518
612
  # Requirements and verdicts
@@ -788,6 +882,18 @@ devagent-commercial evidence-viewer warehouse-cnc-04 \
788
882
 
789
883
  ## 11. Replay persisted lineage
790
884
 
885
+ Read-only inspection first:
886
+
887
+ ```bash
888
+ devagent-commercial replay \
889
+ warehouse-cnc-04 \
890
+ EVIDENCE_BUNDLE \
891
+ --qualification-root ~/.devagent/physical-qualification \
892
+ --output replay-manifest.json
893
+ ```
894
+
895
+ Optionally record immutable `replay_verification` evidence after a successful reconstruction:
896
+
791
897
  ```bash
792
898
  devagent-commercial replay \
793
899
  warehouse-cnc-04 \
@@ -1048,11 +1154,11 @@ It is **not** a replacement for:
1048
1154
 
1049
1155
  # Project status
1050
1156
 
1051
- **v1.3.0 — Production/Stable software workflow**
1157
+ **v1.3.1 — Production/Stable software workflow**
1052
1158
 
1053
1159
  The bounded software/evidence workflow is production-oriented and continuously tested across Python 3.11, 3.12, and 3.13.
1054
1160
 
1055
- The v1.3 release candidate includes:
1161
+ The v1.3.1 patch release includes:
1056
1162
 
1057
1163
  ```text
1058
1164
  one-command customer intake
@@ -1061,8 +1167,11 @@ immutable project/Twin lineage
1061
1167
  deterministic verification campaigns
1062
1168
  measured evidence binding
1063
1169
  FAT generation
1170
+ professional Evidence Viewer report palette
1171
+ terminal stage-by-stage progress + RUN.log
1172
+ new-tab report handoff without intentionally raising over terminal
1173
+ copy/paste replay command after Evidence Bundle generation
1064
1174
  Evidence Bundle
1065
- Evidence Viewer
1066
1175
  replay reconstruction
1067
1176
  change impact
1068
1177
  regression
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devagent-physical-engine"
7
- version = "1.3.0"
7
+ version = "1.3.1"
8
8
  description = "Production-grade verification-first robotics evidence runtime with one-command customer intake, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence."
9
9
  readme = { file = "README.md", content-type = "text/markdown" }
10
10
  requires-python = ">=3.11"
@@ -129,4 +129,4 @@ __all__ = [
129
129
  "SimpleVerifyResult",
130
130
  ]
131
131
 
132
- __version__ = "1.3.0"
132
+ __version__ = "1.3.1"
@@ -801,14 +801,14 @@ class EvidenceViewer:
801
801
  <html><head><meta charset='utf-8'><meta name='viewport' content='width=device-width,initial-scale=1'>
802
802
  <title>DevAgent Evidence Viewer - {escape(str(project['name']))}</title>
803
803
  <style>
804
- :root{{font-family:Inter,ui-sans-serif,system-ui,sans-serif;color:#151515;background:#f6f7f9}}
805
- body{{margin:0}}main{{max-width:1280px;margin:auto;padding:24px}}header{{background:#111827;color:white;padding:22px;border-radius:14px}}
806
- h1,h2{{margin-top:0}}.muted{{color:#6b7280}}.grid{{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin:16px 0}}
807
- .card{{background:white;border:1px solid #e5e7eb;border-radius:12px;padding:16px}}table{{width:100%;border-collapse:collapse;background:white}}
808
- th,td{{border-bottom:1px solid #e5e7eb;padding:10px;vertical-align:top;text-align:left}}th{{background:#f3f4f6;position:sticky;top:0}}
804
+ :root{{font-family:Inter,ui-sans-serif,system-ui,sans-serif;color:#1f2937;background:#f4f7fb}}
805
+ body{{margin:0}}main{{max-width:1280px;margin:auto;padding:24px}}header{{background:#1f4e78;color:#fff;padding:22px;border:1px solid #17365d;border-radius:14px;box-shadow:0 8px 24px rgba(31,78,120,.16)}}
806
+ header h1{{color:#fff}}header small{{color:#eaf2f8}}h1,h2{{margin-top:0}}h2{{color:#17365d}}.muted{{color:#66788a}}.grid{{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin:16px 0}}
807
+ .card{{background:#fff;border:1px solid #d9e2ec;border-radius:12px;padding:16px}}table{{width:100%;border-collapse:collapse;background:#fff;border:1px solid #d9e2ec}}
808
+ th,td{{border-bottom:1px solid #d9e2ec;padding:10px;vertical-align:top;text-align:left}}th{{background:#eaf1f8;color:#17365d;position:sticky;top:0}}
809
809
  code.hash{{word-break:break-all;font-size:11px}}.badge{{display:inline-block;padding:3px 8px;border-radius:999px;font-weight:700;font-size:12px}}
810
810
  .badge.pass{{background:#dcfce7;color:#166534}}.badge.fail{{background:#fee2e2;color:#991b1b}}.badge.warn{{background:#fef3c7;color:#92400e}}.badge.neutral{{background:#e5e7eb;color:#374151}}
811
- a{{color:#1d4ed8}}details{{margin-top:6px}}.boundary{{border-left:4px solid #f59e0b}}
811
+ a{{color:#245b91}}details{{margin-top:6px}}.boundary{{border-left:4px solid #d97706}}
812
812
  </style></head><body><main>
813
813
  <header><h1>DevAgent Evidence Viewer</h1><div>{escape(str(project['name']))}</div>
814
814
  <small>Project {escape(str(project['project_id']))} · Site {escape(str(project['site_id']))} · Workcell {escape(str(project['workcell_id']))}</small></header>