ROS 2 Repository Layout Decision¶
Decision¶
Keep the first-party ROS 2 beta inside this repository under
integrations/ros2/, rather than creating a separate companion repository.
The planned shape is an optional colcon workspace rooted at
integrations/ros2/:
integrations/ros2/
├── README.md
├── src/
│ ├── zeroproofml_ros/
│ └── zeroproofml_msgs/
├── launch/
└── test/
zeroproofml_ros should be the first ament_python package so the existing
Python inference wrappers, bundle validators, and ONNX Runtime helpers can be
reused directly. zeroproofml_msgs remains a ROS-only package inside the same
workspace.
The bootstrap scaffold now lives under
integrations/ros2/src/zeroproofml_ros/ with the standard ament_python
metadata files plus a thin zeroproofml_ros Python package that re-exports
the stable strict-inference and ONNX runtime helpers from the root library.
The companion workspace now also includes
integrations/ros2/src/zeroproofml_msgs/ with
msg/StrictInferenceResult.msg for decoded payloads, merged masks, bundle and
schema metadata, threshold metadata, and optional stable provenance
fields.
Why This Layout¶
- The M2 target is a first-party beta companion integration, not a second product line. Keeping the ROS 2 work in-repo keeps docs, changelog, CI, and benchmark fixtures versioned together with the inference contract it wraps.
- The current deployment surface is already Python-first (
strict_inference, bundle export/validation, and ONNX Runtime loading). An in-repoament_pythonpackage minimizes glue code and avoids an early split across repositories before the first node, launch file, and rosbag test exist. - A separate repository would add release, issue-tracking, and compatibility overhead before the beta package has stabilized. That split can be revisited at the ROS 2 beta/GA gate if the integration grows an independent cadence.
Boundaries¶
- The root Python package stays ROS-free.
pyproject.tomlcontinues to ship only thezeroproof*packages; ROS-specificpackage.xml, launch files, and colcon metadata live only underintegrations/ros2/. - Core library APIs remain under
zeroproof/zeroproofml. The ROS workspace consumes those APIs; it does not become the place where the stable inference contract is defined. - Large replay assets stay out of git unless they are tiny deterministic test fixtures. Rosbags, distro-specific images, and generated workspaces should be treated as test/release artifacts, not source-tree defaults.
Revisit Trigger¶
Reconsider the monorepo layout only if the ROS 2 integration reaches a point where it needs a separate release cadence, separate maintainer set, or distro support matrix that materially exceeds the core library's workflow.