Generated on 2026-07-16T11:33:15+08:00
All 15 Webots integration scenarios passed (15/15, 100%). The PR introduces epoch-safe semantic map persistence keyed by save tokens, replacing the legacy warm-restore approach. Changes span README, annotations, map_binding, map_meta, persistence, builder, service, object_registry, web, and tests. The CI exercised builtin, cap, and flow scenarios including camera/lidar snapshots, exploration, navigation, memory, speech, voiceprint, and scene object listing — all green.
| Source | Line | Excerpt |
|---|---|---|
| 5 | "failed": 0, | |
| 85 | RESULT: PASS — 15/15 | |
| 1 | map_id=ci_scene_map_29468797291 | |
| 2 | save_response {"annotations": 0, "detail": "saved spatial map ci_scene_map_29468797291; rtabmap backup completed; source=rtabmap backup artifact; sqlite_backup=sqlite backup ok; published optimized global map", "map_id": "ci_scene_map_29468797291", "objects": 9, "ok": true, "snapshot_partition": "ci_scene_map_29468797291__s1", ...} | |
| 3 | PASS scene_save_ok saved spatial map ci_scene_map_29468797291; rtabmap backup completed; source=rtabmap backup artifact; sqlite_backup=sqlite backup ok; published optimized global map | |
| 4 | PASS scene_validation_spatial_ok ok | |
| 5 | PASS scene_validation_has_preview validation={'map_id': 'ci_scene_map_29468797291', 'spatial_ok': True, 'artifact_detail': 'ok', 'artifact_size': 657965056, 'has_preview': True, 'updated': 1784172502, 'object_count': 9, 'room_count': 0, 'annotation_count': 0, ...} | |
| 6 | PASS scene_semantic_counts_reported objects=9 rooms=0 | |
| 7 | artifact {"artifact_size": 657965056, "base": "/home/wheatfox/actions-runner-robonix-temp/_work/_temp/robonix-ci-29468797291/mapping-maps/ci_scene_map_29468797291", ...} | |
| 8 | PASS artifact_directory_exists /home/wheatfox/actions-runner-robonix-temp/_work/_temp/robonix-ci-29468797291/mapping-maps/ci_scene_map_29468797291 | |
| 9 | PASS artifact_sqlite_exists ['meta.yaml', 'occupancy.pgm', 'occupancy.png', 'occupancy.yaml', 'rtabmap.db'] | |
| 10 | PASS artifact_quick_check_ok ok | |
| 11 | PASS artifact_size_nontrivial 657965056 | |
| 12 | PASS artifact_nodes_nontrivial {'Node': 679, 'Data': 679, 'Link': 698, 'Word': 33128} | |
| 13 | PASS preview_exists ['meta.yaml', 'occupancy.pgm', 'occupancy.png', 'occupancy.yaml', 'rtabmap.db'] | |
| 14 | load_response {"detail": "loaded immutable map ci_scene_map_29468797291 via runtime copy; published optimized global map; verified target occupancy on /map (173x220, sha256=c3aee2172dc1); elapsed=5.1s", "objects_flushed": 10, "objects_restored": 9, "occupancy": {"count": 96, "height": 220, "stamp_unix": 1784172522.1295483, "width": 173}, "ok": true, "snapshot_partition": "ci_scene_map_29468797291__s1"} | |
| 15 | PASS scene_load_ok loaded immutable map ci_scene_map_29468797291 via runtime copy; published optimized global map; verified target occupancy on /map (173x220, sha256=c3aee2172dc1); elapsed=5.1s | |
| 16 | live_map {"frame_id": "map", "free": 10348, "height": 220, "known": 11588, "occupied": 1240, "origin_x": -5.85891056060791, "origin_y": -5.473966121673584, "resolution": 0.05000000074505806, "unknown": 26472, "width": 173} | |
| 17 | PASS live_map_known_cells {'width': 173, 'height': 220, 'resolution': 0.05000000074505806, 'known': 11588, 'occupied': 1240, 'free': 10348, 'unknown': 26472, 'frame_id': 'map', 'origin_x': -5.85891056060791, 'origin_y': -5.473966121673584} | |
| 18 | PASS preview_matches_meta meta=173x220 preview=173x220 | |
| 19 | PASS loaded_map_dimensions_match_saved_meta meta=173x220 live=173x220 | |
| 20 | PASS loaded_map_origin_matches_saved_meta dx=0.0000 dy=0.0000 meta=(-5.85891056060791, -5.473966121673584) live=(-5.85891056060791,-5.473966121673584) | |
| 21 | delete_response {"detail": "deleted ci_scene_map_29468797291", "map_id": "ci_scene_map_29468797291", "ok": true, "scene_cleanup": {"annotations_deleted": true, "objects_deleted": 9}} | |
| 22 | PASS delete_after_ok {'ok': True, 'map_id': 'ci_scene_map_29468797291', 'detail': 'deleted ci_scene_map_29468797291', 'scene_cleanup': {'annotations_deleted': True, 'objects_deleted': 9}} | |
| 23 | summary: 16/16 checks passed |
| Generated On | 2026-07-16T11:33:15+08:00 |
|---|---|
| Test Report Generated On | 2026-07-16T11:32:19+08:00 |
| Run Id | 29468797291 |
| Workflow | Robonix CI Bot |
| Event | issue_comment |
| Repository | syswonder/robonix |
| Tested Commit | b5174e032060 |
| Tested Commit Subject | Merge remote-tracking branch 'refs/remotes/robonix-pr/150/head' into dev |
| Tested Commit Author | github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> |
| Tested Commit Date | 2026-07-16T11:23:12+08:00 |
| Pr Number | #150 |
| Pr Title | feat(scene): epoch-safe semantic map persistence keyed by save tokens |
| Pr Author | HeartLinked |
| Pr Url | https://github.com/syswonder/robonix/pull/150 |
| Pr Head Ref | feat/scene-epoch-persistence |
| Pr Head Repo | HeartLinked/robonix |
| Triggered By | enkerewpo |
| Actor | enkerewpo |
| Triggering Actor | enkerewpo |
| Runner Name | robonix-runner-workpc-debian13-temp |
| Runner Os | Linux |
| Runner Arch | X64 |
| Origin Url | https://github.com/syswonder/robonix |
| Run Attempt | 1 |
| Ref | refs/heads/dev |
| Sha | b9858a5f1a21 |
| Pr Base Ref | dev |
| Pr Head Sha | 3d5cf54a868f40e8d5bebbbfe47b367e47d6a048 |
| Report Id | 29468797291 |
| Test Ref | refs/heads/dev |
| Hostname | dedsec-amd0 |
|---|---|
| Os Pretty Name | Debian GNU/Linux 13 (trixie) |
| Kernel | Linux 6.12.90+deb13.1-amd64 x86_64 GNU/Linux |
| Arch | x86_64 |
| Cpu Model | AMD Ryzen 5 7600X 6-Core Processor |
| Cpu Cores | 12 |
| Mem Total | 30Gi |
| Gpu Summary | 0, NVIDIA GeForce RTX 2060, 6144 MiB, 580.95.05 |
| Nvidia Driver | 580.95.05 |
| Cuda Version | 13.0 |
| Docker Version | 29.5.3 |
| Docker Compose Version | 5.1.4 |
| Webots Version | webots package 2025a |
| Ros Distro | humble |
| Ros Domain Id | 181 |
| Sim Container | ci-29468797291-sim |
| Sim Image | ci-29468797291-sim |
| Webots Stream Port | 23291 |
| Webots Viewer Port | 24291 |
| Python Version | Python 3.13.5 |
| Rustc Version | rustc 1.95.0 (59807616e 2026-04-14) |
| Rbnx Version | rbnx 0.1.0 |
| Status | Suite | Scenario | Rounds | Dispatched contracts | Failures | Log |
|---|---|---|---|---|---|---|
| PASS | builtin | fault_recovery_builtin | 3 | robonix/system/executor/builtin/read_file robonix/system/executor/builtin/write_file | - | |
| PASS | builtin | file_roundtrip | 1 | robonix/system/executor/builtin/list_dir robonix/system/executor/builtin/read_file robonix/system/executor/builtin/write_file | - | |
| PASS | builtin | plan_control_builtins | 1 | robonix/system/executor/builtin/get_all_plans robonix/system/executor/builtin/get_plan_status robonix/system/executor/builtin/stop_plan_at | - | |
| PASS | builtin | run_command | 1 | robonix/system/executor/builtin/run_command | - | |
| PASS | cap | camera_snapshot | 1 | robonix/primitive/camera/snapshot | - | |
| PASS | cap | explore_smoke | 2 | robonix/skill/explore/explore robonix/skill/explore/explore/cancel robonix/skill/explore/explore/status | - | |
| PASS | cap | lidar_snapshot | 1 | robonix/primitive/lidar/snapshot | - | |
| PASS | cap | mapping_save | 1 | robonix/service/map/save_map | - | |
| PASS | cap | memory_roundtrip | 1 | robonix/service/memory/save robonix/service/memory/search | - | |
| PASS | cap | scene_object_fixture | 1 | robonix/system/scene/list_objects | - | |
| PASS | cap | speech_speak | 1 | robonix/service/speech/speak | - | |
| PASS | cap | voiceprint_list | 1 | robonix/service/voiceprint/list | - | |
| PASS | flow | fault_recovery | 4 | robonix/service/memory/save | - | |
| PASS | flow | object_navigation | 4 | robonix/service/navigation/navigate robonix/skill/explore/explore robonix/system/scene/goal_near robonix/system/scene/list_objects | - | |
| PASS | flow | patrol_observe | 3 | robonix/primitive/camera/snapshot robonix/primitive/lidar/snapshot robonix/service/memory/save robonix/service/memory/search | - |
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.
Build stdout is embedded as sim_logs/build-webots-deployment.log when the build step starts. The deploy supervisor output with the Robonix boot banner is embedded as rbnx-boot.log.
No log selected.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.
| Area | Contract id |
|---|---|
| robonix/primitive/camera | robonix/primitive/camera/snapshot |
| robonix/primitive/lidar | robonix/primitive/lidar/snapshot |
| robonix/service/map | robonix/service/map/save_map |
| robonix/service/memory | robonix/service/memory/save |
| robonix/service/memory | robonix/service/memory/search |
| robonix/service/navigation | robonix/service/navigation/navigate |
| robonix/service/speech | robonix/service/speech/speak |
| robonix/service/voiceprint | robonix/service/voiceprint/list |
| robonix/skill/explore | robonix/skill/explore/explore |
| robonix/skill/explore | robonix/skill/explore/explore/cancel |
| robonix/skill/explore | robonix/skill/explore/explore/status |
| robonix/system/executor | robonix/system/executor/builtin/get_all_plans |
| robonix/system/executor | robonix/system/executor/builtin/get_plan_status |
| robonix/system/executor | robonix/system/executor/builtin/list_dir |
| robonix/system/executor | robonix/system/executor/builtin/read_file |
| robonix/system/executor | robonix/system/executor/builtin/run_command |
| robonix/system/executor | robonix/system/executor/builtin/stop_plan_at |
| robonix/system/executor | robonix/system/executor/builtin/write_file |
| robonix/system/scene | robonix/system/scene/goal_near |
| robonix/system/scene | robonix/system/scene/list_objects |