Skip to content

fix: record canonical TF and replay default CDR stream names - #4697

Draft
TomCC7 wants to merge 1 commit into
cc/feat/cdr-boundary-cutoverfrom
cc/feat/cdr-recorder-boundary
Draft

TomCC7 wants to merge 1 commit into
cc/feat/cdr-boundary-cutoverfrom
cc/feat/cdr-recorder-boundary

Conversation

@TomCC7

@TomCC7 TomCC7 commented Oct 20, 2026

Copy link
Copy Markdown
Member

The recorder still called legacy to_pose()/.ts APIs on canonical TF service results. It now accepts generated TFMessage, records each complete transform Header through CDR, and adapts the TF result into the existing internal Pose contract. MCAP readers recognize default-factory canonical LCM/Zenoh topics as logical stream names and reject canonical topic/schema or encoding conflicts.

Linear: https://linear.app/dimensional/project/message-encoding-refactor-05a3ddb4af3e/overview

Parent: #4696. This closes specific recorder boundaries; it does not retire legacy Pose/value helpers or claim every robot graph/historical fixture is migrated. No automatic legacy recording fallback.

Category Files Additions Deletions
Recorder and MCAP boundary adapters 2 38 9
Behavior/real capture and replay tests 2 165 2
CI installed-code acceptance 1 1 0

Manual local acceptance from this checkout after installing it and test dependencies:

python -m pytest --noconftest --import-mode=importlib -o addopts='' -q dimos/memory/test_module.py dimos/memory/store/test_cdr_recording.py dimos/memory/store/test_mcap.py

Expected: 19 passed. Tests explicitly constrain LCM to memq and Zenoh to discovery-disabled loopback; no host setup or robot is required. The actual default-factory capture writes SQLite, closes/reopens, exports MCAP with full ros2msg dependency schemas and separate source/log nanoseconds, then replays via its automatically derived logical stream name. TF recording tests preserve zero and one-nanosecond headers and the original internal pose return type. Existing legacy MCAP tests remain.

Validation: 19 source and 19 isolated installed-wheel tests passed; installed production modules preloaded and asserted from site-packages. Strict mypy passed two production files against installed generated stubs; scoped hooks passed except unavailable Nix lint. Main wheel SHA256 902ea1fc1794a5560c0718007333870a8b60c0f6a9956b4e9d5fa6f85a0e812f. No CI polling, benchmarks, hardware, or registry publication. Default-host multicast, human/Foxglove/M20 and final full-graph/dependency-retirement gates remain separate.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant