zerodds-grpc-bridge v1.0 — Spec-Coverage
Quelle: docs/specs/zerodds-grpc-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-grpc-bridged CLI
Spec: §2 — Optionen --config/--bind/--domain/--tls-*/
--reflection/--topic/--log-level/--metrics/--version/--help;
Exit-Codes 0/1/2/3/4.
Repo: crates/grpc-bridge/src/bin/zerodds-grpc-bridged.rs.
Tests: crates/grpc-bridge/tests/bridge_e2e.rs::http2_roundtrip_publish_topic,
::http2_unknown_service_yields_status_5.
Status: done
§3 Config-File-Format
§3 YAML-Loader mit ENV-Substitution
Spec: §3 — Top-Level domain/grpc/auth/topics/metrics;
ENV-Substitution.
Repo: crates/grpc-bridge/src/bin/zerodds-grpc-bridged.rs (Config-
Parser), crates/grpc-bridge/src/server.rs.
Tests: Inline #[cfg(test)] mod tests in server.rs;
crates/grpc-bridge/tests/bridge_e2e.rs (Daemon-Spawn mit Config).
Status: done
§4 gRPC-Wire-Protocol
§4.1 HTTP/2-Setup mit ALPN h2
Spec: §4.1 — HTTP/2-Server, ALPN h2, Cleartext-h2c nur Dev-Mode
(bind=127.0.0.1); SETTINGS-Frame, GOAWAY bei Shutdown.
Repo: crates/grpc-bridge/src/server.rs,
crates/grpc-bridge/src/frame.rs.
Tests: crates/grpc-bridge/tests/bridge_e2e.rs::http2_roundtrip_publish_topic.
Status: done
§4.2 Service-Definition Auto-Generation pro Topic
Spec: §4.2 — <TopicSlug>Stream Service mit Publish/Subscribe/
PublishOne/Catalog-RPCs; Sample/PublishAck/SubscribeReq/
CatalogReq/CatalogResp/TopicEntry-Messages.
Repo: crates/grpc-bridge/src/path.rs (Slug→Service-Name),
crates/grpc-bridge/src/service_gen.rs (Cluster-C
FileDescriptor-Auto-Generator),
crates/grpc-bridge/src/server.rs.
Tests: Inline #[cfg(test)] mod tests in path.rs und
service_gen.rs; crates/grpc-bridge/tests/bridge_e2e.rs
(FileDescriptor-Roundtrip via Cluster-C).
Status: done
§4.3 RPC-Flows Publish/Subscribe
Spec: §4.3 — HEADERS/DATA/HEADERS-END_STREAM-Flow mit :method=POST,
:path=/<pkg>.<svc>/<method>, content-type/grpc-encoding/grpc-timeout/
authorization; Streaming pro Sample.
Repo: crates/grpc-bridge/src/server.rs,
crates/grpc-bridge/src/metadata.rs,
crates/grpc-bridge/src/timeout.rs.
Tests: crates/grpc-bridge/tests/bridge_e2e.rs::http2_roundtrip_publish_topic.
Status: done
§4.4 Length-Prefix-Wrapper
Spec: §4.4 — 5-Byte-Header (Compr 1B + Length 4B BE) + Protobuf-
Sample-Payload; Compr 0=identity / 1=compressed (gzip/deflate via
grpc-encoding).
Repo: crates/grpc-bridge/src/frame.rs.
Tests: Inline #[cfg(test)] mod tests in frame.rs;
bridge_e2e.rs::http2_roundtrip_publish_topic.
Status: done
§4.5 Status-Mapping OK/INVALID_ARGUMENT/PERMISSION_DENIED/…
Spec: §4.5 — gRPC-Status-Codes 0/3/4/7/8/13/14/16 → DDS-Bedingungen.
Repo: crates/grpc-bridge/src/status.rs.
Tests: Inline #[cfg(test)] mod tests in status.rs;
bridge_e2e.rs::http2_unknown_service_yields_status_5.
Status: done
§4.6 Reflection-Service grpc.reflection.v1alpha
Spec: §4.6 — Standard-Reflection-Service mit auto-generierten Topic-Services + Sample-Message-Types.
Repo: crates/grpc-bridge/src/server.rs (Reflection-Hook),
crates/grpc-bridge/src/reflection.rs (Cluster-C Reflection-RPC
voll wired).
Tests: Inline #[cfg(test)] mod tests in reflection.rs;
crates/grpc-bridge/tests/bridge_e2e.rs (grpcurl-via-Reflection-Test
via Cluster-C).
Status: done
§5 Topic-Mapping
§5.1 Service-Namen-Default Topic→ChatMessageStream
Spec: §5.1 — ::-Split + CamelCase + Suffix Stream; Package
zerodds.<segment>.v1.
Repo: crates/grpc-bridge/src/path.rs.
Tests: Inline #[cfg(test)] mod tests in path.rs.
Status: done
§5.2 Type-Discovery Reflection + Catalog + IDL-Endpoint
Spec: §5.2 — drei Pfade (Reflection-Service, Catalog-RPC, HTTP-GET-Sidekick).
Repo: crates/grpc-bridge/src/server.rs,
crates/grpc-bridge/src/reflection.rs,
crates/grpc-bridge/src/service_gen.rs (Cluster-C Type-Discovery via
Reflection + Catalog-RPC + HTTP-GET-Sidekick).
Tests: crates/grpc-bridge/tests/bridge_e2e.rs (Type-Discovery
Roundtrip via Cluster-C).
Status: done
§6 QoS-Translation
§6 DDS-QoS → gRPC-Behavior Map
Spec: §6 — Reliability/Durability/History/Lifespan/Deadline/
Liveliness/Partition Map; partition_filter als Subscribe-Field.
Repo: crates/grpc-bridge/src/server.rs,
crates/grpc-bridge/src/timeout.rs,
crates/grpc-bridge/src/metadata.rs,
crates/grpc-bridge/src/qos_translation.rs (Cluster-A QoS-Map
Reliability/Durability/History/Lifespan/Deadline/Liveliness/Partition).
Tests: crates/grpc-bridge/tests/bridge_e2e.rs::http2_roundtrip_publish_topic
(reliable Roundtrip); QoS-Matrix in
crates/grpc-bridge/src/qos_translation.rs::tests.
Status: done
§7 Security
§7.1 TLS h2-ALPN + Cert-Rotation
Spec: §7.1 — TLS 1.2+ (1.3 default), ALPN h2, SIGHUP-Cert-Rotation.
Repo: crates/grpc-bridge/src/server.rs,
crates/grpc-bridge/src/bridge_security.rs,
crates/bridge-security/src/tls.rs.
Tests: crates/grpc-bridge/tests/security_e2e.rs (TLS h2-ALPN +
SIGHUP-Cert-Rotation via Cluster-B-Foundation).
Status: done
§7.2 Auth-Modes none/jwt/mtls
Spec: §7.2 — JWT-Bearer-Authorization-Metadata, mTLS-Cert-DN.
Repo: crates/grpc-bridge/src/metadata.rs,
crates/grpc-bridge/src/server.rs,
crates/grpc-bridge/src/bridge_security.rs,
crates/bridge-security/src/auth.rs.
Tests: crates/grpc-bridge/tests/security_e2e.rs (JWT + mTLS
Roundtrip via Cluster-B).
Status: done
§7.3 Per-Topic-ACL
Spec: §7.3 — acl.publish/acl.subscribe Listen mit Subject-
Resolution.
Repo: crates/grpc-bridge/src/server.rs (ACL-Hook),
crates/grpc-bridge/src/bridge_security.rs,
crates/bridge-security/src/acl.rs.
Tests: crates/grpc-bridge/tests/security_e2e.rs (ACL-
Enforcement gegen Subject-Matrix via Cluster-B).
Status: done
§8 Operations + Observability
§8.1 Strukturiertes JSON-Logging
Spec: §8.1 — JSON-Log + --log-level-Switch.
Repo: crates/grpc-bridge/src/bin/zerodds-grpc-bridged.rs.
Tests: crates/grpc-bridge/tests/bridge_e2e.rs (log-level Args).
Status: done
§8.2 Prometheus-Metrics
Spec: §8.2 — --metrics-CLI + 10 Counter/Gauge-Familien.
Repo: crates/grpc-bridge/src/server.rs,
crates/grpc-bridge/src/daemon_runtime.rs (Counter/Gauge-Familien
Cluster-A-Wireup).
Tests: crates/grpc-bridge/tests/bridge_e2e.rs (/metrics-
Endpoint via Cluster-A-Wireup).
Status: done
§8.3 OTLP-Spans + W3C-Traceparent
Spec: §8.3 — OTEL_EXPORTER_OTLP_ENDPOINT + Trace-Propagation per
Traceparent-Header.
Repo: crates/grpc-bridge/src/metadata.rs (Traceparent-Parsing-
Hook), crates/grpc-bridge/src/daemon_runtime.rs (OTLP-Init via
zerodds-observability-otlp),
crates/grpc-bridge/src/server.rs (Span-Emit pro RPC).
Tests: crates/grpc-bridge/tests/bridge_e2e.rs (Daemon-Spawn mit
OTEL_EXPORTER_OTLP_ENDPOINT).
Status: done
§9 Lifecycle
§9.1 Startup-Sequence
Spec: §9.1 — Config → TLS → DCPS → Reader/Writer + FileDescriptor → HTTP/2-Bind → Signal-Handler.
Repo: crates/grpc-bridge/src/bin/zerodds-grpc-bridged.rs,
crates/grpc-bridge/src/server.rs.
Tests: crates/grpc-bridge/tests/bridge_e2e.rs::http2_roundtrip_publish_topic.
Status: done
§9.2 Shutdown SIGTERM/SIGINT/SIGHUP
Spec: §9.2 — Graceful Drain max 30 s, GOAWAY, RPCs natürlich beenden; SIGHUP TLS+ACL-Reload.
Repo: crates/grpc-bridge/src/server.rs,
crates/grpc-bridge/src/daemon_runtime.rs (SIGTERM/SIGINT/SIGHUP via
Cluster-A-Signal-Handler),
crates/grpc-bridge/src/bin/zerodds-grpc-bridged.rs.
Tests: crates/grpc-bridge/tests/bridge_e2e.rs (Daemon-Stop),
crates/grpc-bridge/tests/security_e2e.rs (SIGHUP-Reload TLS+ACL).
Status: done
§10 Cross-Vendor
§10 RTPS-Peer + grpc-go/java/grpcurl/ghz/Bloom-RPC/tonic
Spec: §10 — Daemon ist normaler RTPS-Peer; gRPC-Seite gegen grpc-go/java/grpcurl/ghz/Bloom-RPC/tonic.
Repo: crates/grpc-bridge/src/server.rs.
Tests: crates/grpc-bridge/tests/cross_vendor.rs (Cluster-C
Cross-Vendor RTPS-Peer; grpc-go/java/grpcurl/ghz/Bloom-RPC/tonic-
Matrix).
Status: done
§11 Packaging
§11 Linux/macOS/Windows/Docker Layout
Spec: §11 — Binary zerodds-grpc-bridged; Configs/Services/Docker;
Manuals.
Repo: packaging/linux/systemd/zerodds-grpc-bridged.service,
packaging/macos/launchd/org.zerodds.grpc-bridged.plist,
packaging/macos/homebrew/zerodds-grpc-bridge.rb,
packaging/windows/services/Install-Services.ps1,
packaging/docker/grpc-bridged/,
packaging/linux/configs/grpc-bridged.yaml.example,
man/man1/zerodds-grpc-bridged.1,
man/man5/zerodds-grpc-bridged.yaml.5.
Tests: —
Status: done
§12 Testing
§12.1 Unit-Tests pro Modul
Spec: §12.1 — config/http2_codec/hpack/grpc_status/reflection/ dds_pump/auth je ≥ 5 Tests.
Repo: crates/grpc-bridge/src/{frame.rs,metadata.rs,path.rs,server.rs,status.rs,timeout.rs} plus crates/http2/, crates/hpack/.
Tests: Inline #[cfg(test)] mod tests pro Modul.
Status: done
§12.2 Integration-Tests bridge_e2e
Spec: §12.2 — Spawn Daemon, grpcurl als Client, byte-genauer Roundtrip + Reflection.
Repo: crates/grpc-bridge/src/bin/zerodds-grpc-bridged.rs.
Tests: crates/grpc-bridge/tests/bridge_e2e.rs::http2_roundtrip_publish_topic,
::http2_unknown_service_yields_status_5.
Status: done
§12.3 Multi-Vendor cross_vendor.rs
Spec: §12.3 — tonic-Client + Cyclone-DDS-Subscriber + ZeroDDS- gRPC-Bridge im Compose.
Repo: crates/grpc-bridge/tests/cross_vendor.rs (Cluster-C
Cross-Vendor-Harness).
Tests: crates/grpc-bridge/tests/cross_vendor.rs (tonic-Client +
Cyclone-DDS-Subscriber).
Status: done
§13 Cross-References
§13 Verwandte Library + Standards + Daemons
Spec: §13 — Library crates/grpc-bridge//crates/http2//
crates/hpack/, gRPC-PROTOCOL.md, RFC 7540/7541, Wire-Format,
Deployment, Sister-Daemons.
Repo: —
Tests: —
Status: n/a (informative)
§14 Versioning
§14 SemVer-Bump-Regeln
Spec: §14 — Patch=Bugfixes, Minor=additive Config/.proto, Major= Wire-Protocol-Change (HTTP/3 + gRPC-over-QUIC).
Repo: —
Tests: —
Status: n/a (informative)
Audit-Status
24 done / 0 partial / 0 open / 3 n/a (informative) / 0 n/a (rejected).
Test-Lauf: cargo test -p zerodds-grpc-bridge — Tests grün, 0 failed.
Offene Punkte und Decision-Records: siehe zerodds-grpc-bridge-1.0.open.md.