CHANGELOG
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