core: on peer shutdown, the disconnected peer is removed from the pending subscription acknowledges. Otherwise, participants could wait indefinitely for acknowledges that will never arrive.
config: the participant configuration is now validated against the schema. Previously, only included configuration files were validated, the root configuration was not.
config: added missing entries to the participant configuration JSON schema and the schema validation (e.g., Experimental/Metrics/UpdateInterval, RpcClients/RpcChannel, RpcServers/RpcChannel).
api: the public header silkit/services/logging/string_utils.hpp no longer includes internal headers.
config: experimental Experimental.TimeSynchronization.DynamicSimulationStep to enable dynamic
simulation step sizes, aligning each simulation step to the minimal step among all synchronized
participants. Tri-state: true requests it for the whole simulation, false opts out, and leaving
it unset follows the network. Off by default.
logging: Fixes a bug where some log messages (e.g., user-level log messages) were passed to fmt and caused exceptions when placeholder characters were present. These log messages are no longer passed to fmt.
config: a mapping that is mistyped as a YAML sequence (e.g. a stray leading - turning HealthCheck into a list) is now rejected with a clear error instead of being silently accepted.
config: a configuration containing multiple ----separated YAML documents is now rejected with a clear error. A single leading --- remains valid.
orchestration: setting a simulation step duration of zero now raises a SilKitError instead of being silently accepted.