ros2-architect — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ros2-architect (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Covers the three current ROS2 distributions; patterns are consistent across all three with version-specific notes called out where they diverge. C++ (rclcpp) and Python (rclpy) treated as equal first-class targets. Development environment via Pixi + RoboStack — the modern, cross-platform alternative to sudo apt install ros-*. See STACK.md for distro details and pinned tool versions.
Python-side rclpy nodes inherit the typing, dataclass, asyncio, and testing rules from python-architect — this skill adds the ROS2-specific layer on top.
| Distro | Type | Released | EOL | When to pick |
|---|---|---|---|---|
| Jazzy Jalisco | LTS | May 2024 | May 2029 | Default for new production systems. Mature, broad community, 3+ years of support left. |
| Kilted Kaiju | non-LTS | May 2025 | Dec 2026 | When you specifically need a feature added in Kilted and can plan a migration before Dec 2026. |
| Lyrical Luth | LTS | May 2026 | May 2031 | Default for new systems once the ecosystem catches up (typically 1–3 months post-release as third-party packages migrate). Long support window. |
A ROS2 workspace is the root of one or more packages built together by colcon. Pixi sits at the workspace root and gives every contributor the same ROS distro, the same compiler, the same Python — on Linux, macOS, or Windows. Full tree in RECIPES § Workspace layout.
my_robot package.Pixi solves the historical ROS2 pain: needing a specific Ubuntu version, conflicting Python installs, broken updates from apt. RoboStack channel on conda-forge distributes ROS distros as conda packages, so Pixi can install ROS2 anywhere conda runs — Linux, macOS, Windows. Skeleton: RECIPES.md § pixi.toml — workspace manifest.
.pixi/ directory is isolated; the system stays clean.pixi run build in GitHub Actions = the same env every developer uses.ament_cmake vs ament_pythonThe build type is declared in package.xml. Use ament_cmake for C++ (and for interface-only _msgs packages); ament_python for pure-Python packages. Skeletons: RECIPES.md § package.xml — ament_cmake and § ament_python.
package.xml. Older formats still work but lack features.std_msgs showing up because something else pulled it) is a latent bug.build_depend / exec_depend: prefer the unified <depend> tag when the dependency is needed at both build and runtime. Split only when they differ.ament_lint_*) are part of every package's test suite.A node is the unit of computation. One process can host one or many nodes (rclcpp::executors::MultiThreadedExecutor / rclpy.executors).
unconfigured → inactive → active → finalized. Allows the launch system to bring up nodes in the right order, retry init, and gracefully shut down. Use for any node that holds an open connection (camera, motor controller, network socket)./imu_driver, /path_planner).Every publisher / subscriber declares an explicit QoS profile. Default behavior bites. Profile reference + C++/Python snippets in RECIPES § QoS.
/sensors/imu/data, /control/cmd_vel. Namespace by subsystem.ros2 topic info -v)./robot/battery, /system/status.| Service | Action | |
|---|---|---|
| Purpose | Synchronous request/response | Long-running task with feedback + cancellation |
| Pattern | Add(a, b) → c | MoveToGoal(pose) → feedback(progress) → result(success) |
| Use when | Operation completes in < 100 ms | Operation takes seconds-to-minutes |
| Pitfall | Blocking callbacks freeze the executor | Action server complexity (goal/feedback/result/cancel) |
async_send_request (C++) / call_async (rclpy) and handle the future.declare_parameter(name, default, descriptor). Undeclared parameters fail to read.ros2 param describe.add_on_set_parameters_callback — reject bad values; never silently accept and crash later._bringup package, loaded by launch via Node(parameters=[config_path]). Per-robot, per-environment configs live there.IntegerRange, FloatingPointRange, additional_constraints — the parameter system enforces them.Launch files describe how to bring up a system: which nodes to run, with which parameters, in which order, on which conditions. Skeleton: RECIPES.md § Launch file — Python DSL.
use_sim, robot_model). One launch file, many configurations.IncludeLaunchDescription — reuse the camera launch in both sim and real robot.** in every package's test suite — ament_cppcheck, ament_cpplint (C++), ament_flake8, ament_pep257` (Python). Failures fail CI.pixi run test → colcon test && colcon test-result --verbose --all.printf / print.osrf/ros:kilted-desktop if you need the upstream container. Multi-arch (amd64 + arm64) per docker-architect §5 for robot vs dev machine.mise/proto (env management) and Task (task running). For ROS2 workspaces, Pixi covers both jobs; for polyglot repos with ROS2 + other services, mise + Pixi can coexist (Pixi owns the ROS2 environment).~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.