Skip to content

feat: package native messages for external applications (2/6) - #4252

Closed
TomCC7 wants to merge 2 commits into
cc/feat/remove-lcm-encodingfrom
feat/cdr-message-packages
Closed

TomCC7 wants to merge 2 commits into
cc/feat/remove-lcm-encodingfrom
feat/cdr-message-packages

Conversation

@TomCC7

@TomCC7 TomCC7 commented Sep 21, 2026 •

Copy link
Copy Markdown
Member

External projects can now build and install native message packages from local ROS2 definitions. The generator emits a reproducible Python wheel/sdist project, exported CMake targets with headers/schemas, and a Cargo source crate. Installed Python providers register through dimos.messages; no central registry edit or ROS installation is needed.

DimOS's existing setuptools and release workflows use the same generator and native build helper. Wheels statically link Fast CDR, sdists retain generator inputs and notices, and the normal release workflow attaches CMake/Cargo artifacts while preserving the existing wheel matrix. This layer does not switch runtime consumers yet.

Human-facing demo

After the stage-1 setup:

uv pip install --python .venv/bin/python setuptools wheel
bash scripts/test_message_packages.sh

The script adds application_note to a local copy of Telemetry, builds a wheel from its sdist, installs it in a clean environment, installs two CMake packages, and builds a Rust consumer from the .crate archive. The terminal shows added-locally return as added-locally/cpp/rust. Python runs with -I and no checkout on its import path. See examples/message-codegen/README.md and EVIDENCE.md; outputs are isolated under ignored build/message-codegen/external-app/, and no background processes remain.

Validation

  • 34 focused tests, including deterministic output, stale-schema removal, definition conflicts, and schema discovery without importing native extensions.
  • Full DimOS wheel and sdist built with existing web assets; sdist content check passed (10.7 MB).
  • Fresh environment with DimOS and external wheels discovers 141 types, resolves external dependencies, and accepts built-in standard values in external native messages.
  • Independently installed CMake packages share standard definitions without duplicate symbols; packaged Cargo consumer builds offline.
  • All preceding relay, conformance, buffer, and fragmented transport demos pass after a full 142-type rebuild.
  • Mypy, Ruff, OpenSpec validation, and all pre-commit checks pass. CI verifies the supported release builds; no release has been published.

— Codex

Superseded by naming-only replacement #4366. Exact commit 5be9f0fb02f3e96a23cbd0f2dbc21fa1eeda84c3, source tree and parent-relative diff are unchanged.

Verified native seven-layer stack #4372: #4247 → #4366 → #4367 → #4368 → #4369 → #4370 → #4371. Stack: #4247

All branches use cc/ and the ordered PR bases preserve the prior commit ancestry. Old branches/history are retained. Replacement PR checks are pending and prior CI retains its exact SHA/run/ref provenance. No merge, force push or release.

@TomCC7
TomCC7 added this pull request to stack #4253 September 21, 2026 17:24
@TomCC7 TomCC7 changed the title feat: package generated messages for external applications feat: package native messages for external applications (2/6) Sep 21, 2026

This branch was successfully deployed

1 active deployment
cachix — 5be9f0fb Deployed Oct 1, 2026 by TomCC7 via cachix-build-macos #11292
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