Docker first-map trial — 2026-07-28
Result
A maintainer-operated fresh-environment trial of the README Docker command completed the tracked MID-360 workflow and produced the versioned product artifacts after two onboarding defects were corrected:
- the demo selected an outer extraction directory instead of the nested
rosbag2 directory that contained
metadata.yaml; - the Docker default bypassed
lidarslam-map, so a usable map lacked the product manifest, verification log and diagnosis artifacts.
The fixes landed in PR #406 and PR #407. The final published-image rerun passed.
This is one maintainer-operated usability trial. It is direct evidence for the Docker first-success path, but it does not count as any of the three independent-user validations required before v1.0.
Trial environment
| Item | Recorded value |
|---|---|
| Host | sasaki-pc, x86_64 |
| Host OS | Ubuntu 24.04.4 LTS |
| Kernel | 6.17.0-35-generic |
| Docker client/server | 29.4.3 / 29.4.3 |
| ROS distribution in image | Humble |
| Publish workflow | develop docker image run 30340468419 |
| Final image revision | 1fe7e20ce4f1cc60b07eb5066d1347e96abe2bf6 |
| Final image digest | sha256:9db1a467c99d69bd3a6d8d7a71e6555874f2a0e1e6f7d062ab2297dd7828c061 |
| Input archive | rosbag2_2024_04_16-14_17_01.zip, 517,088,133 bytes |
| Input MD5 | 0836c50859bb1af591966b69da166186 |
| Source | Koide, Driving SLAM Test with Livox MID360, Zenodo DOI 10.5281/zenodo.14841855, CC-BY 4.0 |
The output directory was empty before each attempt. The first attempt also started without a cached dataset. The final acceptance attempt used the published image by digest and the README command shape:
docker run --rm \
-v "$PWD/lidarslam_output:/lidarslam_ws/output" \
ghcr.io/rsasaki0109/lidar_slam_ros2@sha256:9db1a467c99d69bd3a6d8d7a71e6555874f2a0e1e6f7d062ab2297dd7828c061
The moving :humble tag was resolved to the recorded digest before acceptance.
Failure and correction sequence
Attempt 1 — README command failed after download
The initial image was revision
0ec55575ffc16eb008e9f24bd6c6f24700bf2f8a, digest
sha256:782b5d92794f03fedc272c0ee632bca23a429769d05d3d481fc652a9f35df809.
It downloaded the 517.1 MB archive, verified MD5
0836c50859bb1af591966b69da166186, and extracted the bag. It then exited:
error: demo bag not found under /lidarslam_ws/datasets/mid360_public
The archive contains an outer directory and an inner rosbag2 directory with
the same name. run_docker_demo.sh selected the first matching directory
instead of selecting the directory that actually contained metadata.yaml.
PR #406 changed discovery to use the metadata file and added a regression
fixture with the same nested layout.
Attempt 2 — first map exposed a contract split
With the discovery fix mounted read-only, the same image completed mapping:
- 577 corrected poses and 2,687 raw poses;
- 365 point-cloud tiles;
- 42 Lanelet2 lanelets;
- 127 MB output;
- independent Autoware verification: 8 pass, 0 warn, 0 fail.
The output did not contain run_manifest.json,
autoware_map_diagnosis.json, autoware_map_diagnosis.md, or
verify_autoware_map.log. The Docker entrypoint was calling the lower-level
dogfood runner instead of the official product CLI, contrary to the common
successful-output contract.
PR #407 routes the default through:
lidarslam-map run "$bag" \
--profile rko_lio_graph_mid360_preset \
--output-dir /lidarslam_ws/output/mid360_demo
Attempt 3 — unified candidate passed
The candidate wrapper completed the installed golden path in 83.530 seconds.
It produced a schema-v2 run_manifest.json with status succeeded, lifecycle
stage complete, runner exit code 0, and diagnosis status success.
Verification reported 8 pass, 0 warn and 0 fail. Atomic finalization removed
the .partial sibling.
Final published-image acceptance
| Check | Result |
|---|---|
| OCI revision contains merged PR #407 | PASS — git merge-base --is-ancestor exit 0 |
| Registry attestation verification | PASS — GitHub CLI 2.87.1 gh attestation verify exit 0 |
Installed run --help option groups |
PASS — product usage plus five option groups, with no internal Python entrypoint |
| Demo process exit code | 0 |
| Manifest schema/status | schema 2, status succeeded, profile rko_lio_graph_mid360_preset |
| Lifecycle stage/runner exit | complete / 0, verification enabled |
| Diagnosis | success |
| Autoware verification | PASS — 8 pass, 0 warn, 0 fail |
| Corrected/raw poses | 576 / 2,689 |
| Point-cloud tiles | 363 |
| Lanelets | 42 relations |
| Output size | 127 MB |
.partial sibling absent |
PASS — 0 matching directories |
Selected final artifact identities:
| Artifact | SHA-256 |
|---|---|
run_manifest.json |
0b5f7f01b830d77aabd97a09bb2d26054b3b6b4a2c2ad8a14cd9b1421fc2941b |
autoware_map_diagnosis.json |
696236c2f237458c62aec959b63673c4583c1458ed0c6466595de053c0ba8270 |
verify_autoware_map.log |
f8d9a43f88615dbf2421bf1c42d303457f65e338f4836a267f6958149fbbdee5 |
pointcloud_map/pointcloud_map_metadata.yaml |
d92eeefc4b068c2cf121bb7664851a2fb03b5a100dd43c2e56347dc541355710 |
traj_corrected.tum |
001afc405f18b36c9aefb17983ca985da734fed7b2358e9d2d20c7a678eb0338 |
Findings and follow-up
- The trial image had no periodic progress display during the first 517.1 MB download. The current downloader reports bytes, percentage and transfer rate at time or byte intervals.
- The trial image left bind-mounted files owned by container UID/GID
0:0. The current Docker demo accepts an explicit host UID/GID pair and restores the dedicated output mount, run directory,.partialoutput and lock sidecar on both successful and failed exits. - A moving convenience tag is appropriate for evaluation, but evidence and deployment must continue to record an immutable digest.
- This trial covers one amd64 host and Humble image. It does not replace the Jazzy gate, source-workspace usability trial, arm64 evaluation, or three independent-user first-map reports.
The original findings do not invalidate the generated map. Progress visibility and host-file ownership were closed as onboarding issues; the platform and independent-user coverage gaps remain before v1.0.