Changelog

This page aggregates changelogs from all ros2_medkit packages.

Changelog for package ros2_medkit_gateway

0.4.0 (2026-03-20)

Breaking Changes:

  • GET /version-info response key renamed from sovd_info to items for SOVD alignment (#258)

  • GET / root endpoint restructured: endpoints is now a flat string array, added capabilities object, api_base field, and name/version top-level fields (#258)

  • Default rosbag storage format changed from sqlite3 to mcap (#258)

  • Plugin API version bumped to v4 - added ScriptProvider, locking API, and extended PluginContext with entity snapshot, fault listing, and sampler registration

  • GraphProviderPlugin extracted to separate ros2_medkit_graph_provider package

Features:

Discovery & Merge Pipeline:

  • Layered merge pipeline for hybrid discovery with per-layer, per-field-group merge policies (#258)

  • Gap-fill configuration: control heuristic entity creation with allow_heuristic_* options and namespace filtering (#258)

  • Plugin layer: IntrospectionProvider now wired into discovery pipeline via PluginLayer (#258)

  • /health endpoint includes merge pipeline diagnostics (layers, conflicts, gap-fill stats) (#258)

  • Entity detail responses now include logs, bulk-data, cyclic-subscriptions URIs (#258)

  • Entity capabilities fix: areas and functions now report correct resource collections (#258)

  • discovery.manifest.enabled / discovery.runtime.enabled parameters for hybrid mode

  • NewEntities.functions - plugins can now produce Function entities

  • GET /apps/{id}/is-located-on endpoint for reverse host lookup (app to component)

  • Beacon discovery plugin system - push-based entity enrichment via ROS 2 topic

  • x-medkit-topic-beacon and x-medkit-param-beacon vendor extension REST endpoints

  • Linux introspection plugins: procfs, systemd, and container plugins via x-medkit-* vendor endpoints (#263)

Locking:

  • SOVD-compliant resource locking: acquire, release, extend with session tracking and expiration

  • Lock enforcement on all mutating handlers (PUT, POST, DELETE)

  • Per-entity lock configuration via manifest YAML with required_scopes

  • Lock API exposed to plugins via PluginContext

  • Automatic cyclic subscription cleanup on lock expiry

  • LOCKS capability in entity descriptions

Scripts:

  • SOVD script execution endpoints: CRUD for scripts and executions with subprocess execution

  • ScriptProvider plugin interface for custom script backends

  • DefaultScriptProvider with manifest + filesystem CRUD, argument passing, and timeout

  • Manifest-defined scripts: ManifestParser populates ScriptsConfig.entries from manifest YAML

  • allow_uploads config toggle for hardened deployments

  • RBAC integration for script operations

Logging:

  • LogProvider plugin interface for custom log backends (#258)

  • LogManager with /rosout ring buffer and plugin delegation

  • /logs and /logs/configuration endpoints

  • LOGS capability in discovery responses

  • Configurable log buffer size via parameters

  • Area and function log endpoints with namespace aggregation (#258)

Triggers:

  • Condition-based triggers with CRUD endpoints, SSE event streaming, and hierarchy matching

  • TriggerManager with ConditionEvaluator interface and 4 built-in evaluators (OnChange, OnChangeTo, EnterRange, LeaveRange)

  • ResourceChangeNotifier for async dispatch from FaultManager, UpdateManager, and OperationManager

  • TriggerTopicSubscriber for data trigger ROS 2 topic subscriptions

  • Persistent trigger storage via SQLite with restore-on-restart support

  • TriggerTransportProvider plugin interface for custom trigger delivery

OpenAPI & Documentation:

  • RouteRegistry as single source of truth for routes and OpenAPI metadata

  • OpenApiSpecBuilder for full OpenAPI 3.1.0 document assembly with SchemaBuilder and PathBuilder

  • Compile-time Swagger UI embedding (ENABLE_SWAGGER_UI)

  • Named component schemas with $ref, clean operationId values, endpoint descriptions, GenericError schema refs, info.contact, Spectral-clean output, multipart upload schemas, static spec caching

  • SOVD compliance documentation with resource collection support matrix (#258)

Other:

  • Multi-collection cyclic subscription support (data, faults, logs, configurations, update-status)

  • Generation-based caching for capability responses via CapabilityGenerator

  • PluginContext::get_child_apps() for Component-level aggregation

  • Sub-resource RBAC patterns for all collections

  • Auto-populate gateway version from package.xml via CMake

  • Namespaced fault manager integration - FaultManagerPaths resolves service/topic names for custom namespaces

  • Grouped fault_manager.* parameter namespace for cleaner configuration

Build:

  • Extracted shared cmake modules into ros2_medkit_cmake package (#294)

  • Auto-detect ccache for faster incremental rebuilds

  • Precompiled headers for gateway package

  • Centralized clang-tidy configuration (opt-in locally, mandatory in CI)

Tests:

  • Unit tests for DiscoveryHandlers, OperationHandlers, ScriptHandlers, LockHandlers, LockManager, ScriptManager, DefaultScriptProvider

  • Comprehensive integration tests for locking, scripts, graph provider plugin, beacon plugins, OpenAPI/docs, logging, namespaced fault manager

  • Contributors: @bburda

0.3.0 (2026-02-27)

Features:

  • Gateway plugin framework with dynamic C++ plugin loading (#237)

  • Software updates plugin with 8 SOVD-compliant endpoints (#237, #231)

  • SSE-based periodic data subscriptions for real-time streaming without polling (#223)

  • Global DELETE /api/v1/faults endpoint (#228)

  • Return HEALED/PREPASSED faults via status filter (#218)

  • Bulk data upload and delete endpoints (#216)

  • Token-bucket rate limiting middleware, configurable per-endpoint (#220)

  • Reduce lock contention in ConfigurationManager (#194)

  • Cache component topic map to avoid per-request graph rebuild (#212)

  • Require cpp-httplib >= 0.14 in pkg-config check (#230)

  • Add missing ament_index_cpp dependency to package.xml (#191)

  • Unit tests for HealthHandlers, DataHandlers, and AuthHandlers (#232, #234, #233)

  • Standardize include guards to #pragma once (#192)

  • Use foreach loop for CMake coverage flags (#193)

  • Migrate ament_target_dependencies to compat shim for Rolling (#242)

  • Multi-distro CI support for ROS 2 Humble, Jazzy, and Rolling (#219, #242)

  • Contributors: @bburda, @eclipse0922, @mfaferek93

0.2.0 (2026-02-07)

  • Initial rosdistro release

  • HTTP REST gateway for ros2_medkit diagnostics system

  • SOVD-compatible entity discovery with four entity types:

    • Areas, Components, Apps, Functions

    • HATEOAS links and capabilities in all responses

    • Relationship endpoints (subareas, subcomponents, related-apps, hosts)

  • Three discovery modes:

    • Runtime-only: automatic ROS 2 graph introspection

    • Manifest-only: YAML manifest with validation (11 rules)

    • Hybrid: manifest as source of truth + runtime linking

  • REST API endpoints:

    • Fault management: GET/POST/DELETE /api/v1/faults

    • Data access: topic sampling via GenericSubscription

    • Operations: service calls and action goals via GenericClient

    • Configuration: parameter get/set via ROS 2 parameter API

    • Snapshots: GET /api/v1/faults/{code}/snapshots

    • Rosbag: GET /api/v1/faults/{code}/snapshots/bag

  • Server-Sent Events (SSE) at /api/v1/faults/stream:

    • Multi-client support with thread-safe event queue

    • Keepalive, Last-Event-ID reconnection, configurable max_clients

  • JWT-based authentication with configurable policies

  • HTTPS/TLS support via OpenSSL and cpp-httplib

  • Native C++ ROS 2 serialization via ros2_medkit_serialization (no CLI dependencies)

  • Contributors: Bartosz Burda, Michal Faferek

Changelog for package ros2_medkit_fault_manager

0.4.0 (2026-03-20)

  • Per-entity confirmation and healing thresholds via manifest configuration (#269)

  • Default rosbag storage format changed from sqlite3 to mcap

  • Support for namespaced fault manager nodes - gateway resolves service/topic names when the fault manager runs in a custom namespace

  • Build: use shared cmake modules from ros2_medkit_cmake package

  • Build: centralized clang-tidy configuration

  • Contributors: @bburda

0.3.0 (2026-02-27)

  • Accurate HIGHEST_SEVERITY reassignment and stale fault_to_cluster_ cleanup (#221)

  • Clean up pending_clusters_ when fault cleared before min_count (#211)

  • Multi-distro CI support for ROS 2 Humble, Jazzy, and Rolling (#219, #242)

  • Contributors: @bburda, @eclipse0922

0.2.0 (2026-02-07)

  • Initial rosdistro release

  • Central fault management node with ROS 2 services:

    • ReportFault - report FAILED/PASSED events with debounce filtering

    • GetFaults - query faults with filtering by severity, status, correlation

    • ClearFault - clear/acknowledge faults

  • Debounce filtering with configurable thresholds:

    • FAILED events decrement counter, PASSED events increment

    • Configurable confirmation_threshold (default: -1, immediate)

    • Optional healing support (healing_enabled, healing_threshold)

    • Time-based auto-confirmation (auto_confirm_after_sec)

    • CRITICAL severity bypasses debounce

  • Dual storage backends:

    • SQLite persistent storage with WAL mode (default)

    • In-memory storage for testing/lightweight deployments

  • Snapshot capture on fault confirmation:

    • Topic data captured as JSON with configurable topic resolution

    • Priority: fault_specific > patterns > default_topics

    • Stored in SQLite with indexed fault_code lookup

    • Auto-cleanup on fault clear

  • Rosbag capture with ring buffer:

    • Configurable duration, post-fault recording, topic selection

    • Lazy start mode (start on PREFAILED) or immediate

    • Auto-cleanup of bag files, storage limits (max_bag_size_mb)

    • GetRosbag service for bag file metadata

  • Fault correlation engine:

    • Hierarchical mode: root cause to symptom relationships

    • Auto-cluster mode: group similar faults within time window

    • YAML-based configuration with pattern wildcards

    • Muted faults tracking, auto-clear on root cause resolution

  • FaultEvent publishing on ~/events topic for SSE streaming

  • Wall clock timestamps (compatible with use_sim_time)

  • Contributors: Bartosz Burda, Michal Faferek

Changelog for package ros2_medkit_fault_reporter

0.4.0 (2026-03-20)

  • Build: use shared cmake modules from ros2_medkit_cmake package

  • Build: auto-detect ccache, centralized clang-tidy configuration

  • Contributors: @bburda

0.3.0 (2026-02-27)

  • Multi-distro CI support for ROS 2 Humble, Jazzy, and Rolling (#219, #242)

  • Contributors: @bburda

0.2.0 (2026-02-07)

  • Initial rosdistro release

  • FaultReporter client library with simple API:

    • report(fault_code, severity, description) - report FAILED events

    • report_passed(fault_code) - report fault condition cleared

    • High-severity faults (ERROR, CRITICAL) bypass local filtering

  • LocalFilter for per-fault-code threshold/window filtering:

    • Configurable threshold (default: 3 reports) and time window (default: 10s)

    • Prevents flooding FaultManager with duplicate reports

    • PASSED events always forwarded (bypass filtering)

  • Configuration via ROS parameters (filter_threshold, filter_window_sec)

  • Thread-safe implementation with mutex-protected config access

  • Contributors: Bartosz Burda, Michal Faferek

Changelog for package ros2_medkit_diagnostic_bridge

0.4.0 (2026-03-20)

  • Build: use shared cmake modules from ros2_medkit_cmake package

  • Build: auto-detect ccache, centralized clang-tidy configuration

  • Contributors: @bburda

0.3.0 (2026-02-27)

  • Multi-distro CI support for ROS 2 Humble, Jazzy, and Rolling (#219, #242)

  • Contributors: @bburda

0.2.0 (2026-02-07)

  • Initial rosdistro release

  • Bridge node converting standard ROS 2 /diagnostics to FaultManager fault reports

  • Severity mapping:

    • OK -> PASSED event (fault condition cleared)

    • WARN -> WARN severity FAILED event

    • ERROR -> ERROR severity FAILED event

    • STALE -> CRITICAL severity FAILED event

  • Auto-generated fault codes from diagnostic names (UPPER_SNAKE_CASE)

  • Custom name_to_code mappings via ROS parameters

  • Stateless design: always sends PASSED for OK status (handles restarts)

  • Contributors: Michal Faferek

Changelog for package ros2_medkit_serialization

0.4.0 (2026-03-20)

  • Enable POSITION_INDEPENDENT_CODE for MODULE target compatibility

  • Build: use shared cmake modules from ros2_medkit_cmake package

  • Build: auto-detect ccache, centralized clang-tidy configuration

  • Contributors: @bburda

0.3.0 (2026-02-27)

  • Multi-distro CI support for ROS 2 Humble, Jazzy, and Rolling (#219, #242)

  • Contributors: @bburda

0.2.0 (2026-02-07)

  • Initial rosdistro release

  • Runtime JSON to ROS 2 message serialization using vendored dynmsg C++ API

  • TypeCache - thread-safe caching of ROS type introspection data with shared_mutex for read concurrency

  • JsonSerializer - bidirectional JSON <-> ROS message conversion via dynmsg YAML bridge, including CDR serialization/deserialization for GenericClient/GenericSubscription

  • ServiceActionTypes - helper utilities for resolving service and action internal types (request/response, goal/result/feedback)

  • SerializationError exception hierarchy for structured error handling

  • Contributors: Bartosz Burda

Changelog for package ros2_medkit_msgs

0.4.0 (2026-03-20)

  • MedkitDiscoveryHint message type for beacon discovery publishers

  • Contributors: @bburda

0.3.0 (2026-02-27)

  • Multi-distro CI support for ROS 2 Humble, Jazzy, and Rolling (#219, #242)

  • Contributors: @bburda

0.2.0 (2026-02-07)

  • Initial rosdistro release

  • Fault management messages:

    • Fault.msg - Core fault data model with severity levels (INFO/WARN/ERROR/CRITICAL) and debounce-based status lifecycle (PREFAILED/PREPASSED/CONFIRMED/HEALED/CLEARED)

    • FaultEvent.msg - Real-time event notifications (EVENT_CONFIRMED/EVENT_CLEARED/EVENT_UPDATED) with auto-cleared correlation codes

    • MutedFaultInfo.msg - Fault correlation muting metadata

    • ClusterInfo.msg - Fault clustering information

  • Fault management services:

    • ReportFault.srv - Report fault events with FAILED/PASSED event model

    • GetFaults.srv - Query faults with filtering by severity, status, and correlation data

    • ClearFault.srv - Clear/acknowledge faults by fault_code

    • GetSnapshots.srv - Retrieve topic snapshots captured at fault time

    • GetRosbag.srv - Retrieve rosbag recordings associated with faults

  • Contributors: Bartosz Burda, Michal Faferek

Changelog for package ros2_medkit_integration_tests

0.4.0 (2026-03-20)

  • Integration tests for SOVD resource locking (acquire, release, extend, fault clear with locks, expiration, parent propagation)

  • Integration tests for SOVD script execution endpoints (all formats, params, output, failure, lifecycle)

  • Integration tests for graph provider plugin (external plugin loading, entity introspection)

  • Integration tests for beacon discovery plugins (topic beacon, parameter beacon)

  • Integration tests for OpenAPI/docs endpoint

  • Integration tests for logging endpoints (/logs, /logs/configuration)

  • Integration tests for linux introspection plugins (launch_testing and Docker-based)

  • Port isolation per integration test via CMake-assigned unique ports

  • ROS_DOMAIN_ID isolation for integration tests

  • Build: use shared cmake modules from ros2_medkit_cmake package

  • Contributors: @bburda

0.3.0 (2026-02-27)

  • Refactored integration test suite into dedicated ros2_medkit_integration_tests package (#227)

  • Multi-distro CI support for ROS 2 Humble, Jazzy, and Rolling (#219, #242)

  • Contributors: @bburda

Changelog for package ros2_medkit_cmake

0.4.0 (2026-03-20)

  • Initial release - shared cmake modules extracted from gateway package (#294)

  • ROS2MedkitCcache.cmake - auto-detect ccache for faster incremental rebuilds

  • ROS2MedkitLinting.cmake - centralized clang-tidy configuration (opt-in locally, mandatory in CI)

  • ROS2MedkitCompat.cmake - multi-distro compatibility shims for ROS 2 Humble/Jazzy/Rolling

  • Contributors: @bburda

Changelog for package ros2_medkit_linux_introspection

0.4.0 (2026-03-20)

  • Initial release - Linux process introspection plugins for ros2_medkit gateway

  • procfs_plugin - process-level diagnostics via /proc filesystem (CPU, memory, threads, file descriptors)

  • systemd_plugin - systemd unit status and resource usage via D-Bus

  • container_plugin - container runtime detection and cgroup resource limits

  • PidCache with TTL-based refresh for efficient PID-to-node mapping

  • proc_reader and cgroup_reader utilities with configurable proc root

  • Cross-distro support for ROS 2 Humble, Jazzy, and Rolling

  • Contributors: @bburda

Changelog for package ros2_medkit_beacon_common

0.4.0 (2026-03-20)

  • Initial release - shared utilities for beacon discovery plugins

  • BeaconHintStore with TTL-based hint transitions and thread safety

  • BeaconValidator input validation gate

  • BeaconEntityMapper to convert discovery hints into IntrospectionResult

  • build_beacon_response() shared response builder

  • BeaconPlugin base class for topic and parameter beacon plugins

  • TokenBucket rate limiter with thread-safe access

  • Contributors: @bburda

Changelog for package ros2_medkit_param_beacon

0.4.0 (2026-03-20)

  • Initial release - parameter-based beacon discovery plugin

  • ParameterBeaconPlugin with pull-based parameter reading for entity enrichment

  • x-medkit-param-beacon vendor extension REST endpoint

  • Poll target discovery from ROS graph in non-hybrid mode

  • ParameterClientInterface for testable parameter access

  • Contributors: @bburda

Changelog for package ros2_medkit_topic_beacon

0.4.0 (2026-03-20)

  • Initial release - topic-based beacon discovery plugin

  • TopicBeaconPlugin with push-based topic subscription for entity enrichment

  • x-medkit-topic-beacon vendor extension REST endpoint

  • Stamp-based TTL for topic beacon hints

  • Diagnostic logging for beacon hint processing

  • Contributors: @bburda

Changelog for package ros2_medkit_graph_provider

0.4.0 (2026-03-20)

  • Initial release - extracted from ros2_medkit_gateway package

  • GraphProviderPlugin for ROS 2 graph-based entity introspection

  • Standalone external plugin package with independent build and test

  • Locking support via PluginContext API

  • Contributors: @bburda