Skip to content

v1.1.0

Latest

Choose a tag to compare

@github-actions github-actions released this 08 Oct 10:10
· 79 commits to main since this release
Immutable release. Only release title and notes can be modified.
668e59f

1.1.0 (2026-10-08)

Bug Fixes

  • Normalize CRLF when comparing the cli-surface.txt snapshot (#3407) (33cde66)
  • Preserve backpressure inputs under timer pressure (#3429) (177c144)
  • Don't abort the process on a non-UTF-8 string field (#3286) (69a4f44)
  • Don't panic on an invalid operator output id during module expansion (#3378) (1cf6ed8)
  • Fail closed instead of panicking on a non-ASCII type hash (#3415) (3e3fa44)
  • Validate Logs node id instead of panicking (#3450) (#3453) (89565bf)
  • Don't orphan a topic subscriber when a start request fails (#3352) (8cd7083)
  • Tolerate transient log-subscriber send timeouts (#3063) (bda3e69)
  • Reject an invalid operator output id instead of aborting across FFI (#3356) (4d0a9a9)
  • Bound header json_len before slicing the mirror segment (#3408) (752f4be)
  • Reject empty-base URNs and guard edit_distance on characters (#3423) (9f7c7e4)
  • Don't disconnect a live daemon on a heartbeat-send backpressure timeout (#2886) (0cd589b)
  • Re-prompt instead of panicking on an invalid interactive input ID (#3333) (73f8514)
  • Log instead of propagate an extension-request handler error (#3382) (7ad4bb0)
  • Drop a removed node's cached remote publishers on cleanup (#3351) (fee7f3a)
  • Route legacy raw-text .txt logs through the filter pipeline (#3312) (#3315) (34c65d5)
  • Honor per-node --log-filter levels when following logs (#3323) (8fa3d27)
  • Parse the rotation index of legacy .txt log files (#3383) (b6fa3c1)
  • Scope --node log matching to exact file suffixes (#3449) (#3452) (b967a9e)
  • Prefer a positive error marker over a trailing Warning in extract_err_from_stderr (#3411) (#3413) (87d0338)
  • Surface stream Event::Error to Rust operators (#3276) (8ff5c63)
  • Don't discard a located node binary when canonicalization fails (#3379) (606caee)
  • Report the actual path in Python template directory errors (#3418) (d21a122)
  • Don't let a stray dora-config.yml brick dora up/down (#3419) (ad18ed0)
  • Reject sub-nanosecond interval fields in descriptor validation (#3345) (b7da55e)
  • Bound the queue of an operator input that has no configured size (#3422) (41a913f)
  • Sanitize runtime-node subgraph IDs in Mermaid output (#3456) (88392ac)
  • Don't misclassify a member with = in its string default (#3457) (626baa0)
  • Match RUST_LOG targets on a name boundary, not a bare substring (#3337) (6cd0561)
  • Forward Trace-level logs through the Tracing destination (#3348) (#3349) (d78e075)
  • Flush buffered logs before dora run returns (#2930) (2df5c41)
  • Honor --until for newly appended lines in local log follow (#3336) (4b64427)
  • Honor timeout on merged (ROS2) event streams (#3366) (f441d7f)
  • Skip the send-side output type check for Null payloads (#3380) (b358889)
  • Keep the input type check armed on a Null first message (#3430) (f30be31)
  • Replay recorded zero-length arrays in integration testing (#3438) (29a7d49)
  • Validate dora replay --speed instead of silently replaying at full speed (#3381) (41323a2)
  • Reject record topics that collide under the ___ input-id encoding (#3444) (09e4994)
  • Bound recorder crash-loss by record count and wall-clock time (#2895) (e94ba85)
  • Answer unsupported requests on the local listener (#3285) (f8cf420)
  • Don't abort version resolution on one unreadable index entry (#3355) (77c7cc7)
  • Escape Mermaid-significant chars in node description (#3371) (ee5e841)
  • Don't skip graceful reader shutdown on a send_output error (#3432) (6e62b56)
  • Keep the timer-tick tracing span entered for the tick body (#3464) (a3c2721)
  • Tolerate Python log levels above 255 in host_log (#3367) (bb65c14)
  • Validate ros2 port mappings and bind single-topic bridges to the declared port (#3310) (2b84efd)
  • Resolve module inner node paths relative to lexical project root (#3341) (#3350) (e405f93)
  • Bound zenoh connect and scouting timeouts to prevent teardown hang (#2776) (#3340) (30f929c)
  • The # between " " does not break the parser (#3488) (60e20d8)
  • Enforce ros2 multi-topic port mappings on the resolve path (#3484) (#3486) (070f8c7)
  • Bump rustls to 0.23.45 to resolve RUSTSEC-2026-0285 (#3503) (389263a)
  • Bound pending_passthrough per input queue policy (#3197) (#3494) (ff92a2c)
  • Contain pre-init orphans on a hard-killed dora run (#3473) (#3482) (b33dac4)
  • Preserve NaN and infinities in integration-test recordings (#3490) (444df6b)
  • Record finite floats with a bit-exact wire format (#3508) (6ff855c)
  • Warn that replay pins replayed outputs to the daemon path (#3448) (#3507) (3540b30)
  • Don't report an unknown goal_status as success (#3505) (4853fca)
  • Validate dora new name against CMake/TOML-breaking characters (#3441) (41670a1)
  • Wire zenoh mesh args into dora cluster install units (#3504) (622549c)
  • Answer every pending Zenoh get-result request (#3506) (e4bc167)
  • Reject dora new names that still break the build (#3515) (9215f03)
  • Gate Cargo.lock freshness so a stale entry cannot reach main (#3517) (be9a759)
  • Unify project root resolution for symlinked entrypoints (#3247) (#3465) (c4a1ed8)
  • Warn when a registered receiver has no daemon event stream (#3520) (ce7042d)
  • Escape the edition-2024 reserved keyword gen in msg-gen (#3530) (2b36d51)
  • Size the record node's queues and report what it drops (#3518) (080749c)
  • Let TopicSubscribe and StartTopicDebugStream grow without a 2.0 (#3531) (c6b362a)
  • Time topic hz from the producer HLC stamp; clear stale watchers on daemon reconnect (#3523) (ce6dd98)
  • Avoid Instant+Duration overflow panic in the topic hz/echo samplers (#3537) (119720c)
  • Clamp pattern-wait timeout to avoid Instant+Duration overflow panic (#3538) (b7f005c)
  • Correct the reply-failure message in the Logs handler (#3565) (a3eafbd)
  • Run first-message type check on inputs drained after Stop (#3574) (3e7c94f)
  • Keep the ingress-drop warning recurring for non-draining nodes (#3557) (325f0a9)
  • Render node description in dora graph for runtime/operator nodes (#3573) (088579c)
  • List the operator kind in the "no implementation field" error (#3549) (22531b1)
  • Don't warn per log line for an output with no consumer (#3561) (8ab8548)
  • Restore the help text for --uv and --local (#3548) (12e9079)
  • Don't panic in NodeError's Display impl (#3562) (0abf327)
  • Keep dora topic hz --duration sample count consistent with its stats (#3570) (558e238)
  • Skip a single oversized frame instead of aborting the recording (#3572) (b278d3c)
  • Stop dora top counting node threads as processes (#3559) (7296f22)
  • Fall back to local out/ for dora logs --node when the coordinator is unavailable (#3550) (f5328c0)
  • Kill the node tree on a hard-killed dora run (Windows Job Object) (#3544) (69b0a54)
  • Enforce a single-batch, no-trailing-bytes IPC contract in both decoders (#3588) (c78a673)
  • Add connect and read timeouts to download_file (#3587) (40a0cf8)
  • Retry finished dataflow reports after reconnect (#3118) (9ff1819)
  • Link same-host daemons without multicast, report unlinked daemons (#3533) (c85787b)
  • Don't warn about a normally-finished consumer's missing event stream (#3558) (782e6dc)
  • Keep node_filter in InputMapping::Logs Display when min_level is None (#3569) (fd2d155)
  • Give joining dynamic nodes explicit zenoh peers (#3592) (8db4a15)
  • Hold the producer instead of dropping on a full backpressure receiver, so dora replay --speed 0 is lossless (#3397) (#3590) (ae8d732)
  • Make send_output_sample ignore undeclared and closed outputs (#3597) (de1a6f4)
  • Don't sweep a sibling daemon's segments whose machine id extends ours (#3595) (f4d2d99)
  • Summarize a trace from its topmost captured span when the root is missing (#3608) (a70f015)
  • Canonicalize a full UUID passed to dora trace view (#3607) (fa9cae1)
  • Flush the node log file before reporting the log task finished (#3598) (24921fb)
  • Parse max_log_size as u64 so sizes ≥ 4 GiB work on 32-bit targets (#3609) (810b834)
  • Deliver scheduler-buffered inputs on the Stream path (#3596) (b8535fd)
  • Enforce the WebSocket connection cap for the socket's lifetime (#3600) (6c55dd3)
  • Resend finish reports a dying coordinator link may have lost (#3612) (4753258)
  • Stop daemon topic streams when a subscriber is evicted (#3599) (46b6633)
  • Give up on a stalled backpressure receiver once, not per message (#3610) (476e75a)
  • Keep answering the zenoh link probe when the endpoint exchange is off or slow (#3611) (3d3a90d)
  • Prefix a module's sibling log filter during expansion (#3652) (3cdefbf)
  • Don't re-root a git node's path during module expansion (#3651) (bc56a99)
  • Validate timing fields of a node joining a running dataflow (#3649) (fa57320)
  • Reject a git commit hash that is not hex before using it as a path (#3647) (79e302e)
  • Reject a send_stdout_as / send_logs_as that is not a valid output id (#3643) (1a19949)
  • Count a param-store read failure as a failed replay (#3650) (292b7fb)
  • Drop a node TCP connection whose framing is lost (#3624) (a205c9b)
  • Count the message that finds a receiver's channel closed (#3622) (f86292a)
  • Saturate the restart backoff instead of panicking on a huge restart_delay (#3614) (88774cd)
  • Accept LargeUtf8 and Utf8View in String/&str conversions (#3662) (b25168b)
  • Strip hub/ros2/path_sha256 from nodes that dora replay rewrites (#3644) (7893917)
  • Install the W3C TraceContext propagator when OTLP tracing is enabled (#3642) (b6db12b)
  • Open serial devices whose path contains ':' (#3648) (07a1cbd)
  • Pace replay against an absolute schedule so it does not drift (#3616) (0fc1ec4)
  • Run dora record/dora replay descriptors from a private temp dir (#3646) (b7d76c7)
  • Tighten an existing token file's mode before writing the secret (#3627) (81a1e93)
  • Keep a restarted node's previous log output (#3625) (a477746)
  • Accept every log entry the daemon forwards to send_logs_as sinks (#3615) (d59dd80)
  • Don't panic at init on a huge input queue_size (#3629) (147a6b9)
  • Don't truncate a log file name at its last dot (#3628) (b2df5ec)
  • Print a C listener's input with its length, not as a C string (#3706) (082cdb5)
  • Compute topic hz intervals in producer-stamp order (#3696) (03c3050)
  • Bracket an IPv6 host in the dora cluster upgrade scp target (#3680) (5352a05)
  • Keep a log line's structured fields in dora logs (#3671) (802f491)
  • Read a log file with invalid UTF-8 lossily in dora logs (#3670) (9d1ec82)
  • Keep index cache markers out of the checked-out tree (#3655) (0ffe408)
  • Catch panics in operator Default and Drop instead of aborting the runtime (#3613) (56ba8e8)
  • Reject an invalid output id in dora record --proxy instead of panicking (#3695) (c765ccf)
  • Send a reconnecting daemon only the catch-up entries for its own nodes (#3692) (e564ed1)
  • Answer a log subscription before replaying its backlog (#3676) (6de0bcd)
  • Send an abort result the DDS action client can receive (#3704) (1d2c4d5)
  • Answer a Logs request for an unknown dataflow with an error (#3667) (5e826e9)
  • Log a node's non-Register first request by kind, not payload (#3679) (08096ac)
  • Reject an invalid integration-test time offset instead of panicking (#3669) (015fc77)
  • Raise on an invalid output id instead of panicking (#3705) (53c2aad)
  • Validate timing fields of a dora start descriptor (#3666) (f588aaa)
  • Overwrite a re-recorded span field instead of appending a duplicate (#3697) (bd65574)
  • Route a relayed pool write to its mirror only (#3691) (3bf3049)
  • Relaunch a restarted dataflow with its original launch context (#3677) (7f80924)
  • Preserve rolling upgrades with loopback Zenoh listeners (#3740) (42f722d)

CI

  • Swap waiting-for-author for waiting-for-review on author activity (#3469) (9811352)
  • Fix the multi-platform build and smoke the dora-slim image (#3470) (6776d26)
  • Guard the nightly reporting wiring against silent rot (#3343) (a2118f8)
  • Make ROS2 Zenoh interop jobs blocking now they run green (#3510) (4840de3)
  • Don't let a push-triggered run cancel the scheduled one (#3534) (177800c)
  • Waive RUSTSEC-2026-0299 (owned-alloc unmaintained) (#3581) (c5e98b7)

Documentation

  • Reconcile nightly test-job count to 27 across QA docs (#3313) (9cc1ee0)
  • Document the descriptor public API surface (#3278) (9b182fc)
  • Dedupe guide Rust page to canonical docs/api-rust.md (#3252) (#3314) (2764cf0)
  • Correct the Python metadata shape in the service/streaming examples (#3363) (5390f68)
  • Correct replay queue-sizing doc scope (#3397) (#3399) (751d39b)
  • Document that into_vec truncates float→int casts (#3446) (bc2199d)
  • Correct the handshake magic length in the auth doc (#3459) (01f9c16)
  • Link examples to GitHub instead of broken relative paths (#3451) (#3461) (5c15198)
  • Fix misattached doc block on serialized_size / encode_presized (#3442) (fe76107)
  • Document dora_read_data's consume-on-read contract (#3458) (58ce6c9)
  • Document current_crate_version and InvalidId; use the helper in NodeRegisterRequest (#3410) (2c99f21)
  • Correct parse_log_from_arrow's element-count contract (#3434) (2139347)
  • Fix bulk_bytes reference to a non-existent InterDaemonEvent variant (#3435) (bf1824a)
  • Note SET_MODE.base_mode is stored as UInt8 (#3463) (bb807a9)
  • Use output_channel in the integration-testing example (#3492) (48839dc)
  • Add compile-checked doctests to public API helpers (#3491) (c3b43fe)
  • Add a compile-checked example to SampleAllocator::encode_arrow (#3475) (0f69f0c)
  • Document Metadata::parameters and add a usage doctest (#3483) (00013d6)
  • Document public LogMessage / NodeExitStatus API and add an encode/decode doctest (#3476) (6a82cb1)
  • Add compile-checked doctests to public type helpers (#3487) (4f473ec)
  • Add doctests for ROS2 port-id derivation helpers (#3496) (5ae848c)
  • Document DaemonId and add compile-checked doctests (#3495) (7e3721c)
  • Add a usage doctest to MergeExternal::merge_external (#3498) (abbc964)
  • Fill public-API documentation gaps found in review (#3553) (0da7f47)
  • Merge the duplicated DEFAULT_RECORD_QUEUE_SIZE rationale (#3575) (0de2e23)
  • Document the DoraStatus variants, including StopAll (#3564) (999fdb8)
  • Compile-check the service request/response examples (#3540) (9a9d284)
  • Correct DoraNode::log level docs and add a doctest (#3580) (ebce23f)
  • Fix misattributed doc comments on zenoh payload helpers (#3579) (bc8835d)
  • Add a compile-checked doctest to PackageRef::parse (#3589) (d2d5ee3)
  • Correct into_vec's claim that integer-to-float is exact (#3617) (7cf1992)
  • Fix stale c++-dataflow README (#3637) (#3665) (2b2d9db)

Features

Fix

  • Ros2-bridge: an omitted variable-length sequence field serializes to a non-empty default (1 element for Sequence, max_size for BoundedSequence) instead of an empty sequence (#3500) (dbc0e2b)

Performance

  • Cap coalescing copy in socket_stream_send (#3265) (d905b19)
  • Don't copy foreign nodes' payloads when replaying (#3324) (0eeafef)
  • Avoid per-message OutputId key clone in send_to_remote_receivers (#3334) (24573bd)
  • Avoid eager fallback evaluation in LogMessage::from (#3368) (c243f16)
  • Stream downloads to disk instead of buffering the whole body (#3357) (233899a)
  • Wait for events without busy-polling (#3396) (7fe96f0)
  • Cache each message type's Arrow schema as a SchemaRef (#3424) (2571c85)
  • Size ParamUpdate/NodeFailed payloads in NodeEvent::encode_size_hint (#3443) (121971f)
  • Skip context serialization when no span is active (#3395) (e4631c8)
  • Skip redundant metadata encode on schema-once send path (#3294) (115e4ff)
  • Cache the trace-flag env var instead of reading it per sample (#3526) (17b630e)
  • Filter the graph cache in place in matching_services (#3563) (60bb73d)
  • Only compute the echo timestamp on the JSON output path (#3552) (b0f2298)
  • Forward telemetry as soon as it is decoded (#3618) (a1f15d7)
  • Don't ship a sliced array's whole parent through the IPC fast path (#3653) (451c212)

Refactoring

  • Drop the two schema post-processing steps that match nothing (#3377) (83485e3)
  • Drop no-op PathBuf round-trip in record --proxy output path (#3447) (99469fd)
  • Drop the inert footer re-validation in next_entry (#3358) (30c3a2a)
  • Drop two unreachable int64 tags in the basic-type parser (#3416) (a20baeb)
  • Move the operator subtree out in resolve_aliases_and_set_defaults instead of cloning (#3431) (97cbb7c)
  • Dedupe the C++ event-dispatch arms (#3417) (ed56367)
  • Collapse stderr marker scans to Iterator::any (#3477) (77b289b)
  • Dedupe daemon channel setup in EventStream::init (#3497) (19fb080)
  • Use str::floor_char_boundary for UTF-8-safe truncation (#3525) (d072103)
  • Dedupe log-subscribe reply handling (#3527) (05f46a2)
  • Split the daemon and coordinator lib.rs into per-concern modules (#3532) (c3ca900)
  • Route dora restart through the shared control-request helpers (#3551) (72ef720)
  • Simplify first-exited-node lookup and drop redundant into_iter (#3539) (f5ccaa8)
  • Scan running dataflows once in the dynamic-node lookup (#3566) (34709f3)
  • Reuse dora-message ByteSize for max_log_size parsing (#3593) (de1bbab)
  • Drop the unused coordinator_addr zenoh path (#3641) (c328134)

Testing

  • Property-test the integration-testing record/replay codec (#3528) (8b5c2c4)
  • Assert routing survives repeated dataflow start/stop cycles (#3201) (#3545) (23252bb)
  • Cover the oversized-skip INCOMPLETE reporting (#3585) (382822e)

Chore

Tracing

  • Default zenoh to warn on the OTLP span layer (#3658) (25a63ad)