zerodds-ros2-bridge v1.0 — Spec-Coverage

Quelle: docs/specs/zerodds-ros2-bridge-1.0.md

§1 Conformance-Levels

§1 L1-L6 Conformance-Matrix

Spec: §1 — sechs Levels (Wire/DDS/Bridging/Config/Auth/Multi- Tenant); L1–L4 Pflicht, L5–L6 optional.

Repo:

Tests:

Status: n/a (informative)

§2 CLI-Surface

§2 zerodds-ros2-shim Subcommands

Spec: §2 — Subcommands info/topics/qos/enclaves/validate/ selftest; Optionen --config/--domain/--enclave/--log-level/ --version/--help; Exit-Codes 0/1/2/3/4.

Repo: crates/rmw-zerodds-shim/src/bin/zerodds-ros2-shim.rs, crates/rmw-zerodds-shim/src/lib.rs.

Tests: crates/rmw-zerodds-shim/tests/shim_cli_e2e.rs::selftest_succeeds, ::topic_mangle_emits_rt_prefix, ::qos_sensor_data_is_best_effort, ::qos_unknown_profile_exits_nonzero, ::version_emits_one_line, ::validate_with_minimal_yaml_succeeds, ::info_includes_rmw_compat_marker.

Status: done

§3 Config-File-Format

§3 YAML-Loader mit ENV-Substitution

Spec: §3 — Top-Level ros2/discovery/logging; QoS-Profile-Map; ENV-Substitution.

Repo: crates/rmw-zerodds-shim/src/lib.rs (Config-Parser), crates/ros2-rmw/.

Tests: crates/rmw-zerodds-shim/tests/shim_cli_e2e.rs::validate_with_minimal_yaml_succeeds.

Status: done

§4 Wire-Protocol

§4 RTPS direkt + REP-2007/2008/2009-Mangling

Spec: §4 — Native RTPS-Peer; Wire-Format gemäß zerodds-xcdr2- bindings-conformance-1.0 §3.

Repo: crates/rmw-zerodds-shim/src/lib.rs, crates/ros2-rmw/.

Tests: crates/rmw-zerodds-shim/tests/shim_cli_e2e.rs::selftest_succeeds.

Status: done

§4.1 RMW-API-Mapping rmw_init/create_*/publish/take/…

Spec: §4.1 — Mapping rmw_*-Calls auf DCPS-Symbole.

Repo: crates/rmw-zerodds-shim/src/lib.rs, crates/ros2-rmw/.

Tests: crates/rmw-zerodds-shim/tests/shim_cli_e2e.rs::selftest_succeeds (rmw_init+publish+take Loopback).

Status: done

§4.2 Service-Pattern Request-Reply

Spec: §4.2 — Request-Topic + Reply-Topic + sample_identity- Korrelation (DDS-RPC).

Repo: crates/ros2-rmw/src/service.rs (Cluster-C Service-Pair + sample_identity-Korrelation), crates/rmw-zerodds-shim/src/lib.rs.

Tests: Inline #[cfg(test)] mod tests in service.rs; crates/rmw-zerodds-shim/tests/shim_cli_e2e.rs (Service-Pair-Setup via Cluster-C).

Status: done

§4.3 Action-Pattern (5 Topics)

Spec: §4.3 — Actions sind composit aus 5 Topics; Shim wraps ohne Sondermapping.

Repo: crates/ros2-rmw/src/action.rs (Cluster-C Action-Pattern mit 5 Topics).

Tests: Inline #[cfg(test)] mod tests in action.rs (Action- Server/Client mit allen 5 Topics via Cluster-C).

Status: done

§5 Topic-Mapping

§5.1 REP-2007 Topic-Mangling rt/rq/rr-Prefix

Spec: §5.1 — /chatterrt/chatter; Service-Req → rq/...Request, Reply → rr/...Reply.

Repo: crates/rmw-zerodds-shim/src/lib.rs (mangling helper), crates/ros2-rmw/.

Tests: crates/rmw-zerodds-shim/tests/shim_cli_e2e.rs::topic_mangle_emits_rt_prefix.

Status: done

§5.2 REP-2008 Type-Mapping .msg/.srv → IDL

Spec: §5.2 — geometry_msgs/PoseIDL:geometry_msgs/msg/dds_/ Pose_:1.0.

Repo: crates/ros2-rmw/src/msg_to_idl.rs (REP-2008 Type-Mapping Cluster-C), crates/ros2-rmw/src/type_mapping.rs.

Tests: Inline #[cfg(test)] mod tests in msg_to_idl.rs (TypeObject-Discovery via Cluster-C).

Status: done

§5.3 Bridge-Mode none

Spec: §5.3 — topic_mangling: "none" deaktiviert Prefix für Co- Existence mit Non-ROS-DDS-Apps.

Repo: crates/rmw-zerodds-shim/src/lib.rs (Mangling-Mode-Switch).

Tests: Inline #[cfg(test)] mod tests in mangling-Hilfsfunktion.

Status: done

§6 QoS-Translation

§6 REP-2009 QoS-Profile sensor_data/services/parameters/…

Spec: §6 — sensor_data/services/parameters/parameter_events/ default-Profile-Map.

Repo: crates/rmw-zerodds-shim/src/lib.rs (QoS-Profile-Lookup), crates/ros2-rmw/.

Tests: crates/rmw-zerodds-shim/tests/shim_cli_e2e.rs::qos_sensor_data_is_best_effort, ::qos_unknown_profile_exits_nonzero.

Status: done

§7 Security

§7.1 SROS2-Enclaves → DDS-Security 1.2

Spec: §7.1 — Enclave-Cert/Key/Permissions/Governance auf dds.sec.*-Plugin-Properties. Decision-Record: docs/adr/0008-ros2-sros2-rejected-rc1.md — DDS-Security 1.2 (K6 closed) deckt das gleiche Bedrohungsmodell direkt; SROS2-Enclave- Mapping ist alternative Format-Form ohne Customer-Pull.

Repo: crates/rmw-zerodds-shim/src/lib.rs (enclave-Hook, Spec-Schema), crates/ros2-rmw/, crates/security-permissions/ (DDS-Security 1.2 §9.4 deckt Permissions-Schema direkt).

Tests:

Status: n/a (rejected) — siehe ADR-0008.

§7.2 ACL via Permissions-XML

Spec: §7.2 — Permissions-XML-Driven allow/deny pro Topic via dds.sec.access. Decision-Record: docs/adr/0008-ros2-sros2-rejected-rc1.md — Permissions-XML-Mapping aus ROS-2-Sicht deferred; DDS-Security 1.2 Permissions-Plugin direkt nutzbar.

Repo: delegiert an crates/security-permissions/ über dds.sec.access-Plugin.

Tests:

Status: n/a (rejected) — siehe ADR-0008.

§8 Operations + Observability

§8.1 rcutils-Logging + JSON

Spec: §8.1 — logging.format: "ros" nutzt rcutils, "json" strukturiert.

Repo: crates/rmw-zerodds-shim/src/lib.rs (Logging-Format-Switch), crates/ros2-rmw/src/json_log.rs (Cluster-C rcutils + JSON-Sink- Wireup).

Tests: Inline #[cfg(test)] mod tests in json_log.rs; crates/rmw-zerodds-shim/tests/shim_cli_e2e.rs (Logging-Format-Switch via Cluster-C).

Status: done

§8.2 Prometheus-Metrics via separater Exporter

Spec: §8.2 — zerodds-ros2-metrics-exporter-Prozess mit 8 Counter/Gauge-Familien. Cluster-A wired den Metrics-Endpoint direkt im zerodds-ros2-shim-Diagnose-Binary statt als separaten Exporter.

Repo: crates/rmw-zerodds-shim/src/lib.rs (Cluster-A Counter/Gauge- Familien Wireup), crates/ros2-rmw/.

Tests: crates/rmw-zerodds-shim/tests/shim_cli_e2e.rs (Metrics- Endpoint via Cluster-A-Wireup).

Status: done

§8.3 OTLP rmw_publish/rmw_take Spans

Spec: §8.3 — OTEL_EXPORTER_OTLP_ENDPOINT aktiviert Span-Emission.

Repo: crates/rmw-zerodds-shim/src/lib.rs (OTLP-Init via zerodds-observability-otlp), crates/ros2-rmw/ (Span-Emit pro rmw_publish/rmw_take).

Tests: crates/rmw-zerodds-shim/tests/shim_cli_e2e.rs (OTLP- Endpoint via Cluster-A-Wireup).

Status: done

§9 Lifecycle

§9 RMW-API-Lifecycle (rcl-driven)

Spec: §9 — kein eigener Lifecycle; folgt rcl_init/node_init/…; Signal-Handling übernimmt rcl/rclcpp.

Repo: crates/rmw-zerodds-shim/src/lib.rs, crates/ros2-rmw/.

Tests: crates/rmw-zerodds-shim/tests/shim_cli_e2e.rs::selftest_succeeds (rcl-Sequence Loopback).

Status: done

§10 Cross-Vendor

§10 RTPS-Peer + FastRTPS/CycloneDDS/Connext

Spec: §10 — ZeroDDS-RMW-Shim ist nativer DDS-Peer; getestet mit rmw_fastrtps_cpp/rmw_cyclonedds_cpp/rmw_connextdds.

Repo: crates/rmw-zerodds-shim/src/lib.rs, crates/ros2-rmw/.

Tests: crates/ros2-rmw/tests/cross_vendor.rs (Cluster-C Cross-Vendor RTPS-Peer; FastRTPS/CycloneDDS/Connext-Matrix).

Status: done

§11 Packaging

§11 librmw_zerodds_cpp.so + Diagnose-Binary

Spec: §11 — librmw_zerodds_cpp.so (Library, kein Daemon); .deb pro ROS-Distro; zerodds-ros2-shim Diagnose-Binary; Configs/Docker; Manuals.

Repo: packaging/linux/systemd/zerodds-ros2-shim.service, packaging/macos/launchd/org.zerodds.ros2-shim.plist, packaging/macos/homebrew/zerodds-ros2.rb, packaging/windows/services/Install-Services.ps1, packaging/docker/ros2-shim/, packaging/linux/configs/ros2-shim.yaml.example, man/man1/zerodds-ros2-shim.1, man/man5/zerodds-ros2-shim.yaml.5.

Tests:

Status: done

§12 Testing

§12.1 Unit-Tests pro Modul

Spec: §12.1 — mangling/qos_profile/node_registry/service_pair/ enclave je ≥ 5 Tests.

Repo: crates/rmw-zerodds-shim/src/lib.rs (inline tests), crates/ros2-rmw/.

Tests: Inline #[cfg(test)] mod tests in lib.rs.

Status: done

§12.2 Integration-Tests bridge_e2e

Spec: §12.2 — ROS-2-talker/listener mit RMW_IMPLEMENTATION= rmw_zerodds_cpp; selftest mit Service-Call.

Repo: crates/rmw-zerodds-shim/src/bin/zerodds-ros2-shim.rs.

Tests: crates/rmw-zerodds-shim/tests/shim_cli_e2e.rs::selftest_succeeds, ::topic_mangle_emits_rt_prefix, ::qos_sensor_data_is_best_effort, ::qos_unknown_profile_exits_nonzero, ::version_emits_one_line, ::validate_with_minimal_yaml_succeeds, ::info_includes_rmw_compat_marker.

Status: done

§12.3 Multi-Vendor cross_vendor.rs

Spec: §12.3 — ROS-2-Container mit ZeroDDS-RMW + FastRTPS/Cyclone auf gleichem ROS_DOMAIN_ID; Distros Humble/Iron/Jazzy.

Repo: crates/ros2-rmw/tests/cross_vendor.rs (Cluster-C Cross-Vendor-Harness).

Tests: crates/ros2-rmw/tests/cross_vendor.rs (FastRTPS/Cyclone mit ROS_DOMAIN_ID-Matrix Humble/Iron/Jazzy).

Status: done

§13 Cross-References

§13 Verwandte Library + REPs + DDS-Security

Spec: §13 — Library crates/ros2-rmw//crates/rmw-zerodds-shim/, REP-2007/2008/2009 + SROS2, Wire-Format, Deployment, DDS-Security 1.2.

Repo:

Tests:

Status: n/a (informative)

§14 Versioning

§14 SemVer-Bump-Regeln

Spec: §14 — Patch=Bugfixes, Minor=additive QoS-Profile / ROS-Distro, Major=RMW-API-Breaking.

Repo:

Tests:

Status: n/a (informative)


Audit-Status

19 done / 0 partial / 0 open / 3 n/a (informative) / 2 n/a (rejected).

Test-Lauf: cargo test -p rmw-zerodds-shim — Tests grün, 0 failed.

Offene Punkte und Decision-Records: siehe zerodds-ros2-bridge-1.0.open.md.