Robonix Webots CI Report

ALL REPORTS >>

Generated on 2026-07-04T23:29:00+08:00

ResultPASS
Scenarios15/15 passed
Failures0
Score100/100

LLM-Assisted Analysis

All 15 scenarios passed — Soma subsystem integrated and tested

Provider: deepseek · Model: deepseek-chat · Generated On: 2026-07-04T15:28:59+00:00 · Stage: success · Confidence: high

This PR introduces the Soma subsystem (robonix-soma), a raw body YAML and URDF service that also owns primitive and skill package bring-up in two stages. All 15 Webots CI scenarios passed, covering builtin file operations, plan control, camera/lidar snapshots, exploration, mapping, memory, speech, voiceprint, scene object listing, fault recovery, object navigation, and patrol observe. The Soma service registered successfully, spawned 4 primitives (tiago_chassis, tiago_camera, tiago_lidar, audio_driver) in stage 1 and 1 skill (explore) in stage 2, and Pilot fetched Soma context at startup.

PR Changes

Test Result

Suggested Fix

Risks Or Watchouts

Evidence

SourceLineExcerpt
5"failed": 0,
-[ 9.744] [ OK ] soma
-[ 13.800] [ OK ] soma stage 1 4 primitive package(s) handled by soma
-[ 52.241] [ OK ] soma stage 2 trigger written
-robonix-soma ready on 127.0.0.1:50091 (robot loaded, provider_id=soma)
-stage 2 (skill bring-up) complete
-"provider_id": "soma", "state": "ACTIVE"

Run Metadata

Generated On2026-07-04T23:29:00+08:00
Test Report Generated On2026-07-04T23:28:19+08:00
Run Id28710430981
WorkflowRobonix CI Bot
Eventissue_comment
Repositorysyswonder/robonix
Tested Commit69ed23dbcaa2
Tested Commit SubjectMerge 6387422ec0df7e961c0905477d3637d893cc0f73 into a155d6f598c67f71769e208c29824271ea35432c
Tested Commit Authorwheatfox <wheatfox17@icloud.com>
Tested Commit Date2026-07-04T23:12:39+08:00
Pr Number#109
Pr Titlefeat: add soma subsystem
Pr Authorenkerewpo
Pr Urlhttps://github.com/syswonder/robonix/pull/109
Pr Head Refdev-soma
Pr Head Reposyswonder/robonix
Triggered Bylhw2002426
Actorlhw2002426
Triggering Actorlhw2002426
Runner Namerobonix-runner-pku-rtx5090-x64
Runner OsLinux
Runner ArchX64
Origin Urlhttps://github.com/syswonder/robonix
Run Attempt1
Refrefs/heads/dev
Shaa155d6f598c6
Pr Head Sha6387422ec0df7e961c0905477d3637d893cc0f73
Report Id28710430981
Test Refrefs/pull/109/merge

Test Environment

Hostnameuser-NF5468M6
Os Pretty NameUbuntu 22.04.5 LTS
KernelLinux 6.8.0-124-generic x86_64 GNU/Linux
Archx86_64
Cpu ModelIntel(R) Xeon(R) Platinum 8368Q CPU @ 2.60GHz
Cpu Cores152
Mem Total125Gi
Gpu Summary0, NVIDIA GeForce RTX 5090, 32607 MiB, 580.65.06;1, NVIDIA GeForce RTX 5090, 32607 MiB, 580.65.06;2, NVIDIA GeForce RTX 5090, 32607 MiB, 580.65.06;3, NVIDIA GeForce RTX 5090, 32607 MiB, 580.65.06
Nvidia Driver580.65.06
Cuda Version13.0
Docker Version29.2.1
Docker Compose Version5.0.2
Webots Versionwebots package 2025a
Ros Distrohumble
Ros Domain Id171
Sim Containerci-28710430981-sim
Sim Imageci-28710430981-sim
Webots Stream Port23981
Webots Viewer Port24981
Python VersionPython 3.10.12
Rustc Versionrustc 1.95.0 (59807616e 2026-04-14)
Rbnx Versionrbnx 0.1.0

Scenarios

StatusSuiteScenarioRoundsDispatched contractsFailuresLog
PASSbuiltinfault_recovery_builtin3
robonix/system/executor/builtin/read_file
robonix/system/executor/builtin/write_file
-
PASSbuiltinfile_roundtrip1
robonix/system/executor/builtin/list_dir
robonix/system/executor/builtin/read_file
robonix/system/executor/builtin/write_file
-
PASSbuiltinplan_control_builtins1
robonix/system/executor/builtin/get_all_plans
robonix/system/executor/builtin/get_plan_status
robonix/system/executor/builtin/stop_plan_at
-
PASSbuiltinrun_command1
robonix/system/executor/builtin/run_command
-
PASScapcamera_snapshot1
robonix/primitive/camera/snapshot
-
PASScapexplore_smoke2
robonix/skill/explore/explore
robonix/skill/explore/explore/cancel
robonix/skill/explore/explore/status
-
PASScaplidar_snapshot1
robonix/primitive/lidar/snapshot
-
PASScapmapping_save1
robonix/service/map/save_map
-
PASScapmemory_roundtrip1
robonix/service/memory/save
robonix/service/memory/search
-
PASScapscene_object_fixture11
robonix/system/scene/list_objects
-
PASScapspeech_speak1
robonix/service/speech/speak
-
PASScapvoiceprint_list1
robonix/service/voiceprint/list
-
PASSflowfault_recovery4
robonix/service/memory/save
-
PASSflowobject_navigation4
robonix/service/navigation/navigate
robonix/skill/explore/explore
robonix/system/scene/goal_near
robonix/system/scene/list_objects
-
PASSflowpatrol_observe3
robonix/primitive/camera/snapshot
robonix/primitive/lidar/snapshot
robonix/service/memory/save
robonix/service/memory/search
-

RTDL Plan Trees

Each scenario step is one VLM planning round. The tree below is the RTDL returned for that round; every do leaf has its own expected runtime contract and output checks.

PASSbuiltin/fault_recovery_builtin3 step(s), 3 leaf call(s)
step 0faulty read1 leaf
sequence faulty_read_step
do executor.builtin_read_file missing_read args {"path": "ci_never_created.txt"} expect robonix/system/executor/builtin/read_file failure
Observed plan round 0
FAIL1:0robonix/system/executor/builtin/read_fileargs {"path": "ci_never_created.txt"}No such file or directory (os error 2)
step 1recover by writing fallback1 leaf
sequence write_recovery_step
do executor.builtin_write_file write_recovery args {"content": "recovered charlie-3","path": "ci_recovered.txt"} expect robonix/system/executor/builtin/write_file success
Observed plan round 1
PASS2:0robonix/system/executor/builtin/write_fileargs {"content": "recovered charlie-3","path": "ci_recovered.txt"}wrote 19 bytes to /home/hanyulong/actions-runner/_work/robonix/robonix/examples/webots/ci_recovered.txt
step 2read fallback1 leaf
sequence read_recovery_step
do executor.builtin_read_file read_recovery args {"path": "ci_recovered.txt"} expect robonix/system/executor/builtin/read_file success
Observed plan round 2
PASS3:0robonix/system/executor/builtin/read_fileargs {"path": "ci_recovered.txt"}recovered charlie-3
PASSbuiltin/file_roundtrip1 step(s), 3 leaf call(s)
step 0write, read, and list probe file3 leafs
sequence file_roundtrip_tree
do executor.builtin_write_file write_probe args {"content": "robonix ci probe alpha-7","path": "ci_probe.txt"} expect robonix/system/executor/builtin/write_file success
do executor.builtin_read_file read_probe args {"path": "ci_probe.txt"} expect robonix/system/executor/builtin/read_file success
do executor.builtin_list_dir list_probe args {"path": "."} expect robonix/system/executor/builtin/list_dir success
Observed plan round 0
PASS1:0robonix/system/executor/builtin/write_fileargs {"content": "robonix ci probe alpha-7","path": "ci_probe.txt"}wrote 24 bytes to /home/hanyulong/actions-runner/_work/robonix/robonix/examples/webots/ci_probe.txt
PASS1:1robonix/system/executor/builtin/read_fileargs {"path": "ci_probe.txt"}robonix ci probe alpha-7
PASS1:2robonix/system/executor/builtin/list_dirargs {"path": "."}dir logs dir primitives dir rbnx-boot dir services dir sim file .gitignore file README.md file ci_probe.txt file ci_recovered.txt file robonix_manifest.ci.generated.yaml file robonix_manifest.yaml file soma.yaml file start_rviz.sh
PASSbuiltin/plan_control_builtins1 step(s), 4 leaf call(s)
step 0inspect and stop current plan4 leafs
sequence inspect_and_stop_plan
do executor.builtin_get_all_plans list_active_plans args {} expect robonix/system/executor/builtin/get_all_plans success
do executor.builtin_get_plan_status inspect_current_plan args {"plan_id": "1"} expect robonix/system/executor/builtin/get_plan_status success
do executor.builtin_stop_plan_at stop_current_plan_on_complete args {"op_id": "1","plan_id": "1","when": "on_complete"} expect robonix/system/executor/builtin/stop_plan_at success
do executor.builtin_get_all_plans list_armed_stop_point args {} expect robonix/system/executor/builtin/get_all_plans success
Observed plan round 0
PASS1:0robonix/system/executor/builtin/get_all_plansargs {}{"count":1,"plans":[{"cancelled":false,"description":"inspect_and_stop_plan","op_count":5,"plan_id":"1","stop_points":0}]}
PASS1:1robonix/system/executor/builtin/get_plan_statusargs {"plan_id": "1"}{"cancelled":false,"ops":[{"description":"inspect_and_stop_plan","kind":"sequence","op_id":"16","state":"pending","stop_point":null},{"description":"list_active_plans","kind":"do","op_id":"17","state":"succeeded","stop_point":null},{"descr…
PASS1:2robonix/system/executor/builtin/stop_plan_atargs {"op_id": "1","plan_id": "1","when": "on_complete"}Stop point set: RTDL plan '1' will be cancelled on_complete op_id=1.
PASS1:3robonix/system/executor/builtin/get_all_plansargs {}{"count":1,"plans":[{"cancelled":false,"description":"inspect_and_stop_plan","op_count":5,"plan_id":"1","stop_points":1}]}
PASSbuiltin/run_command1 step(s), 1 leaf call(s)
step 0echo marker1 leaf
sequence echo_marker_step
do executor.builtin_run_command echo_marker args {"command": "echo robonix-ci-marker-bravo"} expect robonix/system/executor/builtin/run_command success
Observed plan round 0
PASS1:0robonix/system/executor/builtin/run_commandargs {"command": "echo robonix-ci-marker-bravo"}robonix-ci-marker-bravo
PASScap/camera_snapshot1 step(s), 1 leaf call(s)
step 0camera snapshot1 leaf
sequence camera_snapshot_step
do tiago_camera.camera_snapshot camera_snapshot args {} expect robonix/primitive/camera/snapshot success
Observed plan round 0
PASS1:0robonix/primitive/camera/snapshotargs {}{ "header": { "stamp": { "sec": 1783178702, "nanosec": 912240982 }, "frame_id": "head_front_camera_rgb_optical_frame" }, "height": 480, "width": 640, "encoding": "jpeg", "is_bigendian": 0, "step": 4451…
PASScap/explore_smoke2 step(s), 3 leaf call(s)
step 0start explore1 leaf
sequence start_explore_step
do explore.explore_explore start_explore args {"area_hint": "ci local room","max_speed_m_s": 0.1,"timeout_s": 5.0} expect robonix/skill/explore/explore failure
Observed plan round 0
FAIL1:0robonix/skill/explore/exploreargs {"area_hint": "ci local room","max_speed_m_s": 0.1,"timeout_s": 5.0}hit 5.0s ceiling
step 1poll and cancel explore2 leafs
sequence poll_cancel_explore
do explore.explore_status explore_status args {"run_id": ""} expect robonix/skill/explore/explore/status success
do explore.explore_cancel explore_cancel args {"run_id": ""} expect robonix/skill/explore/explore/cancel success
Observed plan round 1
PASS2:0robonix/skill/explore/explore/statusargs {"run_id": ""}{ "known": true, "state": "TIMEOUT", "area_m2": 0.9900000295042994, "frontiers_left": 1, "elapsed_s": 6.151575803756714, "eta_s": -1.0, "detail": "hit 5.0s ceiling" }
PASS2:1robonix/skill/explore/explore/cancelargs {"run_id": ""}{ "ok": true, "message": "task already in terminal state timeout (no-op)" }
PASScap/lidar_snapshot1 step(s), 1 leaf call(s)
step 0lidar snapshot1 leaf
sequence lidar_snapshot_step
do tiago_lidar.lidar_snapshot lidar_snapshot args {} expect robonix/primitive/lidar/snapshot success
Observed plan round 0
PASS1:0robonix/primitive/lidar/snapshotargs {}{ "header": { "stamp": { "sec": 99, "nanosec": 384702517 }, "frame_id": "hokuyo" }, "angle_min": -1.5700000524520874, "angle_max": 1.5700000524520874, "angle_increment": 0.0047647953033447266, "time_incr…
PASScap/mapping_save1 step(s), 1 leaf call(s)
step 0map save1 leaf
sequence map_save_step
do mapping.map_save_map map_save args {"map_id": "ci_test_map","note": "robonix ci"} expect robonix/service/map/save_map success
Observed plan round 0
PASS1:0robonix/service/map/save_mapargs {"map_id": "ci_test_map","note": "robonix ci"}{ "ok": true, "map_id": "ci_test_map", "database_path": "/mapping/maps/ci_test_map/rtabmap.db", "detail": "saved ci_test_map → /mapping/maps/ci_test_map" }
PASScap/memory_roundtrip1 step(s), 2 leaf call(s)
step 0memory save + search2 leafs
sequence memory_save_search
do memory.memory_save save_fact args {"data": "ci-fact: the test beacon is alpha-7"} expect robonix/service/memory/save success
do memory.memory_search search_fact args {"data": "test beacon"} expect robonix/service/memory/search success
Observed plan round 0
PASS1:0robonix/service/memory/saveargs {"data": "ci-fact: the test beacon is alpha-7"}{ "data": "Memory saved and indexed." }
PASS1:1robonix/service/memory/searchargs {"data": "test beacon"}{ "data": "Relevant memories:\n- ci-fact: the test beacon is alpha-7" }
PASScap/scene_object_fixture1 step(s), 1 leaf call(s)
step 0scene list objects1 leaf
sequence scene_objects_step
do scene.scene_list_objects list_scene_objects args {} expect robonix/system/scene/list_objects success
Observed plan round 0
PASS1:0robonix/system/scene/list_objectsargs {}{ "objects": [ { "id": "scene.object.robot_001", "label": "robot", "x": 4.463625956767943e-10, "y": 9.194438279269238e-15, "z": 0.0, "yaw": 5.150174478663856e-7, "last_seen_unix": 1783178801.…
PASScap/speech_speak1 step(s), 1 leaf call(s)
step 0speak1 leaf
sequence speech_speak_step
do speech.speech_speak speech_speak args {"target": "","text": "robonix continuous integration test"} expect robonix/service/speech/speak success
Observed plan round 0
PASS1:0robonix/service/speech/speakargs {"target": "","text": "robonix continuous integration test"}{ "ok": true, "detail": "spoke 35 chars on audio_driver" }
PASScap/voiceprint_list1 step(s), 1 leaf call(s)
step 0voiceprint list1 leaf
sequence voiceprint_list_step
do voiceprint.voiceprint_list voiceprint_list args {} expect robonix/service/voiceprint/list success
Observed plan round 0
PASS1:0robonix/service/voiceprint/listargs {}{ "users_json": "[]", "count": 0, "error": "db not initialised" }
PASSflow/fault_recovery2 step(s), 2 leaf call(s)
step 0faulty save1 leaf
sequence faulty_save_step
do memory.memory_save faulty_save args {} expect robonix/service/memory/save failure
Observed plan round 0
FAIL1:0robonix/service/memory/saveargs {}mcp tool error: Error executing tool save: 1 validation error for saveArguments data Field required [type=missing, input_value={}, input_type=dict] For further information visit https://errors.pydantic.dev/2.13/v/missing
step 1recover1 leaf
sequence recovery_save_step
do memory.memory_save recovery_save args {"data": "ci-flow recovered fact: beacon bravo-2"} expect robonix/service/memory/save success
Observed plan round 1
PASS2:0robonix/service/memory/saveargs {"data": "ci-flow recovered fact: beacon bravo-2"}{ "data": "Memory saved and indexed." }
PASSflow/object_navigation4 step(s), 4 leaf call(s)
step 0explore before object navigation1 leaf
sequence explore_before_navigation
do explore.explore_explore start_explore args {"area_hint": "ci local room","max_speed_m_s": 0.1,"timeout_s": 8.0} expect robonix/skill/explore/explore failure
Observed plan round 0
FAIL1:0robonix/skill/explore/exploreargs {"area_hint": "ci local room","max_speed_m_s": 0.1,"timeout_s": 8.0}hit 8.0s ceiling
step 1list scene objects during explored state1 leaf
sequence select_scene_object
do scene.scene_list_objects list_scene_objects args {} expect robonix/system/scene/list_objects success
Observed plan round 1
PASS2:0robonix/system/scene/list_objectsargs {}{ "objects": [ { "id": "scene.object.robot_001", "label": "robot", "x": 0.8273032668462136, "y": 0.053604971657900194, "z": 0.0, "yaw": 0.02396221752415347, "last_seen_unix": 1783178880.39059…
step 2resolve detected object approach pose1 leaf
sequence resolve_approach_pose
do scene.scene_goal_near goal_near_object args {"object_id": {"var": "object_id"}} expect robonix/system/scene/goal_near success
Observed plan round 2
PASS3:0robonix/system/scene/goal_nearargs {"object_id": "scene.object.potted_plant_001"}{ "reachable": true, "x": 0.555919865442635, "y": 0.18020189286489655, "yaw": 0.0033819375623515375, "reason": "approach pose for 'potted_plant' (scene.object.potted_plant_001)" }
step 3navigate to object approach pose1 leaf
sequence navigate_to_object
do nav2.navigation_navigate navigate_object_goal args {"goal": {"header": {"frame_id": "map","stamp": {"nanosec": 0,"sec": 0}},"pose": {"orientation": {"w": {"transform": "cos_half","var": "nav_yaw"},"x": 0.0,"y": 0.0,"z": {"transform": "sin_half","var": "nav_yaw"}},"position": {"x": {"var": "nav_x"},"y": {"var": "nav_y"},"z": 0.0}}}} expect robonix/service/navigation/navigate success
Observed plan round 3
PASS4:0robonix/service/navigation/navigateargs {"goal": {"header": {"frame_id": "map","stamp": {"nanosec": 0,"sec": 0}},"pose": {"orientation": {"w": 0.9999985703126312,"x": 0.0,"y": 0.0,"z": 0.001690967975323456},"position": {"x": 0.555919865442635,"y": 0.18020189286489657,"z": 0.0}}}}{ "known": true, "state": "SUCCEEDED", "detail": "succeeded" }
PASSflow/patrol_observe3 step(s), 4 leaf call(s)
step 0parallel sensor capture2 leafs
parallel observe_step
do tiago_camera.camera_snapshot observe_snapshot args {} expect robonix/primitive/camera/snapshot success
do tiago_lidar.lidar_snapshot observe_lidar args {} expect robonix/primitive/lidar/snapshot success
Observed plan round 0
PASS1:0robonix/primitive/camera/snapshotargs {}{ "header": { "stamp": { "sec": 1783178895, "nanosec": 75550317 }, "frame_id": "head_front_camera_rgb_optical_frame" }, "height": 480, "width": 640, "encoding": "jpeg", "is_bigendian": 0, "step": 44519…
PASS1:1robonix/primitive/lidar/snapshotargs {}{ "header": { "stamp": { "sec": 246, "nanosec": 864043504 }, "frame_id": "hokuyo" }, "angle_min": -1.5700000524520874, "angle_max": 1.5700000524520874, "angle_increment": 0.0047647953033447266, "time_inc…
step 1remember1 leaf
sequence remember_step
do memory.memory_save remember_observation args {"data": "ci-flow observation: snapshot captured at waypoint 1"} expect robonix/service/memory/save success
Observed plan round 1
PASS2:0robonix/service/memory/saveargs {"data": "ci-flow observation: snapshot captured at waypoint 1"}{ "data": "Memory saved and indexed." }
step 2recall1 leaf
sequence recall_step
do memory.memory_search recall_observation args {"data": "waypoint 1"} expect robonix/service/memory/search success
Observed plan round 2
PASS3:0robonix/service/memory/searchargs {"data": "waypoint 1"}{ "data": "Relevant memories:\n- ci-fact: the test beacon is alpha-7\n\nci-flow recovered fact: beacon bravo-2\n\nci-flow recovered fact: beacon bravo-2\n\nci-flow recovered fact: beacon bravo-2\n\nci-flow observation: snapshot captured …

Logs

Select a log
-No log selected.

Runtime Contract Coverage

Contracts observed by the scenario runner in executor leaf results. This shows which runtime contract ids were exercised by this run; it is not a full API inventory.

AreaContract id
robonix/primitive/camerarobonix/primitive/camera/snapshot
robonix/primitive/lidarrobonix/primitive/lidar/snapshot
robonix/service/maprobonix/service/map/save_map
robonix/service/memoryrobonix/service/memory/save
robonix/service/memoryrobonix/service/memory/search
robonix/service/navigationrobonix/service/navigation/navigate
robonix/service/speechrobonix/service/speech/speak
robonix/service/voiceprintrobonix/service/voiceprint/list
robonix/skill/explorerobonix/skill/explore/explore
robonix/skill/explorerobonix/skill/explore/explore/cancel
robonix/skill/explorerobonix/skill/explore/explore/status
robonix/system/executorrobonix/system/executor/builtin/get_all_plans
robonix/system/executorrobonix/system/executor/builtin/get_plan_status
robonix/system/executorrobonix/system/executor/builtin/list_dir
robonix/system/executorrobonix/system/executor/builtin/read_file
robonix/system/executorrobonix/system/executor/builtin/run_command
robonix/system/executorrobonix/system/executor/builtin/stop_plan_at
robonix/system/executorrobonix/system/executor/builtin/write_file
robonix/system/scenerobonix/system/scene/goal_near
robonix/system/scenerobonix/system/scene/list_objects