devagent-physical-engine 1.6.2__tar.gz → 1.7.0__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.6.2/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.7.0}/PKG-INFO +69 -13
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/README.md +67 -11
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/pyproject.toml +6 -3
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/__init__.py +3 -1
- devagent_physical_engine-1.7.0/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +51 -0
- devagent_physical_engine-1.7.0/src/devagent_physical_engine/industrial_motion_v170.py +144 -0
- devagent_physical_engine-1.7.0/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +291 -0
- devagent_physical_engine-1.7.0/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +394 -0
- devagent_physical_engine-1.7.0/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +553 -0
- devagent_physical_engine-1.7.0/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +192 -0
- devagent_physical_engine-1.7.0/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +116 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0/src/devagent_physical_engine.egg-info}/PKG-INFO +69 -13
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine.egg-info/SOURCES.txt +8 -0
- devagent_physical_engine-1.7.0/tests/test_industrial_motion_v170.py +124 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/NOTICE +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/setup.cfg +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/__init__.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/compiler.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/contracts.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/coordinator.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/critic.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/evidence.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/interpreter.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/planner.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/recovery.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/routing.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/runtime.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/semantic.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/agent/structured.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ai_cli.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/cli.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_campaign.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_cli.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_importer.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_readiness.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/commercial_repository.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/continuous_clearance.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/doctor.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/engineering_agent.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/engineering_request.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/evidence_replay.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/evidence_trust.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/execution.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/models.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/one_command.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/one_command_runtime.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/one_command_v15.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/one_command_v16.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/operating_envelope.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/__init__.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/candidates.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/contracts.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/evidence.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/experience.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/measured.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/physical_campaign.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/physical_evidence.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/physical_motion.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/planning.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/pose_math.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/preexecution_contract.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/production_authority.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/production_grade.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/project.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_criterion.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/provider_qualification.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/providers.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/qualification.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/qualification_cli.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/qualification_harness.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/reference_workcell.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/report_test_execution.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/robot_platform.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/robots.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/__init__.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/commands.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/doctor.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/qualification.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/selective_verification.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/setup_profile.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/simulation.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/simulation_platform.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/tool_collision.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/twin.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/twin_builder.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/twin_codec.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/twin_materialization.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/user_cli.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/user_cli_v15.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/user_cli_v16.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/verification.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_agent_core.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_agent_semantic_hardening.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_ai_cli.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_ai_cli_v07.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_commercial_importer_v1.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_commercial_intelligence_v15.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_commercial_readiness_v1.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_commercial_v1.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_continuous_clearance_v011.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_core.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_engineering_request_v07.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_evidence_replay_v12.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_evidence_trust_coverage_v12.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_evidence_trust_transport_v12.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_evidence_trust_v12.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_evidence_viewer_palette_v130.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_gazebo_cli_v0122.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_golden_abb_showcase.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_interpreter_profiles_v08.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_joint_state_probe_v0125.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_live_provider_qualification.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_measured_motion_v10.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_moveit_scene_v0123.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_natural_language_agent_v07.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_one_command_hardening_v13.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_one_command_pose_hardening_v15.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_one_command_regression_v141.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_one_command_v13.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_openai_strict_schema_v0113.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_optimization_v05.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_physical_campaign_v09.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_physical_evidence_v09.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_physical_motion_v09.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_planning_fallback_v012.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_pose_math_v0125.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_preexecution_contract_v10.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_production_authority_v11.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_production_grade_coverage_v11.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_production_grade_v11.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_project_spine_v013.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_provider_and_qualification.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_provider_criterion_v15.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_qualification_harness_v06.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_readme_pypi.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_real_provider_adapters.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_reference_workcell_v012.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_report_test_contract_coverage_v16.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_report_test_lineage_v16.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_report_test_visual_execution_v16.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_robot_platform_v08.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_ros2_production_receipts_v011.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_ros2_simulation.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_ros_trajectory_v09.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_selective_verification_v14.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_setup_profile.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_sim_real_qualification_v011.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_simulation_platform_v08.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_tool_collision_v011.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_tool_scene_v0124.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_trajectory_action_probe_v0125.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_trajectory_qualification_v09.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_trajectory_tracking_v0125.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_twin_materialization_v10.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_twin_v08.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_user_cli_interactive_v131.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_user_cli_progress_v131.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_user_cli_report_visual_v16.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_user_cli_selective_v14.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_user_cli_v15.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_v052_stabilization.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_v08_catalog_mapping_regression.py +0 -0
- {devagent_physical_engine-1.6.2 → devagent_physical_engine-1.7.0}/tests/test_workpiece_lifecycle_v011.py +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devagent-physical-engine
|
|
3
|
-
Version: 1.
|
|
4
|
-
Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, report-test Gazebo
|
|
3
|
+
Version: 1.7.0
|
|
4
|
+
Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, 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.
|
|
5
5
|
Author: Tom Ha
|
|
6
6
|
License: All Rights Reserved
|
|
7
7
|
Project-URL: Homepage, https://github.com/tomha85/devagent-physical-engine
|
|
8
8
|
Project-URL: Repository, https://github.com/tomha85/devagent-physical-engine
|
|
9
9
|
Project-URL: Issues, https://github.com/tomha85/devagent-physical-engine/issues
|
|
10
|
-
Keywords: robotics,industrial-automation,agentic-ai,ros2,gazebo,verification,selective-testing,digital-twin,fat-testing,regression,evidence,replay
|
|
10
|
+
Keywords: robotics,industrial-automation,agentic-ai,ros2,gazebo,moveit,pilz,verification,selective-testing,digital-twin,fat-testing,regression,evidence,replay
|
|
11
11
|
Classifier: Development Status :: 5 - Production/Stable
|
|
12
12
|
Classifier: Intended Audience :: Developers
|
|
13
13
|
Classifier: Operating System :: OS Independent
|
|
@@ -82,7 +82,7 @@ DevAgent is designed to answer: **What can be proven about this cell, what faile
|
|
|
82
82
|
Python 3.11+ is required.
|
|
83
83
|
|
|
84
84
|
```bash
|
|
85
|
-
python -m pip install --upgrade devagent-physical-engine==1.
|
|
85
|
+
python -m pip install --upgrade devagent-physical-engine==1.7.0
|
|
86
86
|
```
|
|
87
87
|
|
|
88
88
|
Verify the installed package:
|
|
@@ -94,7 +94,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
|
|
|
94
94
|
Expected:
|
|
95
95
|
|
|
96
96
|
```text
|
|
97
|
-
1.
|
|
97
|
+
1.7.0
|
|
98
98
|
```
|
|
99
99
|
|
|
100
100
|
Run the normal customer workflow:
|
|
@@ -232,9 +232,62 @@ The joint-state recorder also rejects duplicate/backward ROS source timestamps b
|
|
|
232
232
|
|
|
233
233
|
Because the visual trajectory now executes more slowly, cycle-time requirements are evaluated against the actual slower simulation execution. DevAgent does not normalize the observed duration back to a faster value or claim performance that was not executed.
|
|
234
234
|
|
|
235
|
+
## v1.7 industrial smooth motion execution
|
|
236
|
+
|
|
237
|
+
v1.7 replaces the packaged report-test stop/go joint-phase presentation with a bounded industrial motion sequence planned by the running MoveIt **Pilz Industrial Motion Planner**. DevAgent does not stitch trajectories by hand and does not manufacture interpolation points.
|
|
238
|
+
|
|
239
|
+
The qualified UR5e load sequence is grouped as:
|
|
240
|
+
|
|
241
|
+
```text
|
|
242
|
+
HOME
|
|
243
|
+
↓ PTP
|
|
244
|
+
PRE_PICK
|
|
245
|
+
↓ LIN
|
|
246
|
+
PICK
|
|
247
|
+
↓ grasp / hard boundary
|
|
248
|
+
LIFT
|
|
249
|
+
↓ LIN support departure / hard boundary
|
|
250
|
+
TRANSFER
|
|
251
|
+
↓ PTP with safe internal blend
|
|
252
|
+
PLACE
|
|
253
|
+
↓ LIN / release hard boundary
|
|
254
|
+
RETRACT
|
|
255
|
+
↓ LIN with safe internal blend
|
|
256
|
+
HOME
|
|
257
|
+
↓ PTP
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Execution groups are intentionally bounded:
|
|
261
|
+
|
|
262
|
+
```text
|
|
263
|
+
approach_pick PTP → LIN
|
|
264
|
+
lift_departure LIN
|
|
265
|
+
transfer_place PTP → LIN
|
|
266
|
+
retreat_home LIN → PTP
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Compatible motion inside a group can use a small Pilz blend radius. DevAgent never blends through grasp, the support-contact departure boundary, or release. The simulation profile is deliberately conservative:
|
|
270
|
+
|
|
271
|
+
```text
|
|
272
|
+
PTP velocity scale: 10%
|
|
273
|
+
PTP acceleration scale: 6%
|
|
274
|
+
LIN velocity scale: 6%
|
|
275
|
+
LIN acceleration scale: 4%
|
|
276
|
+
safe blend radius: 12 mm
|
|
277
|
+
workpiece follow target: 60 Hz
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
`LIN` means the Pilz planner owns a Cartesian linear tool path; `PTP` remains collision-aware point-to-point planning. MoveIt/Pilz owns geometry, timestamps, velocity/acceleration time parameterization, collision checking, and the returned blended `RobotTrajectory`.
|
|
281
|
+
|
|
282
|
+
The source-support exception is also bounded at runtime. During `lift_departure`, DevAgent snapshots the complete live MoveIt Allowed Collision Matrix, enables exactly the attached-workpiece ↔ source-support pair, verifies read-back, executes the lift, restores the exact original matrix, and verifies the restoration before transfer is allowed to continue. No global collision disable is used.
|
|
283
|
+
|
|
284
|
+
Slower industrial execution is real execution time in simulation, not cosmetic playback. Therefore cycle-time requirements are evaluated against the actual measured slower trajectory.
|
|
285
|
+
|
|
286
|
+
The v1.7 hosted qualification proves deterministic software contracts and fail-closed routing. Graphical ROS 2 Jazzy + Gazebo Harmonic + MoveIt/Pilz target-stack acceptance still has to run on the intended workstation; hosted Python CI does not pretend to execute that graphical stack.
|
|
287
|
+
|
|
235
288
|
## Exact lineage hardening
|
|
236
289
|
|
|
237
|
-
A case ID such as `case-0001` is local to its verification plan. v1.6 therefore requires the complete lineage:
|
|
290
|
+
A case ID such as `case-0001` is local to its verification plan. v1.6+ therefore requires the complete lineage:
|
|
238
291
|
|
|
239
292
|
```text
|
|
240
293
|
Requirement
|
|
@@ -449,7 +502,7 @@ Gazebo Harmonic
|
|
|
449
502
|
gz_ros2_control
|
|
450
503
|
Universal Robots ROS 2 driver
|
|
451
504
|
ur_simulation_gz
|
|
452
|
-
MoveIt 2
|
|
505
|
+
MoveIt 2 + Pilz Industrial Motion Planner
|
|
453
506
|
```
|
|
454
507
|
|
|
455
508
|
Preview setup:
|
|
@@ -470,7 +523,7 @@ Check runtime:
|
|
|
470
523
|
devagent-physical ros doctor
|
|
471
524
|
```
|
|
472
525
|
|
|
473
|
-
Hosted Python CI validates software contracts and deterministic execution boundaries. It does not by itself prove a graphical Gazebo runtime, `move_group`, TF, controller actions, OEM drivers, or an arbitrary customer cell. Physical target-stack qualification must run on the intended workstation/adapter stack.
|
|
526
|
+
Hosted Python CI validates software contracts and deterministic execution boundaries. It does not by itself prove a graphical Gazebo runtime, `move_group`, `/sequence_move_group`, TF, controller actions, OEM drivers, or an arbitrary customer cell. Physical target-stack qualification must run on the intended workstation/adapter stack.
|
|
474
527
|
|
|
475
528
|
---
|
|
476
529
|
|
|
@@ -527,9 +580,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
527
580
|
|
|
528
581
|
# Project status
|
|
529
582
|
|
|
530
|
-
**v1.
|
|
583
|
+
**v1.7.0 — Production/Stable software workflow**
|
|
531
584
|
|
|
532
|
-
v1.
|
|
585
|
+
v1.7.0 adds industrial smooth report-test execution for the qualified UR5e load profile using MoveIt Pilz `PTP` and `LIN` commands, bounded internal blend radii, conservative real simulation speed/acceleration, a 60 Hz workpiece-follow target, and an exact live-ACM support-contact lease scoped only to lift departure. It retains exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, deterministic verdicts, and fail-closed authority boundaries.
|
|
533
586
|
|
|
534
587
|
Production-oriented software capabilities include:
|
|
535
588
|
|
|
@@ -542,6 +595,9 @@ requirement-driven nominal / boundary / fault case generation
|
|
|
542
595
|
immutable project/Twin lineage
|
|
543
596
|
exact Requirement → Case provenance
|
|
544
597
|
qualified report-test visual execution contract
|
|
598
|
+
industrial Pilz PTP / LIN task planning
|
|
599
|
+
bounded safe trajectory blending
|
|
600
|
+
lift-only support-contact ACM lease + exact restore
|
|
545
601
|
Gazebo/MoveIt selected-case visualization
|
|
546
602
|
typed physical measurement binding
|
|
547
603
|
deterministic full campaigns
|
|
@@ -557,9 +613,9 @@ change impact + regression
|
|
|
557
613
|
provider-neutral optional AI front end
|
|
558
614
|
```
|
|
559
615
|
|
|
560
|
-
Quality gates include Python 3.11/3.12/3.13 regression, compilation, Ruff correctness checks, package build/clean-install, runtime dependency audit, global branch coverage, One-Command coverage, Commercial Intelligence coverage, report-test visual execution qualification tests, Selective Verification coverage, Production Authority coverage, and Evidence Trust/Replay coverage.
|
|
616
|
+
Quality gates include Python 3.11/3.12/3.13 regression, compilation, Ruff correctness checks, package build/clean-install, runtime dependency audit, global branch coverage, One-Command coverage, Commercial Intelligence coverage, industrial-motion contract tests, report-test visual execution qualification tests, Selective Verification coverage, Production Authority coverage, and Evidence Trust/Replay coverage.
|
|
561
617
|
|
|
562
|
-
Production/Stable describes the bounded software workflow. It does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, or authorized for autonomous real execution.
|
|
618
|
+
Production/Stable describes the bounded software workflow. It does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, or authorized for autonomous real execution. The new graphical Pilz execution path must additionally pass target-stack acceptance on the intended ROS/Gazebo/MoveIt workstation.
|
|
563
619
|
|
|
564
620
|
---
|
|
565
621
|
|
|
@@ -569,7 +625,7 @@ One-command verification:
|
|
|
569
625
|
|
|
570
626
|
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/ONE_COMMAND_VERIFY_V13.md
|
|
571
627
|
|
|
572
|
-
v1.6 report-test visual execution:
|
|
628
|
+
v1.6 report-test visual execution (lineage and authority foundation retained in v1.7):
|
|
573
629
|
|
|
574
630
|
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/REPORT_TEST_VISUAL_EXECUTION_V16.md
|
|
575
631
|
|
|
@@ -41,7 +41,7 @@ DevAgent is designed to answer: **What can be proven about this cell, what faile
|
|
|
41
41
|
Python 3.11+ is required.
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
|
-
python -m pip install --upgrade devagent-physical-engine==1.
|
|
44
|
+
python -m pip install --upgrade devagent-physical-engine==1.7.0
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
Verify the installed package:
|
|
@@ -53,7 +53,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
|
|
|
53
53
|
Expected:
|
|
54
54
|
|
|
55
55
|
```text
|
|
56
|
-
1.
|
|
56
|
+
1.7.0
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
Run the normal customer workflow:
|
|
@@ -191,9 +191,62 @@ The joint-state recorder also rejects duplicate/backward ROS source timestamps b
|
|
|
191
191
|
|
|
192
192
|
Because the visual trajectory now executes more slowly, cycle-time requirements are evaluated against the actual slower simulation execution. DevAgent does not normalize the observed duration back to a faster value or claim performance that was not executed.
|
|
193
193
|
|
|
194
|
+
## v1.7 industrial smooth motion execution
|
|
195
|
+
|
|
196
|
+
v1.7 replaces the packaged report-test stop/go joint-phase presentation with a bounded industrial motion sequence planned by the running MoveIt **Pilz Industrial Motion Planner**. DevAgent does not stitch trajectories by hand and does not manufacture interpolation points.
|
|
197
|
+
|
|
198
|
+
The qualified UR5e load sequence is grouped as:
|
|
199
|
+
|
|
200
|
+
```text
|
|
201
|
+
HOME
|
|
202
|
+
↓ PTP
|
|
203
|
+
PRE_PICK
|
|
204
|
+
↓ LIN
|
|
205
|
+
PICK
|
|
206
|
+
↓ grasp / hard boundary
|
|
207
|
+
LIFT
|
|
208
|
+
↓ LIN support departure / hard boundary
|
|
209
|
+
TRANSFER
|
|
210
|
+
↓ PTP with safe internal blend
|
|
211
|
+
PLACE
|
|
212
|
+
↓ LIN / release hard boundary
|
|
213
|
+
RETRACT
|
|
214
|
+
↓ LIN with safe internal blend
|
|
215
|
+
HOME
|
|
216
|
+
↓ PTP
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Execution groups are intentionally bounded:
|
|
220
|
+
|
|
221
|
+
```text
|
|
222
|
+
approach_pick PTP → LIN
|
|
223
|
+
lift_departure LIN
|
|
224
|
+
transfer_place PTP → LIN
|
|
225
|
+
retreat_home LIN → PTP
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Compatible motion inside a group can use a small Pilz blend radius. DevAgent never blends through grasp, the support-contact departure boundary, or release. The simulation profile is deliberately conservative:
|
|
229
|
+
|
|
230
|
+
```text
|
|
231
|
+
PTP velocity scale: 10%
|
|
232
|
+
PTP acceleration scale: 6%
|
|
233
|
+
LIN velocity scale: 6%
|
|
234
|
+
LIN acceleration scale: 4%
|
|
235
|
+
safe blend radius: 12 mm
|
|
236
|
+
workpiece follow target: 60 Hz
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
`LIN` means the Pilz planner owns a Cartesian linear tool path; `PTP` remains collision-aware point-to-point planning. MoveIt/Pilz owns geometry, timestamps, velocity/acceleration time parameterization, collision checking, and the returned blended `RobotTrajectory`.
|
|
240
|
+
|
|
241
|
+
The source-support exception is also bounded at runtime. During `lift_departure`, DevAgent snapshots the complete live MoveIt Allowed Collision Matrix, enables exactly the attached-workpiece ↔ source-support pair, verifies read-back, executes the lift, restores the exact original matrix, and verifies the restoration before transfer is allowed to continue. No global collision disable is used.
|
|
242
|
+
|
|
243
|
+
Slower industrial execution is real execution time in simulation, not cosmetic playback. Therefore cycle-time requirements are evaluated against the actual measured slower trajectory.
|
|
244
|
+
|
|
245
|
+
The v1.7 hosted qualification proves deterministic software contracts and fail-closed routing. Graphical ROS 2 Jazzy + Gazebo Harmonic + MoveIt/Pilz target-stack acceptance still has to run on the intended workstation; hosted Python CI does not pretend to execute that graphical stack.
|
|
246
|
+
|
|
194
247
|
## Exact lineage hardening
|
|
195
248
|
|
|
196
|
-
A case ID such as `case-0001` is local to its verification plan. v1.6 therefore requires the complete lineage:
|
|
249
|
+
A case ID such as `case-0001` is local to its verification plan. v1.6+ therefore requires the complete lineage:
|
|
197
250
|
|
|
198
251
|
```text
|
|
199
252
|
Requirement
|
|
@@ -408,7 +461,7 @@ Gazebo Harmonic
|
|
|
408
461
|
gz_ros2_control
|
|
409
462
|
Universal Robots ROS 2 driver
|
|
410
463
|
ur_simulation_gz
|
|
411
|
-
MoveIt 2
|
|
464
|
+
MoveIt 2 + Pilz Industrial Motion Planner
|
|
412
465
|
```
|
|
413
466
|
|
|
414
467
|
Preview setup:
|
|
@@ -429,7 +482,7 @@ Check runtime:
|
|
|
429
482
|
devagent-physical ros doctor
|
|
430
483
|
```
|
|
431
484
|
|
|
432
|
-
Hosted Python CI validates software contracts and deterministic execution boundaries. It does not by itself prove a graphical Gazebo runtime, `move_group`, TF, controller actions, OEM drivers, or an arbitrary customer cell. Physical target-stack qualification must run on the intended workstation/adapter stack.
|
|
485
|
+
Hosted Python CI validates software contracts and deterministic execution boundaries. It does not by itself prove a graphical Gazebo runtime, `move_group`, `/sequence_move_group`, TF, controller actions, OEM drivers, or an arbitrary customer cell. Physical target-stack qualification must run on the intended workstation/adapter stack.
|
|
433
486
|
|
|
434
487
|
---
|
|
435
488
|
|
|
@@ -486,9 +539,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
486
539
|
|
|
487
540
|
# Project status
|
|
488
541
|
|
|
489
|
-
**v1.
|
|
542
|
+
**v1.7.0 — Production/Stable software workflow**
|
|
490
543
|
|
|
491
|
-
v1.
|
|
544
|
+
v1.7.0 adds industrial smooth report-test execution for the qualified UR5e load profile using MoveIt Pilz `PTP` and `LIN` commands, bounded internal blend radii, conservative real simulation speed/acceleration, a 60 Hz workpiece-follow target, and an exact live-ACM support-contact lease scoped only to lift departure. It retains exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, deterministic verdicts, and fail-closed authority boundaries.
|
|
492
545
|
|
|
493
546
|
Production-oriented software capabilities include:
|
|
494
547
|
|
|
@@ -501,6 +554,9 @@ requirement-driven nominal / boundary / fault case generation
|
|
|
501
554
|
immutable project/Twin lineage
|
|
502
555
|
exact Requirement → Case provenance
|
|
503
556
|
qualified report-test visual execution contract
|
|
557
|
+
industrial Pilz PTP / LIN task planning
|
|
558
|
+
bounded safe trajectory blending
|
|
559
|
+
lift-only support-contact ACM lease + exact restore
|
|
504
560
|
Gazebo/MoveIt selected-case visualization
|
|
505
561
|
typed physical measurement binding
|
|
506
562
|
deterministic full campaigns
|
|
@@ -516,9 +572,9 @@ change impact + regression
|
|
|
516
572
|
provider-neutral optional AI front end
|
|
517
573
|
```
|
|
518
574
|
|
|
519
|
-
Quality gates include Python 3.11/3.12/3.13 regression, compilation, Ruff correctness checks, package build/clean-install, runtime dependency audit, global branch coverage, One-Command coverage, Commercial Intelligence coverage, report-test visual execution qualification tests, Selective Verification coverage, Production Authority coverage, and Evidence Trust/Replay coverage.
|
|
575
|
+
Quality gates include Python 3.11/3.12/3.13 regression, compilation, Ruff correctness checks, package build/clean-install, runtime dependency audit, global branch coverage, One-Command coverage, Commercial Intelligence coverage, industrial-motion contract tests, report-test visual execution qualification tests, Selective Verification coverage, Production Authority coverage, and Evidence Trust/Replay coverage.
|
|
520
576
|
|
|
521
|
-
Production/Stable describes the bounded software workflow. It does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, or authorized for autonomous real execution.
|
|
577
|
+
Production/Stable describes the bounded software workflow. It does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, or authorized for autonomous real execution. The new graphical Pilz execution path must additionally pass target-stack acceptance on the intended ROS/Gazebo/MoveIt workstation.
|
|
522
578
|
|
|
523
579
|
---
|
|
524
580
|
|
|
@@ -528,7 +584,7 @@ One-command verification:
|
|
|
528
584
|
|
|
529
585
|
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/ONE_COMMAND_VERIFY_V13.md
|
|
530
586
|
|
|
531
|
-
v1.6 report-test visual execution:
|
|
587
|
+
v1.6 report-test visual execution (lineage and authority foundation retained in v1.7):
|
|
532
588
|
|
|
533
589
|
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/REPORT_TEST_VISUAL_EXECUTION_V16.md
|
|
534
590
|
|
|
@@ -570,4 +626,4 @@ Original creator: Tom Ha
|
|
|
570
626
|
Original project: https://github.com/tomha85/devagent-physical-engine
|
|
571
627
|
All rights reserved.
|
|
572
628
|
|
|
573
|
-
See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
|
|
629
|
+
See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
|
|
@@ -4,14 +4,14 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "devagent-physical-engine"
|
|
7
|
-
version = "1.
|
|
8
|
-
description = "Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, report-test Gazebo
|
|
7
|
+
version = "1.7.0"
|
|
8
|
+
description = "Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, 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."
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.11"
|
|
11
11
|
dependencies = ["PyYAML>=6.0,<7"]
|
|
12
12
|
authors = [{ name = "Tom Ha" }]
|
|
13
13
|
license = { text = "All Rights Reserved" }
|
|
14
|
-
keywords = ["robotics", "industrial-automation", "agentic-ai", "ros2", "gazebo", "verification", "selective-testing", "digital-twin", "fat-testing", "regression", "evidence", "replay"]
|
|
14
|
+
keywords = ["robotics", "industrial-automation", "agentic-ai", "ros2", "gazebo", "moveit", "pilz", "verification", "selective-testing", "digital-twin", "fat-testing", "regression", "evidence", "replay"]
|
|
15
15
|
classifiers = [
|
|
16
16
|
"Development Status :: 5 - Production/Stable",
|
|
17
17
|
"Intended Audience :: Developers",
|
|
@@ -71,7 +71,10 @@ omit = [
|
|
|
71
71
|
"src/devagent_physical_engine/ros2/ur5e_v10_adapter.py",
|
|
72
72
|
"src/devagent_physical_engine/ros2/task_*.py",
|
|
73
73
|
"src/devagent_physical_engine/ros2/report_test_visualization.py",
|
|
74
|
+
"src/devagent_physical_engine/ros2/report_test_visualization_v170.py",
|
|
74
75
|
"src/devagent_physical_engine/ros2/moveit_task_planner.py",
|
|
76
|
+
"src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py",
|
|
77
|
+
"src/devagent_physical_engine/ros2/support_contact_lease_v170.py",
|
|
75
78
|
"src/devagent_physical_engine/ros2/fk_pose.py",
|
|
76
79
|
"src/devagent_physical_engine/ros2/gazebo_pose.py",
|
|
77
80
|
"src/devagent_physical_engine/ros2/workpiece_follow.py",
|
|
@@ -34,6 +34,7 @@ from .evidence_trust import (
|
|
|
34
34
|
EvidenceTrace,
|
|
35
35
|
EvidenceViewer,
|
|
36
36
|
)
|
|
37
|
+
from .industrial_motion_hotfix_v170 import install_industrial_motion_v170
|
|
37
38
|
from .models import (
|
|
38
39
|
ActionContract,
|
|
39
40
|
Capability,
|
|
@@ -213,6 +214,7 @@ __all__ = [
|
|
|
213
214
|
|
|
214
215
|
install_support_contact_hotfix_v161()
|
|
215
216
|
install_smooth_motion_hotfix_v162()
|
|
217
|
+
install_industrial_motion_v170()
|
|
216
218
|
install_one_command_runtime()
|
|
217
219
|
|
|
218
|
-
__version__ = "1.
|
|
220
|
+
__version__ = "1.7.0"
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from functools import wraps
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
from .ros2.report_test_visualization_v170 import run_report_test_visualization_v170
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
_PATCH_MARKER = "_devagent_industrial_motion_v170"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _patch_constructor(cls) -> None:
|
|
13
|
+
original = cls.__init__
|
|
14
|
+
if getattr(original, _PATCH_MARKER, False):
|
|
15
|
+
return
|
|
16
|
+
|
|
17
|
+
@wraps(original)
|
|
18
|
+
def patched(self, *args: Any, **kwargs: Any):
|
|
19
|
+
kwargs.setdefault("visual_runner", run_report_test_visualization_v170)
|
|
20
|
+
return original(self, *args, **kwargs)
|
|
21
|
+
|
|
22
|
+
setattr(patched, _PATCH_MARKER, True)
|
|
23
|
+
cls.__init__ = patched
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def install_industrial_motion_v170() -> None:
|
|
27
|
+
"""Route all report-test executor construction through the v1.7 visual runner.
|
|
28
|
+
|
|
29
|
+
v1.6 bound the old visual runner into constructor defaults at import time. Merely
|
|
30
|
+
replacing a module global would therefore leave existing executor classes on the
|
|
31
|
+
old path. This installer patches only those constructor defaults and preserves all
|
|
32
|
+
lineage, mapping, evidence, and authority classes unchanged.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
from . import report_test_execution as base_exec
|
|
36
|
+
from . import report_test_execution_strict as strict_exec
|
|
37
|
+
from .ros2 import report_test_visualization as base_visual
|
|
38
|
+
|
|
39
|
+
base_exec.run_report_test_visualization = run_report_test_visualization_v170
|
|
40
|
+
strict_exec.run_report_test_visualization = run_report_test_visualization_v170
|
|
41
|
+
base_visual.run_report_test_visualization = run_report_test_visualization_v170
|
|
42
|
+
|
|
43
|
+
for cls in (
|
|
44
|
+
base_exec.ReportTestExecutionRuntime,
|
|
45
|
+
base_exec.ReportTestSelectiveExecutor,
|
|
46
|
+
base_exec.ReportTestFullExecutor,
|
|
47
|
+
strict_exec.ReportTestExecutionRuntime,
|
|
48
|
+
strict_exec.ReportTestSelectiveExecutor,
|
|
49
|
+
strict_exec.ReportTestFullExecutor,
|
|
50
|
+
):
|
|
51
|
+
_patch_constructor(cls)
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
INDUSTRIAL_MOTION_PROFILE_V170 = "pilz_ptp_lin_blended_v1"
|
|
7
|
+
PILZ_PIPELINE_ID = "pilz_industrial_motion_planner"
|
|
8
|
+
|
|
9
|
+
# Conservative simulation profile. These are planning/execution limits, not a
|
|
10
|
+
# cosmetic playback multiplier; measured cycle time therefore remains truthful.
|
|
11
|
+
PTP_VELOCITY_SCALE = 0.10
|
|
12
|
+
PTP_ACCELERATION_SCALE = 0.06
|
|
13
|
+
LIN_VELOCITY_SCALE = 0.06
|
|
14
|
+
LIN_ACCELERATION_SCALE = 0.04
|
|
15
|
+
SAFE_BLEND_RADIUS_M = 0.012
|
|
16
|
+
WORKPIECE_FOLLOW_RATE_HZ = 60.0
|
|
17
|
+
WORKPIECE_MIN_EFFECTIVE_RATE_HZ = 30.0
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass(frozen=True, slots=True)
|
|
21
|
+
class IndustrialSegmentSpec:
|
|
22
|
+
phase_name: str
|
|
23
|
+
planner_id: str
|
|
24
|
+
blend_radius_m: float
|
|
25
|
+
velocity_scale: float
|
|
26
|
+
acceleration_scale: float
|
|
27
|
+
|
|
28
|
+
def __post_init__(self) -> None:
|
|
29
|
+
if not self.phase_name.strip():
|
|
30
|
+
raise ValueError("industrial_phase_name_required")
|
|
31
|
+
if self.planner_id not in {"PTP", "LIN"}:
|
|
32
|
+
raise ValueError("industrial_planner_id_invalid")
|
|
33
|
+
if self.blend_radius_m < 0:
|
|
34
|
+
raise ValueError("industrial_blend_radius_invalid")
|
|
35
|
+
if not 0 < self.velocity_scale <= 1:
|
|
36
|
+
raise ValueError("industrial_velocity_scale_invalid")
|
|
37
|
+
if not 0 < self.acceleration_scale <= 1:
|
|
38
|
+
raise ValueError("industrial_acceleration_scale_invalid")
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@dataclass(frozen=True, slots=True)
|
|
42
|
+
class IndustrialGroupSpec:
|
|
43
|
+
group_id: str
|
|
44
|
+
segments: tuple[IndustrialSegmentSpec, ...]
|
|
45
|
+
workpiece_loaded: bool
|
|
46
|
+
scene_state: str
|
|
47
|
+
support_contact_departure: bool = False
|
|
48
|
+
|
|
49
|
+
def __post_init__(self) -> None:
|
|
50
|
+
if not self.group_id.strip() or not self.segments:
|
|
51
|
+
raise ValueError("industrial_group_invalid")
|
|
52
|
+
if self.scene_state not in {"inherit", "attached", "world"}:
|
|
53
|
+
raise ValueError("industrial_scene_state_invalid")
|
|
54
|
+
if self.segments[-1].blend_radius_m != 0.0:
|
|
55
|
+
raise ValueError("industrial_group_final_blend_must_be_zero")
|
|
56
|
+
if self.support_contact_departure:
|
|
57
|
+
if self.scene_state != "attached" or not self.workpiece_loaded:
|
|
58
|
+
raise ValueError("industrial_support_departure_requires_loaded_attached_group")
|
|
59
|
+
if tuple(item.phase_name for item in self.segments) != ("lift",):
|
|
60
|
+
raise ValueError("industrial_support_departure_must_be_lift_only")
|
|
61
|
+
|
|
62
|
+
@property
|
|
63
|
+
def phase_names(self) -> tuple[str, ...]:
|
|
64
|
+
return tuple(item.phase_name for item in self.segments)
|
|
65
|
+
|
|
66
|
+
@property
|
|
67
|
+
def planner_chain(self) -> str:
|
|
68
|
+
return "->".join(item.planner_id for item in self.segments)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def reference_industrial_groups() -> tuple[IndustrialGroupSpec, ...]:
|
|
72
|
+
"""Qualified UR5e report-test sequence with safe industrial motion boundaries.
|
|
73
|
+
|
|
74
|
+
Grasp/release and the support-contact departure remain explicit zero-blend
|
|
75
|
+
boundaries. Within approach, transfer/place, and retreat, Pilz blends compatible
|
|
76
|
+
PTP/LIN commands so the controller receives one continuous trajectory instead of
|
|
77
|
+
several stop/go FollowJointTrajectory commands.
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
groups = (
|
|
81
|
+
IndustrialGroupSpec(
|
|
82
|
+
"approach_pick",
|
|
83
|
+
(
|
|
84
|
+
IndustrialSegmentSpec(
|
|
85
|
+
"pre_pick", "PTP", SAFE_BLEND_RADIUS_M, PTP_VELOCITY_SCALE, PTP_ACCELERATION_SCALE
|
|
86
|
+
),
|
|
87
|
+
IndustrialSegmentSpec(
|
|
88
|
+
"pick", "LIN", 0.0, LIN_VELOCITY_SCALE, LIN_ACCELERATION_SCALE
|
|
89
|
+
),
|
|
90
|
+
),
|
|
91
|
+
workpiece_loaded=False,
|
|
92
|
+
scene_state="inherit",
|
|
93
|
+
),
|
|
94
|
+
IndustrialGroupSpec(
|
|
95
|
+
"lift_departure",
|
|
96
|
+
(
|
|
97
|
+
IndustrialSegmentSpec(
|
|
98
|
+
"lift", "LIN", 0.0, LIN_VELOCITY_SCALE, LIN_ACCELERATION_SCALE
|
|
99
|
+
),
|
|
100
|
+
),
|
|
101
|
+
workpiece_loaded=True,
|
|
102
|
+
scene_state="attached",
|
|
103
|
+
support_contact_departure=True,
|
|
104
|
+
),
|
|
105
|
+
IndustrialGroupSpec(
|
|
106
|
+
"transfer_place",
|
|
107
|
+
(
|
|
108
|
+
IndustrialSegmentSpec(
|
|
109
|
+
"transfer", "PTP", SAFE_BLEND_RADIUS_M, PTP_VELOCITY_SCALE, PTP_ACCELERATION_SCALE
|
|
110
|
+
),
|
|
111
|
+
IndustrialSegmentSpec(
|
|
112
|
+
"place", "LIN", 0.0, LIN_VELOCITY_SCALE, LIN_ACCELERATION_SCALE
|
|
113
|
+
),
|
|
114
|
+
),
|
|
115
|
+
workpiece_loaded=True,
|
|
116
|
+
scene_state="attached",
|
|
117
|
+
),
|
|
118
|
+
IndustrialGroupSpec(
|
|
119
|
+
"retreat_home",
|
|
120
|
+
(
|
|
121
|
+
IndustrialSegmentSpec(
|
|
122
|
+
"retract", "LIN", SAFE_BLEND_RADIUS_M, LIN_VELOCITY_SCALE, LIN_ACCELERATION_SCALE
|
|
123
|
+
),
|
|
124
|
+
IndustrialSegmentSpec(
|
|
125
|
+
"return_home", "PTP", 0.0, PTP_VELOCITY_SCALE, PTP_ACCELERATION_SCALE
|
|
126
|
+
),
|
|
127
|
+
),
|
|
128
|
+
workpiece_loaded=False,
|
|
129
|
+
scene_state="world",
|
|
130
|
+
),
|
|
131
|
+
)
|
|
132
|
+
expected = (
|
|
133
|
+
"pre_pick",
|
|
134
|
+
"pick",
|
|
135
|
+
"lift",
|
|
136
|
+
"transfer",
|
|
137
|
+
"place",
|
|
138
|
+
"retract",
|
|
139
|
+
"return_home",
|
|
140
|
+
)
|
|
141
|
+
actual = tuple(phase for group in groups for phase in group.phase_names)
|
|
142
|
+
if actual != expected:
|
|
143
|
+
raise RuntimeError("industrial_reference_phase_coverage_invalid")
|
|
144
|
+
return groups
|