Skip to content

Add rmf_dev - #114

Open
Tobias-Fischer wants to merge 47 commits into
mainfrom
ports/rmf-humble
Open

Tobias-Fischer wants to merge 47 commits into
mainfrom
ports/rmf-humble

Conversation

@Tobias-Fischer

@Tobias-Fischer Tobias-Fischer commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator

Ports RoboStack/ros-humble#298 by @Ac31415: adds rmf_dev to the shared selection (next to rmf_demos, which jazzy, lyrical and rolling already build). Building it on top of the syncs turned up fixes for humble (which hasn't built RMF yet), for jazzy (rmf_dev pulls in more of RMF than rmf_demos, and jazzy hadn't been built on GCC 15 / macOS with it), and one for every distribution.

All distributions (shared patch)

  • rmf_fleet_adapter_python: rmf_adapter is built as a Python MODULE instead of SHARED. With SHARED, pybind11 links pybind11::embed (libpython), and on macOS import rmf_adapter aborts (PyInterpreterState_Get: … the GIL is released): the module initialises a second, never-started interpreter. The published osx-arm64 builds have this today (checked rolling 2.12.0, and humble's local build). Upstream main still uses SHARED. A new recipe test (shared/tests/ros2-rmf-fleet-adapter-python.yaml) imports rmf_adapter and builds a Graph; it passes on humble and jazzy (osx-arm64). Applies to humble 2.1.8, jazzy 2.7.2, lyrical 2.13.0 and rolling 2.12.0; lyrical and rolling get a build_number bump for it (31, 33), as the package is published there.
  • nlohmann_json_schema_validator_vendor 0.2.5 (humble, jazzy): CMAKE_POLICY_VERSION_MINIMUM=3.5 for its external project (CMake 4), moved from humble's patch to shared/.
  • pybind11_json_vendor: host and run dependency on conda-forge's pybind11_json, for every distribution (moved from humble's and lyrical's dependencies.yaml).

humble

  • rmf_traffic 3.0.3: Fix build with Apple Clang open-rmf/rmf_traffic#98 (Apple Clang final/ParticipantId errors, as diagnosed by @traversaro in that PR), <cassert> in its bundled fcl, Eigen3::Eigen (Eigen 5 no longer sets EIGEN3_INCLUDE_DIRS).
  • rmf_task 2.1.8: <cstdint> (its headers use uint32_t without it; GCC 15 doesn't include it for them). From rolling's patch.
  • rmf_utils 1.4.1: #include <string> in Modular.hpp; WINDOWS_EXPORT_ALL_SYMBOLS on Windows (from rolling's patch).
  • rmf_websocket: Boost.System is header-only (no boost_system library since Boost 1.89).
  • rmf_traffic_ros2: lyrical's patch (macOS uuid from the SDK, Eigen3::Eigen).
  • rmf_fleet_adapter: malloc.h/malloc_trim only on Linux; RxCpp's copy assignment of a const member removed (newer clang and GCC 15 reject it); std::max<int64_t> and std::size_t lane vectors (uint64_t is unsigned long long on macOS).
  • rmf_robot_sim_common: EIGEN3_INCLUDE_DIRS from Eigen3::Eigen; sdformat parameters read as uint64_t.
  • rmf_robot_sim_gz_plugins: links the Gazebo gui library (GuiSystem); a declared but never defined slot removed.
  • rmf_building_sim_gz_classic_plugins: OpenCV 5's geometry.hpp, ${GAZEBO_LIBRARIES}; it and rmf_robot_sim_gz_classic_plugins (Gazebo Classic, EOL) are excluded off Linux, after more link errors on macOS.
  • rmf_building_map_tools 1.6.3: the old humble patch is obsolete (upstream removed np.asscalar); rolling's numpy 2 fix for the 2-D np.cross instead.
  • robostack.yaml: maps the ignition-fortress rosdep key to the Fortress libraries.

jazzy

  • rmf_traffic 3.3.3: <cstdint> in ParticipantDescription.hpp (GCC 15), and from humble's patch for the same code the macOS fixes (ParticipantId overrides, <cassert> in fcl and blockade/geometry.cpp, std::chrono instead of libstdc++'s std::chrono::_V2 in a test).
  • rmf_task 2.5.1: <cstdint> (GCC 15), from rolling's patch.
  • rmf_fleet_adapter 2.7.2: humble's RxCpp fix (GCC 15) and macOS fixes, plus a size_t cast for a route_id comparison in ExecutePlan.cpp.
  • rmf_websocket 2.7.2: no Boost.System, and asio::io_service (removed in Boost 1.90) → io_context with boost::asio::post/dispatch. conda-forge's websocketpp is already on io_context, so no standalone Asio.
  • rmf_visualization_schedule 2.3.2: links OpenSSL::SSL/OpenSSL::Crypto; ament_target_dependencies(OpenSSL) linked nothing (it looks for OpenSSL_LIBRARIES), which only macOS rejects.
  • rmf_visualization_floorplans 2.3.2 and rmf_robot_sim_common 2.3.3: Eigen3::Eigen (Eigen 5); rmf_robot_sim_common takes humble's patch.
  • rmf_robot_sim_gz_plugins 2.3.3: as humble, for the gz names (gz-sim::gui).
  • rmf_traffic_ros2 2.7.2 and rmf_building_map_tools 1.9.2: rolling's patches (macOS LibUUID; numpy 2 np.cross).

Not taken over from rolling: its rmf_visualization_schedule (standalone Asio, needs an extra dependency; neither distribution's source uses Asio directly and humble built without it), rmf_visualization_floorplans OpenCV change (not needed: humble and jazzy's uint8[] fields are std::vector<uint8_t>), and rmf_utils for jazzy (the jazzy sync already has it as ros2-rmf-utils.win.patch).

Windows (humble, jazzy): rmf_dev builds on win-64 too. lyrical's and rolling's Windows patches were the starting point; humble had none.

  • Exports: rmf_fleet_adapter and rmf_traffic_ros2 (shared patch) get dllexport annotations (detail/export.hpp, also on nested classes such as RobotUpdateHandle::Unstable::Stubbornness); rmf_fleet_adapter can't use export-all (more than 65535 objects for the import library). rmf_traffic, rmf_task, rmf_task_sequence, rmf_task_ros2, rmf_battery, rmf_websocket, rmf_visualization_schedule, rmf_utils, rmf_building_sim_common, rmf_robot_sim_common and the JSON schema validator export all symbols.
  • DLL locations: rmf_utils, rmf_websocket, rmf_traffic_ros2, rmf_task_ros2 and rmf_fleet_adapter installed their DLLs to lib/<pkg> (with the executables) or lib, which aren't on PATH, so import rmf_adapter failed; they now go to bin (rmf_traffic_ros2, shared by two releases, installs a second copy there). rmf_utils is already published, so its build_number is bumped in humble and jazzy.
  • lyrical and rolling (checked in their published win-64 packages) have the same DLL locations: the same install fix there, with build_number bumps (lyrical 31, rolling 33) for rmf_utils, rmf_websocket, rmf_traffic_ros2, rmf_task_ros2, rmf_fleet_adapter and rmf_fleet_adapter_python. rolling's rmf_utils.win.patch repeated its generic patch; rmf_websocket.win.patch is refreshed on top of the generic one.
  • MSVC: _USE_MATH_DEFINES for M_PI in several packages (rmf_task, rmf_battery, rmf_traffic_examples, …) and NOMINMAX in rmf_building_sim_common (Menge includes windows.h); rmf_traffic_editor without GCC warning flags and with NOGDI; rmf_visualization_rviz2_plugins force-includes <iso646.h> (or); rmf_fleet_adapter links yaml-cpp::yaml-cpp and imported targets (task_aggregator, LNK1170); rmf_api_msgs runs its generator without the shell eval and with python.exe; menge_vendor doesn't link dl; nlohmann_json_schema_validator_vendor's external project gets a build command MSBuild understands and a shorter path (MAX_PATH); rmf_traffic_editor_test_maps generates its worlds without downloading models.
  • Not built on Windows: rmf_fleet_adapter's full_control example executable (MSVC 14.44 crashes compiling it, C1001, also unoptimized); rmf_visualization_schedule's tests (LNK1170). humble excludes the Gazebo Classic plugins (rmf_*_sim_gz_classic_plugins, no OgreBites.lib on win-64) and, on win-64, the Ignition Fortress ones (rmf_*_sim_gz_plugins, Fortress isn't installable there); jazzy's gz plugins build.

Patch layout: where the distributions had the same patch, it's in shared/patch/ (rmf_traffic_ros2, rmf_building_map_tools, rmf_robot_sim_common, and rmf_traffic for humble and jazzy, with lyrical and rolling keeping theirs); the rest stay per distribution because their sources differ (rmf_fleet_adapter, rmf_websocket, rmf_robot_sim_gz_plugins, rmf_task, …).

Built locally (on top of the syncs, see below)

  • jazzy, osx-arm64: rmf_dev and its whole closure (321 packages) with recipe tests. In a fresh environment from these packages, import rmf_adapter (with easy_full_control, graph) works and Graph() runs, after the MODULE fix; the new recipe test passes there.
  • jazzy, linux-64: all 42 RMF recipes of the closure, with recipe tests.
  • humble, osx-arm64: rmf_dev and its closure (about 350 packages) with recipe tests; rmf_fleet_adapter_python rebuilt with the MODULE fix: it no longer links libpython, and the new recipe test passes (the build before the fix had the same crash).
  • lyrical, rolling: there's no rmf_dev release for them (rmf_demos only), so the selection only adds it for humble and jazzy. What changes for them are the shared patches: rmf_fleet_adapter_python (MODULE fix) and lyrical's rmf_building_map_tools (now the shared wording of the same numpy 2 fix); rmf_traffic_ros2 is unchanged in content. Not rebuilt locally.

CI: Windows green for humble and jazzy (lyrical and rolling have no rmf_dev release; they rebuild the bumped packages); full build on all platforms running. The syncs it was prepared on are merged.

🤖 Generated with Claude Code

Tobias-Fischer and others added 21 commits October 19, 2026 09:18
Ports RoboStack/ros-humble#298. humble's rmf_traffic 3.0.3 gets the Apple
Clang fix from open-rmf/rmf_traffic#98, <cassert> in its bundled fcl and
Eigen3::Eigen (Eigen 5 no longer sets EIGEN3_INCLUDE_DIRS); rmf_utils
includes <string>; nlohmann_json_schema_validator_vendor passes
CMAKE_POLICY_VERSION_MINIMUM to its external project (CMake 4).

Co-authored-by: Wen-Chung (Andy) Cheng <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Found building rmf_dev's closure for humble on osx-arm64 (humble never
built RMF before):
- rmf_traffic: also the test part of open-rmf/rmf_traffic#98
- rmf_websocket: Boost.System is header-only (no boost_system since 1.89)
- rmf_traffic_ros2: lyrical's patch (macOS uuid comes from the SDK, Eigen3::Eigen)
- rmf_fleet_adapter: malloc.h/malloc_trim only on Linux, RxCpp's const
  copy-assignment removed (newer clang rejects it), std::max<int64_t> and
  std::size_t lane vectors (uint64_t is unsigned long long on macOS)
- rmf_robot_sim_common: EIGEN3_INCLUDE_DIRS from Eigen3::Eigen (Eigen 5),
  sdformat parameters read as uint64_t
- rmf_robot_sim_gz_plugins: link the gazebo gui library, drop a declared
  but never defined slot
- rmf_building_sim_gz_classic_plugins: OpenCV 5 geometry header, link
  libgazebo; excluded off Linux (Gazebo Classic, more link errors on macOS)
- rmf_building_map_tools: its patch is upstream in 1.6.3 (np.asscalar)
- robostack.yaml: map ignition-fortress to the Fortress libraries

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…and jazzy [skip ci]

jazzy's 0.4.1 (needed by rmf_dev there) fails the same way as humble's
0.2.5: its external project declares cmake_minimum_required < 3.5. The same
one-line patch applies to both, so share it; lyrical and rolling keep their
own patch for 0.6.1/0.5.0.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ion [skip ci]

The shared pkg_additional_info.yaml builds pybind11_json_vendor with
AMENT_VENDOR_POLICY=NEVER_VENDOR, but only humble and lyrical added
pybind11_json as a dependency, so jazzy (pulled in by rmf_dev) failed:
"SATISFIED argument is not TRUE, but AMENT_VENDOR_POLICY is set to
NEVER_VENDOR". Move the dependency to the shared dependencies.yaml.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
rmf_dev also brings rmf_traffic 3.3.3 to jazzy, which fails with GCC 15:
ParticipantDescription.hpp uses uint16_t/uint64_t without <cstdint>. Add
that include, plus lyrical's rmf_traffic changes (Eigen3::Eigen for Eigen 5,
<cassert>), which apply unchanged.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
rmf_task (<cstdint>, needed by GCC 15 on linux-64), rmf_building_map_tools
(numpy 2 cross product), rmf_visualization_floorplans (OpenCV imread flag),
rmf_visualization_schedule (standalone asio, Boost 1.90), and for jazzy
rmf_utils (WINDOWS_EXPORT_ALL_SYMBOLS) and rmf_traffic_ros2 (macOS LibUUID).
humble's rmf_utils patch gains the Windows export hunk. All apply cleanly
to the sync snapshot tags.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…en 5 [skip ci]

Eigen 5's CMake config only provides the Eigen3::Eigen target, not the
Eigen3_INCLUDE_DIRS that ament_target_dependencies and these CMakeLists use:
floorplans now links Eigen3::Eigen, and robot_sim_common takes humble's
patch (which also reads the sdformat size_t parameters as uint64_t on macOS).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ls patch [skip ci]

Boost 1.90 has no boost_system library (Boost.System is header-only), so
rmf_websocket's find_package(Boost COMPONENTS system) fails: link
Boost::headers instead.

The rmf_utils Windows export taken from rolling duplicates the jazzy sync's
own ros2-rmf-utils.win.patch, so remove it again.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…hedule patch [skip ci]

Boost 1.90 removed asio::io_service with its post()/dispatch() members.
conda-forge's websocketpp 0.8.2 is already patched to io_context
(get_io_context()), so jazzy's rmf_websocket only needs its own uses
switched: io_context, boost::asio::post/dispatch. No standalone Asio.

rolling's rmf_visualization_schedule patch (ASIO_STANDALONE) isn't needed
here: neither distribution's source uses Asio directly, humble's built
with Boost 1.90 without it, and it would need asio as an extra
dependency.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The OpenCV hunk taken from rolling isn't needed for humble or jazzy: their
uint8[] message fields are std::vector<uint8_t>, which cv::Mat accepts,
and humble built without it. jazzy keeps the Eigen3::Eigen link.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The bundled RxCpp 4.1.0 assigns to a const exception_ptr in
on_error_notification's operator=, which GCC 15 now rejects; humble's
patch removes it. The macOS fixes carry over from humble's patch as well
(malloc_trim is Linux-only; int64_t and uint64_t aren't long and size_t
there), plus a cast for the route_id comparison in ExecutePlan that
jazzy's source has and humble's doesn't.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
From humble's patch, for the same code: Database and Mirror declare
their participant overrides with std::size_t where the base class uses
ParticipantId (uint64_t), which isn't std::size_t on macOS, so clang
rejects them as hiding the virtual functions; and the bundled fcl and
blockade/geometry.cpp use assert without <cassert>, which libc++ doesn't
include for them. The test-only hunk isn't needed: the tests aren't built.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The tests are built after all (the earlier failure stopped before them):
test_Spacetime.cpp names libstdc++'s internal std::chrono::_V2 namespace,
which libc++ doesn't have. As in humble's patch, use std::chrono.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The LightTuning GUI plugin derives from gz::sim::GuiSystem, which lives
in gz-sim's gui library, but only links gz-sim::core; Linux allows the
symbols to stay undefined, macOS doesn't. Request the gui component and
link gz-sim::gui. It also declares OnLightTypeSelect() without ever
defining or using it, which leaves an undefined vtable-free reference
from the moc code on macOS: drop the declaration. Same fixes as humble's
patch, for the gz (not Ignition) names.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
ament_target_dependencies(... OpenSSL ...) looks for OpenSSL_LIBRARIES,
which FindOpenSSL doesn't set (it sets OPENSSL_LIBRARIES), so the library
never linked libssl/libcrypto. Linux lets the symbols stay undefined,
macOS doesn't (_BIO_free_all, ...). Link OpenSSL::SSL and OpenSSL::Crypto,
as humble's version of the package does.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…skip ci]

pybind11_add_module(rmf_adapter SHARED ...) makes pybind11 link
pybind11::embed, i.e. libpython. On macOS, where python itself has the
interpreter built in, `import rmf_adapter` then aborts ("PyInterpreterState_Get:
the function must be called with the GIL held"): the module initialises
the second, never-started interpreter in libpython. This affects the
published osx-arm64 builds of every distribution (checked rolling 2.12.0
and humble 2.1.8). Nothing links against rmf_adapter, so build it as the
default MODULE, which links pybind11::module (no libpython).

Shared: applies to humble 2.1.8, jazzy 2.7.2, lyrical 2.13.0 and rolling
2.12.0. Tested on jazzy osx-arm64: the module no longer links libpython,
and `import rmf_adapter` plus a Graph() call work. Upstream
(open-rmf/rmf_ros2 main) still uses SHARED.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…rks [skip ci]

Regression test for the SHARED -> MODULE fix: import rmf_adapter (and
easy_full_control) and build an empty Graph. With the SHARED build the
import aborts on macOS. Passes on jazzy osx-arm64.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
humble's rmf_adapter 2.1.8 has no easy_full_control, and isn't a package
there (import rmf_adapter.graph fails), so use the submodules as
attributes. Passes on humble 2.1.8 and jazzy 2.7.2 (osx-arm64).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…p ci]

- rmf_traffic_ros2: the same patch in all four distributions -> shared.
- rmf_building_map_tools: the same numpy 2 fix in all four (lyrical's
  worded differently) -> shared; lyrical's package changes accordingly.
- rmf_robot_sim_common: humble's and jazzy's were the same -> shared (it
  applies to lyrical's and rolling's too, which don't build it: no rmf_dev
  release there).
- rmf_traffic: jazzy's patch is humble's plus the <cstdint>/<cassert>
  includes jazzy needs, and applies to humble -> shared for both; lyrical
  and rolling keep their own. Built humble's rmf_traffic with it on
  osx-arm64, with its tests.

Every distribution's effective patch was checked against its sync source.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…the Fortress ones there

conda-forge has gazebo 11 for win-64 (and humble already builds gazebo_ros there),
so only macOS keeps excluding rmf_*_sim_gz_classic_plugins. rmf_building_sim_gz_plugins
and rmf_robot_sim_gz_plugins need Ignition Fortress (libignition-gazebo6), which isn't
installable on win-64, as for gz_ros2_control.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@Tobias-Fischer Tobias-Fischer added build:humble PR build: build only humble (with other build:<distro> labels: only those) build:jazzy PR build: build only jazzy (with other build:<distro> labels: only those) build:lyrical PR build: build only lyrical (with other build:<distro> labels: only those) labels Oct 24, 2026
Tobias-Fischer and others added 2 commits October 25, 2026 07:53
…ffect for lyrical and rolling

vinca takes a package's patches from one layer only: a distribution's patch for a
package (any platform) replaces all of shared/'s for it. So lyrical's and rolling's
rmf_traffic_ros2 and rmf_fleet_adapter_python Windows patches hid the shared
rmf_traffic_ros2 patch and the shared MODULE fix on every platform:
- rmf_fleet_adapter_python: the (identical) lyrical/rolling Windows patch moves to
  shared/, so every distribution gets the MODULE fix and the Windows fix;
- rmf_traffic_ros2: lyrical and rolling get their own copy of the generic patch back.

Windows for humble and jazzy (CI failed in menge_vendor):
- menge_vendor: build with MENGECORE_EXPORTS (dllexport), no libdl;
- lyrical's Windows patches ported to humble's and jazzy's RMF sources (api_msgs,
  battery, fleet_adapter, task, task_ros2, task_sequence, visualization_floorplans,
  visualization_schedule, websocket per distribution; rmf_traffic and
  rmf_traffic_ros2 in shared/, as their generic patches), with the hunks for code
  they don't have dropped (rmf_reservation_msgs, LiftDestination, ...);
- rmf_building_sim_common, rmf_robot_sim_common: CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ot_sim_common

_USE_MATH_DEFINES (M_PI); rmf_traffic_editor links the PROJ and yaml-cpp imported
targets and doesn't include the (unused) unistd.h / pwd.h.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@github-actions

github-actions Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

ABI check (linux-64)

humble linux-64: **10 need their dependents rebuilt**, 2 to review (changed headers), 3 can be bumped on their own
package released → PR verdict details
rmf-building-map-msgs 1.2.0 (build 0) → 1.2.1 incompatible: removed or changed symbols: rebuild the dependents removed: rmf_building_map_msgs_s__rosidl_typesupport_c.cpython-39-x86_64-linux-gnu.so, rmf_building_map_msgs_s__rosidl_typesupport_fastrtps_c.cpython-39-x86_64-linux-gnu.so, rmf_building_map_msgs_s__rosidl_typesupport_introspection_c.cpython-39-x86_64-linux-gnu.so
rebuild 0 dependents (of 3 released dependents, these link to it): none
34 headers changed (check for layout/inline changes): rmf_building_map_msgs/rmf_building_map_msgs/msg/affine_image.hpp, rmf_building_map_msgs/rmf_building_map_msgs/msg/building_map.hpp, rmf_building_map_msgs/rmf_building_map_msgs/msg/detail/affine_image__struct.hpp, +rmf_building_map_msgs/rmf_building_map_msgs/msg/detail/affine_image__type_support.hpp, rmf_building_map_msgs/rmf_building_map_msgs/msg/detail/building_map__struct.hpp, +rmf_building_map_msgs/rmf_building_map_msgs/msg/detail/building_map__type_support.hpp, rmf_building_map_msgs/rmf_building_map_msgs/msg/detail/door__struct.hpp, +rmf_building_map_msgs/rmf_building_map_msgs/msg/detail/door__type_support.hpp and 26 more
pins changed: numpy >=1.19.5,<2 → >=1.25,<3, python_abi 3.9.* → 3.14.* *_cp314
rmf-dispenser-msgs 2.0.0 (build 0) → 3.0.4 incompatible: removed or changed symbols: rebuild the dependents removed: rmf_dispenser_msgs_s__rosidl_typesupport_c.cpython-39-x86_64-linux-gnu.so, rmf_dispenser_msgs_s__rosidl_typesupport_fastrtps_c.cpython-39-x86_64-linux-gnu.so, rmf_dispenser_msgs_s__rosidl_typesupport_introspection_c.cpython-39-x86_64-linux-gnu.so
rebuild 0 dependents (of 3 released dependents, these link to it): none
13 headers changed (check for layout/inline changes): rmf_dispenser_msgs/rmf_dispenser_msgs/msg/detail/dispenser_request__struct.hpp, +rmf_dispenser_msgs/rmf_dispenser_msgs/msg/detail/dispenser_request__type_support.hpp, rmf_dispenser_msgs/rmf_dispenser_msgs/msg/detail/dispenser_request_item__struct.hpp, +rmf_dispenser_msgs/rmf_dispenser_msgs/msg/detail/dispenser_request_item__type_support.hpp, rmf_dispenser_msgs/rmf_dispenser_msgs/msg/detail/dispenser_result__struct.hpp, +rmf_dispenser_msgs/rmf_dispenser_msgs/msg/detail/dispenser_result__type_support.hpp, rmf_dispenser_msgs/rmf_dispenser_msgs/msg/detail/dispenser_state__struct.hpp, +rmf_dispenser_msgs/rmf_dispenser_msgs/msg/detail/dispenser_state__type_support.hpp and 5 more
pins changed: numpy >=1.19.5,<2 → >=1.25,<3, python_abi 3.9.* → 3.14.* *_cp314
rmf-door-msgs 2.0.0 (build 0) → 3.0.4 incompatible: removed or changed symbols: rebuild the dependents removed: rmf_door_msgs_s__rosidl_typesupport_c.cpython-39-x86_64-linux-gnu.so, rmf_door_msgs_s__rosidl_typesupport_fastrtps_c.cpython-39-x86_64-linux-gnu.so, rmf_door_msgs_s__rosidl_typesupport_introspection_c.cpython-39-x86_64-linux-gnu.so
rebuild 0 dependents (of 1 released dependents, these link to it): none
19 headers changed (check for layout/inline changes): rmf_door_msgs/rmf_door_msgs/msg/detail/door_mode__struct.hpp, +rmf_door_msgs/rmf_door_msgs/msg/detail/door_mode__type_support.hpp, rmf_door_msgs/rmf_door_msgs/msg/detail/door_request__struct.hpp, +rmf_door_msgs/rmf_door_msgs/msg/detail/door_request__type_support.hpp, rmf_door_msgs/rmf_door_msgs/msg/detail/door_sessions__struct.hpp, +rmf_door_msgs/rmf_door_msgs/msg/detail/door_sessions__type_support.hpp, rmf_door_msgs/rmf_door_msgs/msg/detail/door_state__struct.hpp, +rmf_door_msgs/rmf_door_msgs/msg/detail/door_state__type_support.hpp and 11 more
pins changed: numpy >=1.19.5,<2 → >=1.25,<3, python_abi 3.9.* → 3.14.* *_cp314
rmf-fleet-msgs 2.0.0 (build 0) → 3.0.4 incompatible: removed or changed symbols: rebuild the dependents removed: rmf_fleet_msgs_s__rosidl_typesupport_c.cpython-39-x86_64-linux-gnu.so, rmf_fleet_msgs_s__rosidl_typesupport_fastrtps_c.cpython-39-x86_64-linux-gnu.so, rmf_fleet_msgs_s__rosidl_typesupport_introspection_c.cpython-39-x86_64-linux-gnu.so
rebuild 0 dependents (of 1 released dependents, these link to it): none
257 headers changed (check for layout/inline changes): +rmf_fleet_msgs/rmf_fleet_msgs/msg/beacon_state.h, +rmf_fleet_msgs/rmf_fleet_msgs/msg/beacon_state.hpp, +rmf_fleet_msgs/rmf_fleet_msgs/msg/charging_assignment.h, +rmf_fleet_msgs/rmf_fleet_msgs/msg/charging_assignment.hpp, +rmf_fleet_msgs/rmf_fleet_msgs/msg/charging_assignments.h, +rmf_fleet_msgs/rmf_fleet_msgs/msg/charging_assignments.hpp, rmf_fleet_msgs/rmf_fleet_msgs/msg/closed_lanes.hpp, +rmf_fleet_msgs/rmf_fleet_msgs/msg/delivery_alert.h and 249 more
pins changed: numpy >=1.19.5,<2 → >=1.25,<3, python_abi 3.9.* → 3.14.* *_cp314
rmf-ingestor-msgs 2.0.0 (build 0) → 3.0.4 incompatible: removed or changed symbols: rebuild the dependents removed: rmf_ingestor_msgs_s__rosidl_typesupport_c.cpython-39-x86_64-linux-gnu.so, rmf_ingestor_msgs_s__rosidl_typesupport_fastrtps_c.cpython-39-x86_64-linux-gnu.so, rmf_ingestor_msgs_s__rosidl_typesupport_introspection_c.cpython-39-x86_64-linux-gnu.so
rebuild 0 dependents (of 0 released dependents, these link to it): none
13 headers changed (check for layout/inline changes): rmf_ingestor_msgs/rmf_ingestor_msgs/msg/detail/ingestor_request__struct.hpp, +rmf_ingestor_msgs/rmf_ingestor_msgs/msg/detail/ingestor_request__type_support.hpp, rmf_ingestor_msgs/rmf_ingestor_msgs/msg/detail/ingestor_request_item__struct.hpp, +rmf_ingestor_msgs/rmf_ingestor_msgs/msg/detail/ingestor_request_item__type_support.hpp, rmf_ingestor_msgs/rmf_ingestor_msgs/msg/detail/ingestor_result__struct.hpp, +rmf_ingestor_msgs/rmf_ingestor_msgs/msg/detail/ingestor_result__type_support.hpp, rmf_ingestor_msgs/rmf_ingestor_msgs/msg/detail/ingestor_state__struct.hpp, +rmf_ingestor_msgs/rmf_ingestor_msgs/msg/detail/ingestor_state__type_support.hpp and 5 more
pins changed: numpy >=1.19.5,<2 → >=1.25,<3, python_abi 3.9.* → 3.14.* *_cp314
rmf-lift-msgs 2.0.0 (build 0) → 3.0.4 incompatible: removed or changed symbols: rebuild the dependents removed: rmf_lift_msgs_s__rosidl_typesupport_c.cpython-39-x86_64-linux-gnu.so, rmf_lift_msgs_s__rosidl_typesupport_fastrtps_c.cpython-39-x86_64-linux-gnu.so, rmf_lift_msgs_s__rosidl_typesupport_introspection_c.cpython-39-x86_64-linux-gnu.so
rebuild 0 dependents (of 2 released dependents, these link to it): none
7 headers changed (check for layout/inline changes): rmf_lift_msgs/rmf_lift_msgs/msg/detail/lift_request__struct.hpp, +rmf_lift_msgs/rmf_lift_msgs/msg/detail/lift_request__type_support.hpp, rmf_lift_msgs/rmf_lift_msgs/msg/detail/lift_state__struct.hpp, +rmf_lift_msgs/rmf_lift_msgs/msg/detail/lift_state__type_support.hpp, rmf_lift_msgs/rmf_lift_msgs/msg/lift_request.hpp, rmf_lift_msgs/rmf_lift_msgs/msg/lift_state.hpp, +rmf_lift_msgs/rmf_lift_msgs/msg/rosidl_generator_cpp__visibility_control.hpp
pins changed: numpy >=1.19.5,<2 → >=1.25,<3, python_abi 3.9.* → 3.14.* *_cp314
rmf-site-map-msgs 2.0.0 (build 0) → 3.0.4 incompatible: removed or changed symbols: rebuild the dependents removed: rmf_site_map_msgs_s__rosidl_typesupport_c.cpython-39-x86_64-linux-gnu.so, rmf_site_map_msgs_s__rosidl_typesupport_fastrtps_c.cpython-39-x86_64-linux-gnu.so, rmf_site_map_msgs_s__rosidl_typesupport_introspection_c.cpython-39-x86_64-linux-gnu.so
rebuild 0 dependents (of 1 released dependents, these link to it): none
4 headers changed (check for layout/inline changes): rmf_site_map_msgs/rmf_site_map_msgs/msg/detail/site_map__struct.hpp, +rmf_site_map_msgs/rmf_site_map_msgs/msg/detail/site_map__type_support.hpp, +rmf_site_map_msgs/rmf_site_map_msgs/msg/rosidl_generator_cpp__visibility_control.hpp, rmf_site_map_msgs/rmf_site_map_msgs/msg/site_map.hpp
pins changed: numpy >=1.19.5,<2 → >=1.25,<3, python_abi 3.9.* → 3.14.* *_cp314
rmf-task-msgs 2.0.0 (build 0) → 3.0.4 incompatible: removed or changed symbols: rebuild the dependents removed: rmf_task_msgs_s__rosidl_typesupport_c.cpython-39-x86_64-linux-gnu.so, rmf_task_msgs_s__rosidl_typesupport_fastrtps_c.cpython-39-x86_64-linux-gnu.so, rmf_task_msgs_s__rosidl_typesupport_introspection_c.cpython-39-x86_64-linux-gnu.so
rebuild 0 dependents (of 1 released dependents, these link to it): none
85 headers changed (check for layout/inline changes): rmf_task_msgs/rmf_task_msgs/msg/api_request.hpp, rmf_task_msgs/rmf_task_msgs/msg/api_response.hpp, rmf_task_msgs/rmf_task_msgs/msg/assignment.hpp, rmf_task_msgs/rmf_task_msgs/msg/behavior.hpp, rmf_task_msgs/rmf_task_msgs/msg/behavior_parameter.hpp, rmf_task_msgs/rmf_task_msgs/msg/bid_notice.hpp, rmf_task_msgs/rmf_task_msgs/msg/bid_proposal.hpp, rmf_task_msgs/rmf_task_msgs/msg/bid_response.hpp and 77 more
pins changed: numpy >=1.19.5,<2 → >=1.25,<3, python_abi 3.9.* → 3.14.* *_cp314
rmf-traffic-msgs 2.0.0 (build 0) → 3.0.4 incompatible: removed or changed symbols: rebuild the dependents removed: rmf_traffic_msgs_s__rosidl_typesupport_c.cpython-39-x86_64-linux-gnu.so, rmf_traffic_msgs_s__rosidl_typesupport_fastrtps_c.cpython-39-x86_64-linux-gnu.so, rmf_traffic_msgs_s__rosidl_typesupport_introspection_c.cpython-39-x86_64-linux-gnu.so
rebuild 0 dependents (of 1 released dependents, these link to it): none
319 headers changed (check for layout/inline changes): rmf_traffic_msgs/rmf_traffic_msgs/msg/blockade_cancel.hpp, rmf_traffic_msgs/rmf_traffic_msgs/msg/blockade_checkpoint.hpp, rmf_traffic_msgs/rmf_traffic_msgs/msg/blockade_heartbeat.hpp, rmf_traffic_msgs/rmf_traffic_msgs/msg/blockade_reached.hpp, rmf_traffic_msgs/rmf_traffic_msgs/msg/blockade_ready.hpp, rmf_traffic_msgs/rmf_traffic_msgs/msg/blockade_release.hpp, rmf_traffic_msgs/rmf_traffic_msgs/msg/blockade_set.hpp, rmf_traffic_msgs/rmf_traffic_msgs/msg/blockade_status.hpp and 311 more
pins changed: numpy >=1.19.5,<2 → >=1.25,<3, python_abi 3.9.* → 3.14.* *_cp314
rmf-visualization-msgs 1.2.0 (build 0) → 1.2.1 incompatible: removed or changed symbols: rebuild the dependents removed: rmf_visualization_msgs_s__rosidl_typesupport_c.cpython-39-x86_64-linux-gnu.so, rmf_visualization_msgs_s__rosidl_typesupport_fastrtps_c.cpython-39-x86_64-linux-gnu.so, rmf_visualization_msgs_s__rosidl_typesupport_introspection_c.cpython-39-x86_64-linux-gnu.so
rebuild 0 dependents (of 2 released dependents, these link to it): none
4 headers changed (check for layout/inline changes): rmf_visualization_msgs/rmf_visualization_msgs/msg/detail/rviz_param__struct.hpp, +rmf_visualization_msgs/rmf_visualization_msgs/msg/detail/rviz_param__type_support.hpp, +rmf_visualization_msgs/rmf_visualization_msgs/msg/rosidl_generator_cpp__visibility_control.hpp, rmf_visualization_msgs/rmf_visualization_msgs/msg/rviz_param.hpp
pins changed: numpy >=1.19.5,<2 → >=1.25,<3, python_abi 3.9.* → 3.14.* *_cp314
rmf-traffic 2.0.0 (build 0) → 3.0.3 compatible: no ABI change 9 headers changed (check for layout/inline changes): rmf_traffic/Route.hpp, rmf_traffic/Trajectory.hpp, rmf_traffic/agv/Graph.hpp, rmf_traffic/agv/Planner.hpp, rmf_traffic/schedule/Database.hpp, rmf_traffic/schedule/Mirror.hpp, rmf_traffic/schedule/Participant.hpp, rmf_traffic/schedule/ParticipantDescription.hpp and 1 more
pins changed: python_abi 3.9.* → 3.14.* *_cp314
new dependencies: eigen-abi >=5.0.1.80,<5.0.1.81, libccd-double >=2.1,<2.2, numpy >=1.25,<3
dropped dependencies: libccd
rmf-utils 1.4.0 (build 0) → 1.4.1 compatible: no ABI change 3 headers changed (check for layout/inline changes): rmf_utils/Modular.hpp, rmf_utils/clone_ptr.hpp, rmf_utils/impl_ptr.hpp
pins changed: python_abi 3.9.* → 3.14.* *_cp314
new dependencies: numpy >=1.25,<3
3 packages can be bumped on their own (compatible: 1, no libraries: 2)
package released → PR verdict details
rmf-visualization-fleet-states 1.2.1 (build 0) → 2.0.2 compatible: no ABI change pins changed: python_abi 3.9.* → 3.14.* *_cp314
new dependencies: numpy >=1.25,<3
rmf-building-map-tools 1.5.0 (build 0) → 1.6.3 no libraries: nothing to compare pins changed: python_abi 3.9.* → 3.14.* *_cp314
new dependencies: numpy >=1.25,<3
rmf-visualization-building-systems 1.2.1 (build 0) → 2.0.2 no libraries: nothing to compare pins changed: python_abi 3.9.* → 3.14.* *_cp314
new dependencies: numpy >=1.25,<3

Compared with the newest builds on https://conda.anaconda.org/robostack-humble/linux-64.

jazzy linux-64: 1 can be bumped on their own
1 packages can be bumped on their own (compatible: 1)
package released → PR verdict details
rmf-utils 1.6.2 (build 27) → 1.6.2 compatible: no ABI change headers unchanged

Compared with the newest builds on https://conda.anaconda.org/robostack-jazzy/linux-64.

lyrical linux-64: **1 need their dependents rebuilt**, 5 can be bumped on their own
package released → PR verdict details
rmf-fleet-adapter-python 2.13.0 (build 30) → 2.13.0 soname: SONAME changed: rebuild the dependents libraries: rmf_adapter.cpython-314-x86_64-linux-gnu.so (soname)
rebuild 0 dependents (of 1 released dependents, these link to it): none
5 packages can be bumped on their own (compatible: 5)
package released → PR verdict details
rmf-fleet-adapter 2.13.0 (build 30) → 2.13.0 compatible: no ABI change headers unchanged
rmf-task-ros2 2.13.0 (build 30) → 2.13.0 compatible: no ABI change headers unchanged
rmf-traffic-ros2 2.13.0 (build 30) → 2.13.0 compatible: no ABI change headers unchanged
rmf-utils 1.8.1 (build 30) → 1.8.1 compatible: no ABI change headers unchanged
rmf-websocket 2.13.0 (build 30) → 2.13.0 compatible: no ABI change headers unchanged

Compared with the newest builds on https://repo.prefix.dev/robostack-lyrical/linux-64.

rolling linux-64: **1 need their dependents rebuilt**, 5 can be bumped on their own
package released → PR verdict details
rmf-fleet-adapter-python 2.12.0 (build 32) → 2.12.0 soname: SONAME changed: rebuild the dependents libraries: rmf_adapter.cpython-314-x86_64-linux-gnu.so (soname)
rebuild 0 dependents (of 1 released dependents, these link to it): none
5 packages can be bumped on their own (compatible: 5)
package released → PR verdict details
rmf-fleet-adapter 2.12.0 (build 32) → 2.12.0 compatible: no ABI change headers unchanged
rmf-task-ros2 2.12.0 (build 32) → 2.12.0 compatible: no ABI change headers unchanged
rmf-traffic-ros2 2.12.0 (build 32) → 2.12.0 compatible: no ABI change headers unchanged
rmf-utils 1.7.0 (build 32) → 1.7.0 compatible: no ABI change headers unchanged
rmf-websocket 2.12.0 (build 32) → 2.12.0 compatible: no ABI change headers unchanged

Compared with the newest builds on https://repo.prefix.dev/robostack-rolling/linux-64.

About this check

Each package this pull request built, compared with its newest released build (tools/abi_check.py, libabigail):

  • compatible / additions: the package can be bumped on its own;
  • soname / incompatible: the packages that depend on it need a rebuild (build number bump) in the same pull request.

Exported symbols are compared (the released packages are stripped, so struct layouts aren't); unchanged installed headers rule out layout and inline changes, changed ones are listed for review. Dependents to rebuild are the released ones linking to a changed library. A changed pin is part of the comparison.

Tobias-Fischer and others added 3 commits October 25, 2026 08:44
From lyrical's patch: a short ExternalProject name and prefix (the hash-named
layout exceeded MAX_PATH: "'$GIT_DIR' too big"), BUILD_COMMAND as tokens, and
CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS for the validator library.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…dator's tests

The older validator in humble/jazzy names its options BUILD_TESTS/BUILD_EXAMPLES;
its test links draft7_schema_builtin, a data symbol export-all doesn't export.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…mble)

NOMINMAX (Menge's and Gazebo's windows.h min/max macros broke rclcpp's headers,
C2589) and _USE_MATH_DEFINES.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Tobias-Fischer and others added 3 commits October 25, 2026 10:06
…e, jazzy)

Its CMakeLists.txt adds -Wall -Wshadow -Wextra unconditionally; MSVC stops on
-Wshadow (D8021: invalid numeric argument '/Wshadow'). lyrical's 1.14.1 builds.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
windows.h, pulled in by its dependencies, declares GDI's Polygon(), which
clashes with the editor's Polygon class (level.h: C2923 'Polygon' is not a
valid template type argument).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@Tobias-Fischer Tobias-Fischer added the build:rolling PR build: build only rolling (with other build:<distro> labels: only those) label Oct 25, 2026
Tobias-Fischer and others added 8 commits October 25, 2026 12:21
SchedulePanel.cpp uses the alternative operator tokens (`or`); MSVC knows
them only with <iso646.h> (C2065: 'or': undeclared identifier).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…e); no rmf_visualization_schedule tests

- humble's rmf_fleet_adapter linked the bare name yaml-cpp (LNK1181: cannot open
  input file 'yaml-cpp.lib'); jazzy and later already link the target.
- rmf_visualization_schedule's test_submit_trajectory link command exceeds the
  linker's line limit (LNK1170); its tests are off on Windows.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…dule tests behind BUILD_TESTING (jazzy)

- humble's rmf_fleet_adapter: MSVC 14.44 crashes compiling full_control's
  main.cpp (C1001 in type_traits); try it unoptimized (/Od).
- jazzy's rmf_visualization_schedule adds its test directory unconditionally,
  so BUILD_TESTING=OFF didn't help against LNK1170: guard it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ask_aggregator's link line

- MSVC 14.44 crashes compiling full_control/main.cpp (C1001 in its lambda
  handling; /Od didn't help), so that executable isn't built or installed on
  Windows; lyrical's and rolling's newer releases build it.
- jazzy's task_aggregator overflowed link.exe's response-file line limit
  (LNK1170) like full_control: link the imported targets on Windows.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
… class

rmf_fleet_adapter_python links RobotUpdateHandle::Unstable::Stubbornness::release
(LNK2001); nested classes don't inherit dllexport. jazzy's patch already has it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…the DLLs to bin

Both installed RUNTIME (on Windows also the DLL) into lib/<pkg>, which isn't on
PATH, so rmf_fleet_adapter_python's rmf_adapter.pyd failed to load. The
fleet adapter's executables stay in lib/rmf_fleet_adapter.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…in too

Like rmf_fleet_adapter: their DLLs went to lib/<pkg> with the executables,
so rmf_adapter.pyd still couldn't load. rmf_traffic_ros2's patch is shared
by two releases with different install blocks, so it installs a second copy
of the DLL to bin.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
rmf_traffic_ros2 links rmf_utils.dll, which was installed to lib (not on
PATH), so rmf_adapter.pyd still failed to load. rmf_utils is already
published, hence the build_number bump. ci.yaml: evictions reset (the
packages have been rebuilt).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@Tobias-Fischer Tobias-Fischer removed the build:win PR build: only the win platforms (remove for a full build before merging) label Oct 25, 2026
… packages

The published lyrical and rolling win-64 packages have rmf_utils,
rmf_websocket, rmf_traffic_ros2, rmf_task_ros2 and rmf_fleet_adapter DLLs
in lib/ or lib/<pkg>, so rmf_adapter.pyd can't load them. Same fix as for
humble and jazzy. All are published, so their build numbers are bumped,
also rmf_fleet_adapter_python's: CI skipped it, so the shared MODULE fix
hadn't reached lyrical and rolling. rolling's rmf_utils.win.patch repeated
its generic patch's WINDOWS_EXPORT_ALL_SYMBOLS; rolling's
rmf_websocket.win.patch is refreshed on top of its generic patch.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@Tobias-Fischer Tobias-Fischer added build:win PR build: only the win platforms (remove for a full build before merging) and removed build:humble PR build: build only humble (with other build:<distro> labels: only those) build:jazzy PR build: build only jazzy (with other build:<distro> labels: only those) build:rolling PR build: build only rolling (with other build:<distro> labels: only those) labels Oct 25, 2026
Tobias-Fischer and others added 3 commits October 25, 2026 17:16
lyrical's rmf_adapter fails with 'A dynamic link library (DLL)
initialization routine failed'; load its dependencies one by one to see
which. To be removed again.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
… (temporary)

rmf_task_sequence.dll is the one that fails to initialise: it constructs
json_validator objects during static initialisation. Build the same one in
a small program to see the exception. To be removed again.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
It showed conda-forge's json_schema_validator 2.4.1 (lyrical) is a Debug
build on win-64 (MSVCP140D.dll): rmf_task_sequence's static json_validator
crashes in it (conda-forge/json_schema_validator-feedstock#19).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@Tobias-Fischer Tobias-Fischer added build:none PR build: build no packages, only run the checks (tooling, CI or docs changes) and removed build:lyrical PR build: build only lyrical (with other build:<distro> labels: only those) build:win PR build: only the win platforms (remove for a full build before merging) labels Oct 25, 2026
pkg_additional_info.yaml: both sides' build_number entries (#116, #118).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@Tobias-Fischer

Copy link
Copy Markdown
Collaborator Author

@Tobias-Fischer Tobias-Fischer removed the build:none PR build: build no packages, only run the checks (tooling, CI or docs changes) label Nov 4, 2026
@Tobias-Fischer
Tobias-Fischer marked this pull request as ready for review November 4, 2026 01:52
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