Repository navigation
·
79 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
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 runreturns (#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 --speedinstead 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-
initorphans on a hard-killeddora 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 installunits (#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
genin 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 graphfor runtime/operator nodes (#3573) (088579c) - List the
operatorkind 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 --durationsample count consistent with its stats (#3570) (558e238) - Skip a single oversized frame instead of aborting the recording (#3572) (b278d3c)
- Stop
dora topcounting node threads as processes (#3559) (7296f22) - Fall back to local out/ for
dora logs --nodewhen 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 0is 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_sizeas 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 replayrewrites (#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 replaydescriptors 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 hzintervals in producer-stamp order (#3696) (03c3050) - Bracket an IPv6 host in the
dora cluster upgradescp 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 --proxyinstead 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
Logsrequest 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 startdescriptor (#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
- Add IntoArrow for Vec (#3445) (032ed90)
- Thread-safe send_output from worker threads (#1915) (#2288) (314f8c5)
- Let a C++ node see that a node restarted (#3478) (c71f28b)
- Add startup_timeout watchdog to kill hung nodes before init (#3022) (#3360) (6b1a1fe)
- Mock all frozen Node methods in MockNode (#3516) (42deda8)
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 restartthrough 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
- Bump the github-actions group with 2 updates (#3455) (1730e4a)
- Update Cargo.lock (#3454) (aadec8c)
- Format cxx-bridge messages with prettyplease 0.2 directly (#2452) (#3420) (85e14de)
- Update zenoh and zenoh-ext to 1.10 (#3471) (f8ee35a)
- Update Cargo.lock (#3513) (baaa78d)
- Bump the github-actions group with 2 updates (#3524) (ef1a5b2)
- Roll RUSTSEC waiver review tags to 2026-12 (#2451) (#3542) (d0dd720)
- Bump the github-actions group with 5 updates (#3586) (59a6f1c)
- Update Cargo.lock (#3584) (ea8a2a6)
- Drop the orphaned rust-dataflow-url sink crate (#3640) (721efe4)
- Drop unused dependencies (#3638) (de0f231)
- Bump the github-actions group with 3 updates (#3659) (9215990)
- Remove orphaned operator templates (#3639) (a3a95b2)
- Bump yanked yoke-derive 0.8.3 to 0.8.4 (#3682) (86327c1)