Skip to content

Full Rebuild September 2026 + Sync cross-distribution Vinca package coverage - #271

Open
Tobias-Fischer wants to merge 101 commits into
mainfrom
codex/cross-distro-sync
Open

Tobias-Fischer wants to merge 101 commits into
mainfrom
codex/cross-distro-sync

Conversation

@Tobias-Fischer

@Tobias-Fischer Tobias-Fischer commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Synchronizes portable CI/build tooling and the reusable cross-distribution workflow guidance.
  • Aligns released Vinca package seeds while retaining distro-specific platform selectors and release-owned settings.

Validation

  • Configuration sorting and whitespace checks pass.
  • Exact CI Vinca generation completed locally for linux-64, linux-aarch64, osx-arm64, osx-64, and win-64.
  • Patch application checker: 101 passed, 0 failed.

Base automatically changed from full-rebuild-2026-08 to main August 31, 2026 18:51
Tobias-Fischer and others added 24 commits September 2, 2026 09:22
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Port pixi.toml structural changes: update vinca rev to 6aacb6f,
  inline platform-based glibc, pixi-build preview, PYTHONIOENCODING
  activation env (structural changes already in main, ensuring rev sync)
- Sync .github/workflows/testpr.yml: add permissions block, upgrade
  setup-pixi to v0.10.0 (pixi v0.75.0), add 3-attempt recipe-generation
  retry loop, fix delete-outdated-cache-entries exit bug, move
  PYTHONIOENCODING to pixi.toml activation
- Sync check_patches_clean_apply.py: narrow except to AttributeError,
  add git-cache retry on fetch failure, fix sys.exit always returning 2
- Normalize AGENTS.md: use $DISTRO placeholder instead of ros-jazzy-
  hardcoded prefix in all examples

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
pixi.lock was stale after removing the corrupted .pixi/envs/default
(pyparsing namespace-package corruption) and running pixi install fresh.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Update build_gap_report.py (cross-distro sync)
- Update libg2o, python-qt-binding, qt-gui-cpp patches
- Refresh pixi.lock

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The "Save build cache" step gates on steps.build-recipes.outcome, but
the "Build recipes" step had no id: build-recipes set, so that context
reference was always empty and the always() && (...) condition was
always false. The cache was never being saved regardless of outcome.

Mirrors the same fix applied to ros-humble.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…zy macOS build

Ports the OpenCV5, CMake4, and dependency-config unification work already
landed on humble, and adds fresh fixes surfaced while getting jazzy's macOS
build to complete cleanly:

- OpenCV5 API migration across ~15 packages: legacy CV_* color/type macros
  -> cv::COLOR_*/cv::* equivalents, calib3d -> calib/geometry component
  split, removed C-API headers (types_c.h etc.), and the free
  cv::aruco::detectMarkers()/estimatePoseSingleMarkers() functions replaced
  with the ArucoDetector class (image-proc, image-rotate, cv-bridge,
  image-geometry, compressed-image-transport, rqt-image-view,
  theora-image-transport, grid-map-cv, apriltag-mit, moveit-ros-perception,
  rtabmap).
- Legacy EIGEN3_INCLUDE_DIR (unset by modern Eigen3Config.cmake) replaced
  with the Eigen3::Eigen target across the autoware osqp/qp/kalman-filter
  chain, plus an fmt::fmt link fix for autoware-ekf-localizer.
- Boost modernization: dropped the no-longer-resolvable "system" component
  from find_package(Boost COMPONENTS ...) and ported boost::asio::io_service
  -> io_context / boost::filesystem::complete|extension -> absolute()/
  path::extension() (libpointmatcher, sick-safetyscanners-base).
- libnabo: C++14 bump for modern Eigen, numpy>=2.0 header path, missing
  <cassert>, and OpenMP linked explicitly for clang (plus find_dependency in
  its exported Config.cmake so consumers pick it up too).
- libg2o: switched host Qt dependency from qt-main (Qt5) to qt6-main to
  match the rest of the Qt6 stack and unblock rtabmap's PCL/VTK requirement.
- vinca.yaml: closed the largest gaps in jazzy's package coverage versus
  humble's meta-package tree, bumped vtk to 9.7.0 to match humble.
- Added check_dependency_compat.py (pre-build pin-conflict solver) and
  vinca_pinning.yaml, matching humble's tooling.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Resolved conflicts by hand:
- pkg_additional_info.yaml/vinca.yaml: several hunks were additive on both
  sides at the same insertion point (new package entries); kept the union,
  de-duplicated, and re-sorted with `pixi run sort`. Kept our newer
  hpp_fcl/pinocchio/visp version bumps (with their libboost/conda-forge
  compat comments) over main's older overrides.
- pixi.toml: kept the pinned vinca rev plus curl/go-yq/colordiff (used by
  check_dependency_compat.py); took main's setup-pixi bump.
- pixi.lock: regenerated with `pixi lock` against the merged pixi.toml
  instead of hand-merging the generated lockfile.
- testpr.yml: combined both branches' cache-cleanup steps.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…onstraints

Already-built packages pin ros2-distro-mutex 0.16.* jazzy_*; bumping to
0.17.0 (matching the pattern already used on kilted) makes sure a stale
mutex build isn't silently resolved once vtk 9.7.0 lands in the
run_constraints, instead of the constraint mismatch surfacing later as a
confusing solver failure.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Avoid multiple pushes racing multiple full CI matrices in parallel; same
concurrency group already added to ros-humble's testpr.yml this session.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…o-mutex

904749d bumped ros2-distro-mutex 0.16.0 -> 0.17.0 for the new vtk 9.7.0
run_constraint, but ros2-ros2cli and ros2-rosidl-cli are already published on
robostack-jazzy with build_number 22, hard-pinned (via run_exports) to
ros2-distro-mutex 0.16.*. vinca's already-built check only compares each
package's remote build_number against this per-package override (or the
global default), so it kept treating both as current and never regenerated
recipes for them -- even though their published build's mutex pin is now
unsatisfiable, breaking the whole solve for anything that depends on them
(e.g. ros-jazzy-rosidl-generator-type-description -> ros2-rosidl-cli).

This isn't the local-cache class of staleness (a testpr.yml cache-bust can't
touch an already-published remote artifact); bumping the per-package
build_number is the mechanism vinca provides for forcing a specific
package's republish without touching the global counter.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Same class of issue as 3dc6b32 (ros2cli/rosidl_cli), but a local-cache
staleness rather than a published-remote one: ros2-ros-workspace's cached
artifact is already at build_number 22 (matching current), so vinca's
already-built check treats it as current, but that cached build predates
904749d's ros2-distro-mutex 0.16.0 -> 0.17.0 bump and is hard-pinned to the
now-unsatisfiable old version.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… C:\bld\...

ament_python_install_package()/ament_python_install_module() embed a raw
Windows path (with backslashes, from get_executable_path() and
CMAKE_INSTALL_PREFIX) directly into an install(CODE "...") string. That
string gets written verbatim into cmake_install.cmake and re-parsed as CMake
source at install time, where CMake's own string-escape rules choke on
whatever backslash-letter sequence the path happens to contain -- in this
case "\b" from this workflow's C:/bld/win-64 build root ("Invalid character
escape '\b'", first hit by ros2-ament-cmake-test). Convert both paths via
file(TO_CMAKE_PATH ...) before embedding, the standard fix for this class of
CMake footgun.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Same pattern as ddbda94 (ros2-ros-workspace).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…tex bump

Individually cache-busting each affected package (ddbda94, 71ff3ad, and
now ros2-ament-cmake-core) as it surfaced was turning into unbounded
whack-a-mole -- this is a systemic issue (any package cached/published at
build_number 22 with the pre-904749dd mutex pin baked in), not isolated bugs
in each one. The comment already left at this line anticipated exactly this
("next build number should be 23"). This is a full-rebuild-triggering
change: every package in the distro will rebuild fresh once its cached
build_number no longer matches, so this CI run will take considerably
longer than the incremental --skip-existing runs tonight.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
crop_foremost.cpp used the legacy C-API CV_THRESH_TOZERO_INV macro,
which OpenCV5 dropped in favor of the cv::THRESH_TOZERO_INV enum
value. Same class of legacy CV_* macro removal already hit elsewhere
this cycle (CV_GRAY2RGB in rqt_image_view).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
disparity_node.cpp included the old-style <opencv2/calib3d/calib3d.hpp>
path; OpenCV5 only ships the flat <opencv2/calib3d.hpp> header. Same
class of header-layout change already hit elsewhere in image_pipeline
this cycle.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
mcap_vendor FetchContent's mcap v1.3.1 (foxglove/mcap); its types.hpp
uses uint16_t/uint64_t/etc without including <cstdint>, which GCC 15's
leaner libstdc++ headers no longer pull in transitively. It's a
downloaded tarball, not a git checkout, so force-include the header via
CMAKE_CXX_FLAGS instead of source-patching, same approach used for
as2_platform_multirotor_simulator.

Separately, ros2-control-msgs failed on win-64 with sensor_msgs's cmake
config missing, despite ros2-sensor-msgs being present locally -- its
cached .conda was only ~25KB (implausibly small for a message package),
suggesting a prior interrupted/cancelled build (many superseding pushes
via the concurrency group this cycle) got cached in a corrupt state.
Cache-bust it to force a fresh rebuild.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Same depthai-core-release tag (2.31.1-1) as humble, hitting the
identical two-layer CMake4 floor violation: its own top-level
cmake_minimum_required(VERSION 3.4), and Hunter's subprocess-spawned
cmake invocation. Port both fixes over: bump the version, set
CMAKE_POLICY_VERSION_MINIMUM as a real env var before HunterGate (env
vars propagate to the child process; a -D cache arg would not), and
proactively add the same additional_cmake_args cache arg for
cmake/CMakeRC.cmake's separate same-process include() later in the
file (confirmed necessary for this exact source on humble).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Same depthai-ros-release tag (2.12.2-1) and identical CMakeLists.txt
as humble's depthai_bridge (confirmed via diff) -- hits the same
OpenCV major-version-pin, calib3d->calib+geometry component split, and
hardcoded opencv_calib3d link library issues. Port the same patch over
verbatim.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…al source)

Same depthai-ros-release tag (2.12.2-1) and identical CMakeLists.txt as
humble's depthai_examples (confirmed via diff). Port the same fix over.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Same pattern as ros2-sensor-msgs: ros2-rcl failed to find rcl_interfaces's
cmake config despite it being present in the local channel, and its
cached .conda was also only ~25KB. Force a fresh rebuild.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…om source

Building from ROS source fails to find Simde (its vectorization
backend) via find_package. Same fix already applied on humble: skip
the source build and generate a dummy package depending on the
conda-forge proxsuite release directly (also more up to date than the
ROS-packaged version).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Third instance of the same ~25KB corrupt-cache pattern: ros2-hardware-interface
failed to find control_msgs's cmake config despite it being present in
the local channel. Force a fresh rebuild.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Same fixes as humble (identical upstream source, ros2-gbp/libg2o-release):
qt isn't declared in package.xml and CMakeLists.txt's find_package(QGLViewer)
is optional, so the qt host dep is dead weight that conflicts with vtk's
now-Qt6-only build (vtk 9.7.0 pinned here too). Also add
-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON for csparse_extension's win-64
LNK1181 (no import .lib generated without it).

Root-caused and verified by a peer session fixing the identical issue
on rolling.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Tobias-Fischer and others added 13 commits September 11, 2026 06:57
RoboStack/vinca#156 fixes the real root cause of today's persistent,
non-transient "Failed to fetch package.xml" failures: vinca's
raw.githubusercontent.com URLs for ros2-gbp release tags (e.g.
"release/jazzy/controller_interface/4.47.0-1") use the short <ref> form,
which is ambiguous about where the slash-containing ref ends and the path
begins, and resolves inconsistently across CDN edges -- confirmed the
exact same URL 404s from GitHub Actions runners while working fine
everywhere else (curl, a direct git clone of the tag). This was mistaken
for a rate-limit issue in a previous commit; adding GITHUB_TOKEN auth
didn't fix it because the problem was never about authentication.

Pin to the fix commit directly (verified it contains this line's prior
HEAD as an ancestor, so nothing else changes) rather than wait on
review/merge. Revert to the plain RoboStack/vinca.git rev once that PR
merges.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The previous commit pinned to a fork commit based on current
RoboStack/vinca master, which includes the newer rosdistro-cache-snapshot
feature (PR #146). Our already-generated rosdistro_snapshot.yaml predates
that machinery and isn't compatible with it, causing a new failure.

Re-pin to RoboStack/vinca@1f1dca5 (the last commit before that feature
landed) with the raw.githubusercontent.com tag-URL ambiguity fix
(RoboStack/vinca#156) cherry-picked on top, so we keep the actual fix
without pulling in the incompatible snapshot changes. Per instruction: do
not regenerate rosdistro_snapshot.yaml itself, since that would pull in new
package versions and a fresh round of patches.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Now that recipe generation actually succeeds (previous commit), the build
gets far enough to hit vinca-gha's generated linux.yml size check for the
first time this session: "Generated workflow linux.yml is 659.0 KiB,
exceeding the 500 KiB limit." Same fix already applied on humble --
batch_size defaults to 5, bump to 25 to reduce per-job YAML overhead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Same fix as humble: win-64 jobs have repeatedly gone completely silent for
10-20+ minutes during rattler-build's recipe enumeration (a pure local
YAML-parse, zero network calls) -- exactly the I/O pattern real-time
Defender scanning is known to silently stall on GH Actions Windows
runners. Repeated cancel+retry cycles kept landing on the identical
"Finding outputs from recipe" spot rather than clearing anything up. A
byte-level scan of the whole libg2o source tree ruled out the other known
cause of a deterministic win-64 hang (an invalid UTF-8 byte, as previously
found and fixed for avt_vimba_camera on rolling). Exclude the checkout and
C:\bld build directories from scanning before any heavy I/O begins.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Now that the Defender exclusion is letting win-64 jobs actually get
through recipe generation and into real building, a genuine failure
surfaced: nav2_rviz_plugins' find_package(nav2_route) failed against a
~38KB cached ros2-nav2-route artifact missing its installed cmake config
-- the same recurring corruption signature as moveit-core/nav2-behavior-tree
earlier, almost certainly from one of today's many win-64 job cancellations
catching a cache-save mid-write. Purge it so it rebuilds clean.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…mera-class bug)

Same fix as rolling: urg_c (Hokuyo laser rangefinder driver, pulled in
transitively via urg_node) ships all of its source in Shift-JIS encoding,
not UTF-8. Compiling urg_sensor.h triggers -Winvalid-utf8 on its Japanese
comments; the compiler echoes the raw invalid bytes into the diagnostic,
and rattler-build's output reader hangs instead of erroring -- confirmed
live on rolling's osx-64, sitting silently at the exact same source line
for 9.5+ minutes, matching the deterministic hang signature from the
earlier avt_vimba_camera fix.

Converts all 35 affected files from Shift-JIS to UTF-8 (comment-only, no
functional change); verified this exact patch applies cleanly against
jazzy's own urg_c release tag (identical to rolling's).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Same recurring pattern as moveit-core/nav2-route: ros2-polygon-msgs
(~24KB) missing its installed cmake config, causing
polygon_utils' find_package(polygon_msgs) to fail. Almost certainly
another casualty of this session's many win-64 job cancellations.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Standardize on humble's post-review layout: a separate sort-check job,
pinned setup-pixi/pixi versions, the 3-attempt recipe-generation retry
loop, short single-line comments, and no per-repo one-off cache-purge
entries (the underlying corrupted/stale artifacts have long since been
superseded by newer cache saves).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Two win-64 hang-mitigation experiments, scoped to jazzy where the
hangs have been most persistent: bump the runner image (newer image,
reworked storage/virtualization) and layer disabling Defender's
real-time monitoring outright on top of the existing path exclusions
(wrapped so a hosted runner blocking this via tamper protection
doesn't fail the job).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…isabled

windows-2025 doesn't ship the VS2022 toolchain our build hardcodes
(rattler-build's generator is "Visual Studio 17 2022"), so every
recipe failed immediately with "could not find any instance of
Visual Studio" -- what looked like a hang was actually many small
per-recipe failures the log hadn't caught up displaying yet. Keep
the Defender real-time-monitoring-disable experiment, which is
runner-image-independent.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Same cleanup as humble: rename the 13 remaining ros2-*.patch files to
the ros-jazzy- prefix used by the other 212 patches (vinca discovers
either prefix identically via add_package_name_variants, so this is
purely cosmetic -- verified with pixi run check-patches, all 133
recipes still apply cleanly). Shorten dependencies.yaml comments to
one line each. Condense vinca.yaml's remaining multi-line comment
blocks to a single line -- vinca-sort-vinca-lists only treats a
whole-line comment as a block separator, so a multi-line block gets
scrambled across items once the list re-sorts.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Listed twice (once unconditionally, once under the RoboPlan section).
Harmless but confusing; drop the redundant copy.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Same fix as humble/rolling: standalone comments between plain items
and a trailing unconditional block placed after an if-block both
defeat vinca-sort-vinca-lists silently (its internal accumulator
never resets once triggered, and only exact 6-space "then:" items
get re-sorted inside it -- verified by confirming irobot_create_*
was sitting unsorted in this exact trap). Folded the substantive
standalone comments into inline trailing comments on the item they
describe (or dropped one that didn't describe anything specific);
merged the two unconditional blocks into one before all if-blocks.

Verified zero behavior change: evaluated selectors for linux-64,
win-64, and osx-64 against the prior committed version and confirmed
identical resulting package sets on all three before and after.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@sea-bass

Copy link
Copy Markdown
Contributor

@Tobias-Fischer we just discovered an issue with RoboPlan packages ABI stability (see open-planning/roboplan-ros#68 and RoboStack/ros-lyrical#47 for more details)

Would it be possible to blow away all the ros2-roboplan* and ros-rolling-roboplan* caches and then cherry-pick this in here? #296

Otherwise I can always just do a follow-on with a partial rebuild... up to you


On a separate note, Jazzy just had a sync yesterday (September 11, 2026), so I don't know if we'll need to regenerate a snapshot here anyhow...

sea-bass and others added 4 commits September 19, 2026 20:44
Same gap as ros-rolling: liboctomap-dev shows up in Unsatisfied
dependencies without this mapping.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
roboplan_* just switched from dummy run-deps-only metapackages to real
source builds. The PR-scoped build cache still holds artifacts from
when these were dummies, and --skip-existing would happily reuse them,
silently skipping the real build/test this change is meant to
exercise. Evict them so the next testpr run actually rebuilds them
from source.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@sea-bass

sea-bass commented Sep 19, 2026

Copy link
Copy Markdown
Contributor

Request: Don't yet bring in the RoboPlan commits.

I'm going to be cutting a new release (hopefully) today that fixes ABI incompatibility between the dummy conda packages and the "true" ROS ones, rather than change how they are built.

But if this branch will stick around unmerged for a bit, I can make the modifications myself when the time comes.

@Tobias-Fischer

Copy link
Copy Markdown
Contributor Author

Ok no problem @sea-bass. Does that mean we’ll go back to the dummy packages?

…ion)

The prior "Fix Japanese comments in urg-c package patch" cherry-pick
only addressed backslash getting corrupted to the yen sign (¥); this
patch's raw content went through the same JIS X 0201/ASCII encoding
mismatch for tilde (~) as well, corrupted to U+203E OVERLINE (‾).

This wasn't just cosmetic: it silently corrupted a genuine unchanged
code line in urg_sensor.c's diff context/replacement,
"value &= ~0x3f;" -> "value &= ‾0x3f;", which is a hard C syntax error
("stray '\342' in program") -- confirmed as the actual cause of
ros2-urg-c's build failure in CI. check-patches never caught this
since it only validates that a patch applies, not that the result
compiles.

Verified by cloning the real urg_c source (release/jazzy/urg_c/1.0.4001-6),
applying the patch, and compiling every affected .c file directly --
0 errors (remaining unrelated errors are from platform-specific files
missing headers in this minimal ad-hoc compile, not the codebase).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@sea-bass

Copy link
Copy Markdown
Contributor

Ok no problem @sea-bass. Does that mean we’ll go back to the dummy packages?

Exactly!

Tobias-Fischer and others added 8 commits September 20, 2026 07:39
Resolvo mutex-misattribution bug: solving irobot_create_gz_plugins'
environment picks ros2-gz-gui-vendor/ros2-ros-gz's stale remotely-
published build (mutex 0.16.*, long since removed from the channel --
no candidates exist) instead of the current one (mutex 0.17.*, matching
this repo's mutex_package version), even though a matching-mutex build
of both already exists (confirmed built earlier in the very same CI
job). Same failure mode and same fix pattern as the cartographer_ros/
yasmin_pcl pcl-conversions pin: pin the two unconstrained bare deps to
an exact version + build_number-suffixed build string so resolvo can't
consider the orphaned old build.

Unrelated to the urg-c/roboplan/octomap work in this branch -- a
separate pre-existing gap in the gz-vendor family that surfaced once
the broader rebuild scope reached irobot_create_gz_plugins for the
first time in a while.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
moveit_ros_warehouse's find_package(warehouse_ros) fails on win-64
with "Could not find a package configuration file provided by
warehouse_ros", even though ros2-warehouse-ros is a declared host dep
-- the build log shows it being skipped (reused from the PR-scoped
build cache) rather than rebuilt, at the current build_number (23).
Likely corrupted by an interrupted/cancelled run earlier this session
(this branch's win-64 jobs were cancelled and rerun several times).
Same failure mode as ros-rolling's existing moveit_ros_visualization
cache-eviction entry; confirmed win-64-specific (the other four
platforms build ros2-warehouse-ros/moveit_ros_warehouse without this
error).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
irobot_create_gz_plugins fails to solve because resolvo picks a stale
ros2-gz-gui-vendor/ros2-ros-gz build requiring the long-removed
ros2-distro-mutex 0.16.* instead of the current 0.17.* one. The
freshly-built 0.17 packages already exist in the same run's output
channel, so the stale 0.16 copies most likely came from this PR's own
GH Actions build cache, persisted from before this repo's mutex bump.
Evict them so only the current build remains -- reverts the earlier
exact-pin workaround (which pinned around the symptom rather than the
actual stale-cache cause) in favor of just rebuilding the vendor
packages fresh, matching the roboplan_* and warehouse_ros cache
evictions above.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The ros2-gz-gui-vendor/ros2-ros-gz eviction alone didn't fix
irobot_create_gz_plugins: ros2-gz-common-vendor (which pulls in a bare,
unconstrained ffmpeg host dep from its own package.xml) was still being
skipped/reused from a build that predates this repo's conda_build_config.yaml
bump to libopencv 5.0.0 / libprotobuf 7.35.1 / ffmpeg 9. A fully
protobuf-7-compatible chain already exists on conda-forge today
(libopencv 5.0.0 -> ffmpeg 9.0.x -> libopenvino 2026.3.1 -> libprotobuf
7.35.1, confirmed via direct channel queries) -- gz-common-vendor just
needed to actually rebuild against the current variant config instead
of reusing its stale artifact.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…traints

The actual, distro-wide root cause of irobot_create_gz_plugins (and
likely other libopencv/ffmpeg/gz-vendor consumers) failing to solve:
libopencv/ffmpeg builds needing libprotobuf 6.x still coexist in the
channel alongside protobuf-7-compatible ones, and resolvo doesn't
reliably pick the compatible combination on its own even though one
exists (confirmed directly: libopencv 5.0.0 -> ffmpeg 9.0.x ->
libopenvino 2026.3.1 -> libprotobuf 7.35.1 is already published).
Pinning libopenvino-tensorflow-frontend >=2026.3.1 (the actual carrier
of protobuf-7 support in this chain) as a mutex run_constraint forces
this centrally for every consumer, the same mechanism already used for
libboost/pcl/gazebo/libprotobuf -- rather than pinning each affected
downstream package's exact build individually as new ones are
discovered (reverted approach from earlier today).

Version bump 0.17.0 -> 0.18.0 forces a fresh mutex publish so this
constraint actually takes effect, per the established precedent for
run_constraints changes in this repo's history.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…, bump build_number for full rebuild

Same corrections as ros-rolling:

1. The >=2026.3.1 floor was too strict: >=2026.3.0 already carries
   libprotobuf 7.35 support (verified directly), and on osx-arm64/win-64
   today's only published protobuf-7-compatible libopencv build pins
   ffmpeg to a version that requires exactly 2026.3.0.x, which the
   >=2026.3.1 floor excluded entirely -- confirmed via direct dry-run
   solves per-platform.

2. Also pin libopencv/py-opencv >=5.0.0 directly: resolvo has
   repeatedly failed to propagate the openvino constraint transitively
   through ffmpeg -> libopencv on its own in the actual CI runs, even
   though a compatible combination exists.

3. Bumped build_number 23->24: mutex version alone doesn't force a
   rebuild of unrelated packages like ros2-ros-workspace that still
   reference the old ros2-distro-mutex 0.17.* and don't otherwise
   change. A full build_number bump forces every package to republish
   against the current mutex version, matching this repo's own
   historical precedent for run_constraints changes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
My first attempt at this fix (aa16de5, mutex version 0.18.0, run_constraints
pinning only libopenvino-tensorflow-frontend >=2026.3.1) got far enough in
its CI run (35490729546) to actually publish a real ros2-distro-mutex-0.18.0
build before I corrected the constraint in the very next commit (5132499) --
which reused the SAME version number "0.18.0" for the corrected content.
Since packages match the mutex by "0.18.* jazzy_*" (not by build string),
resolvo could pick EITHER the old wrong build or the new correct one, and
the current full-rebuild run (35492632746) hit exactly this ambiguity:
the conflict tree showed two different "would constrain" outputs for the
same "ros2-distro-mutex 0.18.0" label, one with the old too-strict
>=2026.3.1-only constraint and one with the corrected >=2026.3.0 +
libopencv/py-opencv constraints.

Bumping the version to a genuinely new number (0.19.0) that was never
published under any prior content eliminates the ambiguity. Also bumping
build_number again (24->25): packages already built in the cancelled
run under build_number 24 still embed a dependency on the old "0.18.*"
mutex and would otherwise be wrongly skip-cached as already-built once
vinca regenerates them referencing 0.19.* instead.

Lesson for next time: bump the mutex version on every actual change to
run_constraints content, including quick follow-up corrections to a
same-day fix -- never reuse a version number across two different sets
of constraint content, even briefly.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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.

3 participants