devagent-physical-engine 1.8.5__tar.gz → 1.8.8__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.8}/PKG-INFO +29 -7
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/README.md +29 -7
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/pyproject.toml +4 -1
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/__init__.py +1 -1
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/workpiece_scene.py +106 -15
- devagent_physical_engine-1.8.8/src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py +523 -0
- devagent_physical_engine-1.8.8/src/devagent_physical_engine/ros2/workpiece_scene_probe_v187.py +408 -0
- devagent_physical_engine-1.8.8/src/devagent_physical_engine/ros2/workpiece_scene_probe_v188.py +283 -0
- devagent_physical_engine-1.8.8/src/devagent_physical_engine/workpiece_lifecycle.py +116 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8/src/devagent_physical_engine.egg-info}/PKG-INFO +29 -7
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine.egg-info/SOURCES.txt +5 -1
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_industrial_motion_v170.py +2 -2
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_package_metadata_v184.py +2 -2
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_transfer_place_diagnostic_v172.py +2 -2
- devagent_physical_engine-1.8.8/tests/test_workpiece_semantic_lifecycle_v186.py +220 -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.8}/NOTICE +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/setup.cfg +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/__init__.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/compiler.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/contracts.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/coordinator.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/critic.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/evidence.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/interpreter.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/planner.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/recovery.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/routing.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/runtime.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/semantic.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/structured.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ai_cli.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/cli.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/commercial.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/commercial_campaign.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/commercial_cli.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/commercial_importer.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/commercial_readiness.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/commercial_repository.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/continuous_clearance.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/controller_runtime_hotfix_v181.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/doctor.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/engineering_agent.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/engineering_request.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/evidence_replay.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/evidence_trust.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/execution.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/industrial_motion_v170.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/industrial_motion_v182.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/models.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/one_command.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/one_command_runtime.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/one_command_v15.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/one_command_v16.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/operating_envelope.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/__init__.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/candidates.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/contracts.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/evidence.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/experience.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/measured.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/physical_campaign.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/physical_evidence.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/physical_motion.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/planning.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/pose_math.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/preexecution_contract.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/production_authority.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/production_grade.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/project.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/provider_criterion.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/provider_qualification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/providers.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/qualification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/qualification_cli.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/qualification_harness.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/reference_workcell.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/report_test_execution.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/robot_platform.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/robot_support_v18.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/robots.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/__init__.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/abb_irb1200.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/abb_irb1200_preview.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/commands.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/controller_action_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/destination_support_contact_v182.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/doctor.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v182.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe_v182.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/qualification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/selective_verification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/setup_profile.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/simulation.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/simulation_platform.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/tool_collision.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/twin.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/twin_builder.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/twin_codec.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/twin_materialization.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/user_cli.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/user_cli_v15.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/user_cli_v16.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/user_cli_v18.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/verification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_abb_irb1200_visual_v18.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_agent_core.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_agent_semantic_hardening.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_ai_cli.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_ai_cli_v07.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_commercial_importer_v1.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_commercial_intelligence_v15.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_commercial_readiness_v1.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_commercial_v1.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_continuous_clearance_v011.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_controller_runtime_hotfix_v181.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_core.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_destination_support_contact_v182.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_engineering_request_v07.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_evidence_replay_v12.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_evidence_trust_coverage_v12.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_evidence_trust_transport_v12.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_evidence_trust_v12.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_evidence_viewer_palette_v130.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_gazebo_cli_v0122.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_golden_abb_runner_v171.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_golden_abb_showcase.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_interpreter_profiles_v08.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_joint_state_probe_v0125.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_live_provider_qualification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_measured_motion_v10.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_moveit_scene_v0123.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_natural_language_agent_v07.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_one_command_hardening_v13.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_one_command_pose_hardening_v15.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_one_command_regression_v141.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_one_command_v13.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_openai_strict_schema_v0113.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_optimization_v05.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_physical_campaign_v09.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_physical_evidence_v09.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_physical_motion_v09.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_planning_fallback_v012.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_pose_math_v0125.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_preexecution_contract_v10.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_production_authority_v11.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_production_grade_coverage_v11.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_production_grade_v11.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_project_spine_v013.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_provider_and_qualification.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_provider_criterion_v15.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_qualification_harness_v06.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_readme_pypi.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_real_provider_adapters.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_reference_workcell_v012.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_report_test_contract_coverage_v16.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_report_test_lineage_v16.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_report_test_visual_execution_v16.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_robot_platform_v08.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_ros2_production_receipts_v011.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_ros2_simulation.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_ros_trajectory_v09.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_selective_verification_v14.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_setup_profile.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_sim_real_qualification_v011.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_simulation_platform_v08.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_tool_collision_v011.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_tool_scene_v0124.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_trajectory_action_probe_v0125.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_trajectory_qualification_v09.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_trajectory_tracking_v0125.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_twin_materialization_v10.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_twin_v08.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_user_cli_interactive_v131.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_user_cli_progress_v131.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_user_cli_report_visual_v16.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_user_cli_selective_v14.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_user_cli_v15.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_v052_stabilization.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_v08_catalog_mapping_regression.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_workpiece_attach_semantics_v183.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/tests/test_workpiece_lifecycle_v011.py +0 -0
- {devagent_physical_engine-1.8.5 → devagent_physical_engine-1.8.8}/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.8
|
|
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.8
|
|
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.8
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
Run the normal customer workflow:
|
|
@@ -426,6 +426,28 @@ 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
|
+
|
|
441
|
+
## v1.8.8 canonical world integrity gate before GRASP
|
|
442
|
+
|
|
443
|
+
v1.8.8 packages the latest workpiece-lifecycle diagnostics as an unambiguous release version so target acceptance no longer runs newer code while reporting `1.8.6`.
|
|
444
|
+
|
|
445
|
+
Before ATTACH, DevAgent now reasserts the exact canonical Twin workpiece into the live MoveIt world, synchronously reads the object back, normalizes ROS `uint8/octet` primitive representations safely, and requires exact identity/frame/geometry plus bounded pose agreement before attachment is attempted. Primitive type `0` remains invalid; DevAgent does not infer BOX/CYLINDER from dimensions or weaken collision checking.
|
|
446
|
+
|
|
447
|
+
The lifecycle receipt records the pre/post primitive type representation, canonical-world reassert result, semantic verification, and the exact inner failure code. Existing target poses, conservative Pilz motion limits, tool/workpiece geometry, site-qualification boundaries, and `real_execution_allowed = false` remain unchanged.
|
|
448
|
+
|
|
449
|
+
Hosted CI qualifies the software/build/install contract. The ROS/Gazebo/MoveIt workstation still requires a fresh target acceptance run of the released 1.8.8 artifact before this specific workpiece path can be called physically qualified.
|
|
450
|
+
|
|
429
451
|
## Qualified visual-execution scope
|
|
430
452
|
|
|
431
453
|
Measured report-test execution remains intentionally narrow:
|
|
@@ -626,9 +648,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
626
648
|
|
|
627
649
|
# Project status
|
|
628
650
|
|
|
629
|
-
**v1.8.
|
|
651
|
+
**v1.8.8 — Production/Stable software workflow**
|
|
630
652
|
|
|
631
|
-
v1.8.
|
|
653
|
+
v1.8.8 retains the v1.8.6 semantic lifecycle and the target-candidate improvements layered after it, while making the package/version identity explicit. The current GRASP path adds ROS-octet-safe diagnostics and a synchronous canonical-world reassert/readback gate before attachment. This release is intended to make the next workstation qualification run reproducible and attributable to one exact installable artifact.
|
|
632
654
|
|
|
633
655
|
Production-oriented software capabilities include:
|
|
634
656
|
|
|
@@ -643,8 +665,8 @@ exact Requirement → Mapping → Verification Plan → Case provenance
|
|
|
643
665
|
truthful robot support tiers
|
|
644
666
|
qualified UR5e report-test visual execution contract
|
|
645
667
|
direct UR5e controller-manager/action readiness binding
|
|
646
|
-
|
|
647
|
-
|
|
668
|
+
canonical MoveIt workpiece lifecycle with world-integrity gate
|
|
669
|
+
semantic workpiece pose/geometry verification with persistent diagnostics
|
|
648
670
|
scoped destination-support place contact
|
|
649
671
|
experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
|
|
650
672
|
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.8
|
|
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.8
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
Run the normal customer workflow:
|
|
@@ -385,6 +385,28 @@ 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
|
+
|
|
400
|
+
## v1.8.8 canonical world integrity gate before GRASP
|
|
401
|
+
|
|
402
|
+
v1.8.8 packages the latest workpiece-lifecycle diagnostics as an unambiguous release version so target acceptance no longer runs newer code while reporting `1.8.6`.
|
|
403
|
+
|
|
404
|
+
Before ATTACH, DevAgent now reasserts the exact canonical Twin workpiece into the live MoveIt world, synchronously reads the object back, normalizes ROS `uint8/octet` primitive representations safely, and requires exact identity/frame/geometry plus bounded pose agreement before attachment is attempted. Primitive type `0` remains invalid; DevAgent does not infer BOX/CYLINDER from dimensions or weaken collision checking.
|
|
405
|
+
|
|
406
|
+
The lifecycle receipt records the pre/post primitive type representation, canonical-world reassert result, semantic verification, and the exact inner failure code. Existing target poses, conservative Pilz motion limits, tool/workpiece geometry, site-qualification boundaries, and `real_execution_allowed = false` remain unchanged.
|
|
407
|
+
|
|
408
|
+
Hosted CI qualifies the software/build/install contract. The ROS/Gazebo/MoveIt workstation still requires a fresh target acceptance run of the released 1.8.8 artifact before this specific workpiece path can be called physically qualified.
|
|
409
|
+
|
|
388
410
|
## Qualified visual-execution scope
|
|
389
411
|
|
|
390
412
|
Measured report-test execution remains intentionally narrow:
|
|
@@ -585,9 +607,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
585
607
|
|
|
586
608
|
# Project status
|
|
587
609
|
|
|
588
|
-
**v1.8.
|
|
610
|
+
**v1.8.8 — Production/Stable software workflow**
|
|
589
611
|
|
|
590
|
-
v1.8.
|
|
612
|
+
v1.8.8 retains the v1.8.6 semantic lifecycle and the target-candidate improvements layered after it, while making the package/version identity explicit. The current GRASP path adds ROS-octet-safe diagnostics and a synchronous canonical-world reassert/readback gate before attachment. This release is intended to make the next workstation qualification run reproducible and attributable to one exact installable artifact.
|
|
591
613
|
|
|
592
614
|
Production-oriented software capabilities include:
|
|
593
615
|
|
|
@@ -602,8 +624,8 @@ exact Requirement → Mapping → Verification Plan → Case provenance
|
|
|
602
624
|
truthful robot support tiers
|
|
603
625
|
qualified UR5e report-test visual execution contract
|
|
604
626
|
direct UR5e controller-manager/action readiness binding
|
|
605
|
-
|
|
606
|
-
|
|
627
|
+
canonical MoveIt workpiece lifecycle with world-integrity gate
|
|
628
|
+
semantic workpiece pose/geometry verification with persistent diagnostics
|
|
607
629
|
scoped destination-support place contact
|
|
608
630
|
experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
|
|
609
631
|
industrial Pilz PTP / LIN planning
|
|
@@ -657,4 +679,4 @@ Original creator: Tom Ha
|
|
|
657
679
|
Original project: https://github.com/tomha85/devagent-physical-engine
|
|
658
680
|
All rights reserved.
|
|
659
681
|
|
|
660
|
-
See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
|
|
682
|
+
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.8"
|
|
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,9 @@ 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",
|
|
69
|
+
"src/devagent_physical_engine/ros2/workpiece_scene_probe_v187.py",
|
|
70
|
+
"src/devagent_physical_engine/ros2/workpiece_scene_probe_v188.py",
|
|
68
71
|
"src/devagent_physical_engine/ros2/qualification*.py",
|
|
69
72
|
"src/devagent_physical_engine/ros2/joint_state_recorder.py",
|
|
70
73
|
"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_v188.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(
|