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-inforesponse key renamed fromsovd_infotoitemsfor SOVD alignment (#258)GET /root endpoint restructured:endpointsis now a flat string array, addedcapabilitiesobject,api_basefield, andname/versiontop-level fields (#258)Default rosbag storage format changed from
sqlite3tomcap(#258)Plugin API version bumped to v4 - added
ScriptProvider, locking API, and extendedPluginContextwith entity snapshot, fault listing, and sampler registrationGraphProviderPluginextracted to separateros2_medkit_graph_providerpackage
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:
IntrospectionProvidernow wired into discovery pipeline viaPluginLayer(#258)/healthendpoint includes merge pipeline diagnostics (layers, conflicts, gap-fill stats) (#258)Entity detail responses now include
logs,bulk-data,cyclic-subscriptionsURIs (#258)Entity capabilities fix: areas and functions now report correct resource collections (#258)
discovery.manifest.enabled/discovery.runtime.enabledparameters for hybrid modeNewEntities.functions- plugins can now produce Function entitiesGET /apps/{id}/is-located-onendpoint for reverse host lookup (app to component)Beacon discovery plugin system - push-based entity enrichment via ROS 2 topic
x-medkit-topic-beaconandx-medkit-param-beaconvendor extension REST endpointsLinux 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_scopesLock API exposed to plugins via
PluginContextAutomatic cyclic subscription cleanup on lock expiry
LOCKScapability in entity descriptions
Scripts:
SOVD script execution endpoints: CRUD for scripts and executions with subprocess execution
ScriptProviderplugin interface for custom script backendsDefaultScriptProviderwith manifest + filesystem CRUD, argument passing, and timeoutManifest-defined scripts:
ManifestParserpopulatesScriptsConfig.entriesfrom manifest YAMLallow_uploadsconfig toggle for hardened deploymentsRBAC integration for script operations
Logging:
LogProviderplugin interface for custom log backends (#258)LogManagerwith/rosoutring buffer and plugin delegation/logsand/logs/configurationendpointsLOGScapability in discovery responsesConfigurable 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
TriggerManagerwithConditionEvaluatorinterface and 4 built-in evaluators (OnChange, OnChangeTo, EnterRange, LeaveRange)ResourceChangeNotifierfor async dispatch from FaultManager, UpdateManager, and OperationManagerTriggerTopicSubscriberfor data trigger ROS 2 topic subscriptionsPersistent trigger storage via SQLite with restore-on-restart support
TriggerTransportProviderplugin interface for custom trigger delivery
OpenAPI & Documentation:
RouteRegistryas single source of truth for routes and OpenAPI metadataOpenApiSpecBuilderfor full OpenAPI 3.1.0 document assembly withSchemaBuilderandPathBuilderCompile-time Swagger UI embedding (
ENABLE_SWAGGER_UI)Named component schemas with
$ref, cleanoperationIdvalues, endpoint descriptions,GenericErrorschema refs,info.contact, Spectral-clean output, multipart upload schemas, static spec cachingSOVD 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
CapabilityGeneratorPluginContext::get_child_apps()for Component-level aggregationSub-resource RBAC patterns for all collections
Auto-populate gateway version from
package.xmlvia CMakeNamespaced fault manager integration -
FaultManagerPathsresolves service/topic names for custom namespacesGrouped
fault_manager.*parameter namespace for cleaner configuration
Build:
Extracted shared cmake modules into
ros2_medkit_cmakepackage (#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/faultsendpoint (#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_cppdependency topackage.xml(#191)Unit tests for HealthHandlers, DataHandlers, and AuthHandlers (#232, #234, #233)
Standardize include guards to
#pragma once(#192)Use
foreachloop for CMake coverage flags (#193)Migrate
ament_target_dependenciesto 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
sqlite3tomcapSupport 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_cmakepackageBuild: centralized clang-tidy configuration
Contributors: @bburda
0.3.0 (2026-02-27)
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_cmakepackageBuild: auto-detect ccache, centralized clang-tidy configuration
Contributors: @bburda
0.3.0 (2026-02-27)
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_cmakepackageBuild: auto-detect ccache, centralized clang-tidy configuration
Contributors: @bburda
0.3.0 (2026-02-27)
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_CODEfor MODULE target compatibilityBuild: use shared cmake modules from
ros2_medkit_cmakepackageBuild: auto-detect ccache, centralized clang-tidy configuration
Contributors: @bburda
0.3.0 (2026-02-27)
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)
MedkitDiscoveryHintmessage type for beacon discovery publishersContributors: @bburda
0.3.0 (2026-02-27)
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_IDisolation for integration testsBuild: use shared cmake modules from
ros2_medkit_cmakepackageContributors: @bburda
0.3.0 (2026-02-27)
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 rebuildsROS2MedkitLinting.cmake- centralized clang-tidy configuration (opt-in locally, mandatory in CI)ROS2MedkitCompat.cmake- multi-distro compatibility shims for ROS 2 Humble/Jazzy/RollingContributors: @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/procfilesystem (CPU, memory, threads, file descriptors)systemd_plugin- systemd unit status and resource usage via D-Buscontainer_plugin- container runtime detection and cgroup resource limitsPidCachewith TTL-based refresh for efficient PID-to-node mappingproc_readerandcgroup_readerutilities with configurable proc rootCross-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
BeaconHintStorewith TTL-based hint transitions and thread safetyBeaconValidatorinput validation gateBeaconEntityMapperto convert discovery hints intoIntrospectionResultbuild_beacon_response()shared response builderBeaconPluginbase class for topic and parameter beacon pluginsTokenBucketrate limiter with thread-safe accessContributors: @bburda
Changelog for package ros2_medkit_param_beacon
0.4.0 (2026-03-20)
Initial release - parameter-based beacon discovery plugin
ParameterBeaconPluginwith pull-based parameter reading for entity enrichmentx-medkit-param-beaconvendor extension REST endpointPoll target discovery from ROS graph in non-hybrid mode
ParameterClientInterfacefor testable parameter accessContributors: @bburda
Changelog for package ros2_medkit_topic_beacon
0.4.0 (2026-03-20)
Initial release - topic-based beacon discovery plugin
TopicBeaconPluginwith push-based topic subscription for entity enrichmentx-medkit-topic-beaconvendor extension REST endpointStamp-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_gatewaypackageGraphProviderPluginfor ROS 2 graph-based entity introspectionStandalone external plugin package with independent build and test
Locking support via
PluginContextAPIContributors: @bburda