devagent-physical-engine 1.8.5__tar.gz → 1.8.6__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.
- {devagent_physical_engine-1.8.5/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.8.6}/PKG-INFO +19 -7
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/README.md +19 -7
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/pyproject.toml +2 -1
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/__init__.py +1 -1
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/workpiece_scene.py +106 -15
- devagent_physical_engine-1.8.6/src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py +523 -0
- devagent_physical_engine-1.8.6/src/devagent_physical_engine/workpiece_lifecycle.py +116 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6/src/devagent_physical_engine.egg-info}/PKG-INFO +19 -7
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine.egg-info/SOURCES.txt +3 -1
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_industrial_motion_v170.py +2 -2
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_package_metadata_v184.py +2 -2
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_transfer_place_diagnostic_v172.py +2 -2
- devagent_physical_engine-1.8.6/tests/test_workpiece_semantic_lifecycle_v186.py +208 -0
- devagent_physical_engine-1.8.5/src/devagent_physical_engine/workpiece_lifecycle.py +0 -66
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/NOTICE +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/setup.cfg +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/__init__.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/compiler.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/contracts.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/coordinator.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/critic.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/evidence.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/interpreter.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/planner.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/recovery.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/routing.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/runtime.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/semantic.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/agent/structured.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ai_cli.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/cli.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/commercial.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/commercial_campaign.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/commercial_cli.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/commercial_importer.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/commercial_readiness.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/commercial_repository.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/continuous_clearance.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/controller_runtime_hotfix_v181.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/doctor.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/engineering_agent.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/engineering_request.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/evidence_replay.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/evidence_trust.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/execution.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/industrial_motion_v170.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/industrial_motion_v182.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/models.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/one_command.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/one_command_runtime.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/one_command_v15.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/one_command_v16.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/operating_envelope.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/__init__.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/candidates.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/contracts.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/evidence.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/experience.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/measured.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/physical_campaign.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/physical_evidence.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/physical_motion.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/planning.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/pose_math.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/preexecution_contract.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/production_authority.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/production_grade.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/project.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/provider_criterion.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/provider_qualification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/providers.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/qualification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/qualification_cli.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/qualification_harness.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/reference_workcell.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/report_test_execution.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/robot_platform.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/robot_support_v18.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/robots.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/__init__.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/abb_irb1200.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/abb_irb1200_preview.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/commands.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/controller_action_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/destination_support_contact_v182.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/doctor.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v182.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe_v182.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/qualification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/selective_verification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/setup_profile.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/simulation.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/simulation_platform.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/tool_collision.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/twin.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/twin_builder.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/twin_codec.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/twin_materialization.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/user_cli.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/user_cli_v15.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/user_cli_v16.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/user_cli_v18.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine/verification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_abb_irb1200_visual_v18.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_agent_core.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_agent_semantic_hardening.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_ai_cli.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_ai_cli_v07.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_commercial_importer_v1.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_commercial_intelligence_v15.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_commercial_readiness_v1.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_commercial_v1.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_continuous_clearance_v011.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_controller_runtime_hotfix_v181.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_core.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_destination_support_contact_v182.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_engineering_request_v07.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_evidence_replay_v12.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_evidence_trust_coverage_v12.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_evidence_trust_transport_v12.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_evidence_trust_v12.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_evidence_viewer_palette_v130.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_gazebo_cli_v0122.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_golden_abb_runner_v171.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_golden_abb_showcase.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_interpreter_profiles_v08.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_joint_state_probe_v0125.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_live_provider_qualification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_measured_motion_v10.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_moveit_scene_v0123.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_natural_language_agent_v07.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_one_command_hardening_v13.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_one_command_pose_hardening_v15.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_one_command_regression_v141.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_one_command_v13.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_openai_strict_schema_v0113.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_optimization_v05.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_physical_campaign_v09.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_physical_evidence_v09.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_physical_motion_v09.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_planning_fallback_v012.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_pose_math_v0125.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_preexecution_contract_v10.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_production_authority_v11.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_production_grade_coverage_v11.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_production_grade_v11.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_project_spine_v013.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_provider_and_qualification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_provider_criterion_v15.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_qualification_harness_v06.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_readme_pypi.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_real_provider_adapters.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_reference_workcell_v012.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_report_test_contract_coverage_v16.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_report_test_lineage_v16.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_report_test_visual_execution_v16.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_robot_platform_v08.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_ros2_production_receipts_v011.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_ros2_simulation.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_ros_trajectory_v09.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_selective_verification_v14.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_setup_profile.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_sim_real_qualification_v011.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_simulation_platform_v08.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_tool_collision_v011.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_tool_scene_v0124.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_trajectory_action_probe_v0125.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_trajectory_qualification_v09.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_trajectory_tracking_v0125.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_twin_materialization_v10.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_twin_v08.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_user_cli_interactive_v131.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_user_cli_progress_v131.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_user_cli_report_visual_v16.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_user_cli_selective_v14.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_user_cli_v15.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_v052_stabilization.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_v08_catalog_mapping_regression.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_workpiece_attach_semantics_v183.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_workpiece_lifecycle_v011.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.6}/tests/test_workpiece_scene_probe_v185.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devagent-physical-engine
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.6
|
|
4
4
|
Summary: Verification-first robotics commissioning runtime with exact-Twin evidence, qualified UR5e Gazebo/MoveIt report execution, truthful robot support tiers, selective verification, replay, regression, and FAT reporting.
|
|
5
5
|
Author: Tom Ha
|
|
6
6
|
License: All Rights Reserved
|
|
@@ -76,7 +76,7 @@ regression + FAT report + Evidence Viewer
|
|
|
76
76
|
Python 3.11+ is required.
|
|
77
77
|
|
|
78
78
|
```bash
|
|
79
|
-
python -m pip install --upgrade devagent-physical-engine==1.8.
|
|
79
|
+
python -m pip install --upgrade devagent-physical-engine==1.8.6
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
Verify the installed package:
|
|
@@ -88,7 +88,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
|
|
|
88
88
|
Expected:
|
|
89
89
|
|
|
90
90
|
```text
|
|
91
|
-
1.8.
|
|
91
|
+
1.8.6
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
Run the normal customer workflow:
|
|
@@ -426,6 +426,18 @@ MoveIt round-trips attached-object rotations through Eigen. Unit quaternions `q`
|
|
|
426
426
|
|
|
427
427
|
Verification remains strict for attachment identity, link, geometry contract, position, and physical rotation. This is not a tolerance-based PASS and does not change target geometry, TCP, collision policy, planner types, motion speeds, controller binding, Twin lineage, site qualification, or real-execution authority. If a hash mismatch remains, DevAgent records expected and observed hashes plus canonical expected/object/primitive/effective attachment poses for target diagnosis.
|
|
428
428
|
|
|
429
|
+
## v1.8.6 canonical semantic workpiece lifecycle
|
|
430
|
+
|
|
431
|
+
A clean v1.8.5 UR5e target-stack run again reached all five industrial preflight groups and executed `approach_pick`, while GRASP still failed with `workpiece_attachment_hash_mismatch`. That target evidence proved raw SHA equality of floating pose representations was too brittle to remain physical PASS authority.
|
|
432
|
+
|
|
433
|
+
v1.8.6 uses MoveIt's canonical existing-object lifecycle. Before GRASP, DevAgent reads back and semantically verifies the exact world workpiece. Attach then sends an ID-only `AttachedCollisionObject.ADD`; MoveIt transfers the already-verified world object's geometry and pose into the AttachedBody on the verified tool link. Release sends an ID-only attached-object REMOVE; MoveIt restores that same AttachedBody to the world at its current global pose.
|
|
434
|
+
|
|
435
|
+
The lifecycle remains fail-closed. Attach requires exact object identity, exact attached link, exact touch-link set, exact geometry kind, dimensions within `1e-9 m`, position error no greater than `0.1 mm`, and orientation error no greater than `1e-4 rad`. Detach similarly verifies restored world identity, geometry, destination frame, position, and orientation. Representation hashes remain recorded for audit diagnostics but do not override the explicit physical-semantic checks.
|
|
436
|
+
|
|
437
|
+
Every lifecycle transition persists a deterministic receipt containing probe stdout/stderr plus expected/observed semantic diagnostics. Any failure includes the receipt path so the next target-stack blocker can be diagnosed directly instead of being collapsed to a generic lifecycle code.
|
|
438
|
+
|
|
439
|
+
This release does not disable collision checking, change the verified tool/workpiece geometry, modify motion targets, planner types or speeds, detach early, grant site qualification, or expand real-execution authority.
|
|
440
|
+
|
|
429
441
|
## Qualified visual-execution scope
|
|
430
442
|
|
|
431
443
|
Measured report-test execution remains intentionally narrow:
|
|
@@ -626,9 +638,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
626
638
|
|
|
627
639
|
# Project status
|
|
628
640
|
|
|
629
|
-
**v1.8.
|
|
641
|
+
**v1.8.6 — Production/Stable software workflow**
|
|
630
642
|
|
|
631
|
-
v1.8.
|
|
643
|
+
v1.8.6 retains v1.8.5 quaternion canonicalization, v1.8.4 PyPI metadata compliance, v1.8.3 synchronous service-safe attachment, v1.8.2 scoped destination-support place contact, and v1.8.1 direct UR5e controller/action binding. It upgrades the workpiece lifecycle to canonical MoveIt existing-object world↔attached transitions, strict physical-semantic pose/geometry verification, and persistent expected/observed lifecycle diagnostics instead of using floating representation SHA equality as PASS authority.
|
|
632
644
|
|
|
633
645
|
Production-oriented software capabilities include:
|
|
634
646
|
|
|
@@ -643,8 +655,8 @@ exact Requirement → Mapping → Verification Plan → Case provenance
|
|
|
643
655
|
truthful robot support tiers
|
|
644
656
|
qualified UR5e report-test visual execution contract
|
|
645
657
|
direct UR5e controller-manager/action readiness binding
|
|
646
|
-
|
|
647
|
-
|
|
658
|
+
canonical MoveIt existing-object workpiece attach/detach
|
|
659
|
+
semantic workpiece pose/geometry verification with persistent diagnostics
|
|
648
660
|
scoped destination-support place contact
|
|
649
661
|
experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
|
|
650
662
|
industrial Pilz PTP / LIN planning
|
|
@@ -35,7 +35,7 @@ regression + FAT report + Evidence Viewer
|
|
|
35
35
|
Python 3.11+ is required.
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
python -m pip install --upgrade devagent-physical-engine==1.8.
|
|
38
|
+
python -m pip install --upgrade devagent-physical-engine==1.8.6
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
Verify the installed package:
|
|
@@ -47,7 +47,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
|
|
|
47
47
|
Expected:
|
|
48
48
|
|
|
49
49
|
```text
|
|
50
|
-
1.8.
|
|
50
|
+
1.8.6
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
Run the normal customer workflow:
|
|
@@ -385,6 +385,18 @@ MoveIt round-trips attached-object rotations through Eigen. Unit quaternions `q`
|
|
|
385
385
|
|
|
386
386
|
Verification remains strict for attachment identity, link, geometry contract, position, and physical rotation. This is not a tolerance-based PASS and does not change target geometry, TCP, collision policy, planner types, motion speeds, controller binding, Twin lineage, site qualification, or real-execution authority. If a hash mismatch remains, DevAgent records expected and observed hashes plus canonical expected/object/primitive/effective attachment poses for target diagnosis.
|
|
387
387
|
|
|
388
|
+
## v1.8.6 canonical semantic workpiece lifecycle
|
|
389
|
+
|
|
390
|
+
A clean v1.8.5 UR5e target-stack run again reached all five industrial preflight groups and executed `approach_pick`, while GRASP still failed with `workpiece_attachment_hash_mismatch`. That target evidence proved raw SHA equality of floating pose representations was too brittle to remain physical PASS authority.
|
|
391
|
+
|
|
392
|
+
v1.8.6 uses MoveIt's canonical existing-object lifecycle. Before GRASP, DevAgent reads back and semantically verifies the exact world workpiece. Attach then sends an ID-only `AttachedCollisionObject.ADD`; MoveIt transfers the already-verified world object's geometry and pose into the AttachedBody on the verified tool link. Release sends an ID-only attached-object REMOVE; MoveIt restores that same AttachedBody to the world at its current global pose.
|
|
393
|
+
|
|
394
|
+
The lifecycle remains fail-closed. Attach requires exact object identity, exact attached link, exact touch-link set, exact geometry kind, dimensions within `1e-9 m`, position error no greater than `0.1 mm`, and orientation error no greater than `1e-4 rad`. Detach similarly verifies restored world identity, geometry, destination frame, position, and orientation. Representation hashes remain recorded for audit diagnostics but do not override the explicit physical-semantic checks.
|
|
395
|
+
|
|
396
|
+
Every lifecycle transition persists a deterministic receipt containing probe stdout/stderr plus expected/observed semantic diagnostics. Any failure includes the receipt path so the next target-stack blocker can be diagnosed directly instead of being collapsed to a generic lifecycle code.
|
|
397
|
+
|
|
398
|
+
This release does not disable collision checking, change the verified tool/workpiece geometry, modify motion targets, planner types or speeds, detach early, grant site qualification, or expand real-execution authority.
|
|
399
|
+
|
|
388
400
|
## Qualified visual-execution scope
|
|
389
401
|
|
|
390
402
|
Measured report-test execution remains intentionally narrow:
|
|
@@ -585,9 +597,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
585
597
|
|
|
586
598
|
# Project status
|
|
587
599
|
|
|
588
|
-
**v1.8.
|
|
600
|
+
**v1.8.6 — Production/Stable software workflow**
|
|
589
601
|
|
|
590
|
-
v1.8.
|
|
602
|
+
v1.8.6 retains v1.8.5 quaternion canonicalization, v1.8.4 PyPI metadata compliance, v1.8.3 synchronous service-safe attachment, v1.8.2 scoped destination-support place contact, and v1.8.1 direct UR5e controller/action binding. It upgrades the workpiece lifecycle to canonical MoveIt existing-object world↔attached transitions, strict physical-semantic pose/geometry verification, and persistent expected/observed lifecycle diagnostics instead of using floating representation SHA equality as PASS authority.
|
|
591
603
|
|
|
592
604
|
Production-oriented software capabilities include:
|
|
593
605
|
|
|
@@ -602,8 +614,8 @@ exact Requirement → Mapping → Verification Plan → Case provenance
|
|
|
602
614
|
truthful robot support tiers
|
|
603
615
|
qualified UR5e report-test visual execution contract
|
|
604
616
|
direct UR5e controller-manager/action readiness binding
|
|
605
|
-
|
|
606
|
-
|
|
617
|
+
canonical MoveIt existing-object workpiece attach/detach
|
|
618
|
+
semantic workpiece pose/geometry verification with persistent diagnostics
|
|
607
619
|
scoped destination-support place contact
|
|
608
620
|
experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
|
|
609
621
|
industrial Pilz PTP / LIN planning
|
|
@@ -657,4 +669,4 @@ Original creator: Tom Ha
|
|
|
657
669
|
Original project: https://github.com/tomha85/devagent-physical-engine
|
|
658
670
|
All rights reserved.
|
|
659
671
|
|
|
660
|
-
See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
|
|
672
|
+
See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "devagent-physical-engine"
|
|
7
|
-
version = "1.8.
|
|
7
|
+
version = "1.8.6"
|
|
8
8
|
description = "Verification-first robotics commissioning runtime with exact-Twin evidence, qualified UR5e Gazebo/MoveIt report execution, truthful robot support tiers, selective verification, replay, regression, and FAT reporting."
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -65,6 +65,7 @@ omit = [
|
|
|
65
65
|
# simulator, move_group, TF, controller actions, or gz services.
|
|
66
66
|
# Pure contracts/reference-workcell logic remains inside the hosted coverage gate.
|
|
67
67
|
"src/devagent_physical_engine/ros2/*_probe.py",
|
|
68
|
+
"src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py",
|
|
68
69
|
"src/devagent_physical_engine/ros2/qualification*.py",
|
|
69
70
|
"src/devagent_physical_engine/ros2/joint_state_recorder.py",
|
|
70
71
|
"src/devagent_physical_engine/ros2/ur5e_adapter.py",
|
|
@@ -38,6 +38,30 @@ class MoveItWorkpieceLifecycleBridge:
|
|
|
38
38
|
raise SimulationPlatformError("workpiece_materialization_missing_or_ambiguous")
|
|
39
39
|
return matches[0]
|
|
40
40
|
|
|
41
|
+
@staticmethod
|
|
42
|
+
def _persist_probe_receipt(
|
|
43
|
+
path: Path,
|
|
44
|
+
*,
|
|
45
|
+
operation: WorkpieceOperation,
|
|
46
|
+
result,
|
|
47
|
+
output: dict[str, object] | None,
|
|
48
|
+
) -> None:
|
|
49
|
+
record = {
|
|
50
|
+
"operation": operation.value,
|
|
51
|
+
"command_ok": bool(result.ok),
|
|
52
|
+
"returncode": int(getattr(result, "returncode", 0 if result.ok else 1)),
|
|
53
|
+
"duration_s": float(getattr(result, "duration_s", 0.0)),
|
|
54
|
+
"stdout": str(getattr(result, "stdout", "")),
|
|
55
|
+
"stderr": str(getattr(result, "stderr", "")),
|
|
56
|
+
"probe_output": output,
|
|
57
|
+
}
|
|
58
|
+
temporary = path.with_suffix(path.suffix + ".tmp")
|
|
59
|
+
temporary.write_text(
|
|
60
|
+
json.dumps(record, indent=2, sort_keys=True, allow_nan=False) + "\n",
|
|
61
|
+
encoding="utf-8",
|
|
62
|
+
)
|
|
63
|
+
temporary.replace(path)
|
|
64
|
+
|
|
41
65
|
def _transition(
|
|
42
66
|
self,
|
|
43
67
|
*,
|
|
@@ -63,7 +87,11 @@ class MoveItWorkpieceLifecycleBridge:
|
|
|
63
87
|
raise SimulationPlatformError("workpiece_world_pose_override_non_finite")
|
|
64
88
|
|
|
65
89
|
workpiece = self._workpiece(materialization, workpiece_entity_id)
|
|
66
|
-
position =
|
|
90
|
+
position = (
|
|
91
|
+
tuple(world_position_m)
|
|
92
|
+
if world_position_m is not None
|
|
93
|
+
else workpiece.position_m
|
|
94
|
+
)
|
|
67
95
|
quaternion = (
|
|
68
96
|
tuple(world_quaternion_xyzw)
|
|
69
97
|
if world_quaternion_xyzw is not None
|
|
@@ -86,7 +114,9 @@ class MoveItWorkpieceLifecycleBridge:
|
|
|
86
114
|
},
|
|
87
115
|
},
|
|
88
116
|
}
|
|
89
|
-
payload_path = self.work_dir /
|
|
117
|
+
payload_path = self.work_dir / (
|
|
118
|
+
f"{materialization.fingerprint}.{operation.value}.{workpiece.backend_id}.json"
|
|
119
|
+
)
|
|
90
120
|
temporary = payload_path.with_suffix(payload_path.suffix + ".tmp")
|
|
91
121
|
temporary.write_text(
|
|
92
122
|
json.dumps(payload, sort_keys=True, separators=(",", ":"), allow_nan=False),
|
|
@@ -94,7 +124,7 @@ class MoveItWorkpieceLifecycleBridge:
|
|
|
94
124
|
)
|
|
95
125
|
temporary.replace(payload_path)
|
|
96
126
|
|
|
97
|
-
helper = Path(__file__).with_name("
|
|
127
|
+
helper = Path(__file__).with_name("workpiece_scene_probe_v186.py").resolve()
|
|
98
128
|
result = self.runner.run(
|
|
99
129
|
(
|
|
100
130
|
"python3",
|
|
@@ -107,14 +137,43 @@ class MoveItWorkpieceLifecycleBridge:
|
|
|
107
137
|
),
|
|
108
138
|
timeout_s=self.timeout_s + 10.0,
|
|
109
139
|
)
|
|
140
|
+
probe_receipt_path = payload_path.with_name(payload_path.name + ".receipt.json")
|
|
141
|
+
output: dict[str, object] | None = None
|
|
110
142
|
try:
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
143
|
+
decoded = json.loads(result.stdout.strip().splitlines()[-1])
|
|
144
|
+
if isinstance(decoded, dict):
|
|
145
|
+
output = decoded
|
|
146
|
+
except (IndexError, json.JSONDecodeError):
|
|
147
|
+
output = None
|
|
148
|
+
self._persist_probe_receipt(
|
|
149
|
+
probe_receipt_path,
|
|
150
|
+
operation=operation,
|
|
151
|
+
result=result,
|
|
152
|
+
output=output,
|
|
153
|
+
)
|
|
154
|
+
if output is None:
|
|
155
|
+
raise SimulationPlatformError(
|
|
156
|
+
f"workpiece_scene_probe_output_invalid:evidence={probe_receipt_path}"
|
|
157
|
+
)
|
|
116
158
|
|
|
117
159
|
verified = bool(output.get("success")) and result.ok
|
|
160
|
+
semantic_key = (
|
|
161
|
+
"attachment_semantics"
|
|
162
|
+
if operation is WorkpieceOperation.ATTACH
|
|
163
|
+
else "world_semantics"
|
|
164
|
+
)
|
|
165
|
+
semantic = output.get(semantic_key)
|
|
166
|
+
semantic_payload = semantic if isinstance(semantic, dict) else {}
|
|
167
|
+
observed_world_present = (
|
|
168
|
+
bool(output["observed_world_present"])
|
|
169
|
+
if "observed_world_present" in output
|
|
170
|
+
else int(output.get("observed_world_count") or 0) > 0
|
|
171
|
+
)
|
|
172
|
+
observed_attached_link = (
|
|
173
|
+
str(output["observed_attached_link"])
|
|
174
|
+
if output.get("observed_attached_link") is not None
|
|
175
|
+
else None
|
|
176
|
+
)
|
|
118
177
|
receipt = WorkpieceLifecycleReceipt(
|
|
119
178
|
operation=operation,
|
|
120
179
|
verified=verified,
|
|
@@ -133,20 +192,52 @@ class MoveItWorkpieceLifecycleBridge:
|
|
|
133
192
|
if operation is WorkpieceOperation.ATTACH
|
|
134
193
|
else WorkpieceState.WORLD
|
|
135
194
|
),
|
|
136
|
-
observed_world_present=
|
|
137
|
-
observed_attached_link=
|
|
138
|
-
str(output["observed_attached_link"])
|
|
139
|
-
if output.get("observed_attached_link") is not None
|
|
140
|
-
else None
|
|
141
|
-
),
|
|
195
|
+
observed_world_present=observed_world_present,
|
|
196
|
+
observed_attached_link=observed_attached_link,
|
|
142
197
|
attachment_hash=(
|
|
143
198
|
str(output["attachment_hash"])
|
|
144
199
|
if output.get("attachment_hash") is not None
|
|
145
200
|
else None
|
|
146
201
|
),
|
|
202
|
+
observed_attachment_hash=(
|
|
203
|
+
str(output["observed_attachment_hash"])
|
|
204
|
+
if output.get("observed_attachment_hash") is not None
|
|
205
|
+
else None
|
|
206
|
+
),
|
|
207
|
+
representation_hash_match=(
|
|
208
|
+
bool(output["representation_hash_match"])
|
|
209
|
+
if output.get("representation_hash_match") is not None
|
|
210
|
+
else None
|
|
211
|
+
),
|
|
212
|
+
semantic_verified=(
|
|
213
|
+
bool(semantic_payload.get("success")) if semantic_payload else None
|
|
214
|
+
),
|
|
215
|
+
position_error_m=(
|
|
216
|
+
float(semantic_payload["position_error_m"])
|
|
217
|
+
if semantic_payload.get("position_error_m") is not None
|
|
218
|
+
else None
|
|
219
|
+
),
|
|
220
|
+
orientation_error_rad=(
|
|
221
|
+
float(semantic_payload["orientation_error_rad"])
|
|
222
|
+
if semantic_payload.get("orientation_error_rad") is not None
|
|
223
|
+
else None
|
|
224
|
+
),
|
|
225
|
+
position_tolerance_m=(
|
|
226
|
+
float(semantic_payload["position_tolerance_m"])
|
|
227
|
+
if semantic_payload.get("position_tolerance_m") is not None
|
|
228
|
+
else None
|
|
229
|
+
),
|
|
230
|
+
orientation_tolerance_rad=(
|
|
231
|
+
float(semantic_payload["orientation_tolerance_rad"])
|
|
232
|
+
if semantic_payload.get("orientation_tolerance_rad") is not None
|
|
233
|
+
else None
|
|
234
|
+
),
|
|
235
|
+
diagnostic_path=str(probe_receipt_path),
|
|
147
236
|
)
|
|
148
237
|
if not receipt.verified:
|
|
149
|
-
raise SimulationPlatformError(
|
|
238
|
+
raise SimulationPlatformError(
|
|
239
|
+
f"workpiece_lifecycle_failed:{receipt.code}:evidence={probe_receipt_path}"
|
|
240
|
+
)
|
|
150
241
|
return receipt
|
|
151
242
|
|
|
152
243
|
def attach(
|