devagent-physical-engine 1.7.1__tar.gz → 1.7.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {devagent_physical_engine-1.7.1/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.7.2}/PKG-INFO +30 -6
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/README.md +28 -4
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/pyproject.toml +3 -2
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/__init__.py +1 -1
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +9 -8
- devagent_physical_engine-1.7.2/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py +239 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2/src/devagent_physical_engine.egg-info}/PKG-INFO +30 -6
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine.egg-info/SOURCES.txt +2 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_industrial_motion_v170.py +6 -6
- devagent_physical_engine-1.7.2/tests/test_transfer_place_diagnostic_v172.py +162 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/NOTICE +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/setup.cfg +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/__init__.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/compiler.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/contracts.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/coordinator.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/critic.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/evidence.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/interpreter.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/planner.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/recovery.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/routing.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/runtime.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/semantic.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/agent/structured.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ai_cli.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/cli.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/commercial.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/commercial_campaign.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/commercial_cli.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/commercial_importer.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/commercial_readiness.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/commercial_repository.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/continuous_clearance.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/doctor.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/engineering_agent.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/engineering_request.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/evidence_replay.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/evidence_trust.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/execution.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/industrial_motion_v170.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/models.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/one_command.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/one_command_runtime.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/one_command_v15.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/one_command_v16.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/operating_envelope.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/__init__.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/candidates.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/contracts.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/evidence.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/experience.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/measured.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/physical_campaign.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/physical_evidence.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/physical_motion.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/planning.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/pose_math.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/preexecution_contract.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/production_authority.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/production_grade.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/project.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/provider_criterion.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/provider_qualification.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/providers.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/qualification.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/qualification_cli.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/qualification_harness.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/reference_workcell.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/report_test_execution.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/robot_platform.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/robots.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/__init__.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/commands.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/doctor.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/qualification.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/selective_verification.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/setup_profile.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/simulation.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/simulation_platform.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/tool_collision.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/twin.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/twin_builder.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/twin_codec.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/twin_materialization.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/user_cli.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/user_cli_v15.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/user_cli_v16.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/verification.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_agent_core.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_agent_semantic_hardening.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_ai_cli.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_ai_cli_v07.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_commercial_importer_v1.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_commercial_intelligence_v15.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_commercial_readiness_v1.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_commercial_v1.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_continuous_clearance_v011.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_core.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_engineering_request_v07.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_evidence_replay_v12.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_evidence_trust_coverage_v12.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_evidence_trust_transport_v12.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_evidence_trust_v12.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_evidence_viewer_palette_v130.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_gazebo_cli_v0122.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_golden_abb_runner_v171.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_golden_abb_showcase.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_interpreter_profiles_v08.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_joint_state_probe_v0125.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_live_provider_qualification.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_measured_motion_v10.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_moveit_scene_v0123.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_natural_language_agent_v07.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_one_command_hardening_v13.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_one_command_pose_hardening_v15.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_one_command_regression_v141.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_one_command_v13.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_openai_strict_schema_v0113.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_optimization_v05.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_physical_campaign_v09.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_physical_evidence_v09.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_physical_motion_v09.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_planning_fallback_v012.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_pose_math_v0125.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_preexecution_contract_v10.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_production_authority_v11.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_production_grade_coverage_v11.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_production_grade_v11.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_project_spine_v013.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_provider_and_qualification.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_provider_criterion_v15.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_qualification_harness_v06.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_readme_pypi.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_real_provider_adapters.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_reference_workcell_v012.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_report_test_contract_coverage_v16.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_report_test_lineage_v16.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_report_test_visual_execution_v16.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_robot_platform_v08.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_ros2_production_receipts_v011.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_ros2_simulation.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_ros_trajectory_v09.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_selective_verification_v14.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_setup_profile.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_sim_real_qualification_v011.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_simulation_platform_v08.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_tool_collision_v011.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_tool_scene_v0124.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_trajectory_action_probe_v0125.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_trajectory_qualification_v09.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_trajectory_tracking_v0125.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_twin_materialization_v10.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_twin_v08.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_user_cli_interactive_v131.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_user_cli_progress_v131.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_user_cli_report_visual_v16.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_user_cli_selective_v14.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_user_cli_v15.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_v052_stabilization.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_v08_catalog_mapping_regression.py +0 -0
- {devagent_physical_engine-1.7.1 → devagent_physical_engine-1.7.2}/tests/test_workpiece_lifecycle_v011.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devagent-physical-engine
|
|
3
|
-
Version: 1.7.
|
|
4
|
-
Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, adaptive industrial Pilz PTP/LIN report-test Gazebo execution, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
|
|
3
|
+
Version: 1.7.2
|
|
4
|
+
Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, adaptive industrial Pilz PTP/LIN report-test Gazebo execution, transfer/place segment diagnostics, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
|
|
5
5
|
Author: Tom Ha
|
|
6
6
|
License: All Rights Reserved
|
|
7
7
|
Project-URL: Homepage, https://github.com/tomha85/devagent-physical-engine
|
|
@@ -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.7.
|
|
79
|
+
python -m pip install --upgrade devagent-physical-engine==1.7.2
|
|
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.7.
|
|
91
|
+
1.7.2
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
Run the normal customer workflow:
|
|
@@ -304,6 +304,29 @@ no fallback to an unqualified simulator or robot
|
|
|
304
304
|
|
|
305
305
|
The selected blend radii and every planning attempt receipt remain attached to motion metadata for auditability.
|
|
306
306
|
|
|
307
|
+
## v1.7.2 transfer/place diagnostic hotfix
|
|
308
|
+
|
|
309
|
+
A target-stack qualification run proved that `transfer_place` still returned Pilz `FAILURE(99999)` for every v1.7.1 blend candidate, including zero blend. v1.7.2 therefore does not keep guessing at blend values. When that exact bounded failure occurs, DevAgent remains fail-closed and runs two independent **plan-only** probes against the same attached-workpiece PlanningScene:
|
|
310
|
+
|
|
311
|
+
```text
|
|
312
|
+
lift target
|
|
313
|
+
↓
|
|
314
|
+
transfer PTP probe
|
|
315
|
+
↓ independent start at transfer target
|
|
316
|
+
place LIN probe
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
The result is classified deterministically as one of:
|
|
320
|
+
|
|
321
|
+
```text
|
|
322
|
+
pilz_transfer_segment_planning_failed
|
|
323
|
+
pilz_place_segment_planning_failed
|
|
324
|
+
pilz_transfer_and_place_segment_planning_failed
|
|
325
|
+
pilz_transfer_place_sequence_composition_failed
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Each probe writes its own request/receipt plus a `transfer-place-diagnostic.json` summary. These probes never execute motion and never relax targets, planner types, collision policy, attached-workpiece scene state, velocity/acceleration limits, Twin lineage, or real-execution authority. Their purpose is to identify the exact target-stack defect before changing physical execution semantics.
|
|
329
|
+
|
|
307
330
|
## Qualified visual-execution scope
|
|
308
331
|
|
|
309
332
|
The packaged visual executor remains intentionally narrow:
|
|
@@ -492,9 +515,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
492
515
|
|
|
493
516
|
# Project status
|
|
494
517
|
|
|
495
|
-
**v1.7.
|
|
518
|
+
**v1.7.2 — Production/Stable software workflow**
|
|
496
519
|
|
|
497
|
-
v1.7.
|
|
520
|
+
v1.7.2 retains the v1.7 industrial Pilz PTP/LIN execution architecture and v1.7.1 bounded adaptive-blend fallback. If transfer/place still fails at zero blend, v1.7.2 now proves the transfer PTP and place LIN segments independently and records a deterministic diagnostic result while keeping execution blocked. It also retains the cross-vendor profile gate so non-UR5e customer Twins cannot enter the UR5e-only qualified visual executor.
|
|
498
521
|
|
|
499
522
|
Production-oriented software capabilities include:
|
|
500
523
|
|
|
@@ -509,6 +532,7 @@ exact Requirement → Mapping → Verification Plan → Case provenance
|
|
|
509
532
|
qualified report-test visual execution contract
|
|
510
533
|
industrial Pilz PTP / LIN planning
|
|
511
534
|
adaptive bounded blend selection
|
|
535
|
+
plan-only transfer/place segment diagnostics
|
|
512
536
|
lift-only support-contact ACM lease + exact restore
|
|
513
537
|
Gazebo/MoveIt selected-case visualization
|
|
514
538
|
typed physical measurement binding
|
|
@@ -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.7.
|
|
38
|
+
python -m pip install --upgrade devagent-physical-engine==1.7.2
|
|
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.7.
|
|
50
|
+
1.7.2
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
Run the normal customer workflow:
|
|
@@ -263,6 +263,29 @@ no fallback to an unqualified simulator or robot
|
|
|
263
263
|
|
|
264
264
|
The selected blend radii and every planning attempt receipt remain attached to motion metadata for auditability.
|
|
265
265
|
|
|
266
|
+
## v1.7.2 transfer/place diagnostic hotfix
|
|
267
|
+
|
|
268
|
+
A target-stack qualification run proved that `transfer_place` still returned Pilz `FAILURE(99999)` for every v1.7.1 blend candidate, including zero blend. v1.7.2 therefore does not keep guessing at blend values. When that exact bounded failure occurs, DevAgent remains fail-closed and runs two independent **plan-only** probes against the same attached-workpiece PlanningScene:
|
|
269
|
+
|
|
270
|
+
```text
|
|
271
|
+
lift target
|
|
272
|
+
↓
|
|
273
|
+
transfer PTP probe
|
|
274
|
+
↓ independent start at transfer target
|
|
275
|
+
place LIN probe
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
The result is classified deterministically as one of:
|
|
279
|
+
|
|
280
|
+
```text
|
|
281
|
+
pilz_transfer_segment_planning_failed
|
|
282
|
+
pilz_place_segment_planning_failed
|
|
283
|
+
pilz_transfer_and_place_segment_planning_failed
|
|
284
|
+
pilz_transfer_place_sequence_composition_failed
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
Each probe writes its own request/receipt plus a `transfer-place-diagnostic.json` summary. These probes never execute motion and never relax targets, planner types, collision policy, attached-workpiece scene state, velocity/acceleration limits, Twin lineage, or real-execution authority. Their purpose is to identify the exact target-stack defect before changing physical execution semantics.
|
|
288
|
+
|
|
266
289
|
## Qualified visual-execution scope
|
|
267
290
|
|
|
268
291
|
The packaged visual executor remains intentionally narrow:
|
|
@@ -451,9 +474,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
451
474
|
|
|
452
475
|
# Project status
|
|
453
476
|
|
|
454
|
-
**v1.7.
|
|
477
|
+
**v1.7.2 — Production/Stable software workflow**
|
|
455
478
|
|
|
456
|
-
v1.7.
|
|
479
|
+
v1.7.2 retains the v1.7 industrial Pilz PTP/LIN execution architecture and v1.7.1 bounded adaptive-blend fallback. If transfer/place still fails at zero blend, v1.7.2 now proves the transfer PTP and place LIN segments independently and records a deterministic diagnostic result while keeping execution blocked. It also retains the cross-vendor profile gate so non-UR5e customer Twins cannot enter the UR5e-only qualified visual executor.
|
|
457
480
|
|
|
458
481
|
Production-oriented software capabilities include:
|
|
459
482
|
|
|
@@ -468,6 +491,7 @@ exact Requirement → Mapping → Verification Plan → Case provenance
|
|
|
468
491
|
qualified report-test visual execution contract
|
|
469
492
|
industrial Pilz PTP / LIN planning
|
|
470
493
|
adaptive bounded blend selection
|
|
494
|
+
plan-only transfer/place segment diagnostics
|
|
471
495
|
lift-only support-contact ACM lease + exact restore
|
|
472
496
|
Gazebo/MoveIt selected-case visualization
|
|
473
497
|
typed physical measurement binding
|
|
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "devagent-physical-engine"
|
|
7
|
-
version = "1.7.
|
|
8
|
-
description = "Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, adaptive industrial Pilz PTP/LIN report-test Gazebo execution, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence."
|
|
7
|
+
version = "1.7.2"
|
|
8
|
+
description = "Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, adaptive industrial Pilz PTP/LIN report-test Gazebo execution, transfer/place segment diagnostics, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence."
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.11"
|
|
11
11
|
dependencies = ["PyYAML>=6.0,<7"]
|
|
@@ -75,6 +75,7 @@ omit = [
|
|
|
75
75
|
"src/devagent_physical_engine/ros2/moveit_task_planner.py",
|
|
76
76
|
"src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py",
|
|
77
77
|
"src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py",
|
|
78
|
+
"src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py",
|
|
78
79
|
"src/devagent_physical_engine/ros2/support_contact_lease_v170.py",
|
|
79
80
|
"src/devagent_physical_engine/ros2/fk_pose.py",
|
|
80
81
|
"src/devagent_physical_engine/ros2/gazebo_pose.py",
|
|
@@ -24,23 +24,24 @@ def _patch_constructor(cls) -> None:
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def install_industrial_motion_v170() -> None:
|
|
27
|
-
"""Route report-test execution through v1.7 industrial
|
|
27
|
+
"""Route report-test execution through the qualified v1.7 industrial runtime.
|
|
28
28
|
|
|
29
|
-
v1.7.1
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
v1.7.1 retries only generic Pilz sequence-planning failures with smaller internal
|
|
30
|
+
blend radii. v1.7.2 retains that bounded fallback and, if transfer/place still
|
|
31
|
+
fails at zero blend, runs plan-only transfer PTP and place LIN probes against the
|
|
32
|
+
same attached-workpiece scene. The probes only improve diagnosis; they never grant
|
|
33
|
+
execution authority or relax geometry, collision, speed, scene, or Twin lineage.
|
|
33
34
|
"""
|
|
34
35
|
|
|
35
36
|
from . import report_test_execution as base_exec
|
|
36
37
|
from . import report_test_execution_strict as strict_exec
|
|
37
38
|
from .ros2 import report_test_visualization as base_visual
|
|
38
39
|
from .ros2 import report_test_visualization_v170 as visual_v170
|
|
39
|
-
from .ros2.
|
|
40
|
-
|
|
40
|
+
from .ros2.industrial_sequence_planner_v172 import (
|
|
41
|
+
PilzIndustrialSequencePlannerV172,
|
|
41
42
|
)
|
|
42
43
|
|
|
43
|
-
visual_v170.PilzIndustrialSequencePlannerV170 =
|
|
44
|
+
visual_v170.PilzIndustrialSequencePlannerV170 = PilzIndustrialSequencePlannerV172
|
|
44
45
|
|
|
45
46
|
base_exec.run_report_test_visualization = run_report_test_visualization_v170
|
|
46
47
|
strict_exec.run_report_test_visualization = run_report_test_visualization_v170
|
devagent_physical_engine-1.7.2/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py
ADDED
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import replace
|
|
4
|
+
import json
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Any, Mapping
|
|
7
|
+
|
|
8
|
+
from ..industrial_motion_v170 import IndustrialGroupSpec
|
|
9
|
+
from ..physical_motion import PhysicalMotionPlan
|
|
10
|
+
from ..simulation_platform import SimulationPlatformError
|
|
11
|
+
from .industrial_sequence_planner_v170 import PilzIndustrialSequencePlannerV170
|
|
12
|
+
from .industrial_sequence_planner_v171 import PilzIndustrialSequencePlannerV171
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _error_code(exc: Exception) -> str:
|
|
16
|
+
return str(exc).split(":", 1)[0]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def transfer_place_diagnostic_code(results: Mapping[str, bool]) -> str:
|
|
20
|
+
transfer_ok = bool(results.get("transfer"))
|
|
21
|
+
place_ok = bool(results.get("place"))
|
|
22
|
+
if transfer_ok and place_ok:
|
|
23
|
+
return "pilz_transfer_place_sequence_composition_failed"
|
|
24
|
+
if not transfer_ok and not place_ok:
|
|
25
|
+
return "pilz_transfer_and_place_segment_planning_failed"
|
|
26
|
+
if not transfer_ok:
|
|
27
|
+
return "pilz_transfer_segment_planning_failed"
|
|
28
|
+
return "pilz_place_segment_planning_failed"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class PilzIndustrialSequencePlannerV172(PilzIndustrialSequencePlannerV171):
|
|
32
|
+
"""Diagnose zero-blend transfer/place failures without relaxing execution safety.
|
|
33
|
+
|
|
34
|
+
v1.7.1 already proves that the requested transfer/place sequence fails for all
|
|
35
|
+
bounded blend radii down to zero. v1.7.2 therefore keeps execution blocked and
|
|
36
|
+
plans the transfer PTP and place LIN segments independently against the exact same
|
|
37
|
+
attached-workpiece PlanningScene. The diagnostic receipts distinguish an invalid
|
|
38
|
+
transfer, invalid place, both invalid, or a sequence-composition-only failure.
|
|
39
|
+
|
|
40
|
+
These probes are plan-only. They never execute robot motion and never modify the
|
|
41
|
+
targets, planner types, collision scene, velocity/acceleration limits, Twin
|
|
42
|
+
lineage, or execution authority.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
def _probe_segment(
|
|
46
|
+
self,
|
|
47
|
+
*,
|
|
48
|
+
motion_id: str,
|
|
49
|
+
group: IndustrialGroupSpec,
|
|
50
|
+
segment_index: int,
|
|
51
|
+
robot_profile_key: str,
|
|
52
|
+
joint_names: tuple[str, ...],
|
|
53
|
+
start_positions_rad: tuple[float, ...],
|
|
54
|
+
phase_targets_rad: Mapping[str, tuple[float, ...]],
|
|
55
|
+
source_graph_hash: str,
|
|
56
|
+
twin_hash: str,
|
|
57
|
+
scene_contract: Mapping[str, Any] | None,
|
|
58
|
+
source_entity_id: str,
|
|
59
|
+
metadata: Mapping[str, Any] | None,
|
|
60
|
+
) -> dict[str, Any]:
|
|
61
|
+
spec = group.segments[segment_index]
|
|
62
|
+
probe_spec = replace(spec, blend_radius_m=0.0)
|
|
63
|
+
probe_group = IndustrialGroupSpec(
|
|
64
|
+
group_id=f"{group.group_id}_segment_probe_{spec.phase_name}",
|
|
65
|
+
segments=(probe_spec,),
|
|
66
|
+
workpiece_loaded=group.workpiece_loaded,
|
|
67
|
+
scene_state=group.scene_state,
|
|
68
|
+
support_contact_departure=False,
|
|
69
|
+
)
|
|
70
|
+
probe_motion_id = f"{motion_id}-segment-probe-{spec.phase_name}"
|
|
71
|
+
expected_receipt = self.work_dir / f"{probe_motion_id}.industrial.receipt.json"
|
|
72
|
+
expected_request = self.work_dir / f"{probe_motion_id}.industrial.request.json"
|
|
73
|
+
try:
|
|
74
|
+
motion = PilzIndustrialSequencePlannerV170.plan(
|
|
75
|
+
self,
|
|
76
|
+
motion_id=probe_motion_id,
|
|
77
|
+
group=probe_group,
|
|
78
|
+
robot_profile_key=robot_profile_key,
|
|
79
|
+
joint_names=joint_names,
|
|
80
|
+
start_positions_rad=start_positions_rad,
|
|
81
|
+
phase_targets_rad=phase_targets_rad,
|
|
82
|
+
source_graph_hash=source_graph_hash,
|
|
83
|
+
twin_hash=twin_hash,
|
|
84
|
+
scene_contract=scene_contract,
|
|
85
|
+
source_entity_id=source_entity_id,
|
|
86
|
+
metadata=metadata,
|
|
87
|
+
)
|
|
88
|
+
except SimulationPlatformError as exc:
|
|
89
|
+
return {
|
|
90
|
+
"phase_name": spec.phase_name,
|
|
91
|
+
"planner_id": spec.planner_id,
|
|
92
|
+
"success": False,
|
|
93
|
+
"code": _error_code(exc),
|
|
94
|
+
"start_positions_rad": list(start_positions_rad),
|
|
95
|
+
"target_positions_rad": list(phase_targets_rad[spec.phase_name]),
|
|
96
|
+
"receipt": str(expected_receipt) if expected_receipt.is_file() else None,
|
|
97
|
+
"request": str(expected_request) if expected_request.is_file() else None,
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return {
|
|
101
|
+
"phase_name": spec.phase_name,
|
|
102
|
+
"planner_id": spec.planner_id,
|
|
103
|
+
"success": True,
|
|
104
|
+
"code": "pilz_industrial_sequence_ready",
|
|
105
|
+
"start_positions_rad": list(start_positions_rad),
|
|
106
|
+
"target_positions_rad": list(phase_targets_rad[spec.phase_name]),
|
|
107
|
+
"receipt": str(motion.metadata["pilz_sequence_receipt"]),
|
|
108
|
+
"request": str(motion.metadata["pilz_sequence_request"]),
|
|
109
|
+
"motion_hash": motion.fingerprint,
|
|
110
|
+
"planned_duration_s": motion.planned_duration_s,
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
def _write_transfer_place_diagnostic(
|
|
114
|
+
self,
|
|
115
|
+
*,
|
|
116
|
+
motion_id: str,
|
|
117
|
+
group: IndustrialGroupSpec,
|
|
118
|
+
robot_profile_key: str,
|
|
119
|
+
joint_names: tuple[str, ...],
|
|
120
|
+
start_positions_rad: tuple[float, ...],
|
|
121
|
+
phase_targets_rad: Mapping[str, tuple[float, ...]],
|
|
122
|
+
source_graph_hash: str,
|
|
123
|
+
twin_hash: str,
|
|
124
|
+
scene_contract: Mapping[str, Any] | None,
|
|
125
|
+
source_entity_id: str,
|
|
126
|
+
metadata: Mapping[str, Any] | None,
|
|
127
|
+
) -> tuple[str, Path]:
|
|
128
|
+
transfer_phase = group.segments[0].phase_name
|
|
129
|
+
transfer_target = tuple(phase_targets_rad[transfer_phase])
|
|
130
|
+
transfer = self._probe_segment(
|
|
131
|
+
motion_id=motion_id,
|
|
132
|
+
group=group,
|
|
133
|
+
segment_index=0,
|
|
134
|
+
robot_profile_key=robot_profile_key,
|
|
135
|
+
joint_names=joint_names,
|
|
136
|
+
start_positions_rad=start_positions_rad,
|
|
137
|
+
phase_targets_rad=phase_targets_rad,
|
|
138
|
+
source_graph_hash=source_graph_hash,
|
|
139
|
+
twin_hash=twin_hash,
|
|
140
|
+
scene_contract=scene_contract,
|
|
141
|
+
source_entity_id=source_entity_id,
|
|
142
|
+
metadata=metadata,
|
|
143
|
+
)
|
|
144
|
+
place = self._probe_segment(
|
|
145
|
+
motion_id=motion_id,
|
|
146
|
+
group=group,
|
|
147
|
+
segment_index=1,
|
|
148
|
+
robot_profile_key=robot_profile_key,
|
|
149
|
+
joint_names=joint_names,
|
|
150
|
+
start_positions_rad=transfer_target,
|
|
151
|
+
phase_targets_rad=phase_targets_rad,
|
|
152
|
+
source_graph_hash=source_graph_hash,
|
|
153
|
+
twin_hash=twin_hash,
|
|
154
|
+
scene_contract=scene_contract,
|
|
155
|
+
source_entity_id=source_entity_id,
|
|
156
|
+
metadata=metadata,
|
|
157
|
+
)
|
|
158
|
+
code = transfer_place_diagnostic_code(
|
|
159
|
+
{
|
|
160
|
+
"transfer": bool(transfer["success"]),
|
|
161
|
+
"place": bool(place["success"]),
|
|
162
|
+
}
|
|
163
|
+
)
|
|
164
|
+
summary = {
|
|
165
|
+
"schema_version": "1.0",
|
|
166
|
+
"diagnostic": "transfer_place_independent_pilz_segment_probe",
|
|
167
|
+
"group_id": group.group_id,
|
|
168
|
+
"original_failure": "pilz_sequence_planning_failed",
|
|
169
|
+
"result_code": code,
|
|
170
|
+
"plan_only": True,
|
|
171
|
+
"execution_performed": False,
|
|
172
|
+
"scene_state": group.scene_state,
|
|
173
|
+
"workpiece_loaded": group.workpiece_loaded,
|
|
174
|
+
"source_graph_hash": source_graph_hash,
|
|
175
|
+
"twin_hash": twin_hash,
|
|
176
|
+
"segments": [transfer, place],
|
|
177
|
+
}
|
|
178
|
+
self.work_dir.mkdir(parents=True, exist_ok=True)
|
|
179
|
+
path = self.work_dir / f"{motion_id}.transfer-place-diagnostic.json"
|
|
180
|
+
temp = path.with_suffix(path.suffix + ".tmp")
|
|
181
|
+
temp.write_text(
|
|
182
|
+
json.dumps(summary, indent=2, sort_keys=True, allow_nan=False) + "\n",
|
|
183
|
+
encoding="utf-8",
|
|
184
|
+
)
|
|
185
|
+
temp.replace(path)
|
|
186
|
+
return code, path
|
|
187
|
+
|
|
188
|
+
def plan(
|
|
189
|
+
self,
|
|
190
|
+
*,
|
|
191
|
+
motion_id: str,
|
|
192
|
+
group: IndustrialGroupSpec,
|
|
193
|
+
robot_profile_key: str,
|
|
194
|
+
joint_names: tuple[str, ...],
|
|
195
|
+
start_positions_rad: tuple[float, ...],
|
|
196
|
+
phase_targets_rad: Mapping[str, tuple[float, ...]],
|
|
197
|
+
source_graph_hash: str,
|
|
198
|
+
twin_hash: str,
|
|
199
|
+
scene_contract: Mapping[str, Any] | None,
|
|
200
|
+
source_entity_id: str,
|
|
201
|
+
metadata: Mapping[str, Any] | None = None,
|
|
202
|
+
) -> PhysicalMotionPlan:
|
|
203
|
+
try:
|
|
204
|
+
return super().plan(
|
|
205
|
+
motion_id=motion_id,
|
|
206
|
+
group=group,
|
|
207
|
+
robot_profile_key=robot_profile_key,
|
|
208
|
+
joint_names=joint_names,
|
|
209
|
+
start_positions_rad=start_positions_rad,
|
|
210
|
+
phase_targets_rad=phase_targets_rad,
|
|
211
|
+
source_graph_hash=source_graph_hash,
|
|
212
|
+
twin_hash=twin_hash,
|
|
213
|
+
scene_contract=scene_contract,
|
|
214
|
+
source_entity_id=source_entity_id,
|
|
215
|
+
metadata=metadata,
|
|
216
|
+
)
|
|
217
|
+
except SimulationPlatformError as exc:
|
|
218
|
+
if (
|
|
219
|
+
_error_code(exc) != "pilz_sequence_planning_failed"
|
|
220
|
+
or group.group_id != "transfer_place"
|
|
221
|
+
or len(group.segments) != 2
|
|
222
|
+
or tuple(item.phase_name for item in group.segments)
|
|
223
|
+
!= ("transfer", "place")
|
|
224
|
+
):
|
|
225
|
+
raise
|
|
226
|
+
code, path = self._write_transfer_place_diagnostic(
|
|
227
|
+
motion_id=motion_id,
|
|
228
|
+
group=group,
|
|
229
|
+
robot_profile_key=robot_profile_key,
|
|
230
|
+
joint_names=joint_names,
|
|
231
|
+
start_positions_rad=start_positions_rad,
|
|
232
|
+
phase_targets_rad=phase_targets_rad,
|
|
233
|
+
source_graph_hash=source_graph_hash,
|
|
234
|
+
twin_hash=twin_hash,
|
|
235
|
+
scene_contract=scene_contract,
|
|
236
|
+
source_entity_id=source_entity_id,
|
|
237
|
+
metadata=metadata,
|
|
238
|
+
)
|
|
239
|
+
raise SimulationPlatformError(f"{code}:{path}") from exc
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devagent-physical-engine
|
|
3
|
-
Version: 1.7.
|
|
4
|
-
Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, adaptive industrial Pilz PTP/LIN report-test Gazebo execution, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
|
|
3
|
+
Version: 1.7.2
|
|
4
|
+
Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, adaptive industrial Pilz PTP/LIN report-test Gazebo execution, transfer/place segment diagnostics, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
|
|
5
5
|
Author: Tom Ha
|
|
6
6
|
License: All Rights Reserved
|
|
7
7
|
Project-URL: Homepage, https://github.com/tomha85/devagent-physical-engine
|
|
@@ -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.7.
|
|
79
|
+
python -m pip install --upgrade devagent-physical-engine==1.7.2
|
|
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.7.
|
|
91
|
+
1.7.2
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
Run the normal customer workflow:
|
|
@@ -304,6 +304,29 @@ no fallback to an unqualified simulator or robot
|
|
|
304
304
|
|
|
305
305
|
The selected blend radii and every planning attempt receipt remain attached to motion metadata for auditability.
|
|
306
306
|
|
|
307
|
+
## v1.7.2 transfer/place diagnostic hotfix
|
|
308
|
+
|
|
309
|
+
A target-stack qualification run proved that `transfer_place` still returned Pilz `FAILURE(99999)` for every v1.7.1 blend candidate, including zero blend. v1.7.2 therefore does not keep guessing at blend values. When that exact bounded failure occurs, DevAgent remains fail-closed and runs two independent **plan-only** probes against the same attached-workpiece PlanningScene:
|
|
310
|
+
|
|
311
|
+
```text
|
|
312
|
+
lift target
|
|
313
|
+
↓
|
|
314
|
+
transfer PTP probe
|
|
315
|
+
↓ independent start at transfer target
|
|
316
|
+
place LIN probe
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
The result is classified deterministically as one of:
|
|
320
|
+
|
|
321
|
+
```text
|
|
322
|
+
pilz_transfer_segment_planning_failed
|
|
323
|
+
pilz_place_segment_planning_failed
|
|
324
|
+
pilz_transfer_and_place_segment_planning_failed
|
|
325
|
+
pilz_transfer_place_sequence_composition_failed
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Each probe writes its own request/receipt plus a `transfer-place-diagnostic.json` summary. These probes never execute motion and never relax targets, planner types, collision policy, attached-workpiece scene state, velocity/acceleration limits, Twin lineage, or real-execution authority. Their purpose is to identify the exact target-stack defect before changing physical execution semantics.
|
|
329
|
+
|
|
307
330
|
## Qualified visual-execution scope
|
|
308
331
|
|
|
309
332
|
The packaged visual executor remains intentionally narrow:
|
|
@@ -492,9 +515,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
492
515
|
|
|
493
516
|
# Project status
|
|
494
517
|
|
|
495
|
-
**v1.7.
|
|
518
|
+
**v1.7.2 — Production/Stable software workflow**
|
|
496
519
|
|
|
497
|
-
v1.7.
|
|
520
|
+
v1.7.2 retains the v1.7 industrial Pilz PTP/LIN execution architecture and v1.7.1 bounded adaptive-blend fallback. If transfer/place still fails at zero blend, v1.7.2 now proves the transfer PTP and place LIN segments independently and records a deterministic diagnostic result while keeping execution blocked. It also retains the cross-vendor profile gate so non-UR5e customer Twins cannot enter the UR5e-only qualified visual executor.
|
|
498
521
|
|
|
499
522
|
Production-oriented software capabilities include:
|
|
500
523
|
|
|
@@ -509,6 +532,7 @@ exact Requirement → Mapping → Verification Plan → Case provenance
|
|
|
509
532
|
qualified report-test visual execution contract
|
|
510
533
|
industrial Pilz PTP / LIN planning
|
|
511
534
|
adaptive bounded blend selection
|
|
535
|
+
plan-only transfer/place segment diagnostics
|
|
512
536
|
lift-only support-contact ACM lease + exact restore
|
|
513
537
|
Gazebo/MoveIt selected-case visualization
|
|
514
538
|
typed physical measurement binding
|
|
@@ -113,6 +113,7 @@ src/devagent_physical_engine/ros2/gazebo_pose.py
|
|
|
113
113
|
src/devagent_physical_engine/ros2/gazebo_world.py
|
|
114
114
|
src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py
|
|
115
115
|
src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py
|
|
116
|
+
src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py
|
|
116
117
|
src/devagent_physical_engine/ros2/joint_state_probe.py
|
|
117
118
|
src/devagent_physical_engine/ros2/joint_state_recorder.py
|
|
118
119
|
src/devagent_physical_engine/ros2/measured_motion.py
|
|
@@ -218,6 +219,7 @@ tests/test_tool_scene_v0124.py
|
|
|
218
219
|
tests/test_trajectory_action_probe_v0125.py
|
|
219
220
|
tests/test_trajectory_qualification_v09.py
|
|
220
221
|
tests/test_trajectory_tracking_v0125.py
|
|
222
|
+
tests/test_transfer_place_diagnostic_v172.py
|
|
221
223
|
tests/test_twin_materialization_v10.py
|
|
222
224
|
tests/test_twin_v08.py
|
|
223
225
|
tests/test_ur5e_adapter_scopes_v09.py
|
|
@@ -22,8 +22,8 @@ from devagent_physical_engine.industrial_motion_v170 import (
|
|
|
22
22
|
from devagent_physical_engine import report_test_execution as base_exec
|
|
23
23
|
from devagent_physical_engine import report_test_execution_strict as strict_exec
|
|
24
24
|
from devagent_physical_engine.ros2 import report_test_visualization_v170 as visual_v170
|
|
25
|
-
from devagent_physical_engine.ros2.
|
|
26
|
-
|
|
25
|
+
from devagent_physical_engine.ros2.industrial_sequence_planner_v172 import (
|
|
26
|
+
PilzIndustrialSequencePlannerV172,
|
|
27
27
|
)
|
|
28
28
|
from devagent_physical_engine.ros2.report_test_visualization_v170 import (
|
|
29
29
|
run_report_test_visualization_v170,
|
|
@@ -31,8 +31,8 @@ from devagent_physical_engine.ros2.report_test_visualization_v170 import (
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
class IndustrialMotionV170Tests(unittest.TestCase):
|
|
34
|
-
def
|
|
35
|
-
self.assertEqual(package.__version__, "1.7.
|
|
34
|
+
def test_release_version_is_v172(self) -> None:
|
|
35
|
+
self.assertEqual(package.__version__, "1.7.2")
|
|
36
36
|
|
|
37
37
|
def test_reference_groups_cover_every_task_phase_once_in_order(self) -> None:
|
|
38
38
|
groups = reference_industrial_groups()
|
|
@@ -132,12 +132,12 @@ class IndustrialMotionV170Tests(unittest.TestCase):
|
|
|
132
132
|
self.assertLessEqual(LIN_ACCELERATION_SCALE, 0.04)
|
|
133
133
|
self.assertGreaterEqual(WORKPIECE_FOLLOW_RATE_HZ, 60.0)
|
|
134
134
|
|
|
135
|
-
def
|
|
135
|
+
def test_all_report_executor_defaults_route_to_v170_runner_and_v172_planner(self) -> None:
|
|
136
136
|
install_industrial_motion_v170()
|
|
137
137
|
install_industrial_motion_v170()
|
|
138
138
|
self.assertIs(
|
|
139
139
|
visual_v170.PilzIndustrialSequencePlannerV170,
|
|
140
|
-
|
|
140
|
+
PilzIndustrialSequencePlannerV172,
|
|
141
141
|
)
|
|
142
142
|
|
|
143
143
|
runtime = base_exec.ReportTestExecutionRuntime(
|