devagent-physical-engine 1.2.0__tar.gz → 1.3.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.3.0/PKG-INFO +1181 -0
- devagent_physical_engine-1.3.0/README.md +1140 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/pyproject.toml +3 -2
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/__init__.py +15 -1
- devagent_physical_engine-1.3.0/src/devagent_physical_engine/one_command.py +961 -0
- devagent_physical_engine-1.3.0/src/devagent_physical_engine/user_cli.py +107 -0
- devagent_physical_engine-1.3.0/src/devagent_physical_engine.egg-info/PKG-INFO +1181 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine.egg-info/SOURCES.txt +4 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine.egg-info/entry_points.txt +1 -0
- devagent_physical_engine-1.3.0/tests/test_one_command_hardening_v13.py +88 -0
- devagent_physical_engine-1.3.0/tests/test_one_command_v13.py +232 -0
- devagent_physical_engine-1.2.0/PKG-INFO +0 -976
- devagent_physical_engine-1.2.0/README.md +0 -935
- devagent_physical_engine-1.2.0/src/devagent_physical_engine.egg-info/PKG-INFO +0 -976
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/NOTICE +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/setup.cfg +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/__init__.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/compiler.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/contracts.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/coordinator.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/critic.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/evidence.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/interpreter.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/planner.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/recovery.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/routing.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/runtime.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/semantic.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/agent/structured.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ai_cli.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/cli.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/commercial.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/commercial_campaign.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/commercial_cli.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/commercial_importer.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/commercial_readiness.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/commercial_repository.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/continuous_clearance.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/doctor.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/engineering_agent.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/engineering_request.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/evidence_replay.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/evidence_trust.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/execution.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/models.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/operating_envelope.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/__init__.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/candidates.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/contracts.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/evidence.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/experience.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/measured.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/physical_campaign.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/physical_evidence.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/physical_motion.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/planning.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/pose_math.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/preexecution_contract.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/production_authority.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/production_grade.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/project.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/provider_qualification.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/providers.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/qualification.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/qualification_cli.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/qualification_harness.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/reference_workcell.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/robot_platform.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/robots.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/__init__.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/commands.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/doctor.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/qualification.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/setup_profile.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/simulation.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/simulation_platform.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/tool_collision.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/twin.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/twin_builder.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/twin_materialization.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/verification.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_agent_core.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_agent_semantic_hardening.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_ai_cli.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_ai_cli_v07.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_commercial_importer_v1.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_commercial_readiness_v1.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_commercial_v1.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_continuous_clearance_v011.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_core.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_engineering_request_v07.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_evidence_replay_v12.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_evidence_trust_coverage_v12.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_evidence_trust_transport_v12.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_evidence_trust_v12.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_gazebo_cli_v0122.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_interpreter_profiles_v08.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_joint_state_probe_v0125.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_live_provider_qualification.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_measured_motion_v10.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_moveit_scene_v0123.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_natural_language_agent_v07.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_openai_strict_schema_v0113.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_optimization_v05.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_physical_campaign_v09.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_physical_evidence_v09.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_physical_motion_v09.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_planning_fallback_v012.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_pose_math_v0125.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_preexecution_contract_v10.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_production_authority_v11.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_production_grade_coverage_v11.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_production_grade_v11.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_project_spine_v013.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_provider_and_qualification.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_qualification_harness_v06.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_readme_pypi.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_real_provider_adapters.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_reference_workcell_v012.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_robot_platform_v08.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_ros2_production_receipts_v011.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_ros2_simulation.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_ros_trajectory_v09.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_setup_profile.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_sim_real_qualification_v011.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_simulation_platform_v08.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_tool_collision_v011.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_tool_scene_v0124.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_trajectory_action_probe_v0125.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_trajectory_qualification_v09.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_trajectory_tracking_v0125.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_twin_materialization_v10.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_twin_v08.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_v052_stabilization.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_v08_catalog_mapping_regression.py +0 -0
- {devagent_physical_engine-1.2.0 → devagent_physical_engine-1.3.0}/tests/test_workpiece_lifecycle_v011.py +0 -0
|
@@ -0,0 +1,1181 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: devagent-physical-engine
|
|
3
|
+
Version: 1.3.0
|
|
4
|
+
Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
|
|
5
|
+
Author: Tom Ha
|
|
6
|
+
License: All Rights Reserved
|
|
7
|
+
Project-URL: Homepage, https://github.com/tomha85/devagent-physical-engine
|
|
8
|
+
Project-URL: Repository, https://github.com/tomha85/devagent-physical-engine
|
|
9
|
+
Project-URL: Issues, https://github.com/tomha85/devagent-physical-engine/issues
|
|
10
|
+
Keywords: robotics,industrial-automation,agentic-ai,ros2,verification,digital-twin,fat-testing,regression,evidence,replay
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
19
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
20
|
+
Requires-Python: >=3.11
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: NOTICE
|
|
23
|
+
Requires-Dist: PyYAML<7,>=6.0
|
|
24
|
+
Provides-Extra: openai
|
|
25
|
+
Requires-Dist: openai<4,>=3.0; extra == "openai"
|
|
26
|
+
Provides-Extra: anthropic
|
|
27
|
+
Requires-Dist: anthropic<2,>=1.0; extra == "anthropic"
|
|
28
|
+
Provides-Extra: gemini
|
|
29
|
+
Requires-Dist: google-genai<3,>=2.0; extra == "gemini"
|
|
30
|
+
Provides-Extra: ai
|
|
31
|
+
Requires-Dist: openai<4,>=3.0; extra == "ai"
|
|
32
|
+
Requires-Dist: anthropic<2,>=1.0; extra == "ai"
|
|
33
|
+
Requires-Dist: google-genai<3,>=2.0; extra == "ai"
|
|
34
|
+
Provides-Extra: dev
|
|
35
|
+
Requires-Dist: build==1.6.0; extra == "dev"
|
|
36
|
+
Requires-Dist: twine==7.0.0; extra == "dev"
|
|
37
|
+
Requires-Dist: coverage[toml]<8,>=7.6; extra == "dev"
|
|
38
|
+
Requires-Dist: ruff<1,>=0.12; extra == "dev"
|
|
39
|
+
Requires-Dist: pip-audit<3,>=2.9; extra == "dev"
|
|
40
|
+
Dynamic: license-file
|
|
41
|
+
|
|
42
|
+
# DevAgent Smart Physical Engine
|
|
43
|
+
|
|
44
|
+
[](https://pypi.org/project/devagent-physical-engine/)
|
|
45
|
+
[](https://pypi.org/project/devagent-physical-engine/)
|
|
46
|
+
[](#project-status)
|
|
47
|
+
|
|
48
|
+
**Verification-first commissioning engineering for robotics and industrial automation.**
|
|
49
|
+
|
|
50
|
+
DevAgent turns an ordinary customer engineering folder into a bounded, traceable verification workflow:
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
customer files
|
|
54
|
+
↓
|
|
55
|
+
intake + SHA-256 inventory
|
|
56
|
+
↓
|
|
57
|
+
requirements + explicit engineering facts
|
|
58
|
+
↓
|
|
59
|
+
immutable Digital Twin revision
|
|
60
|
+
↓
|
|
61
|
+
deterministic verification plan
|
|
62
|
+
↓
|
|
63
|
+
measured evidence when a qualified execution path exists
|
|
64
|
+
↓
|
|
65
|
+
PASS / FAIL / NOT_TESTED
|
|
66
|
+
↓
|
|
67
|
+
FAT report + Evidence Viewer + replayable lineage
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
> **AI proposes. Deterministic engines validate, compile, verify, measure, and gate promotion. OEM robot controllers, PLCs, safety PLCs, and certified safety systems remain authoritative.**
|
|
71
|
+
|
|
72
|
+
DevAgent is designed to answer a practical commissioning question before engineers travel onsite:
|
|
73
|
+
|
|
74
|
+
> **What can be proven about this cell, what failed, what is still unknown, what changed, and what evidence supports the conclusion?**
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Quick start
|
|
79
|
+
|
|
80
|
+
Python 3.11+ is required.
|
|
81
|
+
|
|
82
|
+
Install:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
python -m pip install --upgrade devagent-physical-engine==1.3.0
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Verify the installed version:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
python -c "import devagent_physical_engine as d; print(d.__version__)"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Expected:
|
|
95
|
+
|
|
96
|
+
```text
|
|
97
|
+
1.3.0
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Run DevAgent on the customer project folder:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
devagent verify ./customer-project
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
That is the normal starting point.
|
|
107
|
+
|
|
108
|
+
You do **not** need to manually initialize a DevAgent project, choose artifact IDs, convert an XLSX sheet to CSV, or understand the internal evidence database before using Simple Mode.
|
|
109
|
+
|
|
110
|
+
If you also want physical simulation when an exact qualified execution path exists:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
devagent verify ./customer-project --simulate
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
If you want DevAgent to open the generated Evidence Viewer:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
devagent verify ./customer-project --simulate --open
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
For machine-readable output:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
devagent verify ./customer-project --json
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Use a dedicated evidence database and results directory when required:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
devagent verify ./customer-project \
|
|
132
|
+
--db ./customer-projects.db \
|
|
133
|
+
--output ./verification-results \
|
|
134
|
+
--json
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Default locations:
|
|
138
|
+
|
|
139
|
+
```text
|
|
140
|
+
Evidence database: ~/.devagent/projects.db
|
|
141
|
+
Results: <customer-project>/devagent-results/
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
# How to use the engine
|
|
147
|
+
|
|
148
|
+
## 1. Give DevAgent the engineering folder you already have
|
|
149
|
+
|
|
150
|
+
A typical project may look like this:
|
|
151
|
+
|
|
152
|
+
```text
|
|
153
|
+
ACME_CNC_CELL_TEST/
|
|
154
|
+
├── project.yaml
|
|
155
|
+
├── requirements.xlsx
|
|
156
|
+
├── ur5e.urdf
|
|
157
|
+
├── tcp.yaml
|
|
158
|
+
├── layout.yaml
|
|
159
|
+
├── robot_program/
|
|
160
|
+
│ └── mission.yaml
|
|
161
|
+
├── drawings.step
|
|
162
|
+
├── safety_requirements.pdf
|
|
163
|
+
└── expected/
|
|
164
|
+
└── expected_findings.json
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
The filenames do not all have to match this example. DevAgent inventories the source tree, fingerprints files with SHA-256, assigns bounded roles, and normalizes supported structured evidence.
|
|
168
|
+
|
|
169
|
+
Important rule:
|
|
170
|
+
|
|
171
|
+
```text
|
|
172
|
+
file discovered != engineering fact proven
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
A URDF, Xacro, STEP, STL, PDF, YAML, or JSON file does not automatically prove pose, TCP, calibration, collision geometry, physics, safety, or production readiness.
|
|
176
|
+
|
|
177
|
+
### What DevAgent does during intake
|
|
178
|
+
|
|
179
|
+
```text
|
|
180
|
+
CUSTOMER FOLDER
|
|
181
|
+
|
|
|
182
|
+
v
|
|
183
|
+
FILE INVENTORY + SHA-256
|
|
184
|
+
|
|
|
185
|
+
v
|
|
186
|
+
ROLE CLASSIFICATION
|
|
187
|
+
|
|
|
188
|
+
+--> expected/ test data -> NEVER engineering authority
|
|
189
|
+
|
|
|
190
|
+
v
|
|
191
|
+
REQUIREMENT NORMALIZATION
|
|
192
|
+
|
|
|
193
|
+
v
|
|
194
|
+
EXPLICIT FACT EXTRACTION
|
|
195
|
+
|
|
|
196
|
+
v
|
|
197
|
+
PROPOSED TWIN NORMALIZATION
|
|
198
|
+
|
|
|
199
|
+
v
|
|
200
|
+
DETERMINISTIC TWIN VALIDATION
|
|
201
|
+
|
|
|
202
|
+
+--> missing or ambiguous facts -> QUESTIONS.md
|
|
203
|
+
|
|
|
204
|
+
v
|
|
205
|
+
VERIFICATION PLAN / CAMPAIGN / FAT
|
|
206
|
+
|
|
|
207
|
+
v
|
|
208
|
+
EVIDENCE VIEWER
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Unknown facts remain unknown. DevAgent does not fill engineering gaps with guesses.
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## 2. First-run example: incomplete customer information
|
|
216
|
+
|
|
217
|
+
Assume the customer provides this `project.yaml`:
|
|
218
|
+
|
|
219
|
+
```yaml
|
|
220
|
+
project_id: acme-cell
|
|
221
|
+
name: ACME Cell
|
|
222
|
+
site_id: atl-01
|
|
223
|
+
workcell_id: cell-01
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
and also provides robot/layout/TCP/requirements files, but does not say exactly what task the robot must perform.
|
|
227
|
+
|
|
228
|
+
Run:
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
devagent verify ./ACME_CNC_CELL_TEST
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
DevAgent creates the project automatically and may return:
|
|
235
|
+
|
|
236
|
+
```text
|
|
237
|
+
State: needs_information
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Typical questions may include:
|
|
241
|
+
|
|
242
|
+
```text
|
|
243
|
+
engineering_request_operation_missing
|
|
244
|
+
engineering_request_object_id_missing
|
|
245
|
+
engineering_request_source_missing
|
|
246
|
+
engineering_request_destination_missing
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
The questions are also written to:
|
|
250
|
+
|
|
251
|
+
```text
|
|
252
|
+
ACME_CNC_CELL_TEST/devagent-results/QUESTIONS.md
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
This is expected fail-closed behavior. DevAgent will not invent the operation, workpiece, source, or destination simply to produce a green report.
|
|
256
|
+
|
|
257
|
+
Typical first-run output:
|
|
258
|
+
|
|
259
|
+
```text
|
|
260
|
+
ACME_CNC_CELL_TEST/
|
|
261
|
+
└── devagent-results/
|
|
262
|
+
├── SUMMARY.json
|
|
263
|
+
├── INTAKE.json
|
|
264
|
+
├── QUESTIONS.md
|
|
265
|
+
└── normalized/
|
|
266
|
+
└── requirements.csv
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Fix the source engineering information, then run the same command again.
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## 3. Complete ACME example
|
|
274
|
+
|
|
275
|
+
The following example uses the same input shape exercised by the v1.3 one-command acceptance tests.
|
|
276
|
+
|
|
277
|
+
### `project.yaml`
|
|
278
|
+
|
|
279
|
+
```yaml
|
|
280
|
+
project_id: acme-cell
|
|
281
|
+
name: ACME Cell
|
|
282
|
+
site_id: atl-01
|
|
283
|
+
workcell_id: cell-01
|
|
284
|
+
|
|
285
|
+
robot_base_pose:
|
|
286
|
+
x: 0
|
|
287
|
+
y: 0
|
|
288
|
+
z: 0
|
|
289
|
+
roll: 0
|
|
290
|
+
pitch: 0
|
|
291
|
+
yaw: 0
|
|
292
|
+
|
|
293
|
+
engineering_request:
|
|
294
|
+
robot: ur5e
|
|
295
|
+
operation: load
|
|
296
|
+
object_id: BOX_101
|
|
297
|
+
source: conveyor_a
|
|
298
|
+
destination: cnc_04
|
|
299
|
+
tool: gripper
|
|
300
|
+
payload_kg: 1.5
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### `tcp.yaml`
|
|
304
|
+
|
|
305
|
+
```yaml
|
|
306
|
+
tcp:
|
|
307
|
+
x: 0
|
|
308
|
+
y: 0
|
|
309
|
+
z: 180
|
|
310
|
+
roll: 0
|
|
311
|
+
pitch: 0
|
|
312
|
+
yaw: 0
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### `layout.yaml`
|
|
316
|
+
|
|
317
|
+
```yaml
|
|
318
|
+
entities:
|
|
319
|
+
- id: conveyor_a
|
|
320
|
+
type: conveyor
|
|
321
|
+
pose:
|
|
322
|
+
x: 700
|
|
323
|
+
y: 0
|
|
324
|
+
z: 850
|
|
325
|
+
geometry:
|
|
326
|
+
kind: box
|
|
327
|
+
dimensions: [2000, 600, 800]
|
|
328
|
+
|
|
329
|
+
- id: cnc_04
|
|
330
|
+
type: machine
|
|
331
|
+
pose:
|
|
332
|
+
x: 1200
|
|
333
|
+
y: 400
|
|
334
|
+
z: 0
|
|
335
|
+
geometry:
|
|
336
|
+
kind: box
|
|
337
|
+
dimensions: [1400, 1200, 1800]
|
|
338
|
+
|
|
339
|
+
- id: BOX_101
|
|
340
|
+
type: workpiece
|
|
341
|
+
pose:
|
|
342
|
+
x: 700
|
|
343
|
+
y: 0
|
|
344
|
+
z: 900
|
|
345
|
+
geometry:
|
|
346
|
+
kind: box
|
|
347
|
+
dimensions: [200, 100, 50]
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### `ur5e.urdf`
|
|
351
|
+
|
|
352
|
+
Use the customer's real robot model. A minimal test fixture can look like:
|
|
353
|
+
|
|
354
|
+
```xml
|
|
355
|
+
<robot name="ur5e"/>
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
Do not treat a placeholder URDF as production geometry evidence.
|
|
359
|
+
|
|
360
|
+
### `requirements.xlsx`
|
|
361
|
+
|
|
362
|
+
A conventional first worksheet can contain columns such as:
|
|
363
|
+
|
|
364
|
+
| requirement_id | text | check | target | expected | severity |
|
|
365
|
+
| --- | --- | --- | ---: | --- | --- |
|
|
366
|
+
| REQ-101 | Cycle time <= 8 s | cycle_time_max_s | 8.0 | true | must |
|
|
367
|
+
| REQ-102 | E-stop accessible | | | true | must |
|
|
368
|
+
|
|
369
|
+
Simple Mode can normalize common requirement ID, text, check, threshold/target, expected-value, and severity/criticality column names without requiring OpenPyXL at runtime.
|
|
370
|
+
|
|
371
|
+
If the spreadsheet columns are ambiguous, DevAgent asks for clarification rather than guessing which column is authoritative.
|
|
372
|
+
|
|
373
|
+
Run:
|
|
374
|
+
|
|
375
|
+
```bash
|
|
376
|
+
devagent verify ./ACME_CNC_CELL_TEST
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
When enough explicit evidence exists to build the Twin and deterministic campaign, the results directory can expand to:
|
|
380
|
+
|
|
381
|
+
```text
|
|
382
|
+
ACME_CNC_CELL_TEST/
|
|
383
|
+
└── devagent-results/
|
|
384
|
+
├── SUMMARY.json
|
|
385
|
+
├── INTAKE.json
|
|
386
|
+
├── QUESTIONS.md
|
|
387
|
+
├── normalized/
|
|
388
|
+
│ ├── requirements.csv
|
|
389
|
+
│ └── devagent-twin.yaml
|
|
390
|
+
├── FAT_REPORT.html
|
|
391
|
+
└── EVIDENCE.html
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
`normalized/devagent-twin.yaml` is generated evidence mapping. It is not an independent source of truth and does not bypass Twin validation.
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## 4. Request simulation
|
|
399
|
+
|
|
400
|
+
Run:
|
|
401
|
+
|
|
402
|
+
```bash
|
|
403
|
+
devagent verify ./ACME_CNC_CELL_TEST --simulate
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
`--simulate` means:
|
|
407
|
+
|
|
408
|
+
```text
|
|
409
|
+
request measured physical simulation if the exact imported-Twin execution path is qualified
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
It does **not** mean:
|
|
413
|
+
|
|
414
|
+
```text
|
|
415
|
+
run any available demo and label it customer evidence
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
The current one-command safety boundary is:
|
|
419
|
+
|
|
420
|
+
```text
|
|
421
|
+
IMPORTED CUSTOMER TWIN
|
|
422
|
+
|
|
|
423
|
+
v
|
|
424
|
+
EXACT QUALIFIED EXECUTION ADAPTER?
|
|
425
|
+
|
|
|
426
|
+
+----+----+
|
|
427
|
+
| |
|
|
428
|
+
YES NO
|
|
429
|
+
| |
|
|
430
|
+
execute simulation_state=blocked
|
|
431
|
+
measure exit 31 when --simulate was requested
|
|
432
|
+
record no fake measurement
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
For example, the repository contains a UR5e reference simulation stack, but:
|
|
436
|
+
|
|
437
|
+
```text
|
|
438
|
+
reference UR5e demo != customer imported Twin evidence
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
If the exact imported-customer execution adapter is not qualified, DevAgent reports a bounded reason such as:
|
|
442
|
+
|
|
443
|
+
```text
|
|
444
|
+
imported_customer_twin_execution_adapter_not_yet_qualified
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
or:
|
|
448
|
+
|
|
449
|
+
```text
|
|
450
|
+
twin_not_ready_for_physics
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
That is intentional. A blocked simulation is more trustworthy than a visually impressive but unrelated demo.
|
|
454
|
+
|
|
455
|
+
---
|
|
456
|
+
|
|
457
|
+
## 5. Open the Evidence Viewer
|
|
458
|
+
|
|
459
|
+
When evidence lineage can be rendered:
|
|
460
|
+
|
|
461
|
+
```bash
|
|
462
|
+
devagent verify ./ACME_CNC_CELL_TEST --open
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
or:
|
|
466
|
+
|
|
467
|
+
```bash
|
|
468
|
+
devagent verify ./ACME_CNC_CELL_TEST --simulate --open
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
The viewer is read-only and is intended to answer:
|
|
472
|
+
|
|
473
|
+
- Which requirement was evaluated?
|
|
474
|
+
- What was the verdict?
|
|
475
|
+
- What value was observed?
|
|
476
|
+
- What threshold or expected value was used?
|
|
477
|
+
- Which Twin revision was evaluated?
|
|
478
|
+
- Which evidence artifact supports the result?
|
|
479
|
+
- Which SHA-256 hashes bind the evidence?
|
|
480
|
+
- What is still blocked or not tested?
|
|
481
|
+
|
|
482
|
+
The trust principle is simple:
|
|
483
|
+
|
|
484
|
+
> **Do not trust a PASS label by itself. Inspect the evidence behind it.**
|
|
485
|
+
|
|
486
|
+
---
|
|
487
|
+
|
|
488
|
+
# Understanding the results
|
|
489
|
+
|
|
490
|
+
## `SUMMARY.json`
|
|
491
|
+
|
|
492
|
+
This is the primary machine-readable result of Simple Mode.
|
|
493
|
+
|
|
494
|
+
Important fields include:
|
|
495
|
+
|
|
496
|
+
```text
|
|
497
|
+
project_id
|
|
498
|
+
state
|
|
499
|
+
twin_revision_id
|
|
500
|
+
twin_state
|
|
501
|
+
requirements_file
|
|
502
|
+
verification_plan_artifact_id
|
|
503
|
+
campaign_artifact_id
|
|
504
|
+
fat_artifact_id
|
|
505
|
+
evidence_bundle_artifact_id
|
|
506
|
+
evidence_viewer
|
|
507
|
+
simulation_requested
|
|
508
|
+
simulation_state
|
|
509
|
+
simulation_reason
|
|
510
|
+
release_ready
|
|
511
|
+
real_execution_allowed
|
|
512
|
+
questions
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
A green software workflow never changes this hard safety boundary by itself:
|
|
516
|
+
|
|
517
|
+
```text
|
|
518
|
+
real_execution_allowed = false
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
## `INTAKE.json`
|
|
522
|
+
|
|
523
|
+
Records the source-file inventory and SHA-256 fingerprints so the customer can see exactly what DevAgent inspected.
|
|
524
|
+
|
|
525
|
+
Each discovered file is associated with a bounded role and authority decision.
|
|
526
|
+
|
|
527
|
+
Examples:
|
|
528
|
+
|
|
529
|
+
```text
|
|
530
|
+
requirements.xlsx -> requirements
|
|
531
|
+
layout.yaml -> engineering_data
|
|
532
|
+
ur5e.urdf -> robot_model
|
|
533
|
+
safety_requirements.pdf -> manual engineering document
|
|
534
|
+
expected/... -> test_oracle, used_for_authority=false
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
## `QUESTIONS.md`
|
|
538
|
+
|
|
539
|
+
Contains missing or ambiguous engineering facts that prevented deterministic promotion.
|
|
540
|
+
|
|
541
|
+
Use it as an engineering punch list, update the original customer files, and rerun:
|
|
542
|
+
|
|
543
|
+
```bash
|
|
544
|
+
devagent verify ./ACME_CNC_CELL_TEST
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
## `FAT_REPORT.html`
|
|
548
|
+
|
|
549
|
+
Customer-readable verification report generated when a campaign can be built.
|
|
550
|
+
|
|
551
|
+
A missing metric or unsupported requirement is not silently changed to PASS. It remains `NOT_TESTED` or otherwise blocks readiness.
|
|
552
|
+
|
|
553
|
+
## `EVIDENCE.html`
|
|
554
|
+
|
|
555
|
+
Read-only evidence view of requirement/Twin/artifact lineage.
|
|
556
|
+
|
|
557
|
+
---
|
|
558
|
+
|
|
559
|
+
# Requirements and verdicts
|
|
560
|
+
|
|
561
|
+
Supported deterministic structural/Twin checks include:
|
|
562
|
+
|
|
563
|
+
```text
|
|
564
|
+
planning_allowed
|
|
565
|
+
physics_allowed
|
|
566
|
+
entity_present
|
|
567
|
+
validation_issue_absent
|
|
568
|
+
twin_state
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
Measured physical checks include:
|
|
572
|
+
|
|
573
|
+
```text
|
|
574
|
+
cycle_time_max_s
|
|
575
|
+
minimum_clearance_m
|
|
576
|
+
final_tcp_error_max_m
|
|
577
|
+
max_tracking_error_rad
|
|
578
|
+
collision_free
|
|
579
|
+
physical_completed
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
The verdict model is intentionally bounded:
|
|
583
|
+
|
|
584
|
+
```text
|
|
585
|
+
PASS
|
|
586
|
+
FAIL
|
|
587
|
+
NOT_TESTED
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
A requirement that needs measured physical evidence cannot PASS from prose, a CAD filename, or a generated verification plan.
|
|
591
|
+
|
|
592
|
+
Example:
|
|
593
|
+
|
|
594
|
+
```text
|
|
595
|
+
Requirement: cycle time <= 8.0 s
|
|
596
|
+
Measurement available: no
|
|
597
|
+
Verdict: NOT_TESTED
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
When exact-Twin measured evidence exists:
|
|
601
|
+
|
|
602
|
+
```text
|
|
603
|
+
Requirement: cycle time <= 8.0 s
|
|
604
|
+
Observed: 7.42 s
|
|
605
|
+
Threshold: 8.0 s
|
|
606
|
+
Verdict: PASS
|
|
607
|
+
Evidence: exact measurement artifact + Twin revision/hash
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
---
|
|
611
|
+
|
|
612
|
+
# XLSX, PDF, and expected-data policies
|
|
613
|
+
|
|
614
|
+
## XLSX requirements
|
|
615
|
+
|
|
616
|
+
Simple Mode supports conventional `requirements.xlsx` first-worksheet normalization.
|
|
617
|
+
|
|
618
|
+
Common semantic columns include:
|
|
619
|
+
|
|
620
|
+
```text
|
|
621
|
+
requirement ID
|
|
622
|
+
requirement text / description
|
|
623
|
+
check / metric
|
|
624
|
+
target / threshold
|
|
625
|
+
expected value
|
|
626
|
+
severity / criticality / priority
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
If multiple requirement sources are present and authority becomes ambiguous, DevAgent fails closed rather than silently merging them.
|
|
630
|
+
|
|
631
|
+
## PDF documents
|
|
632
|
+
|
|
633
|
+
PDFs are inventoried and fingerprinted for review.
|
|
634
|
+
|
|
635
|
+
v1.3 does **not** silently OCR arbitrary safety PDFs and convert extracted prose into deterministic PASS evidence.
|
|
636
|
+
|
|
637
|
+
A safety requirement without a supported deterministic check remains manual/`NOT_TESTED` until appropriate evidence exists.
|
|
638
|
+
|
|
639
|
+
## `expected/` folders
|
|
640
|
+
|
|
641
|
+
A root `expected/` folder is treated as test-fixture oracle data:
|
|
642
|
+
|
|
643
|
+
```text
|
|
644
|
+
expected/
|
|
645
|
+
-> inventoried
|
|
646
|
+
-> SHA-256 recorded
|
|
647
|
+
-> role = test_oracle
|
|
648
|
+
-> used_for_authority = false
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
This prevents a fixture from proving its own expected answer.
|
|
652
|
+
|
|
653
|
+
---
|
|
654
|
+
|
|
655
|
+
# Simple Mode exit codes
|
|
656
|
+
|
|
657
|
+
| Exit | Meaning |
|
|
658
|
+
| ---: | --- |
|
|
659
|
+
| `0` | bounded verification is release-ready |
|
|
660
|
+
| `10` | customer input or operational contract failure |
|
|
661
|
+
| `30` | more engineering information is required |
|
|
662
|
+
| `31` | simulation was requested but the exact execution path is blocked/unqualified |
|
|
663
|
+
| `32` | verification completed but release readiness is still false |
|
|
664
|
+
|
|
665
|
+
Non-zero engineering exits are intentional and machine-friendly.
|
|
666
|
+
|
|
667
|
+
Example CI use:
|
|
668
|
+
|
|
669
|
+
```bash
|
|
670
|
+
devagent verify ./customer-project --json > devagent-result.json
|
|
671
|
+
rc=$?
|
|
672
|
+
|
|
673
|
+
case "$rc" in
|
|
674
|
+
0) echo "bounded verification ready" ;;
|
|
675
|
+
30) echo "customer information required" ;;
|
|
676
|
+
31) echo "simulation path blocked" ;;
|
|
677
|
+
32) echo "verification complete but not release-ready" ;;
|
|
678
|
+
*) echo "input or operational failure" ;;
|
|
679
|
+
esac
|
|
680
|
+
```
|
|
681
|
+
|
|
682
|
+
---
|
|
683
|
+
|
|
684
|
+
# When to use Simple Mode vs Expert Mode
|
|
685
|
+
|
|
686
|
+
Use **Simple Mode** for the normal customer workflow:
|
|
687
|
+
|
|
688
|
+
```bash
|
|
689
|
+
devagent verify ./customer-project
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
Use **Expert Mode** when you need explicit control over:
|
|
693
|
+
|
|
694
|
+
- project identity;
|
|
695
|
+
- immutable Twin revisions;
|
|
696
|
+
- explicit requirement artifacts;
|
|
697
|
+
- measurement binding;
|
|
698
|
+
- campaign artifact IDs;
|
|
699
|
+
- regression baselines;
|
|
700
|
+
- Evidence Bundle generation;
|
|
701
|
+
- replay reconstruction;
|
|
702
|
+
- external CI/orchestration;
|
|
703
|
+
- qualification workflows.
|
|
704
|
+
|
|
705
|
+
Installed CLIs:
|
|
706
|
+
|
|
707
|
+
```text
|
|
708
|
+
devagent one-command customer verification
|
|
709
|
+
devagent-commercial expert commercial/evidence workflow
|
|
710
|
+
devagent-physical deterministic core + ROS/qualification tools
|
|
711
|
+
devagent-physical-ai optional provider-backed engineering front end
|
|
712
|
+
```
|
|
713
|
+
|
|
714
|
+
---
|
|
715
|
+
|
|
716
|
+
# Expert Mode example
|
|
717
|
+
|
|
718
|
+
The default project/evidence database is:
|
|
719
|
+
|
|
720
|
+
```text
|
|
721
|
+
~/.devagent/projects.db
|
|
722
|
+
```
|
|
723
|
+
|
|
724
|
+
## 1. Create project identity
|
|
725
|
+
|
|
726
|
+
```bash
|
|
727
|
+
devagent-commercial init warehouse-cnc-04 \
|
|
728
|
+
--name "Warehouse CNC Loading Cell 04" \
|
|
729
|
+
--site atl-01 \
|
|
730
|
+
--workcell cnc-04
|
|
731
|
+
```
|
|
732
|
+
|
|
733
|
+
## 2. Import explicit customer Twin evidence
|
|
734
|
+
|
|
735
|
+
```bash
|
|
736
|
+
devagent-commercial import-twin warehouse-cnc-04 ./customer-cell \
|
|
737
|
+
| tee twin-import.json
|
|
738
|
+
```
|
|
739
|
+
|
|
740
|
+
List immutable revisions:
|
|
741
|
+
|
|
742
|
+
```bash
|
|
743
|
+
devagent-physical project \
|
|
744
|
+
--db ~/.devagent/projects.db \
|
|
745
|
+
revisions warehouse-cnc-04
|
|
746
|
+
```
|
|
747
|
+
|
|
748
|
+
Twin manifest example:
|
|
749
|
+
|
|
750
|
+
https://github.com/tomha85/devagent-physical-engine/blob/main/examples/commercial/devagent-twin.yaml
|
|
751
|
+
|
|
752
|
+
Do not use template values as customer evidence.
|
|
753
|
+
|
|
754
|
+
## 3. Load requirements
|
|
755
|
+
|
|
756
|
+
```bash
|
|
757
|
+
devagent-commercial requirements warehouse-cnc-04 \
|
|
758
|
+
examples/commercial/requirements-production.csv
|
|
759
|
+
```
|
|
760
|
+
|
|
761
|
+
Example requirements file:
|
|
762
|
+
|
|
763
|
+
https://github.com/tomha85/devagent-physical-engine/blob/main/examples/commercial/requirements-production.csv
|
|
764
|
+
|
|
765
|
+
## 4. Generate verification plan
|
|
766
|
+
|
|
767
|
+
```bash
|
|
768
|
+
devagent-commercial verification-plan warehouse-cnc-04 \
|
|
769
|
+
examples/commercial/verification-plan.yaml \
|
|
770
|
+
--revision twin-r0001
|
|
771
|
+
```
|
|
772
|
+
|
|
773
|
+
Planning creates bounded test intent. It is not execution evidence.
|
|
774
|
+
|
|
775
|
+
## 5. Record measured evidence
|
|
776
|
+
|
|
777
|
+
```bash
|
|
778
|
+
devagent-commercial record-measurement warehouse-cnc-04 \
|
|
779
|
+
physical-measurement.json \
|
|
780
|
+
--revision twin-r0001
|
|
781
|
+
```
|
|
782
|
+
|
|
783
|
+
Example schema:
|
|
784
|
+
|
|
785
|
+
https://github.com/tomha85/devagent-physical-engine/blob/main/examples/commercial/physical-measurement.json
|
|
786
|
+
|
|
787
|
+
Preferred integrations use the typed `PhysicalEvidenceRecorder.record_motion_metrics(...)` path so measurement, canonical motion, planner/source graph, qualification reference, and Twin hash remain bound together.
|
|
788
|
+
|
|
789
|
+
## 6. Run deterministic campaign
|
|
790
|
+
|
|
791
|
+
```bash
|
|
792
|
+
devagent-commercial campaign warehouse-cnc-04 \
|
|
793
|
+
examples/commercial/requirements-production.csv \
|
|
794
|
+
--revision twin-r0001 \
|
|
795
|
+
--measurement ARTIFACT_ID
|
|
796
|
+
```
|
|
797
|
+
|
|
798
|
+
## 7. Generate FAT report
|
|
799
|
+
|
|
800
|
+
```bash
|
|
801
|
+
devagent-commercial fat-report warehouse-cnc-04 \
|
|
802
|
+
CAMPAIGN_ARTIFACT \
|
|
803
|
+
--output FAT_REPORT.html
|
|
804
|
+
```
|
|
805
|
+
|
|
806
|
+
## 8. Build Evidence Bundle
|
|
807
|
+
|
|
808
|
+
```bash
|
|
809
|
+
devagent-commercial evidence-bundle \
|
|
810
|
+
warehouse-cnc-04 \
|
|
811
|
+
CAMPAIGN_ARTIFACT
|
|
812
|
+
```
|
|
813
|
+
|
|
814
|
+
The bundle binds requirement results to exact artifact IDs, artifact hashes, Twin revision, and Twin hash.
|
|
815
|
+
|
|
816
|
+
## 9. Inspect evidence graph
|
|
817
|
+
|
|
818
|
+
```bash
|
|
819
|
+
devagent-commercial evidence-graph warehouse-cnc-04 \
|
|
820
|
+
> evidence-graph.json
|
|
821
|
+
```
|
|
822
|
+
|
|
823
|
+
## 10. Generate static Evidence Viewer
|
|
824
|
+
|
|
825
|
+
```bash
|
|
826
|
+
devagent-commercial evidence-viewer warehouse-cnc-04 \
|
|
827
|
+
--output DEVAGENT_EVIDENCE.html
|
|
828
|
+
```
|
|
829
|
+
|
|
830
|
+
## 11. Replay persisted lineage
|
|
831
|
+
|
|
832
|
+
```bash
|
|
833
|
+
devagent-commercial replay \
|
|
834
|
+
warehouse-cnc-04 \
|
|
835
|
+
EVIDENCE_BUNDLE \
|
|
836
|
+
--qualification-root ~/.devagent/physical-qualification \
|
|
837
|
+
--output replay-manifest.json \
|
|
838
|
+
--record
|
|
839
|
+
```
|
|
840
|
+
|
|
841
|
+
Replay verifies persisted identity before reconstruction:
|
|
842
|
+
|
|
843
|
+
```text
|
|
844
|
+
artifact ID
|
|
845
|
+
artifact type
|
|
846
|
+
artifact SHA-256
|
|
847
|
+
Twin revision/hash
|
|
848
|
+
run_id
|
|
849
|
+
case_id
|
|
850
|
+
case evidence hash
|
|
851
|
+
seed
|
|
852
|
+
reset state
|
|
853
|
+
parameters
|
|
854
|
+
canonical motion fingerprint
|
|
855
|
+
```
|
|
856
|
+
|
|
857
|
+
A successful replay inspection reports:
|
|
858
|
+
|
|
859
|
+
```text
|
|
860
|
+
replayable = true
|
|
861
|
+
execution_performed = false
|
|
862
|
+
```
|
|
863
|
+
|
|
864
|
+
Replay reconstruction does not command Gazebo, MoveIt, a robot, PLC, or safety PLC.
|
|
865
|
+
|
|
866
|
+
## 12. Change impact
|
|
867
|
+
|
|
868
|
+
After importing a new Twin revision:
|
|
869
|
+
|
|
870
|
+
```bash
|
|
871
|
+
devagent-commercial impact warehouse-cnc-04 \
|
|
872
|
+
twin-r0001 twin-r0002 \
|
|
873
|
+
examples/commercial/requirements-production.csv
|
|
874
|
+
```
|
|
875
|
+
|
|
876
|
+
## 13. Regression
|
|
877
|
+
|
|
878
|
+
```bash
|
|
879
|
+
devagent-commercial regression warehouse-cnc-04 \
|
|
880
|
+
BASELINE_CAMPAIGN CURRENT_CAMPAIGN \
|
|
881
|
+
--impact CHANGE_IMPACT_ARTIFACT
|
|
882
|
+
```
|
|
883
|
+
|
|
884
|
+
A previous PASS does not remain authoritative after a changed Twin unless the required evidence chain remains valid for the new revision.
|
|
885
|
+
|
|
886
|
+
## 14. Project status
|
|
887
|
+
|
|
888
|
+
```bash
|
|
889
|
+
devagent-commercial status warehouse-cnc-04
|
|
890
|
+
```
|
|
891
|
+
|
|
892
|
+
Inspect artifacts:
|
|
893
|
+
|
|
894
|
+
```bash
|
|
895
|
+
devagent-commercial artifacts warehouse-cnc-04
|
|
896
|
+
```
|
|
897
|
+
|
|
898
|
+
Useful artifact types include:
|
|
899
|
+
|
|
900
|
+
```text
|
|
901
|
+
customer_twin_import
|
|
902
|
+
one_command_twin_normalization
|
|
903
|
+
requirement_set
|
|
904
|
+
verification_plan
|
|
905
|
+
physical_measurement
|
|
906
|
+
physical_motion_plan
|
|
907
|
+
runtime_measurement_binding
|
|
908
|
+
commercial_campaign
|
|
909
|
+
change_impact
|
|
910
|
+
commercial_regression
|
|
911
|
+
fat_report
|
|
912
|
+
evidence_bundle
|
|
913
|
+
replay_verification
|
|
914
|
+
```
|
|
915
|
+
|
|
916
|
+
---
|
|
917
|
+
|
|
918
|
+
# Physical simulation setup
|
|
919
|
+
|
|
920
|
+
`pip install` does **not** install ROS 2, Gazebo, MoveIt, OEM drivers, or privileged operating-system packages.
|
|
921
|
+
|
|
922
|
+
Reference stack:
|
|
923
|
+
|
|
924
|
+
```text
|
|
925
|
+
Ubuntu 24.04
|
|
926
|
+
ROS 2 Jazzy
|
|
927
|
+
Gazebo Harmonic
|
|
928
|
+
gz_ros2_control
|
|
929
|
+
Universal Robots ROS 2 driver
|
|
930
|
+
ur_simulation_gz
|
|
931
|
+
MoveIt 2
|
|
932
|
+
```
|
|
933
|
+
|
|
934
|
+
Preview setup changes:
|
|
935
|
+
|
|
936
|
+
```bash
|
|
937
|
+
devagent-physical setup --profile ur5e-sim --dry-run
|
|
938
|
+
```
|
|
939
|
+
|
|
940
|
+
Apply explicitly:
|
|
941
|
+
|
|
942
|
+
```bash
|
|
943
|
+
devagent-physical setup --profile ur5e-sim --yes
|
|
944
|
+
```
|
|
945
|
+
|
|
946
|
+
Check runtime readiness:
|
|
947
|
+
|
|
948
|
+
```bash
|
|
949
|
+
devagent-physical ros doctor
|
|
950
|
+
```
|
|
951
|
+
|
|
952
|
+
Qualify trajectory runtime:
|
|
953
|
+
|
|
954
|
+
```bash
|
|
955
|
+
devagent-physical ros qualify-trajectory-runtime
|
|
956
|
+
```
|
|
957
|
+
|
|
958
|
+
Other reference commands:
|
|
959
|
+
|
|
960
|
+
```bash
|
|
961
|
+
devagent-physical ros launch --dry-run
|
|
962
|
+
devagent-physical ros acceptance
|
|
963
|
+
devagent-physical ros demo
|
|
964
|
+
devagent-physical qualify
|
|
965
|
+
```
|
|
966
|
+
|
|
967
|
+
Hosted Python CI cannot prove a graphical Gazebo runtime, MoveIt `move_group`, TF, controller actions, OEM drivers, or an arbitrary imported workcell. Physical qualification must run on the exact workstation/adapter stack.
|
|
968
|
+
|
|
969
|
+
---
|
|
970
|
+
|
|
971
|
+
# Optional AI providers
|
|
972
|
+
|
|
973
|
+
AI is optional and remains outside deterministic authority.
|
|
974
|
+
|
|
975
|
+
Install one provider:
|
|
976
|
+
|
|
977
|
+
```bash
|
|
978
|
+
python -m pip install "devagent-physical-engine[openai]"
|
|
979
|
+
```
|
|
980
|
+
|
|
981
|
+
```bash
|
|
982
|
+
python -m pip install "devagent-physical-engine[anthropic]"
|
|
983
|
+
```
|
|
984
|
+
|
|
985
|
+
```bash
|
|
986
|
+
python -m pip install "devagent-physical-engine[gemini]"
|
|
987
|
+
```
|
|
988
|
+
|
|
989
|
+
Or all provider SDKs:
|
|
990
|
+
|
|
991
|
+
```bash
|
|
992
|
+
python -m pip install "devagent-physical-engine[ai]"
|
|
993
|
+
```
|
|
994
|
+
|
|
995
|
+
Typical credentials:
|
|
996
|
+
|
|
997
|
+
```bash
|
|
998
|
+
export OPENAI_API_KEY="..."
|
|
999
|
+
export ANTHROPIC_API_KEY="..."
|
|
1000
|
+
export GEMINI_API_KEY="..."
|
|
1001
|
+
```
|
|
1002
|
+
|
|
1003
|
+
Check provider setup without using the provider as physical authority:
|
|
1004
|
+
|
|
1005
|
+
```bash
|
|
1006
|
+
devagent-physical-ai doctor --provider openai
|
|
1007
|
+
```
|
|
1008
|
+
|
|
1009
|
+
Example natural-language engineering request:
|
|
1010
|
+
|
|
1011
|
+
```bash
|
|
1012
|
+
devagent-physical-ai engineer \
|
|
1013
|
+
"Use a UR5e to load BOX_101 from conveyor_a to cnc_04. Simulate and verify the plan." \
|
|
1014
|
+
--provider openai \
|
|
1015
|
+
--model YOUR_MODEL
|
|
1016
|
+
```
|
|
1017
|
+
|
|
1018
|
+
The model can help interpret and propose engineering intent. It cannot grant deterministic safety, physical qualification, site qualification, or real-execution authority.
|
|
1019
|
+
|
|
1020
|
+
---
|
|
1021
|
+
|
|
1022
|
+
# Evidence and authority model
|
|
1023
|
+
|
|
1024
|
+
DevAgent deliberately separates four things that are often incorrectly mixed together:
|
|
1025
|
+
|
|
1026
|
+
```text
|
|
1027
|
+
1. requirement
|
|
1028
|
+
2. test intent
|
|
1029
|
+
3. measured evidence
|
|
1030
|
+
4. authority/readiness
|
|
1031
|
+
```
|
|
1032
|
+
|
|
1033
|
+
A verification plan proves only that a test was planned.
|
|
1034
|
+
|
|
1035
|
+
A model-only result proves only the model-level property that was actually evaluated.
|
|
1036
|
+
|
|
1037
|
+
A physical requirement requires physical measurement evidence.
|
|
1038
|
+
|
|
1039
|
+
A replay reconstruction proves persisted evidence lineage can be reconstructed; it is not a new simulation run.
|
|
1040
|
+
|
|
1041
|
+
A simulation PASS does not equal site commissioning.
|
|
1042
|
+
|
|
1043
|
+
A complete customer FAT report does not equal functional-safety certification.
|
|
1044
|
+
|
|
1045
|
+
Current hard boundary:
|
|
1046
|
+
|
|
1047
|
+
```text
|
|
1048
|
+
physical_qualification = false unless separately qualified evidence says otherwise
|
|
1049
|
+
site_qualification = false
|
|
1050
|
+
real_execution_allowed = false
|
|
1051
|
+
```
|
|
1052
|
+
|
|
1053
|
+
This architecture is intentional:
|
|
1054
|
+
|
|
1055
|
+
```text
|
|
1056
|
+
Agents propose.
|
|
1057
|
+
Deterministic engines compile and verify.
|
|
1058
|
+
Existing certified controllers execute.
|
|
1059
|
+
```
|
|
1060
|
+
|
|
1061
|
+
---
|
|
1062
|
+
|
|
1063
|
+
# What DevAgent should be used for
|
|
1064
|
+
|
|
1065
|
+
DevAgent is designed to help engineering teams:
|
|
1066
|
+
|
|
1067
|
+
- reduce FAT preparation and verification effort;
|
|
1068
|
+
- discover missing engineering information before travel;
|
|
1069
|
+
- identify requirement failures before onsite commissioning;
|
|
1070
|
+
- create repeatable deterministic test plans;
|
|
1071
|
+
- bind physical measurements to exact Twin revisions;
|
|
1072
|
+
- detect regression after engineering changes;
|
|
1073
|
+
- preserve evidence provenance;
|
|
1074
|
+
- produce customer-readable FAT evidence;
|
|
1075
|
+
- reduce dependence on manual artifact bookkeeping;
|
|
1076
|
+
- make verification results inspectable rather than opaque.
|
|
1077
|
+
|
|
1078
|
+
It is **not** a replacement for:
|
|
1079
|
+
|
|
1080
|
+
- OEM robot controllers;
|
|
1081
|
+
- PLC logic authority;
|
|
1082
|
+
- safety PLCs;
|
|
1083
|
+
- certified safety functions;
|
|
1084
|
+
- site acceptance responsibility;
|
|
1085
|
+
- functional-safety engineering;
|
|
1086
|
+
- real-world commissioning judgment.
|
|
1087
|
+
|
|
1088
|
+
---
|
|
1089
|
+
|
|
1090
|
+
# Project status
|
|
1091
|
+
|
|
1092
|
+
**v1.3.0 — Production/Stable software workflow**
|
|
1093
|
+
|
|
1094
|
+
The bounded software/evidence workflow is production-oriented and continuously tested across Python 3.11, 3.12, and 3.13.
|
|
1095
|
+
|
|
1096
|
+
The v1.3 release candidate includes:
|
|
1097
|
+
|
|
1098
|
+
```text
|
|
1099
|
+
one-command customer intake
|
|
1100
|
+
XLSX requirement normalization
|
|
1101
|
+
immutable project/Twin lineage
|
|
1102
|
+
deterministic verification campaigns
|
|
1103
|
+
measured evidence binding
|
|
1104
|
+
FAT generation
|
|
1105
|
+
Evidence Bundle
|
|
1106
|
+
Evidence Viewer
|
|
1107
|
+
replay reconstruction
|
|
1108
|
+
change impact
|
|
1109
|
+
regression
|
|
1110
|
+
provider-neutral optional AI front end
|
|
1111
|
+
```
|
|
1112
|
+
|
|
1113
|
+
Software quality gates include dedicated coverage thresholds for:
|
|
1114
|
+
|
|
1115
|
+
```text
|
|
1116
|
+
One-Command customer workflow
|
|
1117
|
+
Production Authority
|
|
1118
|
+
Evidence Trust / Replay
|
|
1119
|
+
```
|
|
1120
|
+
|
|
1121
|
+
Production/Stable describes the bounded software workflow. It does not claim arbitrary customer cells are physically or site qualified.
|
|
1122
|
+
|
|
1123
|
+
---
|
|
1124
|
+
|
|
1125
|
+
# Documentation
|
|
1126
|
+
|
|
1127
|
+
One-command verification:
|
|
1128
|
+
|
|
1129
|
+
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/ONE_COMMAND_VERIFY_V13.md
|
|
1130
|
+
|
|
1131
|
+
Evidence Trust / replay / viewer:
|
|
1132
|
+
|
|
1133
|
+
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/EVIDENCE_TRUST_V12.md
|
|
1134
|
+
|
|
1135
|
+
Measured physical runtime:
|
|
1136
|
+
|
|
1137
|
+
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/MEASURED_PHYSICAL_RUNTIME.md
|
|
1138
|
+
|
|
1139
|
+
Commercial project spine:
|
|
1140
|
+
|
|
1141
|
+
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/COMMERCIAL_PROJECT_SPINE.md
|
|
1142
|
+
|
|
1143
|
+
Commercial workflow:
|
|
1144
|
+
|
|
1145
|
+
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/COMMERCIAL_V1.md
|
|
1146
|
+
|
|
1147
|
+
Natural-language engineering:
|
|
1148
|
+
|
|
1149
|
+
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/NATURAL_LANGUAGE_ENGINEERING.md
|
|
1150
|
+
|
|
1151
|
+
AI providers:
|
|
1152
|
+
|
|
1153
|
+
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/AI_PROVIDERS.md
|
|
1154
|
+
|
|
1155
|
+
Architecture:
|
|
1156
|
+
|
|
1157
|
+
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/ARCHITECTURE.md
|
|
1158
|
+
|
|
1159
|
+
Canonical Twin runtime:
|
|
1160
|
+
|
|
1161
|
+
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/CANONICAL_TWIN_RUNTIME.md
|
|
1162
|
+
|
|
1163
|
+
Laptop acceptance:
|
|
1164
|
+
|
|
1165
|
+
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/LAPTOP_ACCEPTANCE.md
|
|
1166
|
+
|
|
1167
|
+
Optimization:
|
|
1168
|
+
|
|
1169
|
+
https://github.com/tomha85/devagent-physical-engine/blob/main/docs/OPTIMIZATION.md
|
|
1170
|
+
|
|
1171
|
+
---
|
|
1172
|
+
|
|
1173
|
+
# Ownership
|
|
1174
|
+
|
|
1175
|
+
DevAgent Smart Physical Engine
|
|
1176
|
+
Copyright © 2026 Tom Ha
|
|
1177
|
+
Original creator: Tom Ha
|
|
1178
|
+
Original project: https://github.com/tomha85/devagent-physical-engine
|
|
1179
|
+
All rights reserved.
|
|
1180
|
+
|
|
1181
|
+
See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for the complete ownership and usage terms.
|