Repository navigation
TopicForge 0.4.0
The DDS observability release: participant lifecycle tracking, per-topic metrics, and multi-format bag analysis, taking the read-only tool surface from eight to eleven tools.
Highlights
- New participant lifecycle tracking (discovered/lost events) and a composite adapter that serves ROS2 and DDS tools from a single live process.
peek_dds_samplescan now decode arbitrary user-defined DDS topics (not just the builtin discovery topics), reporting a full/partial/raw decode status per sample.- DDS backend auto-detection now probes eight vendor bindings in priority order and falls back to mock when none are present.
- New per-topic metrics tool: observed frequency, sequence-gap count, and latency percentiles. Caveat carried into the tool description: neither the Cyclone nor Fast DDS Python bindings expose sample-receive callbacks, so metrics only accumulate opportunistically, as
peek_dds_samplesis called on that topic. analyze_bagenriched with format detection, recording duration, and embedded-participant info; a new tool peeks decoded samples directly out of a recorded bag file for post-mortem inspection.- A real-bus integration test rig (Docker Compose, per-vendor publisher scripts) was added for maintainer validation; it runs on a manually-triggered CI workflow, not on every push.
Known limitations
- OpenDDS and Dust DDS adapters ship as stubs: neither vendor has a usable PyPI Python binding yet, so their optional install extras (
pip install topicforge[dds-opendds]/[dds-dust]) are expected to fail today; they exist to anchor auto-detection for when upstream ships. - Cyclone's dynamic XTypes decode path is best-effort and falls back to raw bytes on failure; Fast DDS's equivalent path is not yet functional pending upstream binding support.
pip install topicforge==0.4.0Full details: https://github.com/yaniswav/TopicForge/blob/main/CHANGELOG.md#040---2026-05-15