devagent-physical-engine 2.0.0__tar.gz → 2.1.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-2.0.0/src/devagent_physical_engine.egg-info → devagent_physical_engine-2.1.0}/PKG-INFO +14 -10
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/README.md +13 -9
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/pyproject.toml +7 -2
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/__init__.py +1 -1
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/controller_runtime_hotfix_v181.py +19 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/robot_exercise_cli.py +167 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/robot_platform.py +20 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/robot_qualification_acceptance.py +341 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/robot_qualification_acceptance_cli.py +71 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/robot_qualification_cli.py +219 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/robot_qualification_report_store.py +49 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/robot_support_contract.py +322 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/robot_support_industrial_v2.py +131 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/robot_support_v18.py +2 -1
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/robots.py +10 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/abb_irb1200.py +108 -6
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/abb_irb1200_verified.py +434 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/abb_runtime_probe.py +195 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/commands.py +125 -19
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/direct_controller_discovery_runner.py +85 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/doctor.py +44 -1
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/fanuc_crx10ia.py +211 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/fanuc_crx10ia_physics.py +515 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/gazebo_overlay_support.py +315 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/industrial_arm_runtime_gate.py +161 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/industrial_arm_runtime_probe.py +324 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/industrial_arm_task_adapters.py +291 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/industrial_arm_task_runtime.py +699 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/kuka_kr6_r900_2.py +239 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/kuka_kr6_r900_2_verified.py +632 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/qualification_multivendor.py +588 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/qualification_provenance.py +333 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/robot_description_probe.py +115 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/ros_python_runtime.py +100 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/runtime_quiescence.py +118 -0
- devagent_physical_engine-2.1.0/src/devagent_physical_engine/ros2/runtime_quiescence_probe.py +145 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +29 -6
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/user_cli_v18.py +145 -16
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/user_cli_v191.py +13 -1
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0/src/devagent_physical_engine.egg-info}/PKG-INFO +14 -10
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine.egg-info/SOURCES.txt +43 -0
- devagent_physical_engine-2.1.0/tests/test_abb_clock_provenance_v2.py +16 -0
- devagent_physical_engine-2.1.0/tests/test_abb_gazebo_resource_path_v2.py +140 -0
- devagent_physical_engine-2.1.0/tests/test_abb_robot_description_bootstrap_v2.py +218 -0
- devagent_physical_engine-2.1.0/tests/test_abb_robot_description_payload_gate_v2.py +106 -0
- devagent_physical_engine-2.1.0/tests/test_abb_runtime_direct_probe_v2.py +126 -0
- devagent_physical_engine-2.1.0/tests/test_abb_sim_clock_v2.py +92 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_controller_runtime_hotfix_v181.py +28 -0
- devagent_physical_engine-2.1.0/tests/test_fanuc_physics_tolerance_v2.py +82 -0
- devagent_physical_engine-2.1.0/tests/test_industrial_arm_functional_parity_v192.py +326 -0
- devagent_physical_engine-2.1.0/tests/test_industrial_arm_replay_authority_v192.py +115 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_industrial_motion_v170.py +3 -3
- devagent_physical_engine-2.1.0/tests/test_industrial_robot_simulation_v2.py +415 -0
- devagent_physical_engine-2.1.0/tests/test_kuka_verified_runtime_v2.py +362 -0
- devagent_physical_engine-2.1.0/tests/test_multivendor_runtime_hardening_v2.py +319 -0
- devagent_physical_engine-2.1.0/tests/test_multivendor_sim_qualification_v2.py +428 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_package_metadata_v184.py +2 -2
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_robot_platform_v08.py +75 -21
- devagent_physical_engine-2.1.0/tests/test_robot_qualification_acceptance_v2.py +234 -0
- devagent_physical_engine-2.1.0/tests/test_robot_qualification_review_fixes_v2.py +179 -0
- devagent_physical_engine-2.1.0/tests/test_robot_support_contract_v2.py +134 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_ros2_simulation.py +39 -0
- devagent_physical_engine-2.1.0/tests/test_ros_process_group_cleanup_v2.py +130 -0
- devagent_physical_engine-2.1.0/tests/test_runtime_quiescence_v2.py +134 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_trajectory_action_probe_v0125.py +27 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_transfer_place_diagnostic_v172.py +3 -3
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/NOTICE +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/setup.cfg +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/agent/__init__.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/agent/compiler.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/agent/contracts.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/agent/coordinator.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/agent/critic.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/agent/evidence.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/agent/interpreter.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/agent/planner.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/agent/recovery.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/agent/routing.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/agent/runtime.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/agent/semantic.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/agent/structured.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ai_cli.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/cli.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/commercial.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/commercial_campaign.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/commercial_cli.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/commercial_importer.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/commercial_readiness.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/commercial_repository.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/commissioning_evidence.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/commissioning_readiness.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/continuous_clearance.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/doctor.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/dynamic_verification_runtime_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/engineering_agent.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/engineering_findings.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/engineering_request.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/evidence_provider_cli.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/evidence_provider_gateway.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/evidence_provider_policy.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/evidence_replay.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/evidence_trust.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/execution.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/industrial_motion_v170.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/industrial_motion_v182.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/models.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/one_command.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/one_command_runtime.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/one_command_v15.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/one_command_v16.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/operating_envelope.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/optimization/__init__.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/optimization/candidates.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/optimization/contracts.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/optimization/evidence.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/optimization/experience.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/optimization/measured.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/physical_campaign.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/physical_evidence.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/physical_evidence_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/physical_motion.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/planning.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/pose_math.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/preexecution_contract.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/production_authority.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/production_grade.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/project.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/provider_criterion.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/provider_qualification.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/providers.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/qualification.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/qualification_cli.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/qualification_harness.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/reference_workcell.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/report_requirements_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/report_test_execution.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/__init__.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/abb_irb1200_preview.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/controller_action_probe.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/destination_support_contact_v182.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v182.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe_v182.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/qualification.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/ros_gz_pose_service_probe.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/support_contact_acm_semantics_v189.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/task_adapter_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/task_motion_diagnostics_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/trajectory_feedback_tracking_v189.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/trajectory_runtime_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/workpiece_carrier_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/workpiece_entity_replace_probe_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v187.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v188.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v189.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/ros2/workpiece_transport.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/selective_verification.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/selective_verification_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/setup_profile.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/simulation.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/simulation_platform.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/tool_collision.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/twin.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/twin_builder.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/twin_codec.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/twin_materialization.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/user_cli.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/user_cli_v15.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/user_cli_v16.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/verification.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/verification_capabilities_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/verification_scope_authority.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_abb_irb1200_visual_v18.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_agent_core.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_agent_semantic_hardening.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_ai_cli.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_ai_cli_v07.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_commercial_importer_v1.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_commercial_intelligence_v15.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_commercial_readiness_v1.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_commercial_v1.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_commissioning_core_v20.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_commissioning_evidence_graph_v20.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_continuous_clearance_v011.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_controller_failure_diagnostics_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_core.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_destination_support_contact_v182.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_dynamic_report_batch_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_dynamic_report_contract_end_to_end_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_dynamic_verification_capabilities_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_engineering_request_v07.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_evidence_provider_gateway_v2.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_evidence_replay_v12.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_evidence_trust_coverage_v12.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_evidence_trust_transport_v12.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_evidence_trust_v12.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_evidence_viewer_palette_v130.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_explicit_detach_world_reassert_v189.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_external_evidence_campaign_authority_v2.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_fresh_simulation_cli_v191.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_fresh_simulation_service_v191.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_gazebo_cli_v0122.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_golden_abb_runner_v171.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_golden_abb_showcase.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_handoff_authority_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_interpreter_profiles_v08.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_joint_state_metric_authority_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_joint_state_probe_v0125.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_live_provider_qualification.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_loaded_place_stability_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_measured_motion_v10.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_metric_authority_surface_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_motion_handoff_stability_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_moveit_scene_v0123.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_natural_language_agent_v07.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_one_command_hardening_v13.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_one_command_pose_hardening_v15.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_one_command_regression_v141.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_one_command_v13.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_one_command_v190_injection.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_openai_strict_schema_v0113.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_optimization_v05.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_physical_campaign_v09.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_physical_evidence_v09.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_physical_motion_v09.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_place_preexecution_acm_v189.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_planning_fallback_v012.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_pose_math_v0125.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_preexecution_contract_v10.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_production_authority_v11.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_production_external_evidence_v11.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_production_grade_coverage_v11.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_production_grade_v11.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_project_spine_v013.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_provider_and_qualification.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_provider_criterion_v15.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_qualification_harness_v06.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_readme_pypi.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_real_provider_adapters.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_reference_workcell_v012.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_release_resting_pose_v189.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_release_transaction_v189.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_report_orchestration_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_report_test_contract_coverage_v16.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_report_test_lineage_v16.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_report_test_visual_execution_v16.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_ros2_production_receipts_v011.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_ros_trajectory_v09.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_selective_verification_v14.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_setup_profile.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_sim_real_qualification_v011.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_simulation_platform_v08.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_support_contact_acm_semantics_v189.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_tool_collision_v011.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_tool_scene_v0124.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_trajectory_action_contract_v189.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_trajectory_feedback_tracking_v189.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_trajectory_qualification_v09.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_trajectory_tracking_v0125.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_transfer_controller_policy_v189.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_twin_materialization_v10.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_twin_v08.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_user_cli_interactive_v131.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_user_cli_progress_v131.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_user_cli_report_visual_v16.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_user_cli_selective_v14.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_user_cli_v15.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_v052_stabilization.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_v08_catalog_mapping_regression.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_verification_scope_authority_v20.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_workpiece_attach_semantics_v183.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_workpiece_carrier_v190.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_workpiece_lifecycle_v011.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_workpiece_scene_probe_v185.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_workpiece_semantic_lifecycle_v186.py +0 -0
- {devagent_physical_engine-2.0.0 → devagent_physical_engine-2.1.0}/tests/test_workpiece_transport_v189.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devagent-physical-engine
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.0
|
|
4
4
|
Summary: Verification-first robotics commissioning control plane with immutable engineering findings, deterministic pre-site readiness, evidence authority, exact-Twin lineage, selective simulation, regression, replay, and FAT reporting.
|
|
5
5
|
Author: Tom Ha
|
|
6
6
|
License: All Rights Reserved
|
|
@@ -81,7 +81,7 @@ DevAgent turns customer engineering inputs into a bounded, evidence-driven pre-s
|
|
|
81
81
|
|
|
82
82
|
<p align="center"><sub><b>Real engine screenshots — not product renders.</b> ROS 2 Jazzy · Gazebo Harmonic · MoveIt 2 · Pilz · UR5e exact-Twin verification.</sub></p>
|
|
83
83
|
|
|
84
|
-
## v2.
|
|
84
|
+
## v2.1 commissioning verification flow
|
|
85
85
|
|
|
86
86
|
```text
|
|
87
87
|
Customer engineering files
|
|
@@ -125,7 +125,7 @@ That decision means the declared pre-site engineering scope has complete, curren
|
|
|
125
125
|
Python 3.11+ is required.
|
|
126
126
|
|
|
127
127
|
```bash
|
|
128
|
-
python -m pip install --upgrade devagent-physical-engine==2.
|
|
128
|
+
python -m pip install --upgrade devagent-physical-engine==2.1.0
|
|
129
129
|
```
|
|
130
130
|
|
|
131
131
|
Verify the installed package:
|
|
@@ -137,7 +137,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
|
|
|
137
137
|
Expected:
|
|
138
138
|
|
|
139
139
|
```text
|
|
140
|
-
2.
|
|
140
|
+
2.1.0
|
|
141
141
|
```
|
|
142
142
|
|
|
143
143
|
Run the normal customer workflow:
|
|
@@ -235,7 +235,7 @@ A generated plan is not physical proof. A replay is not a new execution. An AI r
|
|
|
235
235
|
|
|
236
236
|
## Engineering findings and risk authority
|
|
237
237
|
|
|
238
|
-
v2
|
|
238
|
+
The v2 commissioning line records first-class immutable artifacts for:
|
|
239
239
|
|
|
240
240
|
```text
|
|
241
241
|
engineering_finding
|
|
@@ -377,14 +377,15 @@ The target-proven UR5e path retains controller-manager/action readiness binding,
|
|
|
377
377
|
|
|
378
378
|
Unsupported customer Twins, unqualified robot profiles, boundary/fault cases outside the qualified scope, ambiguous case mappings, or incomplete lineage fail closed.
|
|
379
379
|
|
|
380
|
-
ABB IRB1200
|
|
380
|
+
Exact ABB IRB1200, FANUC CRX-10iA, and KUKA KR6 R900-2 simulation qualification infrastructure is included in v2.1.0. Their packaged simulation tiers remain `EXPERIMENTAL` until accepted target-workstation reports are reviewed and a separate authority-promotion change is merged. Generic ABB/FANUC/KUKA family profiles remain `MODEL_ONLY`.
|
|
381
381
|
|
|
382
382
|
Inspect robot support:
|
|
383
383
|
|
|
384
384
|
```bash
|
|
385
385
|
devagent robots
|
|
386
386
|
devagent robot doctor abb_irb1200
|
|
387
|
-
devagent robot
|
|
387
|
+
devagent robot doctor fanuc_crx10ia
|
|
388
|
+
devagent robot doctor kuka_kr6_r900_2
|
|
388
389
|
```
|
|
389
390
|
|
|
390
391
|
## Customer input
|
|
@@ -520,9 +521,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
520
521
|
|
|
521
522
|
# Project status
|
|
522
523
|
|
|
523
|
-
**v2.
|
|
524
|
+
**v2.1.0 — Production/Stable software workflow; commissioning verification control plane with fail-closed multivendor simulation qualification**
|
|
524
525
|
|
|
525
|
-
v2.0.0 adds
|
|
526
|
+
v2.1.0 preserves the v2.0 commissioning-verification authority model and adds exact-model ABB/FANUC/KUKA qualification infrastructure with direct runtime readiness probes, verified simulation-clock and robot-description contracts, authoritative joint-state measurement, controller-feedback tracking, immutable qualification reports, software-provenance hashing, and a three-report multivendor acceptance gate. Exact ABB/FANUC/KUKA simulation tiers are promoted only after accepted target-workstation evidence and a code-reviewed authority change.
|
|
526
527
|
|
|
527
528
|
Production-oriented software capabilities include:
|
|
528
529
|
|
|
@@ -553,7 +554,7 @@ immutable READY / NOT_READY pre-site commissioning decision
|
|
|
553
554
|
provider-neutral optional AI front end
|
|
554
555
|
```
|
|
555
556
|
|
|
556
|
-
Production/Stable describes the bounded software workflow. The target-proven UR5e claim remains limited to the qualified packaged scope and acceptance environment. v2.
|
|
557
|
+
Production/Stable describes the bounded software workflow. The target-proven UR5e claim remains limited to the qualified packaged scope and acceptance environment. v2.1.0 does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, commissioned, or authorized for autonomous real execution.
|
|
557
558
|
|
|
558
559
|
Current hard authority boundaries remain:
|
|
559
560
|
|
|
@@ -568,6 +569,9 @@ unless separately proven by an appropriate qualified process.
|
|
|
568
569
|
|
|
569
570
|
## Documentation
|
|
570
571
|
|
|
572
|
+
v2.1.0 release notes:
|
|
573
|
+
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V2_1_0.md
|
|
574
|
+
|
|
571
575
|
v2.0.0 release notes:
|
|
572
576
|
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V2_0_0.md
|
|
573
577
|
|
|
@@ -39,7 +39,7 @@ DevAgent turns customer engineering inputs into a bounded, evidence-driven pre-s
|
|
|
39
39
|
|
|
40
40
|
<p align="center"><sub><b>Real engine screenshots — not product renders.</b> ROS 2 Jazzy · Gazebo Harmonic · MoveIt 2 · Pilz · UR5e exact-Twin verification.</sub></p>
|
|
41
41
|
|
|
42
|
-
## v2.
|
|
42
|
+
## v2.1 commissioning verification flow
|
|
43
43
|
|
|
44
44
|
```text
|
|
45
45
|
Customer engineering files
|
|
@@ -83,7 +83,7 @@ That decision means the declared pre-site engineering scope has complete, curren
|
|
|
83
83
|
Python 3.11+ is required.
|
|
84
84
|
|
|
85
85
|
```bash
|
|
86
|
-
python -m pip install --upgrade devagent-physical-engine==2.
|
|
86
|
+
python -m pip install --upgrade devagent-physical-engine==2.1.0
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
Verify the installed package:
|
|
@@ -95,7 +95,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
|
|
|
95
95
|
Expected:
|
|
96
96
|
|
|
97
97
|
```text
|
|
98
|
-
2.
|
|
98
|
+
2.1.0
|
|
99
99
|
```
|
|
100
100
|
|
|
101
101
|
Run the normal customer workflow:
|
|
@@ -193,7 +193,7 @@ A generated plan is not physical proof. A replay is not a new execution. An AI r
|
|
|
193
193
|
|
|
194
194
|
## Engineering findings and risk authority
|
|
195
195
|
|
|
196
|
-
v2
|
|
196
|
+
The v2 commissioning line records first-class immutable artifacts for:
|
|
197
197
|
|
|
198
198
|
```text
|
|
199
199
|
engineering_finding
|
|
@@ -335,14 +335,15 @@ The target-proven UR5e path retains controller-manager/action readiness binding,
|
|
|
335
335
|
|
|
336
336
|
Unsupported customer Twins, unqualified robot profiles, boundary/fault cases outside the qualified scope, ambiguous case mappings, or incomplete lineage fail closed.
|
|
337
337
|
|
|
338
|
-
ABB IRB1200
|
|
338
|
+
Exact ABB IRB1200, FANUC CRX-10iA, and KUKA KR6 R900-2 simulation qualification infrastructure is included in v2.1.0. Their packaged simulation tiers remain `EXPERIMENTAL` until accepted target-workstation reports are reviewed and a separate authority-promotion change is merged. Generic ABB/FANUC/KUKA family profiles remain `MODEL_ONLY`.
|
|
339
339
|
|
|
340
340
|
Inspect robot support:
|
|
341
341
|
|
|
342
342
|
```bash
|
|
343
343
|
devagent robots
|
|
344
344
|
devagent robot doctor abb_irb1200
|
|
345
|
-
devagent robot
|
|
345
|
+
devagent robot doctor fanuc_crx10ia
|
|
346
|
+
devagent robot doctor kuka_kr6_r900_2
|
|
346
347
|
```
|
|
347
348
|
|
|
348
349
|
## Customer input
|
|
@@ -478,9 +479,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
478
479
|
|
|
479
480
|
# Project status
|
|
480
481
|
|
|
481
|
-
**v2.
|
|
482
|
+
**v2.1.0 — Production/Stable software workflow; commissioning verification control plane with fail-closed multivendor simulation qualification**
|
|
482
483
|
|
|
483
|
-
v2.0.0 adds
|
|
484
|
+
v2.1.0 preserves the v2.0 commissioning-verification authority model and adds exact-model ABB/FANUC/KUKA qualification infrastructure with direct runtime readiness probes, verified simulation-clock and robot-description contracts, authoritative joint-state measurement, controller-feedback tracking, immutable qualification reports, software-provenance hashing, and a three-report multivendor acceptance gate. Exact ABB/FANUC/KUKA simulation tiers are promoted only after accepted target-workstation evidence and a code-reviewed authority change.
|
|
484
485
|
|
|
485
486
|
Production-oriented software capabilities include:
|
|
486
487
|
|
|
@@ -511,7 +512,7 @@ immutable READY / NOT_READY pre-site commissioning decision
|
|
|
511
512
|
provider-neutral optional AI front end
|
|
512
513
|
```
|
|
513
514
|
|
|
514
|
-
Production/Stable describes the bounded software workflow. The target-proven UR5e claim remains limited to the qualified packaged scope and acceptance environment. v2.
|
|
515
|
+
Production/Stable describes the bounded software workflow. The target-proven UR5e claim remains limited to the qualified packaged scope and acceptance environment. v2.1.0 does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, commissioned, or authorized for autonomous real execution.
|
|
515
516
|
|
|
516
517
|
Current hard authority boundaries remain:
|
|
517
518
|
|
|
@@ -526,6 +527,9 @@ unless separately proven by an appropriate qualified process.
|
|
|
526
527
|
|
|
527
528
|
## Documentation
|
|
528
529
|
|
|
530
|
+
v2.1.0 release notes:
|
|
531
|
+
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V2_1_0.md
|
|
532
|
+
|
|
529
533
|
v2.0.0 release notes:
|
|
530
534
|
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/RELEASE_NOTES_V2_0_0.md
|
|
531
535
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "devagent-physical-engine"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.1.0"
|
|
8
8
|
description = "Verification-first robotics commissioning control plane with immutable engineering findings, deterministic pre-site readiness, evidence authority, exact-Twin lineage, selective simulation, regression, replay, and FAT reporting."
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -89,9 +89,14 @@ omit = [
|
|
|
89
89
|
"src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py",
|
|
90
90
|
"src/devagent_physical_engine/ros2/abb_irb1200.py",
|
|
91
91
|
"src/devagent_physical_engine/ros2/abb_irb1200_preview.py",
|
|
92
|
+
"src/devagent_physical_engine/ros2/fanuc_crx10ia.py",
|
|
93
|
+
"src/devagent_physical_engine/ros2/fanuc_crx10ia_physics.py",
|
|
94
|
+
"src/devagent_physical_engine/ros2/kuka_kr6_r900_2.py",
|
|
95
|
+
"src/devagent_physical_engine/ros2/industrial_arm_task_runtime.py",
|
|
96
|
+
"src/devagent_physical_engine/ros2/industrial_arm_task_adapters.py",
|
|
92
97
|
]
|
|
93
98
|
|
|
94
99
|
[tool.coverage.report]
|
|
95
100
|
fail_under = 75
|
|
96
101
|
show_missing = true
|
|
97
|
-
skip_covered = false
|
|
102
|
+
skip_covered = false
|
|
@@ -6,11 +6,13 @@ from typing import Mapping
|
|
|
6
6
|
|
|
7
7
|
from .ros2 import trajectory as _trajectory
|
|
8
8
|
from .ros2.commands import CommandExecutionError, RosCommandRunner
|
|
9
|
+
from .ros2.direct_controller_discovery_runner import DirectControllerDiscoveryRunner
|
|
9
10
|
from .ros2.trajectory import RosTrajectoryError
|
|
10
11
|
from .ros2.ur5e_adapter import UR5E_JOINTS, UR5eGazeboAdapter
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
_DEFAULT_TRAJECTORY_ACTION = "/joint_trajectory_controller/follow_joint_trajectory"
|
|
15
|
+
_ORIGINAL_RESOLVE_ACTIVE_TRAJECTORY_ACTION = _trajectory.resolve_active_trajectory_action
|
|
14
16
|
|
|
15
17
|
|
|
16
18
|
def _last_json_mapping(stdout: str, *, code: str) -> Mapping[str, object]:
|
|
@@ -36,6 +38,23 @@ def resolve_active_trajectory_action_v181(
|
|
|
36
38
|
):
|
|
37
39
|
raise RosTrajectoryError("trajectory_action_must_be_absolute")
|
|
38
40
|
|
|
41
|
+
# Exact multivendor qualification adapters wrap their runner with
|
|
42
|
+
# DirectControllerDiscoveryRunner. Keep execution-time controller selection
|
|
43
|
+
# on the same direct-rclpy authority path already used by readiness instead
|
|
44
|
+
# of bypassing it through the legacy one-shot v1.8.1 helper.
|
|
45
|
+
#
|
|
46
|
+
# The original resolver asks the runner for ros2 control list_controllers.
|
|
47
|
+
# DirectControllerDiscoveryRunner intercepts exactly that read-only command
|
|
48
|
+
# and synthesizes its result from controller_manager/ListControllers through
|
|
49
|
+
# direct rclpy discovery. No ros2cli daemon is involved.
|
|
50
|
+
if isinstance(runner, DirectControllerDiscoveryRunner):
|
|
51
|
+
return _ORIGINAL_RESOLVE_ACTIVE_TRAJECTORY_ACTION(
|
|
52
|
+
runner,
|
|
53
|
+
preferred_action=preferred_action,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
# Preserve the existing direct machine probe for mature runtimes such as
|
|
57
|
+
# UR5e that are not wrapped by the multivendor controller-discovery runner.
|
|
39
58
|
service_timeout = 3.0
|
|
40
59
|
action_timeout = 3.0
|
|
41
60
|
helper = Path(_trajectory.__file__).with_name("controller_action_probe.py").resolve()
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
import json
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
import sys
|
|
7
|
+
|
|
8
|
+
from .robots import PROFILE_REGISTRY
|
|
9
|
+
from .ros2.commands import CommandExecutionError, SubprocessRosRunner
|
|
10
|
+
from .ros2.industrial_arm_task_adapters import TASK_ADAPTERS, TASK_SPECS
|
|
11
|
+
from .ros2.industrial_arm_task_runtime import run_commissioning_exercise
|
|
12
|
+
from .simulation_platform import SimulationPlatformError
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _parser() -> argparse.ArgumentParser:
|
|
16
|
+
parser = argparse.ArgumentParser(
|
|
17
|
+
prog="devagent robot exercise",
|
|
18
|
+
description=(
|
|
19
|
+
"Run the bounded MoveIt/controller commissioning exercise for an exact "
|
|
20
|
+
"experimental industrial-robot runtime. This never promotes FAT evidence."
|
|
21
|
+
),
|
|
22
|
+
)
|
|
23
|
+
parser.add_argument("robot")
|
|
24
|
+
parser.add_argument("--ros-setup", default="/opt/ros/jazzy/setup.bash")
|
|
25
|
+
parser.add_argument("--workspace-setup")
|
|
26
|
+
parser.add_argument("--log-dir", default="~/.devagent/robot-exercise")
|
|
27
|
+
parser.add_argument("--startup-timeout", type=float, default=120.0)
|
|
28
|
+
parser.add_argument(
|
|
29
|
+
"--no-replay",
|
|
30
|
+
action="store_true",
|
|
31
|
+
help="skip the deterministic replay leg (not recommended for qualification)",
|
|
32
|
+
)
|
|
33
|
+
parser.add_argument("--json", action="store_true")
|
|
34
|
+
parser.add_argument(
|
|
35
|
+
"--dry-run",
|
|
36
|
+
action="store_true",
|
|
37
|
+
help="show the exact bounded exercise contract without starting ROS",
|
|
38
|
+
)
|
|
39
|
+
return parser
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _print_dry_run(profile_key: str, *, json_output: bool) -> int:
|
|
43
|
+
spec = TASK_SPECS[profile_key]
|
|
44
|
+
payload = {
|
|
45
|
+
"profile_key": spec.profile_key,
|
|
46
|
+
"joint_names": list(spec.joint_names),
|
|
47
|
+
"planning_group": spec.planning_group,
|
|
48
|
+
"planning_frame": spec.planning_frame,
|
|
49
|
+
"fk_link_name": spec.fk_link_name,
|
|
50
|
+
"home_positions_rad": list(spec.home_positions_rad),
|
|
51
|
+
"exercise_positions_rad": list(spec.exercise_positions_rad),
|
|
52
|
+
"runtime_kind": spec.runtime_kind,
|
|
53
|
+
"physics_simulation": spec.physics_simulation,
|
|
54
|
+
"moveit_preplan_required": True,
|
|
55
|
+
"follow_joint_trajectory_required": True,
|
|
56
|
+
"joint_state_measurement_required": True,
|
|
57
|
+
"controller_feedback_verification_required": True,
|
|
58
|
+
"fk_metric_collection_required": True,
|
|
59
|
+
"replay_supported": True,
|
|
60
|
+
"fat_evidence_qualified": False,
|
|
61
|
+
"real_execution_allowed": False,
|
|
62
|
+
}
|
|
63
|
+
if json_output:
|
|
64
|
+
print(json.dumps(payload, indent=2, sort_keys=True))
|
|
65
|
+
else:
|
|
66
|
+
print(f"Robot exercise dry-run: {spec.profile_key}")
|
|
67
|
+
print(f"Runtime: {spec.runtime_kind}")
|
|
68
|
+
print(f"Physics simulation: {spec.physics_simulation}")
|
|
69
|
+
print("MoveIt preplan: REQUIRED")
|
|
70
|
+
print("FollowJointTrajectory execution: REQUIRED")
|
|
71
|
+
print("Controller feedback verification: REQUIRED")
|
|
72
|
+
print("Persistent /joint_states measurement: REQUIRED")
|
|
73
|
+
print("MoveIt FK endpoint/path metrics: REQUIRED")
|
|
74
|
+
print("Replay: SUPPORTED")
|
|
75
|
+
print("FAT evidence qualified: False")
|
|
76
|
+
print("Real execution allowed: False")
|
|
77
|
+
print("Home: " + ", ".join(f"{value:.4f}" for value in spec.home_positions_rad))
|
|
78
|
+
print(
|
|
79
|
+
"Exercise: "
|
|
80
|
+
+ ", ".join(f"{value:.4f}" for value in spec.exercise_positions_rad)
|
|
81
|
+
)
|
|
82
|
+
return 0
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def main(argv: list[str] | None = None) -> int:
|
|
86
|
+
args = _parser().parse_args(argv)
|
|
87
|
+
try:
|
|
88
|
+
profile = PROFILE_REGISTRY.resolve(args.robot)
|
|
89
|
+
except Exception as exc:
|
|
90
|
+
print(f"Robot exercise blocked: {exc}", file=sys.stderr)
|
|
91
|
+
return 41
|
|
92
|
+
|
|
93
|
+
if profile.key not in TASK_ADAPTERS:
|
|
94
|
+
print(
|
|
95
|
+
f"Robot exercise blocked: no experimental task adapter registered for {profile.key}",
|
|
96
|
+
file=sys.stderr,
|
|
97
|
+
)
|
|
98
|
+
return 41
|
|
99
|
+
if args.startup_timeout <= 0:
|
|
100
|
+
print("Robot exercise blocked: startup timeout must be positive", file=sys.stderr)
|
|
101
|
+
return 2
|
|
102
|
+
if args.dry_run:
|
|
103
|
+
return _print_dry_run(profile.key, json_output=args.json)
|
|
104
|
+
|
|
105
|
+
workspace = Path(args.workspace_setup).expanduser() if args.workspace_setup else None
|
|
106
|
+
runner = SubprocessRosRunner(
|
|
107
|
+
ros_setup=Path(args.ros_setup).expanduser(),
|
|
108
|
+
workspace_setup=workspace,
|
|
109
|
+
)
|
|
110
|
+
adapter_type = TASK_ADAPTERS[profile.key]
|
|
111
|
+
log_root = Path(args.log_dir).expanduser() / profile.key
|
|
112
|
+
adapter = adapter_type(
|
|
113
|
+
runner,
|
|
114
|
+
ros_setup=args.ros_setup,
|
|
115
|
+
log_dir=log_root,
|
|
116
|
+
startup_timeout_s=args.startup_timeout,
|
|
117
|
+
)
|
|
118
|
+
if not args.json:
|
|
119
|
+
print(
|
|
120
|
+
f"[DevAgent] START robot={profile.key} runtime={TASK_SPECS[profile.key].runtime_kind}",
|
|
121
|
+
flush=True,
|
|
122
|
+
)
|
|
123
|
+
print(f"[DevAgent] LOGS {log_root.resolve()}", flush=True)
|
|
124
|
+
print(
|
|
125
|
+
"[DevAgent] PREPARE launching exact simulator/controller/MoveIt stack; "
|
|
126
|
+
"no FAT evidence can be promoted by this command",
|
|
127
|
+
flush=True,
|
|
128
|
+
)
|
|
129
|
+
try:
|
|
130
|
+
report = run_commissioning_exercise(
|
|
131
|
+
adapter,
|
|
132
|
+
work_dir=log_root / "exercise",
|
|
133
|
+
replay=not args.no_replay,
|
|
134
|
+
)
|
|
135
|
+
except (
|
|
136
|
+
CommandExecutionError,
|
|
137
|
+
SimulationPlatformError,
|
|
138
|
+
OSError,
|
|
139
|
+
ValueError,
|
|
140
|
+
) as exc:
|
|
141
|
+
print(f"Robot exercise blocked: {exc}", file=sys.stderr)
|
|
142
|
+
print(f"Diagnostic logs: {log_root.resolve()}", file=sys.stderr)
|
|
143
|
+
print("No FAT evidence was promoted and real robot execution remains locked.")
|
|
144
|
+
return 41
|
|
145
|
+
|
|
146
|
+
if args.json:
|
|
147
|
+
print(json.dumps(report.to_dict(), indent=2, sort_keys=True))
|
|
148
|
+
else:
|
|
149
|
+
print(f"Robot: {report.profile_key}")
|
|
150
|
+
print(f"Runtime: {report.runtime_kind}")
|
|
151
|
+
print(f"Physics simulation: {report.physics_simulation}")
|
|
152
|
+
print("Phases: " + ", ".join(report.phases))
|
|
153
|
+
print(f"Replay verified: {report.replay_verified}")
|
|
154
|
+
print(f"Result: {'PASS' if report.passed else 'FAIL'}")
|
|
155
|
+
print("FAT evidence qualified: False")
|
|
156
|
+
print("Real execution allowed: False")
|
|
157
|
+
for index, metrics in enumerate(report.motion_metrics, start=1):
|
|
158
|
+
print(
|
|
159
|
+
f"Motion {index}: duration={metrics.get('observed_duration_s')} "
|
|
160
|
+
f"tracking={metrics.get('max_tracking_error_rad')} "
|
|
161
|
+
f"tcp_error={metrics.get('final_tcp_error_m')}"
|
|
162
|
+
)
|
|
163
|
+
return 0 if report.passed else 41
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
if __name__ == "__main__":
|
|
167
|
+
raise SystemExit(main())
|
|
@@ -129,6 +129,10 @@ class RobotProfile:
|
|
|
129
129
|
controller_family: str | None = None
|
|
130
130
|
legacy_qualification: str | None = None
|
|
131
131
|
notes: tuple[str, ...] = ()
|
|
132
|
+
# Independent authority bit for the packaged DevAgent runtime. A robot may be
|
|
133
|
+
# fully simulation-qualified while still being forbidden from producing measured
|
|
134
|
+
# customer FAT evidence. Never infer this authority from simulation tier badges.
|
|
135
|
+
measured_fat_authority: bool = False
|
|
132
136
|
|
|
133
137
|
def __post_init__(self) -> None:
|
|
134
138
|
key = self.key.strip().lower()
|
|
@@ -148,6 +152,19 @@ class RobotProfile:
|
|
|
148
152
|
raise RobotPlatformError("empty_legacy_qualification")
|
|
149
153
|
if any(not note.strip() for note in self.notes):
|
|
150
154
|
raise RobotPlatformError("empty_robot_note")
|
|
155
|
+
if self.measured_fat_authority:
|
|
156
|
+
required = (
|
|
157
|
+
SimulationTier.KINEMATIC,
|
|
158
|
+
SimulationTier.PHYSICS,
|
|
159
|
+
SimulationTier.VISUAL,
|
|
160
|
+
)
|
|
161
|
+
if any(
|
|
162
|
+
self.qualification.state_for(tier) is not QualificationState.QUALIFIED
|
|
163
|
+
for tier in required
|
|
164
|
+
):
|
|
165
|
+
raise RobotPlatformError(
|
|
166
|
+
"measured_fat_authority_requires_qualified_kinematic_physics_visual"
|
|
167
|
+
)
|
|
151
168
|
object.__setattr__(self, "key", key)
|
|
152
169
|
object.__setattr__(self, "vendor", vendor)
|
|
153
170
|
object.__setattr__(self, "model", model)
|
|
@@ -205,6 +222,7 @@ class RobotProfile:
|
|
|
205
222
|
"site_qualification": self.qualification.site_qualification.value,
|
|
206
223
|
"lifecycle_level": int(self.lifecycle_level),
|
|
207
224
|
"lifecycle_name": self.lifecycle_level.name.lower(),
|
|
225
|
+
"measured_fat_authority": self.measured_fat_authority,
|
|
208
226
|
"real_execution_locked": True,
|
|
209
227
|
}
|
|
210
228
|
if self.controller_family:
|
|
@@ -294,6 +312,7 @@ class RobotProfileRegistry:
|
|
|
294
312
|
"hardware_shadow": profile.qualification.hardware_shadow.value,
|
|
295
313
|
"sim_real": profile.qualification.sim_real_correlation.value,
|
|
296
314
|
"site": profile.qualification.site_qualification.value,
|
|
315
|
+
"measured_fat_authority": profile.measured_fat_authority,
|
|
297
316
|
}
|
|
298
317
|
)
|
|
299
318
|
return tuple(rows)
|
|
@@ -355,6 +374,7 @@ BUILTIN_ROBOT_PROFILES = RobotProfileRegistry(
|
|
|
355
374
|
notes=(
|
|
356
375
|
"DevAgent visual Gazebo/MoveIt workstation qualification exists; real execution remains locked.",
|
|
357
376
|
),
|
|
377
|
+
measured_fat_authority=True,
|
|
358
378
|
),
|
|
359
379
|
RobotProfile(
|
|
360
380
|
key="fanuc_crx",
|